파일 전송 프로토콜(FTP)은 하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 기능이다.
FTP는 호스트 간에 두 개의 연결을 설정한다는 점에서 다른 클라이언트 서버 응용들과 다르다. 하나의 연결은 데이터 전송을 위하여 사용되고 또 다른 하나는 명령과 응답 등의 제어 정보를 위하여 사용한다. 이러한 제어와 전송의 분리는 FTP를 더 효율적으로 사용할 수 있게 만들어 준다.
FTP는 두 개의 잘 알려진 TCP 포트를 사용한다. 포트 21번은 제어 연결을 위해 사용되고, 포트 20번은 데이터 연결을 위해 사용된다.
FTP가 일반적으로 사용하는 인증 방식은 단순한 사용자명/비밀번호 방식으로 상당히 초보적이다. 먼저 USER 명령을 통해 사용자명을 전송하여 어떤 사용자가 접근을 시도하는지를 확인한다. 그리고 PASS 명령을 통해 사용자의 비밀번호를 전송한다.
서버는 사용자 데이터베이스에서 사용자명과 비밀번호를 대조하여 접근을 시도하는 사용자가 서버에 접근할 권한이 있는지를 확인한다.
FTP 연결
- FTP Active mode
일반적으로 FTP active 모드가 FTP 클라이언트의 기본 값으로 설정된다. 클라이언트에서 서버측 21번 포트로 접속하여 제어채널을 생성하고 데이터는 서버에서 클라이언트로 접속하여 데이터를 보내는 방식이다.
만약 클라이언트 PC에 방화벽이 설치되어 외부에서의 접속을 허용하지 않는다면 FTP 접속은 되지만(제어채널은 연결) 이후 데이터 채널 연결이 불가능하여 파일을 받을 수 없는 문제가 발생할 수 있다.
FTP 클라이언트는 FTP 서버의 21번 포트로 연결 설정하여 제어 채널을 생성한다.
사용자는 파일 목록을 보기 위해서 ls 명령을 입력하면 FTP 클라이언트는 사용할 임시포트(1024번 포트, 위 예시는 5151)를 결정하여 FTP 서버에게 알린다.
FTP 서버는 FTP 클라이언트가 알려준 포트(5151)로 연결을 설정하여 데이터 채널을 생성한다.
데이터 채널을 통해서 데이터를 송신한 후 데이터 채널 연결을 종료한다.
- FTP Passive mode
클라이언트에서 서버측 21번 포트로 접속하여 제어 채널을 생성하고 데이터 채널도 클라이언트에서 서버로 접속하여 데이터를 보내는 방식이다.
서버에서 클라이언트로 접속해야 하는 모순 해결을 위해 고안된 방식이다.
FTP 클라이언트는 FTP 서버의 21번 포트로 연결 설정하여 제어 채널을 설정한다.
사용자가 파일 목록을 보기 위해 ls 명령을 입력하면 FTP 클라이언트는 수동모드로 연결하기 위해 PASV 명령을 전송하고 이 명령을 받은 FTP 서버는 사용할 임시포트(1024번 이상 포트, 예시에서는 3267번)를 결정하여 FTP 클라이언트에게 알려준다.
FTP 클라이언트는 FTP 서버가 알려준 포트로 연결을 설정하여 데이터 채널을 생성한다. (20번 포트 미사용)
데이터 채널을 통해서 데이터를 송신한 후 데이터 채널 연결을 종료한다.
Anonymous FTP
많은 FTP 서버는 익명 FTP를 지원하여 서버에 계정이 없는 사용자가 서버 자운에 한정된 접근을 할 수 있는 권한을 제공한다. 익명 FTP는 기술지원이나 고객지원, 파일 배포 등을 하고자 하는 단체에서 사용하는 경우가 많다.
익명 FTP에 액세스하기 위해 사용자는 계정이나 패스워드가 필요하지 않다. 사용자명에 anonymous를 패스워드명에는 아무거나(이메일 주소가 암묵적 룰)를 사용한다.
이 때 입력하는 비밀번호는 실제 비밀번호가 아니며 누가 접속하고 있는지 서버가 로그에 기록하는데 쓰인다.
TFTP(Trivial File Transfer Protocol)
FTP의 기능을 전부 지원할 필요가 없거나 모두 지원하는 것이 비현실적일 경우를 위해 더 간단한 FTP가 개발되었다.
FTP는 TCP를 사용하지만 TFTP는 UDP(69번 포트)를 사용한다.
TFTP는 소프트웨어 패키지를 읽기 전용 메모리나 디스크 없는 워크스테이션에 설치할 때 주로 쓰인다.
- FTP와 차이점
TCP와 UDP의 차이와 같이 TFTP는 단순성이 중요하고 다양한 기능을 지원하는 것이 크게 중요하지 않을 때 사용된다. TFTP는 부트 스트래핑을 할 때 사용하는 경우가 가장 많다.
FTP는 파일을 받고 보내고 삭제하기 등을 위한 다양한 명령어를 구비하고 있다. 하지만 TFTP는 파일을 보내고 받는 기능만 지원한다.
TFTP는 FTP가 지원하는 데이터 표현 방식을 전부 지원하지 않는다. 지원하는 방식은 ASCII와 바이너리뿐이다.
TFTP에서 삭제 기능처럼 위험할 수 있는 기능을 지원하지 않는 이유 중 하나는 인증 기능이 없기 때문이다.
- 데이터 전송
데이터 전송 단계는 연결 설정과 종료 사이에서 수행된다. 파일은 데이터와 블록으로 나뉘고, 마지막 블록을 제외한 각 블록은 정확히 512 바이트의 크기를 갖는다. 마지막 블록은 0에서 511바이트의 크기를 갖는다.
UDP는 흐름 제어와 오류 제어를 위한 기능이 없으므로 TFTP는 연속적인 데이터 블록으로 파일을 전송하기 위하여 흐름 제어와 오류 제어 메커니즘을 생성하여야 한다.
NFS(Network File System)
TCP/IP 프로토콜을 사용하여 네트워크상에서 파일시스템을 운영할 수 있도록 해주는 프로토콜이다.
데이터의 보안과 무결성을 보장하면서 인증된 네트워크 사용자가 공유된 네트워크 파일을 마치 자신의 저장 장치에 있는 것처럼 사용할 수 있는 방법을 제공한다.
여러 명이 함께 사용하는 대용량 프로그램이나 데이터를 하나의 호스트에 넣어 두고 NFS로 연결하여 사용하면 디스크 공간이 많이 절약된다.
Samba
SMB(Server Message Block) 프로토콜을 사용하여 유닉스 계열 시스템과 윈도우 시스템 간에 파일 및 프린터 자원을 공유할 수 있는 기능을 제공한다.
FTP 보안 위협 및 대책
FTP 보안
FTP 프로토콜은 보안이 큰 문제가 되기 전에 설계되었다. 비록 FTP가 비밀번호를 요구하지만 이 비밀번호는 평문으로 되어 있어 공격자가 가로채어 사용할 수 있다.
데이터 전송 연결 또한 보호되지 않은 평문으로 데이터를 전송한다. 보안을 위해서 FTP 응용 계층과 TCP 계층 사이에 보안 소켓 계층을 추가할 수 있다. 이러한 경우의 FTP를 SSL-FTP라 부른다.
SFTP(Secure FTP)
보안 채널을 사용해 자료를 전송하는 다른 방법은 SFTP(보안 파일 전송 프로토콜)라 불리는 다른 독립된 프로그램을 사용하는 것이다. 이는 사실 SSH 프로토콜의 일부인 SFTP라 불리는 Unix의 프로그램이다.
SSH에서 SSH 클라이언트와 SSH 서버 사이에 보안 연결이 성립되었을 때, 이 연결(다중방식)을 사용할 수 있는 응용 프로그램 중 하나가 SFTP다.
SFTP 프로그램은 FTP처럼 동작할 수 있는 쌍방향 프로그램이며 SSH 클라이언트와 SSH 서버 사이에서 파일을 전송하기 위해 인터페이스 명령 세트를 사용한다.
TFTP 보안
TFTP에 대한 중요한 점 하나는 보안에 대한 고려가 없다는 점이다. 심지어 사용자 확인이나 비밀번호도 없다.
보안을 수행하는 방법 중 하나는 TFTP가 중요하지 않은 파일에만 접근할 수 있도록 제한하는 것이다. 최소한의 보안성을 얻기 위한 한 가지 방법은 TFTP 서버 근처에 있는 라우터에 보안을 구현하여 특정한 호스트만 서버에 접근할 수 있도록 하는 것이다.
TFTP가 필요한 경우 secure mode로 운영한다. secure mode는 chroot 기능을 이용하는 것으로 지정한 디렉터리를 최상위 디렉터리로 지정하여 지정한 디렉터리의 상위 디렉터리로 접근하지 못하도록 제한하는 방식이다.
Bounce Attack
제어 채널과 데이터 채널을 다르게 사용하고 데이터 채널을 생성할 때 목적지를 확인하지 않는 FTP 설계의 구조적 취약점을 이용하는 공격이다.
능동 모드에서 FTP 서버의 파일을 요청하면 클라이언트에서 파일을 받을 IP와 포트를 지정해서 전달해준다.(PORT 명령) 이때 IP와 포트를 요청한 클라이언트가 아닌 임의의 주소로 지정할 수 있는데 이러한 FTP의 취약점을 이용하는 방식이다.
주로 익명 FTP 서버를 이용, PORT 명령을 조작하여 공격대상 네트워크를 스캔한다음 FTP 서버로 하여금 공격자가 원하는 곳으로 데이터를 전송하게 한다.
Bounce attack을 막기 위해서는 FTP의 원래 규약은 인정하되 다른 서비스가 20번 포트 접속을 요청하면 거절하는 방법을 사용할 수 있다.
Anonymous FTP 취약점
익명 사용자가 서버에 쓰기 권한이 있을 때 악성 코드 생성이 가능하다.
- Anonymous FTP 보안대책
Anonymous FTP는 보안상 심각한 취약점을 가지고 있기 때문에 반드시 사용해야하는 경우가 아니라면 서비스를 제거한다.
anonymous 사용자의 루트 디렉터리, bin, etc, pub 디렉터리의 소유자와 퍼미션을 관리한다.
FTP 접근 제어 설정
FTP 서비스는 기본적으로 평문 송수신을 하기 때문에 아이디 및 패스워드가 노출되기 쉽다. 따라서 중요 계정에 대해서는 FTP 직접 접속을 제한해야만 한다.
ftpusers 파일은 접속을 제한할 계정정보를 담고 있는 설정파일이다. 따라서 root 등 중요 계정을 ftpusers 파일에 명시하여 접속을 제한한다.
TCPWrapper를 이용할 수도 있다. TCPWrapper의 설정파일인 hosts.allow, hosts.deny 파일을 이용하여 IP 기반의 접근제어를 수행한다.
FTP 데몬 프로그램별로 TCPWrapper 연동 설정이 필요하다.
FTP 서비스 운영
- proftpd
proftpd는 wu-ftpd의 대안으로 개발되었다. 매우 안정적이고 빠르며 xinetd/standalone 형태로 작동이 가능하다.
- vsftpd(very secure FTP daemon)
가상 IP별 별도의 환경 설정 기능
가상 사용자 설정
전송 대역폭 지정
PAM 지원
xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원
Standalone 방식과 inetd(xinetd)를 통한 운영 모드 지원
IP별로 다른 환경 파일 지정 기능
'정보보안기사' 카테고리의 다른 글
웹 보안(Web Security) - 1 (0) | 2023.05.05 |
---|---|
이메일 보안 (0) | 2023.05.03 |
최신(아님) 네트워크 보안기술 (0) | 2023.04.30 |
VPN (0) | 2023.04.29 |
침입차단시스템(Firewall) (0) | 2023.04.27 |