FTP, TCP, UDP

Donghwi Kim·2024년 2월 1일
0

잡다한 개발 지식

목록 보기
9/26

File Transfer Protocol

하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 기능.

20번 포트는 데이터 전송을 위해, 21번 포트는 명령과 응답 등의 제어정보를 위해 사용된다.

인터넷을 통한 파일 송수신 만을 위해 고안된 서비스(또는 프로토콜)이기 때문에 동작 방식이 매우 단순하고 직관적이다. 파일을 빠른 속도로 한꺼번에 주고 받을 수 있다는 것이 가장 큰 장점이다.


FTP 전송모드
기본 값은 Active Mode이고 클라이언트가 Active 또는 Passive Mode를 선택할 수 있다.

  • 능동 연결(Active Mode) 작동 방식
    • 클라이언트가 서버의 21번 포트로 접속 후 명령을 송수신 하기 위해 제어 채널을 생성한다. 이후 사용자가 Is 명령을 입력하면 클라이언트가 사용할 5150포트(1024 이상의 포트)를 서버에 알려준다.
    • 서버는 이에 대해 Ack로 응답한다.
    • 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속 후 데이터 채널을 생성한다.
    • 마지막으로 클라이언트가 Ack로 응답한다.

서버에서 클라이언트로 요청을 하기 때문에 클라이언트에 외부에서의 접속을 허용하지 않는다면(방화벽 등) FTP 접속은 되지만 이후 채널 연결이 불가능하여 파일을 받을 수 없는 문제가 발생할 수 있다.


  • 수동 연결(Passive Mode) 작동 방식
    • 클라이언트의 서버 21번 포트로 접속 후 제어 채널을 생성한다. 이후 사용자가 명령어를 입력하면 클라이언트는 Passive Mode로 연결하기 위해 PASV명령어를 전송한다.
    • 서버에서는 서버가 사용할 3267포트(1024 이상의 포트)를 알려준다.
    • 클라이언트는 서버가 알려준 포트번호로 접속을 시도하여 데이터 채널을 생성한다.
    • 서버는 Ack로 응답한 후 데이터를 송신한 후 데이터 채널 연결을 종료한다.

두 번째 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 하위 경로만 접근이 가능하다.

  • chroot: 지정한 디렉터리를 최상위 디렉터리로 지정하여 상위 디렉터리로 접근하지 못하도록 함


Transmission Control Protocol

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) 신뢰할 수 있는 데이터 전송

  • 흐름제어

    • 상대방이 받을 수 있을 만큼만 데이터를 효율적으로 전송하는 것
    • 흐름제어를 위해 슬라이딩 윈도우 방식을 사용한다. 수신 가능한 크기 내에서 데이터를 연속하여 전송하는 방식으로 매 전송 시마다 ACK을 수신한다.
  • 오류 제어

    • 데이터의 오류나 누락없이 안전한 전송을 보장한다.
    • 오류 또는 누락 발생 시 재전송을 수행하여 이를 보정한다.
  • 혼잡제어

    • 네트워크 혼잡 정도에 따라 송신자가 데이터 전송량을 제어하는 것을 말한다.
    • 혼잡정도에 대한 판단기준은 데이터의 손실 발생 유무로 판단한다. 전송한 데이터에 누락이 발생하면 네트워크가 혼잡한 상태로 판단하여 전송량을 조절한다.

User Datagram Protocol

전송계층의 통신 프로토콜의 하나이며 신뢰성이 낮고 안전성을 보증하지 않으나, 가상 회선을 굳이 확립할 필요가 없고, 유연하며 효율적 응용의 데이터 전송에 적합하다는 특징을 가지고 있다.


UDP 프로토콜의 특징

가장 큰 특징은 비연결성, 신뢰성이 낮다.

1) 비연결형 프로토콜

  • 논리적인 연결 설정 과정이 없기 때문에 데이터그램 전송 시 마다 주소 정보를 설정해서 전송
  • 데이터의 순차적 전송을 보장해주지 않음
  • 데이터그램 기반의 전송 방식을 사용한다. 즉 데이터를 정해진 크기로 전송하는 방식을 사용

2) 신뢰할 수 없는 프로토콜

  • 흐름제어, 오류제어, 혼잡제어 등을 수행하지 않는다
  • 실질적으로 IP 기반 포트 정보를 이용하여 상위 송수신 어플리케이션을 식별해주는 역할 정도만 수행한다.

3) 실시간 응용 및 멀티캐스팅 가능

  • 1대1 전송이 아니기 때문에 멀티캐스팅이 가능하다. TCP와 달리 가상회선을 만들지 않기 때문
  • 데이터의 누락을 두려워하지 않기 때문에 전송속도를 마음대로 설정할 수 있다.

0개의 댓글

관련 채용 정보