如何防止基於ICMP的網絡攻擊

如何防止基於ICMP的網絡攻擊


    許多網絡攻擊都基於ICMP協議。在下面這篇文章裏,我們將首先介紹ICMP協議,然後探究常見的基於ICMP的網絡攻擊,最後分析防火牆怎樣才能夠防止和減輕這種攻擊所造成的危害。

    如何防止基於ICMP的網絡攻擊

    ■作者:Nathan Ashelman

    ICMP(Internet控制消息協議, Internet Control Message Protocol)協議用來給IP協議提供控制服務,允許路由器或目標主機給數據的發送方提供反饋信息。需要發送反饋信息的情況包括:數據包不能被髮送到目標主機,路由器緩衝區溢出導致數據包被刪除,路由器想要把流量重定向到另外一個更短的路由上等。ICMP協議是IP協議的一部分,任何實現了IP協議的設備同時也被要求實現ICMP協議。

    ICMP協議的格式如圖1所示,ICMP協議頭位於IP數據包頭之後,使用類型和代碼來區分不同的控制消息。到現在爲止,人們已經定義了27種不同的ICMP類型。ICMP代碼用來區分不同的ICMP子類型,圖2列出了常用的ICMP類型。ICMP數據位於ICMP協議頭之後,不同的ICMP類型對應的數據的長度也不相同。通常ICMP數據包含原始數據包的信息、被報告的錯誤或者用來測試的數據。
圖1:ICMP包結構

IP Header (20 bytes)
Type (1 byte) Code (1 byte) Checksum (2 bytes)
Content varies depending on type (variable bytes)

圖2:常用的ICMP消息類型
類型 描述 用途
0 Echo reply 用來回答類型8,把數據原封不動的回顯給發送方
3 Destination unreachable 數據包不能被進一步發送
4 Source quench 用來指示發送方降低數據傳送率
5 Redirect 用於改變缺省路由
8 Echo request 被PING命令使用,用來測試網絡的連通性
9 Router announcement 通知主機位於本地子網上的路由器
10 Router solicitation 請求路由器發送Routers announcement
11 TTL exceeded 數據包不能被髮送,因爲TTL值無效
12 Parameter problem 數據包被刪除,因爲IP頭信息不正確

    ICMP類型屬於PING命令,可以測試網絡的連通性。一個ICMP Echo Request可以包含64K的數據,它被髮送後,接收方會返回一個ICMP Echo Reply,返回的數據中包含了接收到的數據的拷貝。

    常見的ICMP攻擊

    基於ICMP的攻擊可以分爲三類,並且都可以歸類爲拒絕服務攻擊(DoS, Denial of Service):針對帶寬的DoS攻擊,利用無用的數據來耗盡網絡帶寬;針對主機的DoS攻擊,攻擊操作系統的漏洞;針對連接的DoS攻擊,可以終止現有的網絡連接。

    Pingflood、pong、echok、flushot、fraggle 和 bloop是常用的ICMP攻擊工具。通過高速發送大量的ICMP Echo Reply數據包,目標網絡的帶寬瞬間就會被耗盡,阻止合法的數據通過網絡。ICMP Echo Reply數據包具有較高的優先級,在一般情況下,網絡總是允許內部主機使用PING命令。這種攻擊僅限於攻擊網絡帶寬,單個攻擊者就能發起這種攻擊。更厲害的攻擊形式,如smurf和papa-smurf,可以使整個子網內的主機對目標主機進行攻擊,從而擴大ICMP流量。使用適當的路由過濾規則可以部分防止此類攻擊,如果完全防止這種攻擊,就需要使用基於狀態檢測的防火牆。

    “Ping of Death”及其相關的攻擊利用主機操作系統的漏洞直接對目標主機發起攻擊。通過發送一個非法的ICMP Echo Request數據包,就可以使目標系統崩潰或重啓。許多系統包括Windows、Unix、Macintosh ,甚至還有一些路由器和打印機,都容易遭受此類攻擊。如果用戶使用的操作系統的版本過於陳舊,請確保是否打好了補丁。這類攻擊包括pinger、pingexploit、jolt、 jolt2、Sping、Ssping、IceNewk和 ICMPbug。一個能執行詳細數據包完整性檢測的防火牆可以防止所有這種類型的攻擊。

    針對網絡連接的DoS攻擊會影響所有的IP設備,因爲它使用了合法的ICMP消息。Nuke通過發送一個僞造的ICMP Destination Unreachable或Redirect消息來終止合法的網絡連接。更具惡意的攻擊,如puke和smack,會給某一個範圍內的端口發送大量的數據包,毀掉大量的網絡連接,同時還會消耗受害主機CPU的時鐘週期。還有一些攻擊使用ICMP Source Quench消息,導致網絡流量變慢,甚至停止。Redirect和Router Announcement消息被利用來強制受害主機使用一個並不存在的路由器,或者把數據包路由到攻擊者的機器,進行攻擊。針對連接的DoS攻擊不能通過打補丁的方式加以解決。通過過濾適當的ICMP消息類型,防火牆可以阻止此類攻擊。

    選擇合適的防火牆

    有效防止ICMP攻擊,防火牆應該具有狀態檢測、細緻的數據包完整性檢查和很好的過濾規則控制功能。

    狀態檢測防火牆通過跟蹤它的連接狀態,動態允許外出數據包的響應信息進入防火牆所保護的網絡。例如,狀態檢測防火牆可以記錄一個出去的PING(ICMP Echo Request),在接下來的一個確定的時間段內,允許目標主機響應的ICMP Echo Reply直接發送給前面發出了PING命令的IP,除此之外的其他ICMP Echo Reply消息都會被防火牆阻止。與此形成對比的是,包過濾類型的防火牆允許所有的ICMP Echo Reply消息進入防火牆所保護的網絡了。許多路由器和基於Linux內核2.2或以前版本的防火牆系統,都屬於包過濾型,用戶應該避免選擇這些系統。

    新的攻擊不斷出現,防火牆僅僅能夠防止已知攻擊是遠遠不夠的。通過對所有數據包進行細緻分析,刪除非法的數據包,防火牆可以防止已知和未知的DoS攻擊。這就要求防火牆能夠進行數據包一致性檢查。安全策略需要針對ICMP進行細緻的控制。因此防火牆應該允許對ICMP類型、代碼和包大小進行過濾,並且能夠控制連接時間和ICMP包的生成速率。

    配置防火牆以預防攻擊

    一旦選擇了合適的防火牆,用戶應該配置一個合理的安全策略。以下是被普遍認可的防火牆安全配置慣例,可供管理員在系統安全性和易用性之間作出權衡。

    防火牆應該強制執行一個缺省的拒絕策略。除了出站的ICMP Echo Request、出站的ICMP Source Quench、進站的TTL Exceeded和進站的ICMP Destination Unreachable之外,所有的ICMP消息類型都應該被阻止。下面是針對每個ICMP消息類型的過濾規則的詳細分析。

    Echo Request和Reply(類型8和0):允許Echo Request消息出站以便於內部用戶能夠PING一個遠程主機。阻止入站Echo Request和出站Echo Reply可以防止外部網絡的主機對內部網絡進行掃描。如果您使用了位於外部網絡的監視器來監視內部網絡,就應該只允許來自於特定外部IP的Echo Request進入您的網絡。限制ICMP Echo包的大小可以防止“Ping Floods”攻擊,並且可以阻止那些利用Echo Request和Reply來“偷運”數據通過防火牆的木馬程序。

    Destination unreachable (類型3): 允許其入站以便於內部網用戶可以使用traceroute。需要注意的是,有些攻擊者可以使用它來進行鍼對會話的DoS攻擊,如果您曾經歷過類似的攻擊,也可以阻止它。阻止出站的ICMP Destination unreachable消息,因爲它可能會泄漏內部網絡的結構。不過有一個例外,對於那些允許外部網絡通過TCP訪問的內部主機(如位於DMZ區的Web服務器)發出的Destination unreachable,則應該允許它通過。爲了能夠支持“Path MTU Discovery”,您應該允許出站的“Packet Too Big”消息(類型3,代碼4)到達那些主機。

    Source quench(類型4):阻止其入站,因爲它可以作爲一種DoS攻擊,能夠降低發送者的發送速度。允許其出站以便於內部主機能夠控制發送端發送數據的速度。有些防火牆會忽略所有直接發送到防火牆端口的Source Quench消息,以防止針對於防火牆的DoS攻擊。

    Redirect、Router announcement、 Router selection(類型5,9,10):這些消息都存在潛在危險,因爲它們可以用來把數據重定向到攻擊者的機器。這些消息都應該被阻止。

    TTL exceeded(類型11):允許其進站以便於內部用戶可以使用traceroute。“firewalking”使用很低的TTL值來對網絡進行掃描,甚至可以通過防火牆對內網進行掃描,所以應該禁止其出站。一些防火牆可以阻止TTL值小於設定值的數據包進入防火牆。

    Parameter problem(類型12):禁止其入站和出站。通過使用一個能夠進行數據包一致性檢查的防火牆,錯誤和惡意的數據包都會被阻塞。(翻譯:高武)

發佈了23 篇原創文章 · 獲贊 2 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章