FTP (File Transfer Protocol) : 파일 전송 프로토콜. TCP/IP 네트워크상의 장치가 파일을 전송할 때 사용하는 규칙
프로토콜전자기기가 서로 통신하는 데 필요한 절차나 규칙
클라이언트 - 서버 프로토콜로, 클라이언트가 파일을 요청하면, 서버가 요청된 파일을 제공 -> FTP 프로토콜 연결을 설정하려면 두 개의 기본 채널이 필요
능동모드 서버가 클라이언트에게 데이터 연결을 요청하는 방식(클라이언트가 포트 번호 지정)
수동모드 서버가 클라이언트에게 데이터 연결을 요청받는 방식(서버가 포트번호 지정)
능동모드를 사용할 때, FTP bounce 공격에 취약하다
FTP bound 공격
능동모드에서는 클라이언트가 파일을 받을 IP/Port를 지정하고 전달하는 과정이 있는데, 이 과정에서 IP를 변경하여 공격자가 원하는 목적지로 데이터를 보내거나, 목적지의 포트를 스캔하는 등의 공격을 한다.
해결 방법
USER - 서버에 사용자 이름을 제공하여 인증
PASS - 사용자 비밀번호를 제공하여 인증
PORT - ACTIVE / 능동 모드에서 사용자가 클라이언트에서 데이터 연결
PASV - PASSIVE / 수동 모드로 전환해서 클라이언트 측에서 데이터 연결
RETR - Retrieve / 서버에서 파일 다운로드 (클라이언트로 전송)
STOR - Store / 클라이언트에서 파일을 서버로 업로드 (서버로 전송)
FTP 의 단점
보안. 1970년대에 개발된 FTP는 보안 프로토콜로 설계된 것이 아니기 떄문에 FTP 전송은 암호화되지 않는다. 그래서 패킷 캡처 공격을 통해 비밀번호, 사용자 이름, 민감한 데이터를 읽을 수 있다
이를 막기 위해, 인증 옵션을 통해 보호 기능을 제공하는 SFTP, FTPS를 사용한다.
SFTP (SSH 기반 파일 전송 프로토콜)
시큐어 셸(SSH) 데이터 스트림을 통해 파일 전송 시 높은 수준의 파일 보호를 실현하는 별도의 프로토콜. 초기 인증, 실행된 명령, 데이터 등 모든 통신에 단일 포트번호를 사용한다.
FTPS (FTP + SSL/TLS)
기존 FTP에서 SSL/TLS를 사용한 통신으로 보안성을 추가했다. FTP 기반의 프로토콜이기 떄문에, FTPS도 두 가지 채널이 필요하다.
| FTPS | SFTP | |
|---|---|---|
| 기반 | FTP에 계층 추가 - SSL/TLS로 보호 | SSH 기반 |
| 포트 | 여러 포트 번호 | 단일 포트 번호 |
| 암호화 | 명령& 데이터 채널 / 데이터 채널만 암호화 | 하나의 연결 사용 : 인증정보 & 데이터 모두 암호화 |
| 인증 | 신뢰할 수 있는 인증서 | SSH 키 : SSH 개인키 & 공개키 |
| 구현 | 방화벽에서 다양한 포트를 열어야 함 | 비교적 쉬움 |
| 속도 | 명령, 데이터 채널이 비동기적으로 실행 -> 약간 빠름 |
참고 링크
https://experience.dropbox.com/ko-kr/resources/what-is-ftp
https://cloudedi.tistory.com/17