FTP의 동작·공격·보안
FTP 연결 방향과 파일 전송·운영 보안을 비교합니다.
1. FTP는 제어 연결과 데이터 연결을 분리한다
FTP 클라이언트가 서버에 접속하면 먼저 제어 연결(control connection)을 만든다. 이 연결에서는 로그인, 디렉터리 이동, 파일 목록 요청, 업로드·다운로드 지시 같은 명령과 응답을 주고받는다. 표준 FTP 서버의 제어 연결은 TCP 21번 포트를 사용한다.
파일 내용이나 디렉터리 목록을 실제로 전송할 때는 별도의 데이터 연결(data connection)이 사용된다. 데이터 연결은 전송이 필요할 때 만들어지고 전송이 끝나면 종료될 수 있다.
따라서 FTP에서 다음 두 흐름을 구분해야 한다.
| 구분 | 역할 | 대표 내용 |
|---|---|---|
| 제어 연결 | 세션과 명령 제어 | USER, PASS, LIST, RETR, STOR 등의 명령·응답 |
| 데이터 연결 | 실제 데이터 전달 | 파일 내용, 디렉터리 목록 |
이 분리가 제어 연결이 성공해도 데이터 연결이 막히면 파일 목록이나 전송은 실패할 수 있다.
2. 일반적인 로그인과 파일 전송 흐름
표준 FTP에서 사용자는 제어 연결을 통해 사용자 이름과 비밀번호를 전달하고, 인증이 성공하면 파일 관련 명령을 수행한다.
대표적인 명령의 의미는 다음과 같다.
| 명령 | 의미 |
|---|---|
| USER | 사용자 이름 전달 |
| PASS | 비밀번호 전달 |
| PWD | 현재 작업 디렉터리 확인 |
| CWD | 작업 디렉터리 변경 |
| LIST | 디렉터리 목록 요청 |
| RETR | 서버의 파일을 내려받음 |
| STOR | 서버에 파일을 저장함 |
| QUIT | 세션 종료 |
중요한 점은 기본 FTP 자체는 USER/PASS를 포함한 제어 정보와 전송 데이터를 암호화하지 않는다는 것이다. 신뢰할 수 없는 네트워크에서 그대로 사용하면 계정 정보와 파일 내용이 도청될 수 있다.
3. Active 모드에서는 서버가 데이터 연결을 시작한다
Active 모드에서는 제어 연결은 클라이언트가 서버 TCP 21번 포트로 시작하지만, 데이터 연결은 반대로 서버가 클라이언트 쪽으로 연결을 시작한다.
전통적인 기본 동작을 단순화하면 다음과 같다.
- 클라이언트 → 서버 TCP 21: 제어 연결을 만든다.
- 클라이언트는
PORT명령으로 자신이 데이터 연결을 받을 IP 주소와 포트를 서버에 알린다. - 파일 목록이나 파일 전송이 필요해지면 서버가 해당 클라이언트 포트로 데이터 연결을 시작한다.
- 전통적인 기본 FTP에서는 서버 측 데이터 연결의 기본 포트가 TCP 20이다.
- 데이터 전송이 끝나면 데이터 연결을 종료하고 제어 연결은 계속 유지할 수 있다.
Active 모드는 클라이언트가 외부에서 들어오는 데이터 연결을 받아야 하므로, 클라이언트 측 방화벽이나 NAT가 예상하지 않은 인바운드 연결을 차단하면 전송이 실패할 수 있다.
4. Passive 모드에서는 클라이언트가 두 연결을 모두 시작한다
Passive 모드에서는 서버가 데이터 연결을 기다릴 포트를 열고, 클라이언트가 그 포트로 접속한다.
일반적인 흐름은 다음과 같다.
- 클라이언트 → 서버 TCP 21: 제어 연결을 만든다.
- 클라이언트가
PASV명령을 보낸다. - 서버는 데이터 연결을 기다릴 주소와 포트를 응답으로 알려 준다.
- 클라이언트가 그 서버 포트로 새로운 TCP 연결을 시작한다.
- 이 데이터 연결을 통해 파일이나 목록을 전송한다.
서버가 사용하는 Passive 데이터 포트는 하나의 고정 숫자로 외우면 안 된다. 실제 운영에서는 서버 설정에 따라 일정한 고포트 범위를 지정해 방화벽에서 허용하는 경우가 많다.
Active와 Passive 비교
| 항목 | Active | Passive |
|---|---|---|
| 제어 연결 | 클라이언트 → 서버 21 | 클라이언트 → 서버 21 |
| 데이터 연결 시작 주체 | 서버 | 클라이언트 |
| 데이터 연결 대상 | 클라이언트가 알려 준 포트 | 서버가 알려 준 포트 |
| 방화벽 관점의 특징 | 클라이언트가 외부발 연결을 받아야 함 | 클라이언트가 외부로 연결하므로 일반적으로 다루기 쉬움 |
| 대표 제어 명령 | PORT | PASV |
Active가 암호화 방식이고 Passive가 비암호화 방식인 것은 아니다. 두 모드는 데이터 연결의 방향과 생성 방법을 구분하는 개념이며, 암호화 여부와는 별개의 문제다.
5. ASCII와 Binary 전송 형식도 구분한다
FTP는 전송할 데이터의 표현 형식을 지정할 수 있다. 시험에서는 주로 ASCII와 이미지(binary) 형식의 차이를 구분하면 된다.
- ASCII 형식: 텍스트 파일을 서로 다른 시스템 사이에서 전송할 때 줄 끝 표현 등의 변환이 발생할 수 있다.
- Binary/Image 형식: 파일의 바이트 값을 변환하지 않고 그대로 전송한다. 이미지, 실행 파일, 압축 파일 등은 일반적으로 이 형식을 사용한다.
바이너리 파일을 텍스트 변환이 개입되는 형식으로 잘못 전송하면 파일이 손상될 수 있다. 반대로 Active/Passive는 연결 방식이고 ASCII/Binary는 데이터 표현 형식이므로 서로 다른 분류다.
6. Anonymous FTP는 공개 파일 제공용 기능이다
Anonymous FTP는 별도의 개인 계정이 없는 사용자에게 제한된 FTP 접근을 허용하는 방식이다. 일반적으로 anonymous와 같은 계정 이름을 사용하며, 서버는 공개 디렉터리의 파일을 내려받도록 허용할 수 있다.
공개 자료 배포에는 편리하지만 권한 설정을 잘못하면 큰 문제가 된다.
- 공개 사용자가 시스템의 민감한 파일까지 읽을 수 있음
- 업로드 디렉터리에 불필요한 쓰기 권한이 부여됨
- 업로드된 악성 파일이나 불법 자료의 저장소로 악용됨
- 업로드와 다운로드가 함께 허용되어 공격 도구 중계 지점으로 사용됨
따라서 Anonymous FTP가 꼭 필요하지 않다면 비활성화하고, 필요하다면 공개 전용 디렉터리·최소 권한·읽기/쓰기 분리·용량 및 파일 정책·로그 기록을 명확히 해야 한다.
7. FTP Bounce는 데이터 연결 대상 지정 기능을 악용한다
전통적인 FTP는 PORT 명령을 통해 클라이언트가 데이터 연결의 목적지 주소와 포트를 서버에 알려 줄 수 있다. 서버가 이 값을 무조건 신뢰하면 공격자가 FTP 서버를 자신이 아닌 제3의 시스템으로 연결하게 만드는 문제가 발생할 수 있다. 이를 FTP Bounce 공격이라고 한다.
공격 원리를 방어 관점에서 단순화하면 다음과 같다.
- 공격자가 FTP 제어 연결을 확보한다.
- 공격자가 데이터 연결 대상에 자신의 주소가 아닌 제3의 주소·포트를 지정하려 한다.
- 취약한 서버가 이를 허용하면 FTP 서버가 제3의 시스템으로 연결을 시도한다.
- 결과적으로 서버가 네트워크 스캔이나 다른 서비스 접속을 중계하는 것처럼 악용될 수 있다.
대응의 핵심은 다음과 같다.
PORT로 지정되는 데이터 연결 대상이 제어 연결의 상대와 일치하는지 검증- 불필요한 제3자 전송(proxy FTP) 기능 제한
- 민감한 포트나 임의 대상에 대한 데이터 연결 거부
- 환경상 필요하지 않다면 Active/PORT 기능을 제한하고 Passive 중심으로 운영
- 업로드 권한과 파일 권한 최소화
FTP Bounce는 “FTP 서버 자체 파일을 훔치는 공격”으로만 외우면 안 된다. FTP 서버의 데이터 연결 기능을 중계점으로 악용하는 구조가 핵심이다.
8. FTPS와 SFTP는 이름이 비슷하지만 전혀 다른 방식이다
평문 FTP의 전송 보안 문제를 해결하기 위해 자주 비교하는 방식이 FTPS와 SFTP다.
FTPS
FTPS는 기존 FTP에 TLS 보호를 추가한 방식이다. 표준화된 명시적(Explicit) 방식에서는 일반 FTP 제어 연결을 시작한 뒤 AUTH TLS를 사용해 TLS를 협상하고, 정책에 따라 데이터 연결도 보호한다.
중요한 특징은 FTP의 기본 구조를 그대로 유지한다는 점이다. 즉, 제어 연결과 별도의 데이터 연결, Active/Passive 개념이 계속 존재하므로 방화벽에서는 데이터 포트 정책도 함께 고려해야 한다.
SFTP
SFTP는 이름에 FTP가 들어가지만 FTP에 SSH 암호화를 덧씌운 프로토콜이 아니다. SSH의 암호화된 전송 위에서 파일 조작 기능을 제공하는 별도의 프로토콜이다.
일반적으로 SSH 서비스와 같은 TCP 22번 포트를 사용하는 경우가 많고, 일반적으로 하나의 SSH 보호 연결 위에서 파일 전송 명령과 데이터가 처리된다. 따라서 FTP의 PORT/PASV Active/Passive 구조를 그대로 사용하지 않는다.
비교
| 항목 | FTP | FTPS | SFTP |
|---|---|---|---|
| 기반 | FTP | FTP + TLS | SSH 기반 파일 전송 프로토콜 |
| 기본 전송 보호 | 없음 | TLS 적용 가능 | SSH 암호화 전송 |
| FTP 제어/데이터 연결 구조 | 사용 | 사용 | 사용하지 않음 |
| Active/Passive | 있음 | 있음 | 없음 |
| 대표 서버 포트 | 제어 TCP 21 | 명시적 방식은 TCP 21에서 TLS 협상 | 일반적으로 SSH TCP 22 |
| 핵심 판단 | 평문 위험 | FTP 구조를 유지하면서 TLS로 보호 | FTP와 별도 프로토콜 |
SFTP = Secure FTP라고만 외우면 FTPS와 혼동하기 쉽다. 시험에서는 FTPS는 FTP에 TLS, SFTP는 SSH 기반의 별도 파일 전송 방식으로 구분하는 것이 안전하다.
9. TFTP는 FTP의 간단한 버전이 아니라 별도 프로토콜이다
TFTP(Trivial File Transfer Protocol)는 단순한 파일 전송을 위해 만들어진 별도 프로토콜이다. 일반 FTP와 달리 UDP를 사용하고 대표적으로 UDP 69번 포트를 통해 전송 절차를 시작한다.
TFTP에는 일반 FTP와 같은 사용자 로그인, 디렉터리 탐색, 다양한 파일 조작 기능이 없다. 자체적인 강한 인증·암호화 기능도 제공하지 않으므로, 장비 초기 부팅이나 제한된 관리망처럼 통제된 환경에서 최소 기능이 필요한 경우에 적합하다.
따라서 다음처럼 구분한다.
- FTP: TCP 기반, 제어/데이터 연결 분리, 다양한 파일 명령
- TFTP: UDP 기반, 매우 단순한 파일 읽기/쓰기 중심
- SFTP: SSH 보호 연결 위의 별도 파일 전송 프로토콜
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01Passive FTP에서 로그인은 되지만 파일 목록이 보이지 않는다면 무엇을 확인하는가?
TCP 21 제어 연결과 별개인 서버의 Passive 데이터 포트 범위가 허용되어 있는지 확인한다. 데이터 연결도 클라이언트가 시작한다.
02FTPS와 SFTP의 핵심 차이는 무엇인가?
FTPS는 FTP에 TLS를 적용하여 제어·데이터 연결 구조를 유지한다. SFTP는 SSH 기반의 별도 파일 전송 프로토콜로 FTP의 Active·Passive를 사용하지 않는다.