파일 전송 프로토콜

연결 모드

능동 모드

제어 포트(TCP/21) / 데이터 전송(TCP/20)

  1. 클라이언트는 서버의 21번 포트로 연결(제어채널 생성)
  2. 사용자가 파일 목록을 불러오는 명령(ls)을 입력
  3. 클라이언트는 임시 포트(1024 이상)를 결정하여 서버에게 전달 (PORT 명령)
  4. 서버는 클라이언트가 알려준 포트로 연결을 설정(데이터채널 생성)
  5. 데이터채널을 통해 데이터를 송신한 후 연결 종료

FTP 클라이언트의 기본 모드

수동 모드

제어 포트(TCP/21) / 데이터 전송(TCP/1024~)

  1. 클라이언트는 서버의 21번 포트로 연결(제어채널 생성)
  2. 사용자가 파일 목록을 불러오는 명령(ls)을 입력
  3. 클라이언트는 수동모드로 연결하기 위해 PASV 명령을 전송
  4. 서버는 임시 포트(1024 이상)를 결정하여 클라이언트에게 전달
  5. 클라이언트는 서버가 알려준 포트로 연결을 설정(데이터채널 생성)
  6. 데이터채널을 통해 데이터를 송신한 후 연결 종료

종류

익명 FTP(Anonymous FTP)

서버에 계정이 없는 사용자가 서버자원에 한정된 접근이 가능하도록 권한을 제공

  • ID: anonymous, PW: email_address 로 로그인
  • 비밀번호는 서버 로그에 기록하기 위한 용도

TFTP(Trivial File Transfer Protocol)

오직 기본적인 IP와 UDP만을 필요로 하는 FTP (포트 : UDP/69)

  • 보안 기능이 없음
  • FTP와의 차이
    • 전송
      • 프로토콜 차이
      • TFTP는 부스트래핑 시 자주 사용
    • 한정된 개수의 명령
      • 파일 전송만 가능
    • 한정된 데이터 표현 방식
      • FTP가 지원하는 데이터 표현 방식을 전부 지원하지 않음
    • 인증의 부재

보안 위협 및 대책

FTP 보안

비밀번호, 데이터 전송이 평문이므로 공격자에게 노출 가능성이 있으므로 아래와 같은 프로토콜 사용이 권장된다.

  • SFTP(SCP)
    • SSH기반 파일 전송 프로토콜(TCP/22)
  • FTPS
    • SSL/TLS 기반 파일 전송 프로토콜(TCP/990)
    • FTP 응용계층, TCP 계층사이에 보안소켓을 추가하는 형식

TFTP 보안

중요하지 않은 파일에만 접근할 수 있도록 제한하거나 TFTP 서버 근처에 있는 라우터에 보안을 구현하여, 특정 호스트만 서버에 접근하도록 해야 한다.

보안 대책

  • secure mode로 운영
  • 지정 디렉터리를 루트 디렉터리로 지정하여 상위 디렉터리로 접근을 제한

익명 FTP 보안

익명 사용자에게 쓰기 권한이 있을 경우 악성코드 생성이 가능

보안 대책

중요 디렉터리(/bin, /etc 등)의 소유자와 권한(permission)을 관리하거나 사용을 금지

Bounce attack

FTP 서버가 데이터를 전송할 때 목적지를 검사하지 않는 문제점을 이용한 공격

  • 능동모드에서 PORT 명령어로 공격자는 원하는 곳으로 데이터 전송 가늩

보안 대책

  • FTP 규약을 어느 정도 제한
    • 다른 서비스가 20번 포트 접속을 요청하면 거절
  • 익명 FTP 서버의 경우 임시적으로 ./incoming에 파일 업로드 제한

서비스 운영

proftpd

  • 보안과 기능의 중점을 둔 FTP 데몬
  • 매우 빠르고 안정적
  • xinetd / standalone 형태로 동작가능

FTP 접속 시 확인 설정

  • /etc/passwd, /etc/shadow에 사용자 계정이 있는지 검사
  • /etc/ftpusers에 사용자 id가 있으면 거부
  • /etc/shell에 등록되지 않는 쉘을 사용하는 유저는 거부

설정 파일 옵션

옵션 설명
ServerType type 서버 타입 설정(xinetd / standalone)
RootLogin on/off 루트 계정 로그인 허용/거부
user name 익명 접속할 경우 사용자를 name으로 인식
MaxClients num 최대 접속 허용
TimeoutLogin second 클라이언트가 인증을 유지할 수 있는 시간
TimeoutIdleftp second 접속 후 아무런 작업도 없는 상태 유지 시간
TimeoutSession second second초 후에 무조건 접속 종료

vsftpd(Very Secure FTP Daemon)

  • 가상 IP별 별도의 환경 설정 기능
  • 가상 사용자 설정
  • 전송 대역폭 지정
  • PAM 지원
  • 상세 자체 로그 파일 형식을 지원
  • xinetd / standalone 형태로 작동 가능