• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 常見IP碎片攻擊詳解

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    常見IP碎片攻擊詳解 --------------------------------------------------------------------------- 本文簡單介紹了IP分片原理,并結合Snort抓包結果詳細分析常見IP碎片攻擊的原理和特 征,最后對阻止IP碎片攻擊給出一些建議。希望對加深理解IP 協議 和一些

    常見IP碎片攻擊詳解
    ---------------------------------------------------------------------------
    本文簡單介紹了IP分片原理,并結合Snort抓包結果詳細分析常見IP碎片攻擊的原理和特
    征,最后對阻止IP碎片攻擊給出一些建議。希望對加深理解IP協議和一些DoS攻擊手段有
    所幫助。
    1.為什么存在IP碎片
    -=-=-=-=-=-=-=-=-=-=-=
    鏈路層具有最大傳輸單元MTU這個特性,它限制了數據幀的最大長度,不同的網絡類型都
    有一個上限值。以太網的MTU是1500,你可以.netstat-i命令查看這個值。如果IP層
    有數據包要傳,而且數據包的長度超過了MTU,那么IP層就要對數據包進行分片(fragm
    entation)操作,使每一片的長度都小于或等于MTU。我們假設要傳輸一個UDP數據包,
    以太網的MTU為1500字節,一般IP首部為20字節,UDP首部為8字節,數據的凈荷(paylo
    ad)部分預留是1500-20-8=1472字節。如果數據部分大于1472字節,就會出現分片現象
    。
    IP首部包含了分片和重組所需的信息:
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |Identification|R|DF|MF|FragmentOffset|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |<-------------16-------------->|<--3-->|<---------13---------->|
    Identification:發送端發送的IP數據包標識字段都是一個唯一值,該值在分片時被復
    制到每個片中。
    R:保留未用。
    DF:Don tFragment,“不分片”位,如果將這一比特置1,IP層將不對數據報進行分
    片。
    MF:MoreFragment,“更多的片”,除了最后一片外,其他每個組成數據報的片都要把
    該比特置1。
    FragmentOffset:該片偏移原始數據包開始處的位置。偏移的字節數是該值乘以8。
    另外,當數據報被分片后,每個片的總長度值要改為該片的長度值。
    每一IP分片都各自路由,到達目的主機后在IP層重組,請放心,首部中的數據能夠正確
    完成分片的重組。你不禁要問,既然分片可以被重組,那么所謂的碎片攻擊是如何產生
    的呢?
    2.IP碎片攻擊
    -=-=-=-=-=-=-=-=-=-=-=
    IP首部有兩個字節表示整個IP數據包的長度,所以IP數據包最長只能為0xFFFF,就是65
    535字節。如果有意發送總長度超過65535的IP碎片,一些老的系統內核在處理的時候就
    會出現問題,導致崩潰或者拒絕服務。另外,如果分片之間偏移量經過精心構造,一些
    系統就無法處理,導致死機。所以說,漏洞的起因是出在重組算法上。下面我們逐個分
    析一些著名的碎片攻擊程序,來了解如何人為制造IP碎片來攻擊系統。
    3.pingo death
    -=-=-=-=-=-=-=-=-=-=-=
    pingo death是利用ICMP協議的一種碎片攻擊。攻擊者發送一個長度超過65535的Echo
    Request數據包,目標主機在重組分片的時候會造成事先分配的65535字節緩沖區溢出,
    系統通常會崩潰或掛起。ping不就是發送ICMPEchoRequest數據包的嗎?讓我們嘗試攻
    擊一下吧!不管IP和ICMP首部長度了,數據長度反正是多多益善,就65535吧,發送一個
    包:
    #ping-c1-s65535192.168.0.1
    Error:packetsize65535istoolarge.Maximumis65507
    不走運,看來Linux自帶的ping不允許我們做壞事。:(
    65507是它計算好的:65535-20-8=65507。Win2K下的ping更摳門,數據只允許65500大小
    。所以你必須找另外的程序來發包,但是目前新版本的操作系統已經搞定這個缺陷了,
    所以你還是繼續往下閱讀本文吧。
    順便提一下,記得99年有“愛國主義黑客”(“紅客”的前輩)發動全國網民在某一時
    刻開始ping某美國站點,試圖ping死遠程服務器。這其實是一種pingflood攻擊,用大
    量的EchoRequest包減慢主機的響應速度和阻塞目標網絡,原理和pingo death是不一
    樣的,這點要分清楚。
    4.jolt2
    -=-=-=-=-=-=-=-=-=-=-=
    jolt2.c是在一個死循環中不停的發送一個ICMP/UDP的IP碎片,可以使Windows系統的機
    器死鎖。我測試了沒打SP的Windows2000,CPU利用率會立即上升到100%,鼠標無法移動
    。
    我們用Snort分別抓取采用ICMP和UDP協議發送的數據包。
    發送的ICMP包:
    01/07-15:33:26.974096192.168.0.9->192.168.0.1
    ICMPTTL:255TOS:0x0ID:1109IpLen:20DgmLen:29
    FragOffset:0x1FFEFragSize:0x9
    080000000000000000.........
    發送的UDP包:
    01/10-14:21:00.298282192.168.0.9->192.168.0.1
    UDPTTL:255TOS:0x0ID:1109IpLen:20DgmLen:29
    FragOffset:0x1FFEFragSize:0x9
    04D304D20009000061........a
    從上面的結果可以看出:
    *分片標志位MF=0,說明是最后一個分片。
    *偏移量為0x1FFE,計算重組后的長度為(0x1FFE*8)+29=65549>65535,溢出
    。
    *IP包的ID為1109,可以作為IDS檢測的一個特征。
    *ICMP包:
    類型為8、代碼為0,是EchoRequest;
    校驗和為0x0000,程序沒有計算校驗,所以確切的說這個ICMP包是非法的。
    *UDP包:
    目的端口由用戶在命令參數中指定;
    源端口是目的端口和1235進行OR的結果;
    校驗和為0x0000,和ICMP的一樣,沒有計算,非法的UDP。
    凈荷部分只有一個字符 a 。
    jolt2.c應該可以偽造源IP地址,但是源程序中并沒有把用戶試圖偽裝的IP地址賦值給s
    rc_addr,不知道作者是不是故意的。
    jolt2的影響相當大,通過不停的發送這個偏移量很大的數據包,不僅死鎖未打補丁的W
    indows系統,同時也大大增加了網絡流量。曾經有人利用jolt2模擬網絡流量,測試IDS
    在高負載流量下的攻擊檢測效率,就是利用這個特性。
    5.teardrop
    -=-=-=-=-=-=-=-=-=-=-=
    teardrop也比較簡單,默認發送兩個UDP數據包,就能使某些Linux內核崩潰。Snort抓取
    的結果如下:
    第一個:
    01/08-11:42:21.985853192.168.0.9->192.168.0.1
    UDPTTL:64TOS:0x0ID:242IpLen:20DgmLen:56MF
    FragOffset:0x0FragSize:0x24
    A0A886C7002400000000000000000000.....$..........
    00000000000000000000000000000000................
    00000000....
    *MF=1,偏移量=0,分片IP包的第一個。
    *結構圖:
    |<-------20-------->|<------8------>|<---------------28---------------->|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |IP|UDP|Data|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    第二個:
    01/08-11:42:21.985853192.168.0.9->192.168.0.1
    UDPTTL:64TOS:0x0ID:242IpLen:20DgmLen:24
    FragOffset:0x3FragSize:0x4
    A0A886C7....
    *MF=0,偏移量=0x3,偏移字節數為0x3*8=24,最后一個分片。
    *結構圖:
    |<-------20-------->|<--4-->|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |IP|Data|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    如果修改源代碼,第二片IP包的偏移量也可以為0x4,偏移字節數就是0x4*8=32。

    下面的結構圖表示了接收端重組分片的過程,分別對應于偏移字節數為24和32兩種情況

    |<-------20-------->|<------8------>|<---------------28---------------->|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |IP|UDP|Data|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |
    |+-+-+-+-+
    |<-------------24------------->|Data|
    |+-+-+-+-+
    |<--4-->|
    |
    |+-+-+-+-+
    |<-------------------32------------------>|Data|
    |+-+-+-+-+
    |<--4-->|
    可以看出,第二片IP包的偏移量小于第一片結束的位移,而且算上第二片IP包的Data,
    也未超過第一片的尾部,這就是重疊現象(overlap)。老的Linux內核(1.x-2.0.x)
    在處理這種重疊分片的時候存在問題,WinNT/95在接收到10至50個teardrop分片時也會
    崩潰。你可以閱讀teardrop.c的源代碼來了解如何構造并發送這種數據包。
    6.如何阻止IP碎片攻擊
    -=-=-=-=-=-=-=-=-=-=-=
    *Windows系統請打上最新的ServicePack,目前的Linux內核已經不受影響。
    *如果可能,在網絡邊界上禁止碎片包通過,或者用iptables限制每秒通過碎片包的數
    目。
    *如果防火墻有重組碎片的功能,請確保自身的算法沒有問題,否則被DoS就會影響整個
    網絡。
    *Win2K系統中,自定義IP安全策略,設置“碎片檢查”。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>