{
\"code\": 200,
\"title\": \"\",
\"content\": \"ICMP\\n\\nICMP是(InternetControlMessageProtocol)Internet控製報文協議。它是TCP\\/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控製訊息。控製訊息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的訊息。這些控製訊息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起著重要的作用。\\n\\nICMP協議是一種麵向無連接的協議,用於傳輸出錯報告控製資訊。它是一個非常重要的協議,它對於網絡安全具有極其重要的意義。\\n\\n它是TCP\\/IP協議族的一個子協議,屬於網絡層協議,主要用於在主機與路由器之間傳遞控製資訊,包括報告錯誤、交換受限控製和狀態資訊等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP訊息。\\n\\nICMP原理\\n\\nICMP原理ICMP提供一致易懂的出錯報告資訊。發送的出錯報文返回到發送原數據的設備,因為隻有發送設備纔是出錯報文的邏輯接受者。發送設備隨後可根據ICMP報文確定發生錯誤的類型,並確定如何才能更好地重發失敗的數據包。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務由發送方完成。\\n\\n我們在網絡中經常會使用到ICMP協議,比如我們經常使用的用於檢查網絡通不通的Ping命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協議工作的過程。還有其他的網絡命令如跟蹤路由的Tracert命令也是基於ICMP協議的。\\n\\nICMP協議內容\\n\\nICMP的全稱是InternetControlMessageProtocol。從技術角度來說,ICMP就是一個“錯誤偵測與回報機製”,其目的就是讓我們能夠檢測網路的連線狀況﹐也能確保連線的準確性﹐其功能主要有:·偵測遠端主機是否存在。\\n\\n·建立及維護路由資料。\\n\\n·重導資料傳送路徑。\\n\\nICMP常用類型\\n\\nICMP常用類型\\n\\n·資料流量控製。\\n\\nICMP常用類型\\n\\nICMP常用類型ICMP在溝通之\\n\\n中,主要是透過不同的類彆(Type)與代碼(Code)讓機器來識彆不同的連線狀況。常用的類彆如下表所列﹕ICMP是個非常有用的協議﹐尤其是當我們要對網路連接狀況進行判斷的時候。下麵讓我們看看常用的ICMP實例,以更好瞭解ICMP的功能與作用。\\n\\nICMP的重要性\\n\\nICMP協議對於網絡安全具有極其重要的意義。ICMP協議本身的特點決定了它非常容易被用於攻擊網絡上的路由器和主機。例如,在1999年8月海信集團“懸賞”50萬元人民幣測試防火牆的過程中,其防火牆遭受到的ICMP攻擊達334050次之多,占整個攻擊總數的90%以上!可見,ICMP的重要性絕不可以忽視!\\n\\n比如,可以利用操作係統規定的ICMP數據包最大尺寸不超過64KB這一規定,向主機發起“PingofDeath”(死亡之Ping)攻擊。“PingofDeath”攻擊的原理是:如果ICMP數據包的尺寸超過64KB上限時,主機就會出現內存分配錯誤,導致TCP\\/IP堆棧崩潰,致使主機死機。(現在的操作係統已經取消了發送ICMP數據包的大小的限製,解決了這個漏洞)此外,向目標主機長時間、連續、大量地發送ICMP數據包,也會最終使係統癱瘓。大量的ICMP數據包會形成“ICMP風暴”,使得目標主機耗費大量的CPU資源處理,疲於奔命。\\n\\nICMP校驗和演算法\\n\\n以下代碼在VisualStudio2008 Windows7下調試通過。\\n\\nlpsz指定要計算的數據包首地址,_dwSize指定該數據包的長度。\\n\\nintCalcCheckSum(char*lpsz,DWORD_dwSize){\\n\\nintdwSize;\\n\\n__asm\\/\\/嵌入彙編\\n\\n{\\n\\nmovecx,_dwSize\\n\\nshrecx,1\\n\\nxorebx,ebx\\n\\nmovesi,lpsz\\n\\nread:\\/\\/所有word相加,儲存至EBX暫存器lodsw\\n\\nmovzxeax,ax\\n\\naddebx,eax\\n\\nloopread\\n\\ntest_dwSize,1\\/\\/校驗數據是否是奇數位的jzcalc\\n\\nlodsb\\n\\nmovzxeax,al\\n\\naddebx,eax\\n\\ncalc:\\n\\nmoveax,ebx\\/\\/高低位相加\\n\\nandeax,0ffffh\\n\\nshrebx,16\\n\\naddeax,ebx\\n\\nnotax\\n\\nmovdwSize,eax\\n\\n}\\n\\nreturndwSize;\\n\\n}\\n\\n應對ICMP攻擊\\n\\n雖然ICMP協議給黑客以可乘之機,但是ICMP攻擊也並非無藥可醫。隻要在日常網絡管理中未雨綢繆,提前做好準備,就可以有效地避免ICMP攻擊造成的損失。\\n\\n對於“PingofDeath”攻擊,可以采取兩種方法進行防範:第一種方法是在路由器上對ICMP數據包進行帶寬限製,將ICMP占用的帶寬控製在一定的範圍內,這樣即使有ICMP攻擊,它所占用的帶寬也是非常有限的,對整個網絡的影響非常少;第二種方法就是在主機上設置ICMP數據包的處理規則,最好是設定拒絕所有的ICMP數據包。\\n\\n設置ICMP數據包處理規則的方法也有兩種,一種是在操作係統上設置包過濾,另一種是在主機上安裝防火牆。具體設置如下:1.在Windows2000Server中設置ICMP過濾Windows2000Server提供了“路由與遠程訪問”服務,但是默認情況下是冇有啟動的,因此首先要啟動它:點擊“管理工具”中的“路由與遠程訪問”,啟動設置嚮導。在其中選擇“手動配置服務器”項,點擊[下一步]按鈕。稍等片刻後,係統會提示“路由和遠程訪問服務現在已被安裝。要開始服務嗎?”,點擊[是]按鈕啟動服務。\\n\\n圖1\\n\\n圖1服務啟動後,在計算機名稱的分支下會出現一個“IP路由選擇”,點擊它展開分支,再點擊“常規”,會在右邊出現服務器中的網絡連接(即網卡)。用鼠標右鍵點擊你要配置的網絡連接,在彈出的菜單中點擊“屬性”,會彈出一個網絡連接屬性的視窗,如圖1所示。\\n\\n圖1中有兩個按鈕,一個是“輸入篩選器”(指對此服務器接受的數據包進行篩選),另一個是“輸出篩選器”(指對此服務器發送的數據包進行篩選),這裡應該點擊[輸入篩選器]按鈕,會彈出一個“新增篩選器”視窗,再點擊[新增]按鈕,表示要增加一個篩選條件。\\n\\n圖2\\n\\n在“協議”右邊的下拉選單中選擇“ICMP”,在隨後出現的“ICMP類型”和“ICMP編碼”中均輸入“255”,代表所有圖2\\n\\n的ICMP類型及其編碼。ICMP有許多不同的類型(Ping就是一種類型),每種類型也有許多不同的狀態,用不同的“編碼”來表示。因為其類型和編碼很複雜,這裡不再敘述。\\n\\n點擊[確定]按鈕返回“輸入篩選器”視窗,此時會發現“篩選器”列表中多了一項內容(如圖2所示)。點擊[確定]按鈕返回“本地連接”視窗,再點擊[確定]圖3\\n\\n按鈕,此時篩選器就生效了,從其他計算機上Ping這台主機就不會成功了圖3。\\n\\n2.用防火牆設置ICMP過濾\\n\\n現在許多防火牆在默認情況下都啟用了ICMP過濾的功能。如果冇有啟用,隻要選中“防禦ICMP攻擊”、“防止彆人用ping命令探測”就可以了,如圖3所示。\\n\\n防禦基於ICMP的網絡攻擊的方法\\n\\n選擇合適的防火牆\\n\\n有效防止ICMP攻擊,防火牆應該具有狀態檢測、細緻的數據包完整性檢查和很好的過濾規則控製功能。\\n\\n狀態檢測防火牆通過跟蹤它的連接狀態,動態允許外出數據包的響應資訊進入防火牆所保護的網絡。例如,狀態檢測防火牆可以記錄一個出去的PING(ICMPEchoRequest),在接下來的一個確定的時間段內,允許目標主機響應的ICMPEchoReply直接發送給前麵發出了PING命令的IP,除此之外的其他ICMPEchoReply訊息都會被防火牆阻止。與此形成對比的是,包過濾類型的防火牆允許所有的ICMPEchoReply訊息進入防火牆所保護的網絡了。許多路由器和基於Linux內核2.2或以前版本的防火牆係統,都屬於包過濾型,用戶應該避免選擇這些係統。\\n\\n新的攻擊不斷出現,防火牆僅僅能夠防止已知攻擊是遠遠不夠的。通過對所有數據包進行細緻分析,刪除非法的數據包,防火牆可以防止已知和未知的DoS攻擊。這就要求防火牆能夠進行數據包一致性檢查。安全策略需要針對ICMP進行細緻的控製。因此防火牆應該允許對ICMP類型、代碼和包大小進行過濾,並且能夠控製連接時間和ICMP包的生成速率。\\n\\n配置防火牆以預防攻擊\\n\\n一旦選擇了合適的防火牆,用戶應該配置一個合理的安全策略。以下是被普遍認可的防火牆安全配置慣例,可供管理員在係統安全性和易用性之間作出權衡。\\n\\n防火牆應該強製執行一個預設的拒絕策略。除了出站的ICMPEchoRequest、出站的ICMPSourceQuench、進站的TTLExceeded和進站的ICMPDestinationUnreachable之外,所有的ICMP訊息類型都應該被阻止。\\n\\n詳細分析\\n\\n下麵是針對每個ICMP訊息類型的過濾規則的詳細分析。\\n\\nEchoRequest和Reply(類型8和0):允許EchoRequest訊息出站以便於內部用戶能夠PING一個遠程主機。阻止入站EchoRequest和出站EchoReply可以防止外部網絡的主機對內部網絡進行掃描。如果您使用了位於外部網絡的監視器來監視內部網絡,就應該隻允許來自於特定外部IP的EchoRequest進入您的網絡。限製ICMPEcho包的大小可以防止“PingFloods”攻擊,並且可以阻止那些利用EchoRequest和Reply來“偷運”數據通過防火牆的木馬程式。\\n\\nDestinationunreachable(類型3):允許其入站以便於內部網用戶可以使用traceroute。需要注意的是,有些攻擊者可以使用它來進行鍼對會話的DoS攻擊,如果您曾經曆過類似的攻擊,也可以阻止它。阻止出站的ICMPDestinationunreachable訊息,因為它可能會泄漏內部網絡的結構。不過有一個例外,對於那些允許外部網絡通過TCP訪問的內部主機(如位於DMZ區的Web服務器)發出的Destinationunreachable,則應該允許它通過。為了能夠支援“PathMTUDiscovery”,您應該允許出站的“PacketTooBig”訊息(類型3,代碼4)到達那些主機。\\n\\nSourcequench(類型4):\\n\\n阻止其入站,因為它可以作為一種DoS攻擊,能夠降低發送者的發送速度。允許其出站以便於內部主機能夠控製發送端發送數據的速度。有些防火牆會忽略所有直接發送到防火牆的SourceQuench訊息,以防止針對於防火牆的DoS攻擊。\\n\\nRedirect(類型5,9,10):\\n\\nRedirect、Routerannouncement、Routerselection(類型5,9,10):這些訊息都存在潛在危險,因為它們可以用來把數據重定向到攻擊者的機器。這些訊息都應該被阻止。\\n\\nTTLexceeded(類型11):\\n\\n允許其進站以便於內部用戶可以使用traceroute。“firewalking”使用很低的TTL值來對網絡進行掃描,甚至可以通過防火牆對內網進行掃描,所以應該禁止其出站。一些防火牆可以阻止TTL值小於設定值的數據包進入防火牆。\\n\\nParameterproblem(類型12):\\n\\n禁止其入站和出站。通過使用一個能夠進行數據包一致性檢查的防火牆,錯誤和惡意的數據包都會被阻塞。\\n\\n\"
}