IP 플래그멘테이션 공격

IP fragmentation attack

IP 플래그멘테이션 공격은 Internet Protocol(IP)에 의한 데이터 전송 및 처리 방법에 근거한 일종의 컴퓨터 보안 공격입니다.구체적으로는 IP 플래그멘테이션을 호출합니다.IP 플래그멘테이션은 네트워크의 한 레이어에서 하위 레이어의 Protocol Data Unit(PDU; 프로토콜 데이터 유닛) 내에 들어갈 수 있는 여러 개의 작은 페이로드로 메시지(SDU; 서비스 데이터 유닛)를 분할하는 프로세스입니다.모든 네트워크 링크에는 Maximum Transmission Unit(MTU; 최대 전송 유닛)이라고 불리는 전송 가능한 메시지의 최대 크기가 있습니다.링크 레이어에 추가된SDU + 메타데이터가 MTU를 초과할 경우 SDU를 fragment화해야 합니다.IP 플래그멘테이션 공격은 이 프로세스를 공격 벡터로 이용합니다.

TCP/IP 스위트의 일부는 이 모델의 인터넷 계층에 있는 Internet Protocol(IP)입니다.IP 는, 네트워크 엔드 포인트간의 패킷의 송신을 담당합니다.IP에는 내장해성(존속 가능 시간, 체크섬), 트래픽의 priority 설정(서비스 타입) 및 큰 패킷의 복수의 작은 패킷으로의 플래그멘테이션(ID 필드, fragment 오프셋)의 기본적인 측정치를 제공하는 기능이 포함되어 있습니다.큰 패킷의 fragment화를 서포트하는 것으로, 원래의 패킷이 서포트되고 있는 데이터 링크프레임에 비해 너무 큰 경우, 라우터가 패킷을 작은 패킷으로 fragment화할 수 있는 프로토콜을 얻을 수 있습니다.IP 플래그멘테이션의 악용(공격)은 IP 내의 플래그멘테이션프로토콜을 공격 벡터로 사용합니다.

[Kurose 2013]에 따르면 IP 플래그멘테이션 공격의 한 가지 유형에서는 공격자가 타겟호스트에 작은 fragment의 스트림을 송신합니다.그 중 오프셋이0 인 것은 없습니다.타깃이 저하된 [1]패킷에서 데이터 그램을 재구축하려고 할 때 붕괴될 수 있습니다.또 다른 공격으로는 얼라인먼트되지 않은 오프셋을 사용하여 겹치는 fragment를 송신하는 경우가 있습니다.이것에 의해, 취약한 operating system은 어떻게 할지를 모르는 상태가 되어, 몇개의 fragment가 [1]크래쉬 하는 일이 있습니다.

과정

IPv4 의 플래그멘테이션알고리즘

IP 패킷은 데이터링크프레임으로 캡슐화되기 때문에 링크 MTU는 큰 IP 패킷에 영향을 미쳐 MTU 사이즈 이하의 조각으로 분할됩니다.

이것은, 다음의 몇개의 어프로치에 의해서 실현됩니다.

  • IP 패킷 사이즈를 직접 접속된 미디어와 같거나 작게 설정하고 패킷의 모든 fragment화를 라우터에 위임합니다.즉, 라우터는 현재의 패킷을 다시 fragment화할 필요가 있는지 여부를 결정합니다.이것에 의해, 많은 작업이 라우터에 오프로드 되어, 패킷이 복수의 IP 라우터에 의해서 차례차례 세그먼트화 되어, 매우 특이한 플래그멘테이션이 발생하는 일이 있습니다.
  • 송신원과 행선지 사이의 모든 링크를 미리 보고, 일의의 루트가 있는 것을 전제로 하고, 이 루트에서 가장 작은 MTU 를 선택합니다.이것에 의해, 선택한 MTU 보다 작은 패킷 사이즈를 사용해 송신측이 플래그멘테이션을 실시해, 그 이상의 플래그멘테이션을 송신하지 않게 합니다.패스 MTU 디스커버리라고 불리는 이 솔루션을 사용하면, 송신자는 IP 레벨의 플래그멘테이션을 실행하는 라우터에 의존하지 않고, 장시간인터넷 패킷을 fragment화/세그먼트 할 수 있습니다.이것은 보다 효율적이고 확장성이 뛰어납니다.따라서 현재 인터넷에서 권장되는 방법입니다.이 접근법의 문제는 각 패킷이 독립적으로 라우팅된다는 것입니다.일반적으로 같은 루트를 따를 가능성이 있지만 그렇지 않을 수 있습니다.따라서 플래그멘테이션을 판별하기 위한 프로브 패킷은 이후의 패킷이 통과하는 경로와는 다른 경로를 따를 수 있습니다.

IP 헤더의 3개의 필드는 플래그멘테이션과 재구성을 구현하기 위해 사용됩니다."식별", "플래그" 및 "조각 오프셋" 필드.

IPv4 헤더 포맷
오프셋 옥텟 0 1 2 3
옥텟 조금 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 버전 IHL DSCP ECN 총 길이
4 32 신분증 플래그 프래그먼트 오프셋
8 64 존속 가능 시간 프로토콜 헤더 체크섬
12 96 송신원 IP 주소
16 128 수신처 IP 주소
20 160 옵션(IHL > 5인 경우)
24 192
28 224
32 256

플래그:

패킷이 fragment화된 데이터 프레임의 일부인지 여부를 나타내는3비트 필드
비트 0: 예약 완료, 0이어야 합니다(패킷이 RFC 3514에 준거하지 않는 한).
비트 1: (AF) 0 = May Fragment, 1 = Don't Fragment.
비트 2: (AF) 0 = 마지막 프래그먼트, 1 = 더 많은 프래그먼트.
조금 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
들판 0 DF MF 프래그먼트 오프셋

Fragment Offset은 원래 패킷 내의 fragment 위치를 8바이트 단위로 지정합니다.

따라서 마지막 fragment를 제외한 모든 fragment에는 8바이트의 배수의 데이터가 포함되어 있어야 합니다.fragment offset은 8192(2^13) 유닛을 유지할 수 있지만 IP 헤더의 "Total Length" 필드가 헤더와 데이터를 포함한 총 크기를 기록하기 때문에 패킷은 8192 * 8 = 65,536 바이트의 데이터를 가질 수 없습니다.IP 헤더의 길이는 최소 20바이트이므로 "Fragment Offset"의 최대값은 8189로 제한됩니다.이것에 의해, 마지막 fragment에 3바이트의 여유가 남습니다.

IP 인터넷은 무접속일 수 있기 때문에, 1 개의 패킷으로부터의 fragment가 행선지에서 다른 패킷으로부터의 fragment와 인터리브 되는 일이 있습니다.ID 필드에서는 특정 패킷의 fragment를 일의로 식별합니다.ragment를 일의로 식별합니다.

송신원시스템은, 각 패킷의 「Identification」필드를, 같은 송신원IP 주소, 행선지IP 주소, 및 「Protocol」값을 사용하는 모든 패킷에 대해서, 인터넷상의 패킷의 라이프 타임에 대해서 일의의 값으로 설정합니다.이것에 의해, 수신처는, 어느 착신 fragment가 일의의 패킷에 속하는지를 판별해, 마지막 fragment가 수신될 때까지 모두 버퍼링 할 수 있습니다.마지막 fragment는 "More fragment" 비트를 0으로 설정하고 모든 fragment가 수신된 경우 수신 스테이션에 데이터 재조립을 시작하도록 지시합니다.

다음으로 실제 플래그멘테이션의 예를 나타냅니다.

다음Ethereal 프로토콜아나라이저를 사용하여 ICMP 에코 요구 패킷을 캡처한 것입니다.이를 시뮬레이트하려면 단말기를 열고 ping ip_dest -n 1 -l 65000을 입력합니다.

결과는 다음과 같습니다.

      아니요.Time Source Destination Protocol Info 1 0.0000 87.247.96 66.94.234.13 ICMP 에코(ping) 요청 2 0.000000 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pigmented =)ICMP 0x01, off=1480) 3 0.0029 87.247.139.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=2960) 4 6.111328 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=4440) 5 6.123046 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP protocol) (paramented =ICMP 0x01, off=5920) 6 6.130859 87.247.194.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP protocol) (paramented =ICMP 0x01, off=7400) 7 6.170898 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=8880) 8 6.214843 87.247.139.96 66.94.234.13 IP 조각화 IP 프로토콜(fragmented IP protocol)(fragmented IP 프로토콜)ICMP 0x01, off=parget60) 9 6.239257 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented =ICMP 0x01, off=parget40) 10 6.287109 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented IP protocol)ICMP 0x01, off=parget20) 11 6.302734 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented IP protocol)ICMP 0x01, off=14800) 12 6.327148 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=parget80) 13 6.371093 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented =ICMP 0x01, off=parget60) 14 6.395507 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented =ICMP 0x01, off=19240) 15 6.434570 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=20720) 16 6.455078 87.247.16.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented =ICMP 0x01, off=22200) 17 6.531250 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=23680) 18 6.550781 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=25160) 19 6.575195 87.247.16.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP protocol) (paramented =ICMP 0x01, off=26640) 20 6.615234 87.247.16.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=28120) 21 6.6334765 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=29600) 22 6.659179 87.247.16 66.94.234.13 IP 조각화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=parget80) 23 6.682617 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented =ICMP 0x01, off=http60) 24 6.699218 87.247.18.96 66.94.234.13 IP 단편화 IP 프로토콜(http=ICMP 0x01, off=parget40) 25 6.743164 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(pargmented IP protocol)ICMP 0x01, off=35520) 26 6.766601 87.247.16.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=37000) 27 6.783203 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=38480) 28 6.806640 87.247.16.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=39960) 29 6.831054 87.247.16 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=41440) 30 6.850586 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=42920) 31 6.899414 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=44400) 32 6.915039 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=45880) 33 6.939453 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=47360) 34 6.958984 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=48840) 35 6.983398 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=50320) 36 7.023437 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=51800) 37 7.046875 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=53280) 38 7.067382 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=54760) 39 7.090820 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=56240) 40 7.130859 87.247.16.66 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=57720) 41 7.151367 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=59200) 42 7.16804 87.247.16 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=60680) 43 7.19218 87.247.16.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=62160) 44 7.214843 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=63640) 45 7.258789 87.247.16.96 66.94.234.13 IP 단편화 IP 프로토콜(fragmented IP 프로토콜)ICMP 0x01, off=65120) 첫 번째 패킷 상세: 아니요.Time Source Destination Protocol Info 1 0.000000 87.247.163.96 66.94.234.13 ICMP 에코(ping) 요구 Ethernet II, Src: OmronTat_00:00:00:00:00:00 (00:00:0a:00:00)(87.247.163.96), Dst: 66.94.234.13 (66.94.234.13) Internet Control Message Protocol Type: 8 (Echo (ping) request)코드: 0 체크섬: 0x6b7d 식별자: 0x0600 시퀀스 번호: 0x0200 데이터(1472바이트)두 번째 패킷 상세: 아니요.Time Source Destination Protocol Info 2 0.000000 87.247.96 66.94.234.13 IP 단편화 IP 프로토콜(fragment화 IP 프로토콜)ICMP 0x01, off=1480) 프레임2(와이어 1514바이트, 캡처 1514바이트) Ethernet II, Src: OmronTat_00:00:00:00:00:00:00(00:00:00:00, Dst: 40:0f:20:00:00, 0c:00) 인터넷 프로토콜

첫 번째 프래그먼트만이 ICMP 헤더를 포함하고 나머지 모든 fragment는 ICMP 헤더 없이 생성됩니다.

여기서 두 가지 중요한 점이 있습니다.

  • 이더넷 등의 일부 데이터링크프로토콜에서는 첫 번째 fragment에만 완전한 상위 레이어헤더가 포함되어 있습니다.즉, 다른 fragment는 잘린 패킷처럼 보입니다.
  • 모든 fragment에 고유의 IP 헤더가 포함되어 있기 때문에 네트워크를 통해 추가 오버헤드가 발생합니다.추가 오버헤드 = (number_of_module - 1) * (ip_module_len);

악용

IP fragment가 중복되다
IP fragment의 중복 부정 이용은, 같은 IP 패킷내에 포함되는 2개의 fragment가, 패킷내의 위치 결정시에 서로 오버랩 하는 것을 나타내는 오프셋을 가지는 경우에 발생합니다.이는 fragment A가 fragment B에 의해 완전히 덮어쓰기되거나 fragment A가 fragment B에 의해 부분적으로 덮어쓰기됨을 의미합니다.일부 운영체제는 이러한 방식으로 중복되는 fragment를 적절하게 처리하지 않으며 중복되는 fragment를 수신하면 예외를 발생시키거나 다른 바람직하지 않은 방법으로 동작할 수 있습니다.이것이 눈물방울 공격의 기초입니다.중복되는 fragment는 Intrusion Detection Systems를 바이패스하기 위해서도 사용할 수 있습니다.이 부정 이용에서는 공격의 일부가 추가 랜덤 데이터와 함께 fragment로 송신됩니다.향후 fragment는 나머지 공격과 함께 랜덤 데이터를 덮어쓸 수 있습니다.완료된 패킷이 IDS에서 올바르게 재구성되지 않으면 공격은 검출되지 않습니다.
IP 플래그멘테이션버퍼가 가득 찼습니다.
IP 플래그멘테이션버퍼 풀 부정 이용은 보호된 네트워크에서 검출된 불완전한 fragment화 트래픽이 너무 많을 때 발생합니다.이는 불완전한 fragment화 패킷의 수가 너무 많거나 개별 패킷의 fragment 수가 많거나 각 패킷의 불완전한 패킷의 양과 fragment의 크기/수의 조합이 원인일 수 있습니다.이러한 유형의 트래픽은 공격 액티비티의 의도적인 단편화에 의해 보안 대책 또는 침입 탐지 시스템을 우회하려는 시도일 가능성이 높습니다.
IP 프래그먼트오버런
IP 프래그먼트오버의 부정 이용은 재구성된 fragment화 패킷이 선언된IP 데이터 길이 또는 최대 패킷 길이를 초과했을 때입니다.정의상 IP 패킷은 65,535 바이트보다 클 수 없습니다.이러한 큰 패킷을 처리하려고 하는 시스템은 크래시 할 수 있으며 서비스 거부 시도를 나타낼 수 있습니다.
IP fragment가 너무 많은 패킷
「Too Many Packets」의 부정 이용은, 네트워크상에서 검출된 불완전한 fragment화 패킷의 수가 너무 많아 특정됩니다.이는 보통 서비스 거부 공격 또는 보안 대책 바이패스 시도 중 하나입니다."Too Many Packets", "Incomplete Packet" 및 "Fragment Too Small"의 예로는 Rose [2]Attack이 있습니다.
IP fragment의 불완전한 패킷
이 부정 이용은 데이터 누락으로 인해 패킷을 완전히 재구성할 수 없는 경우에 발생합니다.이는 서비스 거부 공격 또는 패킷필터 보안 정책을 무효화하려는 시도를 나타낼 수 있습니다.
IP fragment가 너무 작다
IP fragment가 너무 작을 경우 fragment가 의도적으로 조작되었음을 나타냅니다.최종 fragment 이외의 fragment가 400바이트 미만일 경우 너무 작은 것으로 간주될 수 있습니다.작은 fragment는 Denial of Service 공격이나 보안 대책이나 검출을 우회하기 위해 사용할 수 있습니다.

회피용 플래그멘테이션

라우터, 로드밸런서, 방화벽, IDS 의 네트워크인프라스트럭처 기기에서는 단편화된 패킷에 대한 가시성이 일관되지 않습니다.예를 들어, 디바이스는 첫 번째 fragment를 엄격한 검사 및 감사 대상으로 할 수 있지만 추가 fragment는 모두 체크되지 않은 상태로 통과할 수 있습니다.일부 공격은 이 사실을 사용하여 유죄를 나타내는 페이로드 데이터를 fragment에 배치함으로써 검출을 회피할 수 있습니다.「풀」프록시 모드로 동작하는 디바이스는, 통상, 이 서브 퍼지의 영향을 받지 않습니다.

레퍼런스

  1. ^ a b Kurose, James F. (2013). Computer Networking: A Top-down Approach. Ross, Keith W., 1956- (6th ed.). Boston: Pearson. p. 338. ISBN 9780132856201. OCLC 769141382.
  2. ^ Hollis, Ken. "The Rose Fragmentation Attack Explained". Archived from the original on 2012-02-24. Retrieved 2013-11-25.

외부 링크