강좌 / 팁

서버 / IT IP Fragmentation을 이용한 공격기술들

2011.12.19 10:33

gooddew 조회:7282

 

IP Fragmentation을 이용한 공격기술들

 

2001. 3. 17
정현철, hcjung@certcc.or.kr

1. 개요

IP Fragmentation은 이기종 네트워크 환경에서 IP 패킷의 효율적인 전송을 보장해주고 있지만, 몇가지 보안 문제점을 가지고 있다.

Ping of Death, teardrop 등의 공격은 비정상적인 fragment들을 재조합(reassemble)하는 과정에서 시스템이 정지되거나 재부팅될 수 있다. 하지만 최근 IP Fragmentation을 이용한 서비스거부공격 외에 이를 이용하여 패킷 필터링 장비나 네트워크 기반의 침입탐지시스템을 우회할 수 있는 문제점이 대두되고 있다. 일부 라우터나 침입차단시스템 그리고 네트워크 기반의 침입탐지시스템들은 패킷 재조합 기능을 제공하고 있지 않아 공격자가 공격 패킷을 다수의 데이터그램으로 쪼개서 공격할 경우 이를 탐지하거나 차단하지 못하는 경우가 있다. 본 고에서는 먼저 IP fragmentation의 기본적인 개념을 소개하도록 하고, 이러한 IP Fragmentation을 이용한 서비스거부공격과 침입탐지시스템의 탐지 rule을 우회하는 공격기술들에 대하여 알아보기로 한다.

2. IP Fragmentation의 이해

IP 프로토콜은 IP 패킷을 몇 개의 작은 패킷으로 나누어서 전송되고 목적지 시스템에서 재조합되는 것을 허용한다. 이 과정이 fragmentation이라고 불리며, 서로 다른 최대 패킷 사이즈의 제한을 가진 이기종의 전송매체에서도 IP 데이터그램을 전송가능하게 한다.

IP Fragmentation은 IP 데이터그램이 네트워크를 통해 전송될 때, 전송되는 IP 데이터그램의 크기가 해당 전송 매체에서 전송될 수 있는 최대 크기 즉, MTU(Maximum Transmission Unit)보다 클 경우 발생한다. 예를들어 Ethernet에서 전송가능한 IP 데이터그램의 최대 크기 즉 MTU는 1500바이트이다. 만약 데이터그램이 1500바이트보다 크고, Ethernet 네트워크를 통과해야한다면 그 데이터그램은 fragmentation이 필요하게 된다. 이처럼 fragmentation은 지극히 일반적이고 정상적인 이벤트이지만, 비정상적인 fragment를 발생시켜 서비스거부공격에 이용하기도 하고, fragmentation을 처리하지 않는 라우터나 침입탐지시스템을 피하기 위한 목적으로 고의로 fragmentation을 이용하기도 한다.

각 fragment들은 목적지에 도착하여 fragment되기 전의 상태로 재조합되기 위하여 다음의 정보들을 가지고 있다.

? 각 fragment는 하나의 동일한 fragment 식별번호를 이용하여 재조합되는데, 이 식별번호는 IP 헤더의 16비트 필드로써 "IP identification number" 또는 "fragment ID"로 불린다.

? 각 fragment는 원래 fragment되기 이전의 패킷에서의 위치 즉 "fragment offset"을 가진다.

? 각 fragment는 그 fragment의 데이터 길이를 가진다. 여기서 IP 헤더 20byte는 데이터 길이에서 제외된다. 즉, Ethernet의 MTU인 1500바이트가 전송될 때 데이트길이는 1480(1500-20)바이트로 표시된다.

? 마지막으로 각 fragment는 현재 fragment에 추가적인 fragment들이 있을 경우 ME(More Fragment) flag를 1로 설정된다.


IP Fragment의 원리를 이해하기 위하여 4,000바이트의 ICMP 데이터가 Ethernet 상에서 전송될 때 어떻게 framentation되는지 살펴보기로 하자.

우선 4000바이트의 ICMP 데이터를 송신하여 본다.(일반적인 ping 패킷은 56바이터의 ICMP 데이터를 전송하지만 -s 옵션을 이용하여 ICMP 데이터가 fragment되도록 충분히 크게한다.)

[root@linux80 /root]# ping -s 4000 172.16.2.34
PING 172.16.2.34 (172.16.2.34): 4000 data bytes
4008 bytes from 172.16.2.34: icmp_seq=0 ttl=254 time=20.7 ms
4008 bytes from 172.16.2.34: icmp_seq=1 ttl=254 time=20.1 ms
...

이때 tcpdump를 이용하여 패킷을 모니터링하면 다음과 같다.

20:55:56.548630 linux80.kisa.or.kr > insecure.kisa.or.kr: (frag 30338:1048@2960)
20:55:56.558095 linux80.kisa.or.kr > insecure.kisa.or.kr: (frag 30338:1480@1480+)
20:55:56.565466 linux80.kisa.or.kr > insecure.kisa.or.kr: icmp: echo request (frag 30338:1480@0+)

Ethernet 네트워크를 통하여 전송되기 전의 데이터그램은 20바이트의 IP헤더와 8바이트의 ICMP 헤더, 그리고 4000바이트이 ICMP 데이터를 가진 총 4028바이트의 데이터그램이다. 하지만 Ethernet을 통하여 전송되기 위해서는 Ethernet의 MTU 즉 1500바이트를 넘을 수 없으므로 1500바이트 또는 그보다 작은 fragment로 쪼개어져서 전송되게 된다. 다음 그림은 Ethernet을 통해 전송되는 3개의 fragment를 도식화한 것이다.

Top

 

tcpdump에 의해 모니터링된 결과와 위 그림의 도식화한 각 fragment의 내용을 같이 보면 fragment 이해에 도움이 될 것이다.


우선 첫 번째 fragment는 20바이트의 IP 헤더와 8바이트의 ICMP 헤더, 그리고 1472(=1500-20-8)바이트의 ICMP 데이터로 구성되어 있다.

IP 헤더에는 다음의 정보들을 가진다.

Protocol = ICMP
Fragment ID = 30338
More Fragments Flag = 1
Fragment Offset = 0
Data Length = 1480

아래의 tcpdump에 의해 모니터링된 첫 fragment의 내용에서 30338은 fragment ID, 1480은 Data Length, 0는 Fragment Offset, +는 MF flag가 1로 셋팅되어 있음을 보여준다.

 


Top

IP 헤더에 의해 캡슐화된 데이터는 TCP, UDP, 또는 ICMP와 같은 IP 프로토콜들이 될 수 있다. 여기서는 ICMP 패킷을 보내고 있으며, tcpdump에서 ICMP 헤더 정보를 통하여 이 패킷이 ICMP echo request라는 것을 출력하여 주고 있다.

두 번째 fragment는 20바이트의 IP 헤더와 1480바이트의 ICMP 데이터로 구성되어 있다. 모든 fragment에는 20바이트의 IP 헤더를 포함하는데, 두번째 fragment의 IP 헤더에는 다음의 정보들을 가지고 있다.

Protocol = ICMP
Fragment ID = 30338
More Fragments Flag = 1
Fragment Offset = 1480
Data Length = 1480

Fragment Offset은 1480을 가리키고 있으며, 첫 번째 fragment와는 달리 ICMP 헤더를 가지고 있지 않아 ICMP type 정보를 알 수 없다.

cpdump에서 첫 번째 패킷에서 나왔던 "ICMP echo request" 패킷이라는 것이 두 번째 fragment부터는 보이지 않는 것을 알 수 있다. TCP나 UDP 패킷인 경우 목적지 포트번호 정보도 가지지 않는다. 이처럼 오직 첫 번째 fragment에만 TCP, UDP, 또는 ICMP 헤더가 포함되어 있어 패킷 필터링 장치에서 첫 번째 fragment만 차단되는 경우가 많다. 따라서 fragment ID를 이용하여 각 세션의 stat를 유지하여야 하는 부담이 있다. 좀더 지능적인 패킷 필터링 장치인 경우는 차단된 첫 번째 fragment의 ID를 가진 모든 fragment들을 차단할 필요가 있다.

마지막 fragment는 역시 20바이트의 IP 헤더와 나머지 ICMP 데이터 즉 1048바이트의 ICMP 데이터로 구성되어 있다. IP 헤더에는 다음의 정보를 가지고 있다.

Protocol = ICMP

Fragment ID = 30338

More Fragments Flag = 0

Fragment Offset = 2960

Data Length = 1048

여기서 더 이상의 fragment가 없으므로 MF flag가 0으로 셋팅된 것을 볼 수 있다. 그리고 두 번째 fragment와 마찬가지로 ICMP 헤더가 포함되지 않았다.

4000바이트의 ICMP 데이터가 네트워크를 통해 전송될 경우 MTU에 따라 fragment되는 과정을 간단히 살펴보았다.


Top

3. Fragment를 이용한 공격기술들

위에서 알아본 것처럼 fragmentation은 큰 패킷을 전송하기 위해 발생되는 정상적인 과정이지만 공격자는 fragment를 조작하여 패킷필터링 장비나 침입차단시스템을 우회하거나 서비스거부공격을 유발시킬 수 있다.

가. Tiny fragment 공격

Tiny fragment 공격은 최초의 fragment를 아주 작게 만들어서 네트워크 침입탐지시스템이나 패킷 필터링 장비를 우회하는 공격이다.

TCP 헤더(일반적으로 20바이트)가 2개의 fragment에 나뉘어질 정도로 작게 쪼개서 목적지 TCP 포트번호가 첫 번째 fragment에 위치하지 않고 두 번째 fragment에 위치하도록 한다.

패킷필터링 장비나 침입탐지시스템은 필터링을 결정하기 위해 포트번호를 확인하는데 포트번호가 포함되지 않을 정도로 아주 작게(tiny) fragment된 첫 번째 fragment를 통과시킨다. 또한 실제 포트번호가 포함되어 있는 두 번째 fragment는 아예 검사도 하지 않고 통과시킨다. 그 결과 보호되어야할 목적지 서버에서는 이 패킷들이 재조합되어져 공격자가 원하는 포트의 프로그램으로 무사히 연결될 수 있다. 이런 방법으로 패킷 필터링에서 차단되어야 하는 패킷을 통과시킬 수도 있고, 침입탐지시스템에서 비정상적인 접속으로 경보되어져야 하지만 전혀 탐지되지 않게 할 수도 있다. 어떤 패킷 필터링 장비들은 TCP 헤더의 포트번호가 포함되지 않을 정도로 작은 첫 번째 fragment는 drop시키기도 한다.

Tiny fragment 공격은 잘 알려진 스캔 툴인 nmap에서도 공격이 가능하다.
nmap에 -f 옵션을 사용할 경우 TCP 헤더를 몇 개의 fragment로 나누어서 스캔한다.
[root@linux80 /root]# nmap -f -sS -p 23 172.16.2.34
Starting nmap V. 2.54BETA1 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Interesting ports on insecure.kisa.or.kr (172.16.2.34):
Port State Service
23/tcp open telnet
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds

이때 tcpdump를 이용하여 패킷을 모니터링 한 결과이다.

02:57:25.633885 truncated-tcp 16 (frag 19350:16@0+)
02:57:25.634375 linux80.kisa.or.kr > insecure.kisa.or.kr: (frag 19350:4@16)
02:57:25.635071 insecure.kisa.or.kr.telnet > linux80.kisa.or.kr.34326: S 1348389859:1348389859(0) ack 3078700240 win 32696 <mss 536> (DF)
02:57:25.639159 linux80.kisa.or.kr.34326 > insecure.kisa.or.kr.telnet: R 3078700240:3078700240(0) win 0

tcpdump의 결과로 TCP SYN 스캔 즉 half-open 스캔이 수행된 것을 알 수 있다. 그런데 첫 번째 fragment 사이즈는 16바이트로 아무런 옵션이 없을 경우의 TCP 헤더 사이즈인 20바이트보다 작은 것을 볼 수 있다. 그리고 나머지 TCP 헤더 4바이트는 두 번째 fragment에 있다. 일부 침입탐지시스템에서는 이러한 fragment된 스텔스 공격을 탐지 못하는 경우도 있다.

나. Fragment Overlap 공격

Tiny fragment 공격기법에 비해 좀더 정교한 공격이 fragment Overlap 공격이다.

공격자는 공격용 IP 패킷을 위해 두 개의 fragment를 생성한다. 첫 번째 fragment에서는 필킷 필터링 장비에서 허용하는 https(TCP 80) 포트와 같은 포트번호를 가진다. 그리고, 두 번째 fragment에서는 offset을 아주 작게 조작해서 fragment들이 재조합될 때 두 번째 fragment가 첫 번째 fragment의 일부분을 덮어쓰도록 한다. 일반적으로 공격자들은 첫 번째 fragment의 포트번호가 있는 부분까지 덮어씌운다.

IDS에서는 첫 번째 fragment는 허용된 포트번호이므로 통과시키고, 두 번째 fragment는 이전에 이미 허용된 fragment의 ID를 가진 fragment이므로 역시 통과시킨다.

이 두 개의 fragment가 목적지 서버에 도달하여 재조합되면 첫 번째 fragment의 포트번호는 두 번째 fragment의 포트번호로 overwrite되고 TCP/IP 스택은 이 패킷을 필터링 되어야할 포트의 응용프로그램에 전달한다.

Top

다. IP Fragmentation을 이용한 서비스거부공격

fragmentation은 패킷 필터링이나 IDS를 우회하는데 이용할 뿐만 아니라 서비스거부공격에도 이용될 수 있다. 이미 잘 알려진 Ping of Death 공격이나 Teardrop과 같은 것이 fragmentation을 이용한 서비스거부공격이라고 할 수 있다. 이러한 공격들은 이미 잘 알려져 있으며 많은 시스템에서 이미 패치가 되기도 하였지만 최근의 윈도우즈 시스템들도 아직 이 취약점을 여전히 가지고 있기도 한다.

(1) Ping of Death, Jolt

이 공격수법은 표준에 규정된 길이 이상으로 큰 IP 패킷을 전송함으로써 이 패킷을 수신받은 OS에서 이 비정상적인 패킷을 처리하지 못함으로써 서비스거부공격을 유발하도록 하는 방법이다.

RFC-791 "Internet Protocol"에 따르면 헤더를 포함한 IP 패킷의 최대길이는 65,535(즉, 2^16-1)까지로 제한되어 있다. 따라서 실제로 많은 시스템의 IP 패킷을 처리하는 코드들이 이같은 최대길이를 가정하여 구현되어 있다.

통상적으로 공격은 가장 손쉽게 IP 패킷으 전송할 수 있는 ping 프로그램을 이용하여 수행되는데, ping 프로그램은 실제 ICMP ECHO request 패킷을 상대방에게 전송한다. 통상적으로 IP 패킷의 헤더는 특별한 옵션을 사용하지 않았을 경우에 20바이트가 사용되며, ICMP ECHO request 패킷은 8바이트의 ICMP 헤더를 사용하므로 실제 데이터 길이의 최대값은 65535-20-8=65507바이트가 된다. 따라서 ping 패킷의 최대 길이를 제한하지 않는 시스템에서는 다음과 같은 간단한 명령으로 공격을 수행할 수 있다.

ping -l 65510 victim.host.ip.address

기존의 윈도우 NT 시스템 등에서는 이러한 명령이 허용되었지만 최근에는 비정상적으로 큰 ICMP 데이터를 발생시키지 못하도록 하고 있다. 하지만 jolt라는 공격툴을 이용해서 가능한 IP 데이터그램의 크기를 초과하는 패킷을 생성하여 전송하는 공격을 사용할 수 있다.

[root@insecure DoS]# ./jolt2

Usage: ./jolt2 [-s src_addr] [-p port] dest_addr

Note: UDP used if a port is specified, otherwise ICMP

[root@insecure DoS]# ./jolt2 -p 139 172.16.2.3

공격시 tcpdump를 이용하여 패킷을 캡쳐링하여 보면 다음과 같다.

20:04:51.188599 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.188850 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.189103 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.189358 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.189608 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.189864 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.190115 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.190367 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)
20:04:51.190620 insecure.kisa.or.kr > 172.16.2.3: (frag 1109:9@65520)

공격대상시스템인 172.16.2.1 호스트는 윈도우 NT 4.0 시스템인데 이 공격으로 인해 시스템이 정지됨을 확인할 수 있었다.


이 취약점은 여전히 윈도우 NT나 2000시스템에 대해 공격가능하며 보다 자세한 정보는 다음 문서들을 참고하기 바란다.


CERTCC-KR 권고문: KA-2000-032

MS 윈도 NT,2000의 IP Fragment Reassembly과정에서의 DoS 공격 취약점

https://www.certcc.or.kr/advisory/ka2000/ka2000-032.txt


Microsoft Security Bulletin (MS00-029)

Patch Available for "IP Fragment Reassembly" Vulnerability

https://www.microsoft.com/technet/security/bulletin/ms00-029.asp

Top

(2) Teardrop, bonk, New Teardrop

Teardrop 공격도 역시 fragment의 재조합 과정의 취약점을 이용한 서비스거부공격으로 두 번째 fragment의 offset을 조작하여 fragment들을 재조합하는 과정에서 버퍼를 넘쳐 겹쳐쓰게 한다. Teardrop 프로그램은 겹쳐쓰진 offset 필드를 가진 fragment를 만들어 목표 시스템에 보내며, fragment들을 재조합하는 목표 시스템이 정지되거나 재부팅되게 한다.

Teardrop 공격 도구를 이용하여 보자.

[root@unsecure DoS]# ./teardrop.linux --help
./teardrop.linux src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]
[root@unsecure DoS]# ./teardrop.linux 1.1.1.1 172.16.2.3 -t 139
[ Binary courtesy: https://www.rootshell.com/ ]
teardrop route|daemon9
Death on flaxen wings:
From: 1.1.1.1.46838
To: 172.16.2.3. 139
Amt: 1
[ b00m ]

이때 tcpdump를 이용하여 패킷을 모니터링한 내용이다.

23:29:18.503558 1.1.1.1.51331 > 172.16.2.3.139: udp 28 (frag 242:36@0+)
23:29:18.504693 1.1.1.1 > 172.16.2.3: (frag 242:4@24)

 

첫 번째 fragment의 사이즈가 36인데 두 번째 fragment의 offset이 24이므로 시스템은 36에서 24로 rewind되어야만 한다. 이 경우 TCP/IP 스택 코드의 일부에서 fp->len이 음수값으로 주어지며 이 값이 memcpy()함수에 의해 대단히 큰 양수로 해석되기 때문에 일부 운영체제는 다른 프로그램의 메모리영역까지 덮어써버리기도 한다.

Teardrop 공격과 유사한 공격으로 Bonk, New Teardrop과 같은 공격이 있다.


Top

4. fragrouter

Fragrouter는 네트워크 침입탐지시스템의 벤치마킹을 위해 개발된 도구로 Dug Song(한국인이며 한국이름은 송덕준이다.)이라는 이름으로 보안분야에서 잘 알려진 뛰어난 해커(선의의 의미)에 의해 개발되었다. Dug Song의 홈페이지(https://www.monkey.org/~dugsong)를 방문하면 fragrouter 이외에도 dsniffer와 같은 도구와 몇몇 훌륭한 문서들도 찾을 수 있다.

fragrouter는 단순히 일방향으로 fragmenting하는 라우터라고 할 수 있는데, 공격자로부터 IP 패킷들이 fragrouter에 전달되면 fragrouter에서는 이 패킷을 fragmented된 데이터 스트림으로 바꾸어서 목표시스템에 포워딩해 준다. fragrouter는 하나의 네트워크 인터페이스로 패킷을 받아서 이를 다양한 형태로 fragmentation한 후 동일 인터페이스 혹은 2개 이상의 네트워크 인터페이스로 각각 포워딩해 주는 역할을 하고 있다.

 


Fragrouter를 이용하여 공격시험을 하기 위해서는 다음의 3대의 장비를 사용하였다.

Attacker : 172.16.2.1
Fragrouter : 172.16.2.2
Victim : 172.16.4.80(linux80.kisa.or.k)

Top

단계 1 :

먼저 공격 시스템에서 목표시스템으로 가는 모든 패킷이 Fragrouter가 설치된 시스템을 거치도록 라우팅 테이블을 조정한다.

[Attacker]# route add -host 172.16.4.80 gw 172.16.2.2
[Attacker]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
172.16.4.80 172.16.2.2 255.255.255.255 UGH 0 0 0 eth0

...

단계 2 :

Fragrouter가 설치된 호스트에서 모든 패킷을 8바이트로 fragmentation하여 포워딩하도록 설정한다.

[fragrouter-1.6]# ./fragrouter -i eth0 -F1
fragrouter: frag-1: ordered 8-byte IP fragments

단계 3 :

공격 시스템에서 목표시스템으로 ping을 전송하여 본다.

[Attacker]# ping 172.16.4.80

이때 ping 패킷은 바로 목표시스템으로 전송되지 않고 fragrouter로 전송되어 8바이트로 fragment되어서 전송되는 것을 볼 수 있다.

[fragrouter-1.6]# ./fragrouter -F1

fragrouter: frag-1: ordered 8-byte IP fragments

172.16.2.1 > 172.16.4.80: icmp: type 8 code 0 (frag 34908:8@0+)
172.16.2.1 > 172.16.4.80: (frag 34908:8@8+)
172.16.2.1 > 172.16.4.80: (frag 34908:8@16+)
172.16.2.1 > 172.16.4.80: (frag 34908:8@24+)
172.16.2.1 > 172.16.4.80: (frag 34908:8@32+)
172.16.2.1 > 172.16.4.80: (frag 34908:8@40+)
172.16.2.1 > 172.16.4.80: (frag 34908:8@48+)
172.16.2.1 > 172.16.4.80: (frag 34908:8@56)

Top

단계 4 :

네트워크 모니터링 결과 목표시스템으로 전송되는 ping 패킷이 모두 8바이트로 fragmentation 되어 전송되고 있는 것을 볼 수 있다. 일반적인 ping 데이터 패킷은 56바이트로 fragmentation 없이 전송된다.

[root@linux80 hcjung]# tcpdump host 172.16.2.1

tcpdump: listening on eth0

14:10:37.538311 172.16.2.1 > linux80.kisa.or.kr: icmp: echo request (frag 34908:8@0+)
14:10:37.538599 172.16.2.1 > linux80.kisa.or.kr: (frag 34908:8@8+)
14:10:37.538642 172.16.2.1 > linux80.kisa.or.kr: (frag 34908:8@16+)
14:10:37.538724 172.16.2.1 > linux80.kisa.or.kr: (frag 34908:8@24+)
14:10:37.538790 172.16.2.1 > linux80.kisa.or.kr: (frag 34908:8@32+)
14:10:37.538859 172.16.2.1 > linux80.kisa.or.kr: (frag 34908:8@40+)
14:10:37.538943 172.16.2.1 > linux80.kisa.or.kr: (frag 34908:8@48+)
14:10:37.539023 172.16.2.1 > linux80.kisa.or.kr: (frag 34908:8@56)
14:10:37.539575 linux80.kisa.or.kr > 172.16.2.1: icmp: echo reply

위의 예에서는 ping 패킷을 전송하는 것을 보였지만 공격용 패킷도 마찬가지로 아주 작은 fragment로 나누어서 전송이 된다.

이처럼 fragrouter는 그 자체로써는 공격도구는 아니지만 다른 공격시 네트워크 침입탐지시스템에 발각되지 않고 공격을 가능하게 한다. 예를들어 웹서버에 phf 공격을 할때나 DNS 서버에 버퍼오버플로우 공격을 하거나 아니면 다른 종류의 공격을 할 때 fragrouter를 같이 사용하면 네트워크 침입탐지시스템으로부터 발각되는 것을 피할 수 있다.

Fragrouter에서 fragment할 수 있는 형태는 아래와 같이 다양하다.


Usage: fragrouter [-i interface] [-p] [-g hop] [-G hopcount] ATTACK

where ATTACK is one of the following:

- B1: base-1: normal IP forwarding
- F1: frag-1: ordered 8-byte IP fragments
- F2: frag-2: ordered 24-byte IP fragments
- F3: frag-3: ordered 8-byte IP fragments, one out of order
- F4: frag-4: ordered 8-byte IP fragments, one duplicate
- F5: frag-5: out of order 8-byte fragments, one duplicate
- F6: frag-6: ordered 8-byte fragments, marked last frag first
- F7: frag-7: ordered 16-byte fragments, fwd-overwriting
- T1: tcp-1: 3-whs, bad TCP checksum FIN/RST, ordered 1-byte segments
- T3: tcp-3: 3-whs, ordered 1-byte segments, one duplicate
- T4: tcp-4: 3-whs, ordered 1-byte segments, one overwriting
- T5: tcp-5: 3-whs, ordered 2-byte segments, fwd-overwriting
- T7: tcp-7: 3-whs, ordered 1-byte segments, interleaved null segments
- T8: tcp-8: 3-whs, ordered 1-byte segments, one out of order
- T9: tcp-9: 3-whs, out of order 1-byte segments
- C2: tcbc-2: 3-whs, ordered 1-byte segments, interleaved SYNs
- C3: tcbc-3: ordered 1-byte null segments, 3-whs, ordered 1-byte segments
- R1: tcbt-1: 3-whs, RST, 3-whs, ordered 1-byte segments
- I2: ins-2: 3-whs, ordered 1-byte segments, bad TCP checksums
- I3: ins-3: 3-whs, ordered 1-byte segments, no ACK set
- M1: misc-1: Windows NT 4 SP2 - https://www.dataprotect.com/ntfrag/
- M2: misc-2: Linux IP chains - https://www.dataprotect.com/ipchains/


Top

5. 결론

IP Fragmentation은 이기종의 네트워크 환경에서 IP 패킷의 효율적인 전송을 보장해주고 있지만 앞서 살펴본 것과 같이 몇가지의 보안문제를 가지고 있다. 많은 패킷 필터링 장비나 침입차단시스템, 침입탐지시스템, 그리고 각 운영체제의 IP 스택이 IP fragmentation 재조합을 적절히 처리하지 못하고 있다.

대표적인 IP Fragmentation을 이용한 공격이 Ping of Death, Jolt, teardrop과 같은 서비스거부공격이다. 이는 목적지 시스템이 비정상적인 fragment를 적절히 재조합하지 못함으로써 발생되어 시스템이 중지되거나 재부팅될 수 있다. 최근에는 운영체제에서는 IP Fragmentation을 이용한 서비스거부공격에 견딜 수 있도록 패치가 이미 된 경우가 많다.

하지만 서비스거부공격보다 최근에 더 문제가 되고 있는 것은 IP Fragmentation을 이용하여 침입차단시스템이나 침입탐지시스템을 우회할 수 있는 기술이다.

특히, Dug Song(송덕준 이라는 한국인)이 네트워크기반 침입탐지시스템 벤치마킹을 위해 개발한 fragrouter라는 툴은 모든 패킷을 다양한 형태의 fragment로 쪼개어서 전송함으로써 공격사실을 숨길 수 있다.

침입탐지시스템은 침입사실을 결정하기에 앞서 fragment된 패킷들을 재조합하여야만 IP Fragmentation을 이용한 우회공격의 탐지가 가능할 것이다. 하지만 네트워크 침입탐지시스템이 fragment된 패킷을 재조합하기 위해서는 메모리, 프로세스 등의 많은 시스템 자원을 필요로 하고 실시간 탐지가 어려워질 수 있는 문제가 발생될 수 있다. 호스트기반의 침입탐지시스템에서는 이미 재조합된 IP 데이터그램을 분석하므로 fragment 문제가 발생되지 않으므로 중요 서버에서는 호스트기반의 침입탐지시스템 운영도 고려해 볼 만하다.

 

6. 참고문헌

[1] Stephen Northcutt, Network Intrusion Detection An Analyst's Handbook, New Riders Publishing, 2000

[2] 한국정보보호센터, '98 해킹현황 및 대응, 한국정보보호센터, 1998

[3] Thomas H. Ptacek, Insertion, Evasion, and Denial of Service:Eluding Network Intrusion Detection, Secure Networks Inc, 1998

[4] Greg Hoglund and Jon Gary, Multiple Levels of De-synchronization and other concerns with testing an IDS system, 2000

[5] Dug Song, NIDSbench, https://www.anzen.com/research/nidsbench/, 1999

[6] Brad Sanford, IP Fragmentation and Fragrouter, https://www.sans.org/infosecFAQ/encryption/IP_frag.html, 2000

 

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
1284 기 타| 안전한 유닉스 프로그래밍을 위한 지침서 V.0.7 gooddew 5243 0 12-19
1283 서버 / IT| 시스템공격점검을 통한 보안 개선 방안 gooddew 5886 0 12-19
» 서버 / IT| IP Fragmentation을 이용한 공격기술들 gooddew 7282 0 12-19
1281 서버 / IT| 해킹과 보안 -4- gooddew 6208 0 12-19
1280 서버 / IT| 해킹과 보안 -3- gooddew 5857 0 12-19
1279 서버 / IT| 해킹과 보안 -2- gooddew 6074 0 12-19
1278 서버 / IT| 해킹과 보안 -1- [1] gooddew 6603 0 12-19
1277 서버 / IT| Abnormal IP Packets 기술 gooddew 7075 0 12-19
1276 서버 / IT| 네트워크 서버 관리자 메뉴얼 [2] gooddew 7091 0 12-19
1275 하드웨어| CMOS 를 이해하자 [2] gooddew 7177 0 12-19
1274 윈 도 우| 윈도우 XP 강좌 [2] gooddew 10121 0 12-19
1273 서버 / IT| 네트워크 이해 [3] gooddew 6240 0 12-19
1272 서버 / IT| WWW 강좌 gooddew 5596 0 12-19
1271 기 타| Unix 교재 gooddew 5283 0 12-19
1270 기 타| UNIX_WEB gooddew 5210 0 12-19
1269 기 타| UNIX_NETWORK gooddew 5056 0 12-19
1268 기 타| UNIX_DNS gooddew 5197 0 12-19
1267 기 타| solaris 메뉴얼 gooddew 5269 0 12-19
1266 기 타| sendmail gooddew 5020 0 12-19
1265 기 타| Qpopper 메뉴얼 gooddew 5689 0 12-19
XE1.11.6 Layout1.4.8