하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 기능.
20번 포트는 데이터 전송을 위해, 21번 포트는 명령과 응답 등의 제어정보를 위해 사용된다.
인터넷을 통한 파일 송수신 만을 위해 고안된 서비스(또는 프로토콜)이기 때문에 동작 방식이 매우 단순하고 직관적이다. 파일을 빠른 속도로 한꺼번에 주고 받을 수 있다는 것이 가장 큰 장점이다.
FTP 전송모드
기본 값은 Active Mode이고 클라이언트가 Active 또는 Passive Mode를 선택할 수 있다.
서버에서 클라이언트로 요청을 하기 때문에 클라이언트에 외부에서의 접속을 허용하지 않는다면(방화벽 등) FTP 접속은 되지만 이후 채널 연결이 불가능하여 파일을 받을 수 없는 문제가 발생할 수 있다.
두 번째 data 포트로서 Active Mode가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비 특권 포트를 사용한다. 서버에서 포트번호를 알려주기 때문에, 해당 대역의 방화벽 포트를 열어 두어야 한다.
대부분의 웹브라우저는 ftp:// 를 이용하여 FTP에 접속할 때 수동모드만 지원한다.
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 포트를 사용하여 별도의 인증과정 없이 지정된 디렉터리에 접근할 수 없는 보안상 취약점을 이용한다.
대응 방법 - 중요하지 않은 파일에만 접근할 수 있도록 secure mode(chroot)기능을 사용하여 제한한다. 아래와 같이 설정하면 ftp 접근 시 tftpboot 하위 경로만 접근이 가능하다.
OSI 7 Layer 중 4계층인 전송계층에 속하는 프로토콜로 네트워크 망에 연결된 컴퓨터의 프로그램 간 데이터를 순서대로, 에러없이 교환할 수 있게 하는 역할이다. 신뢰할 수 있고 정확한 데이터를 전달하기 위해 연결형 통신을 사용하는 프로토콜이다.
TCP 프로토콜의 특징
1) 연결 지향
가상 회선을 연결하는 것이다. 가상 회선이란, 물리적으로 전용회선이 연결되어 있는 것처럼 가상의 연결 통로를 설정하여 통신하는 방식으로 가상의 연결통로를 의미한다.
가상 회선을 통해 데이터를 주고 받기 때문에 데이터가 차례로 전송되게 된다. 이렇게 전송 순서가 보장되면서 순서제어가 가능하다. 순서제어란 이전 데이터 패킷의 번호를 기억하고 있다가 재입력 시 폐기하고 다음 번호가 입력되었을 때 수신받는다. 순서제어가 가능하기 때문에 모든 데이터가 중복없이 순서대로 받을 수 있다. →신뢰성이 보장됨
또한, 데이터를 임의의 크기로 나누어 연속해서 전송하는 방식을 사용한다.
3 Way-Handshake
클라이언트가 연결요청 메시지(SYN)을 전송한다.
서버가 요청을 수락하며, 클라이언트에게도 들리냐는 연결요청 메시지를 전송한다. 그 메시지에는 ACK를 포함하고 있으며, 이 번호는 받은 SYN 패킷 보다 +1한 값을 가진다. 이 번호를 전송함으로써, 잘 들린다는 것을 알려준다.
클라이언트가 잘 들린다고 ACK에 받은 SYN + 1을 하여 전송한다.
4 Way-Handshake
클라이언트는 연결을 종료하자고 서버에게 FIN 신호를 전송한다.
서버는 FIN 신호를 받으면, ACK 신호를 전송한다. 그리고 ACK신호를 받은 클라이언트는 서버에서 남은 신호를 받을 때까지 기다린다. 이 과정을 TIME_OUT 이라고 한다.
서버는 남은 신호를 마저 보내고, 이제 끝내도 된다는 의미로 FIN 신호를 전송한다.
클라이언트는 FIN메시지를 확인했다는 의미에서 ACK 메시지를 보낸다.
2) 신뢰할 수 있는 데이터 전송
흐름제어
오류 제어
혼잡제어
전송계층의 통신 프로토콜의 하나이며 신뢰성이 낮고 안전성을 보증하지 않으나, 가상 회선을 굳이 확립할 필요가 없고, 유연하며 효율적 응용의 데이터 전송에 적합하다는 특징을 가지고 있다.
UDP 프로토콜의 특징
가장 큰 특징은 비연결성, 신뢰성이 낮다.
1) 비연결형 프로토콜
2) 신뢰할 수 없는 프로토콜
3) 실시간 응용 및 멀티캐스팅 가능