1. FTP (File Transfer Protocol) 란?
하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 기능이다.
20번 포트는 데이터 전송을 위해 사용되고, 21번 포트는 명령과 응답 등의 제어정보를 위해 사용된다.
FTP의 경우 평문전송을 수행하여 정보가 노출될 수 있기 때문에 SFTP(22/tcp) 또는 FTPS(990/tcp) 사용을 권장한다.
2. FTP 전송모드
전송모드 기본 값은 Active Mode이고 클라이언트가 Active또는 Passive Mode를 선택할 수 있다.
데이터 포트요청은 Active의 경우 클라이언트가 Passive인 경우 서버가 요청한다.
1) 능동 연결(Active Mode)
Active Mode의 작동 방식
① 클라이언트가 서버의 21번 포트로 접속 후 명령을 송수신 하기 위해 제어 채널을 생성한다. 이후 사용자가 ls 명령를 입력하면 클라이언트가 Data 전송할 5151포트(1024 이상의 포트)를 포함하여 서버에 알려준다.
② 서버는 이에 대해 Ack로 응답한다.
③ 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속 후 데이터 채널을 생성한다.
④ 마지막으로 클라이언트가 Ack로 응답한다.
서버에서 클라이언트로 요청을 하기 때문에 클라이언트 PC에 방화벽이 설치되어 외부에서의 접속을 허용하지 않는다면 FTP 접속은 되지만 이후 데이터 채널 연결이 불가능하여 파일을 받을 수 없는 문제가 발생할 수 있다.
2) 수동 연결(Passive Mode)
Passive 모드의 작동 방식
① 클라이언트의 서버의 21번 포트로 접속 후 제어 채널을 생성한다. 이후 사용자가 명령어를 입력하면 클라이언트는 Passive Mode로 연결하기 위해 PASV명령어를 전송한다.
② 서버에서는 서버가 사용할 3267포트(1024 이상의 포트)를 알려준다.
③ 클라이언트는 서버가 알려준 포트번호로 접속을 시도하여 데이터 채널을 생성한다.
④ 서버는 Ack로 응답한 후 데이터를 송신한 후 데이터 채널 연결을 종료한다.
두 번째 data포트로서 active 모드가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비 특권 포트를 사용한다.
서버에서 포트번호를 알려주기 때문에, 해당 대역의 방화벽 포트를 열어 두어야 한다.
대부분의 웹브라우저는 ftp://를 이용하여 FTP에 접속할 때 수동모드만 지원한다.
3. FTP 명령어
PORT
클라이언트가 임시 포트를 선택하고 이를 Passive Mode을 통해 서버에게 보낼 수 있다.
성공: 220 PORT command successful
명령어 예시: port 204,152,155,1,9,17
뒤에 숫자 2개(9,17)은 포트 계산에 사용된다.
전송 포트는 256*9 + 17 = 2321이 된다.
LIST
지정한 경우 파일이나 디렉터리 정보를 반환하고, 지정하지 않은 경우 현재 작업 디렉터리 정보 반환한다.
포트가 열려있는 경우
150 Opening ASCII mode data connection for file list
226 Transfer complete
포트가 닫혀있는 경우
425 Can't build data connection: connection refused
기타 명령어
PASS: 패스워드 전송
USER: 사용자 전환
STOR: 원격지 파일 저장
RETR: 원격지 파일 가져오기
RMD: 원격지 디렉터리 제거
4. FTP 보안 취약점
1) FTP Bounce Attack
개념
제어 채널과 데이터 채널을 다르게 사용하고 데이터 채널을 생성(PORT 명령)할 때 목적지를 확인하지 않는 FTP 설계의 구조적 취약점을 이용한다.
공격 방법
주로 익명 FTP를 서버를 이용한다.
PORT 명령을 조작하여 공격대상 네트워크를 스캔 후 FTP 서버로 하여금 공격자가 원하는 곳으로 데이터 전송을 하게 한다.
다른 서비스가 20번 포트 접속을 요청하면 거절하도록 설정한다.
2) 익명 FTP(Anonymous FTP)
개념
서버에 계정이 없는 사용자가 서버 자원에 한정된 접근을 할 수 있는 권한을 제공한다.
기술지원이나 고객지원, 패일 배포 등을 할 때 사용한다.
익명 사용자가 보안 절차를 걸치지 않고 서버에 접속할 수 있고, 쓰기 권한이 있을 경우 악성코드 생성이 가능하다.
대응방법
/etc/passwd 파일에서 익명 FTP에 불필요한 항목을 제거한다.
반드시 사용해야 하지 않는 경우 서비스를 제거하고 익명 사용자는 핵심 디렉터리의 권한을 설정하여 접근하지 못하도록 한다.
3) TFTP(Trivial File Transfer Protocol)
개념
소프트웨어 패키지를 읽기 전용 메모리나 디스크 없는 워크스테이션에 설치할 때 주로 사용되고 자체 디스크를 가지고 있지 않은 워크스테이션에 부팅이미지를 전달할 목적으로 사용된다.
69/UDP 포트를 사용하여 별도의 인증과정 없이 지정된 디렉터리에 접근할수 없는 보안상 취약점을 이용한다.
대응방법
파일 위치: /etc/inetd.conf
#tftp dgram wait root /usr/sbin/tcpd in.tftpd
파일 위치: /etc/xinetd.d/tftp
service tftp
{
...
disable = yes
...
}
중요하지 않은 파일에만 접근할 수 있도록 secure mode(chroot)기능을 사용하여 제한한다.
아래와 같이 설정하면 ftp접근 시 tftpboot 하위 경로만 접근이 가능하다.
파일 위치: /etc/inetd.conf
tftp dgram wait root /usr/sbin/tcpd in.tftpd -s /tftpboot
chroot: 지정한 디렉터리를 최상위 디렉터리로 지정하여 상위 디렉터리로 접근하지 못하도록 한다.
FTP VS TFTP
구분 | FTP | TFTP |
전송 | TCP(20, 21) | UDP (69, 부트 스트래핑) |
개수의 명령 | 파일 보내고 받기, 삭제 등 다양한 명령 | 파일 보내고 받기 |
데이터 표현 방식 | 다양한 표현방식 | ASCII, Binary |
인증 기능 | 있음 | 없음 |
5. FTP 접근 제어 설정
ftpuser 파일을 통한 접근 제어
ftpusers는 접속을 제한할 계정 정보를 담고 있는 설정 파일이다.
중요 계정(root)에 대해서는 ftpusers 파일에 명시하여 접속을 제한한다.
파일 위치: /etc/ftpusers
TCPWrapper를 통한 접근 제어
host.allow, host.deny 파일을 이용하여 IP 기반의 접근 제어를 수행한다.
FTP 데몬 프로그램별로 TCPWrapper 연동 설정이 필요하다.
6. FTP 암호화 전송
1) SFTP(Secure File Transfer Protocol, 보안 파일 전송 프로토콜)
SFTP 보안채널을 사용해 SSH방식(22번 포트)을 이용하여 안전하게 암호화된 구간에서 FTP 기능을 이용한다.
2) SCP(Secure Copy)
SFTP 기반이지만 SCP는 파일 전송에만 사용할 수 있으며 비 대화식 전송방식이다.
데이터 전송 및 사용자 인증을 하기위해 SSH를 사용한다.
3) FTPS(FTP over SSL/TLS)
FTP 응용계층과 TCP 계층 사이에 보안 소켓 계층을 추가하여 SSL-FTP(SFTP)를 구성할 수 있다.
기본적으로 TCP 990번 포트를 사용한다.
7, FTP 서비스 운영
1) proftpd
매우 안정적이고 빠르고 xinetd/standalone 형태로 작동 가능
접속 시 확인 설정
① /etc/passwd, /etc/shadow에 사용자 계정이 있는지 검사한다.
② /etc/ftpusers에 사용자 목록이 있는 경우 거부한다.
③ /etc/shell에 등록되지 않는 쉘은 거부한다.
명령어
TimeoutIdle 600: 600초 동안 아무런 동작이 없는 경우 연결 접속을 종료시킨다.
TimeoutSession 600: 접속 후 600초가 지나면 강제로 연결 접속을 종료시킨다.
ServerIdent On "Welcom peemang FTP": 접속 시 화면에 보여지는 기본 메시지를 출력한다.
RootLogin Off: root 계정을 사용하지 않는다.
2) vsftpd(Very Secure FTP Deamon)
가상 IP별 별도의 환경 설정이 가능하다, (listen_address)
가상 사용자 설정이 가능하다.
전송 대역폭 지정이 가능하다.
PAM을 지원한다.
xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식을 지원한다.
xinetd/standalone 형태로 작동이 가능하다.
tcp_wrappers와 함께 사용할 때 IP별로 다른 환경 파일 지정이 가능하다.
'Network > Network Theory' 카테고리의 다른 글
[Network] SNMP(Simple Network Management Protocol) 란? (0) | 2022.10.19 |
---|---|
DNS (Domain Name System)란? (3) | 2022.10.03 |
DHCP(Dynamic Host Configuration Protocol) 란? (0) | 2020.08.19 |
[Network] ARP, RARP,GARP 개념 (0) | 2020.02.11 |
[Network] ICMP(Internet Control Message Protocol) 란? (0) | 2019.11.20 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊