FTP 를 좀 더 안전하게 사용하기

bugiii의 이미지
4372
points
4
points

ftp는 파일 전송용으로 많이 사용하고 편리하기도 하지만, 로긴 과정이 평문으로 이루어지기 때문에 보안에 취약해서 이래저래 사용하기가 꺼려지게 됩니다.

물론 sftp나 scp 같은 ssh 계열을 사용하게 된다면, 문제될 것이 없지만 이런류의 문제점은 서버와 클라이언트에게 과도한 부하를 주며 속도 또한 만족스럽지 못합니다.

이리저리 머리를 굴려보고, 찾아보다가 FTP over SSL, FTPS 라는 것을 찾았습니다. 이것은 FTP 프로토콜을 SSL 로 감싸서 보안 문제를 해결한 것으로 FTP 의 특성상 컨트롤과 데이터 채널을 모두 SSL 로 감싸게 됩니다.

이렇게 되다보니 보안에는 좋은데, ssh 계열의 문제가 그대로 나타나게 되어서 컨트롤 채널만 SSL로 쓰고 데이터 채널은 일반 채널로 사용해보려고 조사를 시작했습니다.

일단 vsftpd는 이런 상황을 자유롭게 조절할 수 있는 옵션이 있었기 때문에, 서버 문제는 해결이 되었습니다. 인증서 만들고 vsftpd.conf 설정하는 것은 여러군데 있으므로 패스하고...

클라이언트는 CuteFtp가 원하는 동작을 하기는 하지만... 좀 구린 인터페이스에 오픈소스가 아니기도 하고 여러모로 쓰기가 꺼려지더군요.

그렇다면, 우리의 FileZilla는 어떨까요? 이 프로그램은 다 좋은데, FTPS 채널 양쪽을 전부 다 SSL로 감싸버립니다. 옵션도 없습니다.

결국... 아예, 로긴까지만 SSL로 보안을 유지하고 로긴이 끝나면 평문을 사용하며 데이터 채널도 암호화하지 않도록 패치를 해보았습니다.

--- ftpcontrolsocket.cpp        (.../vendor/3.0.8/src/engine/ftpcontrolsocket.cpp)      (revision 3)
+++ ftpcontrolsocket.cpp        (.../trunk/src/engine/ftpcontrolsocket.cpp)    (working copy)
@@ -939,8 +939,8 @@
        */
        else if (pData->opState == LOGON_PROT)
        {
-               if (code == 2 || code == 3)
-                       m_protectDataChannel = true;
+               //if (code == 2 || code == 3)
+               //      m_protectDataChannel = true;
        }
        else if (pData->opState == LOGON_CUSTOMCOMMANDS)
        {
@@ -1120,7 +1120,7 @@
                res = Send(_T("PBSZ 0"));
                break;
        case LOGON_PROT:
-               res = Send(_T("PROT P"));
+               res = Send(_T("PROT C"));
                break;
        case LOGON_CUSTOMCOMMANDS:
                if (pData->customCommandIndex >= m_pCurrentServer->GetPostLoginCommands().size())

자, 이제 리눅스나 FreeBSD 에서는 컴파일만 살짝하면 쉽게 사용할 수 있게 되었습니다.

문제는 윈도우용 클라이언트인데 파일질라를 윈도우용으로 컴파일하는 과정은 해보신 분은 아시겠지만, 도를 닦는 분이 아니라면 절대로 성공할 수 없으며, 금전적인 손해가 막심합니다. (키보드와 마우스를 모니터를 향해서 던지게 되며 성격이 포악해져서 주변분들을 공격할 수도 있습니다.)

그러면, 윈도우용 클라이언트를 어떻게 해야 하는가... 별수없이 리버스 엔지니어링했습니다. 디스어셈블러로... 풀어서 근처 문자열을 근거로 역추적해서 바이너리 수정을 해버렸습니다... (오픈 소스 프로그램을 이런식으로 대접을 한다는게 우습지만... 전 도인이 아니므로...)

잘 동작하는 바이너리를 아래에 첨부합니다.

아, 이렇게 사용하면 데이터 채널 보안이 안좋기는 하지만 FTPS 프로토콜 자체의 문제점인 방화벽이나 공유기 문제가 해결되는 장점도 있습니다.

미리 파일질라를 설치하고 첨부 파일의 확장자를 7z로 변경하고 압축을 푼 다음 사용하시기 바랍니다.

그럼, 이만...

첨부 파일파일 크기
filezilla-3.0.9.1-cdc.7z.rename.jpg1.65 MB
appler의 이미지
3484
points

좋은 정보 감사합니다.

0
points

좋은 정보 감사/

laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.