{
\"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提供一致易懂的出錯報告資訊。傳送的出錯報文返回到傳送原資料\\n\\n的裝置,因為隻有傳送裝置纔是出錯報文的邏輯接受者。傳送裝置隨後可根據ICMP報文確定發生錯誤的型別,並確定如何才能更好地重發失敗的資料包。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務由傳送方完成。\\n\\n我們在網路中經常會使用到ICMP協議,比如我們經常使用的用於檢查網路通不通的Ping命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協議工作的過程。還有其他的網路命令如跟蹤路由的Tracert命令也是基於ICMP協議的。\\n\\nICMP協議內容\\n\\nICMP的全稱是InternetControlMessageProtocol。從技術角度來說,ICMP就是一個“錯誤偵測與回報機製”,其目的就是讓我們能夠檢測網路的連線狀況﹐也能確保連線的準確性﹐其功能主要有:\\n\\n·偵測遠端主機是否存在。\\n\\n·建立及維護路由資料。\\n\\n·重導資料傳送路徑。\\n\\nICMP常用型別\\n\\nICMP常用型別\\n\\n·資料流量控製。\\n\\nICMP常用型別\\n\\nICMP常用型別ICMP在溝通之\\n\\n中,主要是透過不同的類彆(Type)與程式碼(Code)讓機器來識彆不同的連線狀況。常用的類彆如下表所列﹕\\n\\nICMP是個非常有用的協議﹐尤其是當我們要對網路連線狀況進行判斷的時候。下麵讓我們看看常用的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資料包的大小的限製,解決了這個漏洞)\\n\\n此外,向目標主機長時間、連續、大量地傳送ICMP資料包,也會最終使係統癱瘓。大量的ICMP資料包會形成“ICMP風暴”,使得目標主機耗費大量的CPU資源處理,疲於奔命。\\n\\nICMP校驗和演演算法\\n\\n以下程式碼在VisualStudio2008 Windows7下除錯通過。\\n\\nlpsz指定要計算的資料包首地址,_dwSize指定該資料包的長度。\\n\\nintCalcCheckSum(char*lpsz,DWORD_dwSize)\\n\\n{\\n\\nintdwSize;\\n\\n__asm\\/\\/嵌入彙編\\n\\n{\\n\\nmovecx,_dwSize\\n\\nshrecx,1\\n\\nxorebx,ebx\\n\\nmovesi,lpsz\\n\\nread:\\/\\/所有word相加,儲存至EBX暫存器\\n\\nlodsw\\n\\nmovzxeax,ax\\n\\naddebx,eax\\n\\nloopread\\n\\ntest_dwSize,1\\/\\/校驗資料是否是奇數位的\\n\\njzcalc\\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資料包處理規則的方法也有兩種,一種是在操作係統上設定包過濾,另一種是在主機上安裝防火牆。具體設定如下:\\n\\n1.在Windows2000Server中設定ICMP過濾\\n\\nWindows2000Server提供了“路由與遠端訪問”服務,但是預設情況下是冇有啟動的,因此首先要啟動它:點選“管理工具”中的“路由與遠端訪問”,啟動設定嚮導。在其中選擇“手動配置伺服器”項,點選[下一步]按鈕。稍等片刻後,係統會提示“路由和遠端訪問服務現在已被安裝。要開始服務嗎?”,點選[是]按鈕啟動服務。\\n\\n圖1\\n\\n圖1服務啟動後,在計算機名稱的分支下會出現一個“IP路由選擇”,點選它\\n\\n展開分支,再點選“常規”,會在右邊出現伺服器中的網路連線(即網絡卡)。用滑鼠右鍵點選你要配置的網路連線,在彈出的選單中點選“屬性”,會彈出一個網路連線屬性的視窗,如圖1所示。\\n\\n圖1中有兩個按鈕,一個是“輸入篩選器”(指對此伺服器接受的資料包進行篩選),另一個是“輸出篩選器”(指對此伺服器傳送的資料包進行篩選),這裡應該點選[輸入篩選器]按鈕,會彈出一個“新增篩選器”視窗,再點選[新增]按鈕,表示要增加一個篩選條件。\\n\\n圖2\\n\\n在“協議”右邊的下拉選單中選擇“ICMP”,在隨後出現的“ICMP型別”和“ICMP編碼”中均輸入“255”,代表所有\\n\\n圖2\\n\\n的ICMP型別及其編碼。ICMP有許多不同的型別(Ping就是一種型別),每種型別也有許多不同的狀態,用不同的“編碼”來表示。因為其型別和編碼很複雜,這裡不再敘述。\\n\\n點選[確定]按鈕返回“輸入篩選器”視窗,此時會發現“篩選器”列表中多了一項內容(如圖2所示)。點選[確定]按鈕返回“本地連線”視窗,再點選[確定]\\n\\n圖3\\n\\n按鈕,此時篩選器就生效了,從其他計算機上Ping這台主機就不會成功了\\n\\n圖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):\\n\\n允許EchoRequest訊息出站以便於內部使用者能夠PING一個遠端主機。阻止入站EchoRequest和出站EchoReply可以防止外部網路的主機對內部網路進行掃描。如果您使用了位於外部網路的監視器來監視內部網路,就應該隻允許來自於特定外部IP的EchoRequest進入您的網路。限製ICMPEcho包的大小可以防止“PingFloods”攻擊,並且可以阻止那些利用EchoRequest和Reply來“偷運”資料通過防火牆的木馬程式。\\n\\nDestinationunreachable(型別3):\\n\\n允許其入站以便於內部網使用者可以使用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\"
}