본문 바로가기

정보보안/애플리케이션 보안

[애플리케이션 기본학습] FTP 프로토콜

FTP
File Transfer Protocol

 

① 개념

  • FTP : TCP/IP 기반의 서버와 클라이언트 사이에 파일 전송을 위한 통신 프로토콜 중 하나
  • (취약점) 아이디 및 패스워드가 암호화되지 않은 채로 전송되어 간단한 스니퍼에 의해서도 중요정보(ID/PWD)가 쉽게 노출 되므로 반드시 필요한 경우를 제외하곤 사용을 제한해야된다.
  • (대체) FTP 서비스 필요시 안전한 암호화된 통신을 위해 다음 서비스 이용을 권장한다.
    • SFTP(SSH File Transfer Protocol) : SSH 기반의 파일 전송 프로토콜 (22/tcp)
    • FTPS(FTP over SSL/TLS) : SSL/TLS 기반의 파일 전송 프로토콜 (990/tcp)
  • FTP 서비스의 동작 방식은 제어 채널과 데이터 채널, 생성 방식에 따라 능동 모드와 수동 모드로 구분한다.

② 동작모드

  1. FTP 능동 모드(active mode)
    • 개념
      • 일반적으로 FTP 클라이언트는 기본 동작모드로 능동모드를 사용한다.
      • 제어 채널 : FTP 명령을 전달하기 위한 채널. 클라이언트 -> 서버(21/tcp)로 접속하여 제어 채널을 생성한 후 명령을 전달
      • 데이터 채널 : 데이터를 전달하기 위한 채널. 서버(20/tcp) -> 클라이언트(1024/tcp 이상)으로 접속해서 데이터 채널을 생성한 후 데이터(파일 등)을 전달한다.
    • 동작 방식
      1. (제어 채널 생성) FTP 클라이언트는 FTP 서버의 21/tcp 포트로 접속한다.
      2. (PORT) 사용자가 파일 목록을 보기 위해 'ls'명령어를 입력하면 FTP 클라이언트는 사용할 임시포트(1024/tcp 이상)을 결정한 후 FTP 서버에 'PORT' 를 이용해 클라이언트 IP와 임시포트 번호를 알려준다.
      3. (데이터 채널 생성) FTP 서버는 FTP 클라이언트가 알려준 IP와 포트(1024/tcp 이상)로 접속하여 데이터 채널을 생성한다.
      4. (데이터 전송 및 종료) 데이터 채널을 통해 데이터를 전송한 후 데이터 채널을 종료한다.
    • 문제점 및 해결방안
      • (문제점) 만약 클라이언트에 방화벽(ex. 윈도우 방화벽)이 설치되어 원격 FTP 서버에서 클라이언트로의 접속을 허용하지 않는다면, 원격 FTP 서버로 접속은 되지만(제어 채널 연결o) 이후 데이터 채널 접속이 불가능하여 데이터를 받을 수 없는 문제가 발생
      • (해결방안) 능동 모드로 데이터 채널을 생성ㅊ하기 위해서는 클라이언트 방화벽에 원격 FTP 서버(20/tcp)에서 클라이언트로의 접속을 허용하도록 설정하거나, 수동 모드로 원격 FTP에 접속한다.
  2. FTP 수동 모드(passive mode)
    • 개념
      • 제어 체널 : FTP 명령을 전달하기 위한 채널. 클라이언트에서 서버(21/tcp)로 접속해 제어 채널 생성 후 명령 전달
      • 데이터 채널 : 데이터를 전달하기 위한 채널. 클라이언트에서 서버(1024/tcp 이상)로 접속해 데이터 채널 생성 후 데이터 전달
    • 동작방식
      1. (제어 채널 생성) FTP 클라이언트 -> FTP 서버(21/tcp) 로 접속
      2. (PASV) 사용자가 파일 목록을 보기위해 'ls'명령을 입력하면 FTP 클라이언트는 수동모드로 연결하기 위해 'PASV' 명령을 전송하고 이 명령을 받은 FTP 서버는 사용할 임시포트(1024/tcp 이상)을 결정한 후 FTP 클라이언트에게 알려준다.
      3. (데이터 채널 생성) FTP 클라이언트 -> FTP 서버가 알려준 포트(1024/tcp 이상) 로 접속
      4. (데이터 전송 및 종료 ) 데이터 채널을 통해 데이터를 전송 후 데이터 채널을 종료한다.
    • 문제점 및 해결방안
      • (문제점) FTP 서버는 데이터 채널 생성을 위해 인바운드(inbound) 트래픽에 대한 방화벽의 1024/tcp 이상 포트를 모두 허용해야하는 문제점이 발생한다.
      • (해결방안) 방화벽의 *상태 검사 기능(모든 트래픽에 대해 프로토콜 연결 상태를 추적해 패킷 필터링을 수행하는 방화벽 기능)을 통해 연결 상태를 추적하여 데이터 채널을 허용하도록 설정한다.

 

③ 공격

  1. FTP 바운스 공격 (FTP bounce attack) : 공격 대상 네트워크를 스캔 & 공격자가 원하는 서버로 데이터를 전송하는 공격
    • 개념
      • (취약점) 제어 채널과 데이터 채널이 분리되어 있고 데이터 채널을 생성할 때 임의의 목적지 IP와 Port 번호를 설정할 수 있는(목적지를 확인하지 않는) FTP 설계의 구조적 취약점
      • 능동 모드에서 데이터 채널 생성 시 클라이언트에서 'PORT'명령으로 목적지 IP와 Port를 지정해 FTP 서버로 전달하는데 이때, 공격자가 희생자의 주소로 지정한다.
    • 공격방식
      1. 주로 익명(Anonymous - 비번 없이 접속) FTP 서버를 이용하며 'PORT' 명령의 목적지 IP와 Port 번호를 조작하여 FTP 서버가 공격자가 원하는 목적지 호스트와 데이터 채널을 연결하도록 시도
      2. 공격자는 FTP 서버를 거쳐 외부에서 접근할 수 없는 내부 네트워크를 스캔하거나 공격자가 원하는 내부 서버로 데이터(파일)를 전송하는 등의 행위를 할 수 있다.
        • 데이터 채널을 연결하기 위한 PORT 명령을 조작하여 내부시스템에 연결을 시도하고 그 결과를 제어 채널로 받음으로써 내부 네트워크 스캔을 수행
        • FTP 서버에 스팸 메일 메시지 업로드('put명령')를 요청하면서 PORT 명령을 조작하여 내부 메일(SMTP) 서버로 지정하면 FTP 서버는 스팸 메일을 내부 메일 서버로 전달하게 된다.
  2. TFTP(Trivial FTP) 공격 : 공격자가 TFTP 서버에 있는 파일에 접근하거나 악의적인 파일을 생성하는 공격
    • 개념
      • TFTP(69/udp) : 읽기 전용 메모리나 디스크가 없는 워크스테이션에 설치될 수 있을 정도로 매우 단순하고 간단한 파일 송수신 프로토콜
      • (취약점) 별도의 인증과정 없이 지정한 디렉터리에 접근하여 파일 송수신 -> 포트가 열려있을 경우 이 경로로 중요한 파일(/etc/passwd와 같은) 다운받을 수 있다.
      • 주요 사용 목적
        • 자체 디스크가 없는 워크스테이션에 부팅 이미지 전달
        • 네트워크 장비(라우터, 스위치 등)의 운영체제를 백업 또는 복구하거나 설정 정보를 저장하거나 가져오는 용도
    • 대응책 
      • TFTP가 불필요한 경우 -> 제거
        • inetd 환경 : inted.conf 설정 파일에서 TFTP 서비스 주석 처리 & inetd 데몬 재시작
        • xinetd 환경 : TFTP 설정 파일의 disable 속성을 yes로 설정하여 서비스 비활성 처리 & xinetd 데몬 재시작
      • TFTP가 필요한 경우 -> secure mode로 운영
        • secure mode: chroot 기능을 이용하는 것. 지정한 디렉터리를 최상위 디렉터리로 지정하여 지정한 디렉터리의 상위 디렉터리로 접근하지 못하도록 제한하는 방식
        • TFTP 서비스 설정
          • (inetd 기준) inetd.conf 파일 마지막 실행 인수 '-s 최상위 디렉터리'로 설정
          • (xinetd 기준) TFTP 서비스 설정 파일 >  'server_args = -s 최상위 디렉터리'
        • FTP 클라이언트는 지정한 디렉터리 내에서만 파일 접근이 가능하며(like 가상의 root 디렉터리) 상위 디렉터리에 있는 파일 접근을 허용하지 않는다. 
  3. 익명 FTP 공격(Anonymous FTP Attack)
    • 개념
      • 익명 FTP 서비스: 익명 계정(비밀번호가 없거나 아무 비밀번호나 입력 가능한 계정)으로 FTP 접속이 가능한 서비스. 
      • (취약점) Anonymous계정으로 접근 시, 원격에서 비밀번호 인증 없이 서버의 파일에 접근이 가능
      • 공격자가 쓰기 권한까지 있는 경우, 악성 파일을 업로드해 다수의 사용자에게 피해를 발생시킬 수 있다.
    • 대응책 
      • 익명 FTP 서비스는 보안상 취약점을 갖고 있으므로 반드시 사용해야 하는 경우가 아니라면 허용하지 않도록 비활성화
        • vsFTP 서버 설정 파일(vsftp.conf) 에서 익명 FTP 서비스를 허용하지 않도록 'anonymous_enable=NO' 설정
  4. FTP 서버 취약점 공격
    • vsFTP, ProFTP 등 다양한 서버 프로그램에서 포맷 스트링, 버퍼 오버플로우 등의 새로운 취약점이 발견될 수 있으므로 최신 FTP 서버 프로그램 사용 및 주기적인 보안패치 작업이 필요

 

④ FTP 접근제어 설정

  1. 설정 파일을 이용한 계정별 접근 제어
    • FTP 서비스는 기본적으로 평문 송수신을 하므로 중요 계정(ex.Root)에 대해서는 FTP 접속을 제한해야한다.
    • (기본) 'ftpusers' 파일: 접속을 제한할 계정정보를 담고있는 설정 파일
      • ftpusers 파일에 FTP 접속을 제한할 계정(ex.root) 을 명시한다.(해당 파일에 계정 이름만 넣으면 됨) -> FTP 서버에서 root 계정으로 접속 시 실패
    • (vsFTP의 경우) user_list 파일 수정
      • vsFTP 서버 설정 파일(vsftpd.conf)에 'userlist_enable=YES'설정 시, 'user_list' 파일을 이용해 계정별 FTP 접속 제한을 설정할 수 있다. 'user_list' 파일에 접속을 제한할 계정명을 명시한다.(해당 파일에 계정 이름만 넣으면 됨) -> FTP 서버에서 root 계정으로 접속 시 실패
  2. TCP Wrapper를 이용한 IP 접근 제어
    • IP 기반의 FTP 서비스 접근제어를 위해 TCP Wrapper의 접근제어 설정 파일 'hosts.allow'/'hosts.deny'를 이용한다.
    • FTP 서버 프로그램별로 TCP Wrapper 연동 설정이 필요하다.
    • vsFTP의 경우, 서버 설정 파일(vsftpd.conf)에 'tcp_wrappers=YES'로 설정한다.