글 작성자: nouu

http://www.yes24.com/Product/Goods/83538369

 

보안 실무자를 위한 네트워크 공격 패킷 분석 - YES24

저자의 풍부한 실무 경험을 바탕으로 보안 업무를 담당하고 있는 실무자와 보안에 입문하고자 하는 독자를 위해 쓰였다. 이 책은 포트 스캔, DDoS, SMB 해킹, 웹 해킹, RAT 악성 코드, 메일 서버 해킹

www.yes24.com

 

해당 서적을 참고하여 글을 작성했습니다. 

사실 Fragmentation Flooding보다는 TCP의 세그멘테이션 개념을 잡기 위해 해당 글을 작성하였다.

 

 

 

일단 Fragmentation Flooding의 개념은 MTU 이상의 크기로 패킷을 전송 시에 패킷이 분할되는 단편화, 즉 Fragmentation 특징을 이용한 공격 유형이다.

 

Fragmentation Flooding을 살펴보기 전 우리는 네트워크 기기가 전송할 수 있는 최대 전송 단위인 MTU(Maximum Transfer Unit)의 개념을 알아야한다.

 

MTU : 네트워크 기기가 전송할 수 있는 최대 전송 단위를 의미. MTU는 네트워크 환경에 따라 다르지만 보통 대부분의 네트워크 환경에 사용 중인 이더넷 MTU는 1,500바이트이다.

 

단편화(Fragmentation) : MTU 이상의 크기로 패킷을 전송할 때 패킷이 MTU 크기에 맞춰 분할되는 것을 의미함.

 

 

 

 

 

 

TCP는 단편화를 회피하기 위해 MSS와 PMTUD 기법을 사용한다.

<좌측에 있는 Header일수록 상위 프로토콜>

 

IP Header의 Flags 필드(3bits)는 단편화(Fragmentation) 정보를 나타내는 필드이므로, IP 프로토콜의 하위에 존재하는 모든 프로토콜(TCP, UDP, ICMP등등)은 단편화가 발생할 수 있다. UDP와 같이 단방향으로 전송하는 비신뢰성 통신은 패킷 하나가 중간에 손실되어도 문제가 되지 않는다. 하지만 TCP와 같은 신뢰성 통신 방식은 통신 과정에서 단편화 된 패킷 하나가 손실되었을 때 어떠한 단편화된 패킷이 손실되었는지 확인 후 재전송하는 데에 많은 자원과 시간이 소모된다. 

 

따라서 많은 자원과 시간을 소모하는 것을 방지하고 효율적인 통신을 하고자 TCP는 IP 프로토콜 영역에서 단편화가 발생하지 않는 방안이 필요했고 이것이 세그멘테이션, 즉 TCP 영역에서 네트워크 장비에 가용할만한 MTU 사이즈 이하로 분리하는 기능이 만들어졌다. (쉽게 말해 TCP 구간에서 데이터가 MTU 사이즈만큼 분리되고, IP 영역에서는 분리되지 않는다고 생각하면 쉽다.)

 

세그멘테이션(Segmentation) : TCP는 엄밀히 말하면 세그먼트라는 단위라고 불리며, 다시 설명하자면 효율적인 통신을 위해 TCP 구간에서 MTU 사이즈로 나누는 것을 말한다. 

 

 

 

 

https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-19%ED%8E%B8-TCP-Header-4%EA%B3%84%EC%B8%B5-TCP-%ED%97%A4%EB%8D%94-%EA%B5%AC%EC%A1%B0

 

[ 네트워크 쉽게 이해하기 19편 ] TCP Header 4계층 TCP 헤더 구조

TCP Header 구조 Source Port address 필드(16bit) : 데이터를 생성한 애플리케이션에서 사용하는 포트번호를 나타낸다. - Well-known ports(0~1,023) : IANA에 의해 배정되고 제어된다. - Registered port(1,024..

mindnet.tistory.com

 

단편화된 IP 패킷들은 수신 측에서 Fragment offset을 이용해서 재조합하지만 세그멘테이션 된 TCP 세그먼트들을 재조합하는 방식은 여러가지 TCP 헤더 필드 정보들을 이용하므로 TCP 레벨에서 재조합이 가능하다. TCP 세그먼트를 재조합하는 방식은 다음과 같이 Sequence number, ack number, window size, checksum 등의 헤더 정보를 이용한다.

 

위에서 말한 것을 요약하자면 TCP는 발생할 수 있는 단편화를 회피하고자 MTU를 초과하지 않는 크기로 세그먼트를 분할하는 방법이 필요하다. 이를 위해서 TCP는 MSS와 PMTUD 두가지 기법을 사용한다.  

 

 

 

MSS(Maximum Segment Size)

클라이언트와 서버 간에 TCP 통신 시 최대로 전송할 수 있는 TCP 세그먼트 크기를 의미한다. 3-way-handshake 세션 연결에 사용되는 SYN, SYN-ACK 패킷의 옵션 필드에 명시가 된다. 

 

MSS의 크기는 실제 전송되는 데이터의 크기이다. MTU에서 헤더 크기인 IP 헤더 20bytes + TCP 헤더 20bytes인 총 40bytes를 뺀 나머지 값이 MSS 값이 된다. 

 

클라와 서버는 TCP 통신을 위한 3-way-handshake 과정에서 상호 간의 MSS가 정해지며 이 MSS 크기는 MTU에 맞추어 산정된다. 이 덕분에 IP 패킷에 의해 단편화가 발생되지 않는다.

 

 

 

 

 

PMTUD(Path MTU Discovery)

TCP 통신 시에 두 호스트 간에 MSS를 이용하여 MTU를 초과하지 않는 값으로 데이터를 전송한다고 했다. 하지만 만약 세그먼트가 전송되는 경로 상에서 중간 노드, 즉 라우터나 다른 보안 장비가 클라나 서버보다 작은 크기의 MTU를 사용한다고 가정한다면 단편화가 중간 노드 구간에서 발생할 것이다. 이것을 방지하는 기법이 PMTUD(Path MTU Discovery)이다. 

 

PMTU(Path MTU)는 라우팅이나 다른 중간 노드의 MTU를 의미한다.

PMTUD(Path MTU Discovery)는 네트워크 경로상에 존재하는 수많은 네트워크 장비들이 상호 간의 MTU를 미리 파악하여 MTU를 초과하지 않는 크기로 데이터를 전송해서 단편화를 회피하는 기능이다. 

 

PMTU가 활성화된 장비들은 기본적으로 TCP에 해당하는 패킷 상위 IP 프로토콜 Flags 필드에 'DF'(Don't Fragment)로 설정해서 전송한다. 애초부터 단편화가 발생하지 않기 위해 이러한 설정을 하는 것이다. 만약에 패킷이 목적지까지 도달하기 전 자신의 MTU 보다 작은 크기의 MTU를 사용하는 장비를 만날 경우, 작은 MTU가 ICMP type 3, code 4 'Fragmentation needed but DF bit set', '작은 크기의 MTU를 기준으로 수정 요청하는 MTU의 크기'를 ICMP 메시지로 최초 전송 단말 노드 장비(클라나 서버)에게 전송한다. 이후에 다시 최초 전송 단말 노드 장비는 중간 노드가 가진 작은 크기의 MTU 사이즈 기준에 맞게 조정해서 패킷을 전송한다. 이로서 TCP는 전송 경로상 라우터에서 설정된 MTU를 초과하지 않게 된다. 

 

 

 

지금까지 설명한 MSS와 PMTUD를 통해 우리는 TCP 세그먼트는 MTU를 초과하지 않는 크기로 분할되며, 이에 따라서 단편화도 발생할 수 없는 구조라는 것을 알았다. TCP를 이용한 DDos 발생 시에 만약 단편화된 TCP 패킷이 존재한다면 무조건적인 차단을 해도 무방하다는 결론이 나온다. 또한 라우터 구간에서 TCP 단편화 패킷은 차단해도 서비스에 지장이 없을 것 이라는 결론을 도출할 수 있다.

 

 

 

 

 

Fragmentation Flooding 공격 패킷을 간단하게 분석해보자

위에서 설명한 것과 같이 일반적으로 TCP 통신은 MSS와 PMTUD를 통해 단편화가 발생하는 것을 방지한다. 하지만 TCP를 제외한 나머지 프로토콜은 패킷이 MTU 이상의 크기로 전송될 때 무조건 단편화가 발생한다. Attacker는 주로 대역폭 공격을 감행할 때 의도적으로 큰 트래픽을 생성하기 위해 위조가 용이한 UDP 또는 ICMP 패킷을 MTU 이상의 큰 크기로 전송한다. 이때 단편화 된 패킷들은 MF = 1로 설정되어 있다.

 

 

위와 같이 와이어샤크로 UDP Flooding시에 데이터의 크기를 MTU 이상 크기로 전송되어 단편화 되었으며, 데이터는 의미없는 값으로 구성되있는 것을 볼 수 있다. 

 

 

SYN Flooding 역시 MTU 이상의 크기로 전송되면 단편화가 일어나는 것을 볼 수 있다. 

 

 

 

 

Fragmentation 패킷 차단으로 Fragmentation Flooding을 방지한다. 

TCP의 경우 MSS와 PMTUD에 의해서 MTU의 크기를 초과하지 않는다. 그래서 단편화 될 가능성이 없다. UDP와 ICMP 또한 특수한 경우를 제외하고 단편화 될 만큼 큰 패킷으로 통신하는 경우는 거의 없다. 자신이 운영하는 네트워크 대역폭에 흐르는 패킷들을 조사 후 단편화된 패킷이 전송되지 않는 것이 확인된다면 UDP와 ICMP 단편화 패킷도 차단하는 방안을 적용할 수 있다. 

 

종합하자면 Fragmentation 패킷을 이용한 DDos 공격은 UDP, ICMP, TCP 등 하위 프로토콜과는 상관없이 IP 프로토콜 전체에 대해 단편화된 패킷을 차단하는  방안을 고려할 수 있다.