IT보안 학습

FTP 프로토콜 총정리

김구티2 2023. 12. 4. 21:39

1. FTP의 개념

FTP(File Transfer Protocol)는 전송 제어 프로토콜/인터넷 프로토콜(TCP/IP) 연결을 통해 컴퓨터 간에 파일을 전송하기 위한 네트워크 프로토콜이다. TCP/IP 모델에서 FTP는 애플리케이션 계층 프로토콜로 간주된다.

 

FTP 트랜잭션에서는 일반적으로 최종 사용자의 컴퓨터를 로컬 호스트라 부른다. FTP에 관여하는 두 번째 컴퓨터는 원격 호스트로, 보통은 서버가 이에 속한다. 두 컴퓨터 모두 네트워크를 통해 연결되어 있어야 하며, FTP를 통해 파일을 전송할 수 있도록 적절하게 환경이 구성되어야 한다. FTP 서비스를 실행하기 위해서는 서버를 설정해야 하며, 클라이언트에는 이러한 서버에 엑세스하기 위한 FTP 소프트웨어가 설치되어 있어야 한다.

 

해당 컴퓨터에 등록된 사용자만(*인증의 특성) 파일 전송이 가능하며, 그 외에는 익명(Anonymous)으로 사용된다. 한편, ftpusers에 등록된 사용자는 FTP 접근이 허용되지 않는다.

 

2. FTP 작동 방식

FTP는 클라이언트와 서버 사이의 두 통신 채널, 즉 일종의 대화를 제어하기 위한 명령 채널과 파일 콘텐츠를 전송하기 위한 데이터 채널에 의존하는 클라이언트-서버 프로토콜이다. 사용자는 일반적으로 FTP 서버에 로그인해야 하지만, 일부 서버는 로그인 없이 컨텐츠의 일부 또는 전부를 사용할 수 있게 하기도 한다. anonymous FTP가 이에 속하는 것이다.

사용자가 파일 다운로드를 요청하면 클라이언트는 서버와 통신을 시작한다. FTP를 사용하여 클라이언트는 서버에서 파일을 다운로드, 업로드, 삭제, 이름 변경, 이동, 복사 등을 수행할 수 있다.

 

2.1 FTP 전송 모드

FTP 세션은 Active 모드 혹은 Passive 모드에서 작동한다. 기본적으로는 Active Mode이고, 클라이언트가 Active로 할지, Passive로 할지 선택할 수 있다. PASV 명령을 사용하여 Pssive 모드로 변경할 수 있다.

 

ㄱ. FTP Active Mode

(1) 클라이언트에서 서버 TCP/21번 포트로 접속 시도한다.

(2) 서버는 TCP/20번 포트로 데이터를 송수신한다.

서버에서 클라이언트로 요청을 하기 때문에 만일 클라이언트 PC에 방화벽이 설치되어 있고, 외부의 접속을 허용하지 않는다면 FTP 연결은 가능하더라도 데이터 채널 연결이 불가해진다. 그래서 파일 전송이 불가능한 문제가 생길 염려가 있다.

 

ㄴ. FTP Passive Mode

(1) 클라이언트는 서버의 TCP/21번 포트로 접속 후 두 번째 포트를 질의한다.

(2) 서버는 클라이언트에게 데이터 연결을 위한 두 번째 포트(TCP/1024 이상 65535 이하)를 알려준다.

(3) 클라이언트는 서버가 알려 준 두 번째 포트로 접속한다.

서버에서 두 번째 포트 번호를 알려주기 때문에 해당 대역의 방화벽 포트를 열어두어야 한다.

 

ㄷ. Active 모드 vs Passive 모드

두 모드가 존재하고, 두 모드의 동작에 차이가 있다는 건 이제 알 수 있다. 그렇다면 동작을 떠나, 둘은 어떤 차이가 있을까? 

Active Mode Passive Mode
FTP 서버에 보안을 제공한다. FTP 서버에 보안을 제공하지 않는다.
방화벽으로 인해 문제를 일으킬 수 있다. 방화벽으로 인한 연결 문제가 없다.
브라우저의 기본 모드로 사용되지 않는다. 브라우저의 기본 모드로 사용된다.
클라이언트가 제어 채널을 설정하고, 서버는 데이터 채널을 설정한다. 제어 채널과 데이터 채널 모두 클라이언트에 의해 설정된다.
FTP 클라이언트가 데이터 채널을 확인한다.
FTP 서버가 데이터 채널을 확인한다.
클라이언트가 서버로 랜덤 포트 숫자를 보낸다.
클라이언트가 서버로 PSAV 명령을 보낸다.

 

3. FTP의 보안 취약점

ㄱ. Bounce Attack

익명 FTP 서버를 경유하여 호스트를 스캔한다. FTP 서버가 데이터를 전송할 때 목적지가 어디인지 검사하지 않는 취약점을 이용한 공격이다. FTP 서버의 전송 목적지 주소를 임의로 지정하여, FTP 서버를 경유해 미리 설정한 임의의 목적지로 데이터를 전송하도록 할 수 있다. FTP Bounce Attack은 포트 스캐닝에 특히 많이 사용되는데, FTP 서버를 통해 FTP 포트 명령을 임의의 서버로 중계하여 포트의 오픈 여부를 확인할 수 있다.

 

ㄴ. TFTP Attack

TFTP는 간소화된 FTP로 신속한 파일의 전송을 원할 때 FTP에 비해 이점을 갖는 형태이다. 그러나 비밀번호 인증 과정이 아예 없기 때문에 보안에 매우 취약하다. 그렇기에 굳이 사용해야 한다면 반드시 Secure 모드로 운영해야 한다. '빠르지만 신뢰성이 없다'라는 것에서 알 수 있듯, UDP를 사용한다. TFTP 공격은 인증절차를 요구하지 않는 취약점을 이용하여, 설정이 잘못되어 있을 경우 누구나 해당 호스트에 접근하여 파일을 다운로드할 수 있는 공격이다.

 

ㄷ. Anonymous FTP Attack

익명 FTP 설치를 할 때 파일과 디렉터리 권한 설정은 매우 중요하다. 이때 FTP 권한 설정을 잘못한다면 파일 유출이 발생할 수 있다. Anonymous FTP Attack은 보안 절차를 거치지 않은 익명의 사용자에게 FTP 서버 접근을 허용하는 것이다. 만약, 이때의 익명 사용자가 서버에 쓰기 권한마저 있다면 악성코드 생성도 가능할 것이다.

 

이외에 WU-FTPD 취약점을 이용한 서버 취약점 공격, 스니핑, Brute Force Attack 등이 존재한다.

 

4. FTP 접근제어 설정

ㄱ. ftpusers를 이용한 접근제어ftpusers 파일은 특정 사용자에 대해서 FTP 접근을 차단할 수 있다. 즉, 사용자 ID에 따른 접근 통제를 실행할 수 있는 것이다. 그러면 /etc/ftpusers에서 사용자 A를 등록하게 되면, A로 로그인을 시도할 시 '530 Login incorrect' 같은 메시지를 받을 수 있을 것이다.

 

ㄴ. TCP Wrapper를 이용한 접근제어ftpusers 파일은 특정 사용자 ID를 차단했다면, TCP Wrapper는 특정 IP로 차단을 하는 것이다. /etc/hosts.deny나 /etc/hosts.allow를 통해 특정 IP의 접근을 허용하거나 제한할 수 있다.

 

5. 다양한 FTP의 사용

FTP 서버와 클라이언트가 FTP를 사용하여 파일 전송을 수행할 수 있는 방법은 여러가지가 존재한다.

 

ㄱ. Anonymous FTP이것은 FTP의 가장 기본적인 형태라 할 수 있다. 데이터를 암호화하거나, 사용자 이름과 암호를 사용하지 않고 데이터 전송을 지원한다. 이는 무제한 배포가 허용되는 파일 다운로드에서 가장 많이 사용되는 방식이다.

 

ㄴ. Password-protected FTP이것도 마찬가지로 기본적인 형태의 FTP이지만, 사용자 이름과 암호를 필요로 한다. 그런데 그렇다고 해서 암호화를 한다거나, 보안을 보장해주는 것은 아니다. 

 

ㄷ. FTPS (=FTB Secure)

FTP-SSL이라고도 하는 이 방식은 FTP 연결이 설정되는 즉시 TLS을 가능케 하는 것이다. FTPS는 초기에 보다 안전한 형태의 FTP 데이터 전송을 가능하게 하기 위해 사용되었다.

 

ㄹ. FTPES (=FTP over explicit SSL/TLS)이 방법은 포트 21을 통한 FTP 연결을 암호화된 연결로 업그레이드하여 명시적인 TLS 지원을 가능케 한다. SSL/TLS의 이름에서도 알 수 있듯, 안전한 파일 전송을 위한 방법이다.

 

ㅁ. SFTP(Secure FTP)

이것은 엄밀히 말하면 FTP 프로토콜이 아니다. 그러나 비슷하게 작동한다. SSH 프로토콜의 하위 집합으로, SSH는 시스템 관리자가 애플리케이션에 원격으로 안전하게 엑세스하는 데 일반적으로 사용한다. 그리고 SFTP는 이런 SSH 내에서 안전한 파일 전송을 위한 메커니즘을 제공한다. 여태 알아본 바와 같이 FTP는 보안에 매우 취약하다. 그래서 전송 과정의 내용을 암호화하는 SFTP의 중요성이 매우 크다고 할 수 있다.


※ HTTP vs FTP

사실, '데이터 전송', '정보 전송' 이런 것들은 다른 프로토콜에서도 접했을 말이다. 이전에 올린 HTTP 프로토콜도 많은 파일 전송을 담당하기 때문이다. 둘다 파일을 전송할 수 있다면 어떠한 차이가 있는 것일까?

일단 파일의 전송 흐름에서 차이가 있다. HTTP는 서버→클라이언트에서의 파일 전송을 다룬다면, FTP는 서버↔클라이언트에서의 파일 업로드 및 다운로드 측면의 파일 전송을 다룬다. 즉, HTTP는 단방향, FTP는 양방향으로 볼 수 있다.

또한, HTTP는 데이터 연결만 지원하는 반면, FTP는 데이터 연결과 제어 연결을 모두 지원하며, 인증이 필요하지 않은 HTTP와 달리 FTP에서는 일반적으로 인증을 요구한다.

그리고 이 점도 상당히 중요한데, 파일의 용량에 따른 전송 효율에서 둘은 차이가 난다. HTTP는 작은 파일을 전송하는 데 효율적이며, FTP는 큰 파일을 전송하는 데 효율적이다. 마지막으로 단순 프로토콜의 속도만 따진다면, HTTP가 FTP보다 빠르다. HTTP와 FTP 간의 많은 차이가 있지만, 이 정도 차이만 알아도 의미가 있을 것으로 보인다.

 

※ FTP의 예시

FTP는 생각보다 우리에게 친숙한 서비스일 수도 있다. FTP 클라이언트의 예시로는 다음이 있다.

Filezila: 윈도우, 맥, 리눅스에서 FTP, FTPS, SFTP를 모두 지원하는 무료 클라이언트다. 나는 실제로 아르바이트를 경험하며 이 프로그램을 몇 번 사용한 적이 있다.

Transmit: FTP, SSH를 지원하는 맥용 FTP 클라이언트이다.

WinSCP: FTP, SSH, SFTP를 지원하는 윈도우 FTP 클라이언트이다.

 

 

 

 





728x90

'IT보안 학습' 카테고리의 다른 글

정보보호 목표 총정리(기밀성, 무결성, 가용성)  (0) 2023.12.10
SNMP 프로토콜 총정리  (3) 2023.12.08
SMTP 프로토콜 총정리  (0) 2023.12.04
HTTP 프로토콜 총정리  (3) 2023.12.02
TCP/IP 4계층 총정리  (0) 2023.12.01