ICMP

ICMP

ICMP是(Internet Control Message Protocol)Internet控制報文協定。它是TCP/IP協定簇的一個子協定,用於在IP主機路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起著重要的作用。

基本介紹

  • 中文名:ICMP
  • 外文名:Internet Control Message Protocol
  • 類型:控制報文協定
  • 協定族TCP/IP協定族
  • 歸屬網路層協定
  • 作用:在主機與路由器之間傳遞控制信息
定義,協定內容,重要性,校驗算法,抵禦攻擊,防禦方法,ICMP類型,

定義

ICMP協定是一種面向無連線的協定,用於傳輸出錯報告控制信息。它是一個非常重要的協定,它對於網路安全具有極其重要的意義。
它是TCP/IP協定族的一個子協定,屬於網路層協定,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動傳送ICMP訊息。ICMP報文在IP幀結構的首部協定類型欄位(Protocol 8bit)的值=1.
如下圖所示,ICMP包有一個8位元組長的包頭,其中前4個位元組是固定的格式,包含8位類型欄位,8位代碼欄位和16位的校驗和;後4個位元組根據ICMP包的類型而取不同的值。
ICMP報文格式ICMP報文格式
ICMP提供一致易懂的出錯報告信息。傳送的出錯報文返回到傳送原數據的設備,因為只有傳送設備才是出錯報文的邏輯接受者。傳送設備隨後可根據ICMP報文確定發生錯誤的類型,並確定如何才能更好地重發失敗的數據包。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務由傳送方完成。
ICMP原理ICMP原理
我們在網路中經常會使用到ICMP協定,比如我們經常使用的用於檢查網路通不通的Ping命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協定工作的過程。還有其他的網路命令跟蹤路由的Tracert命令也是基於ICMP協定的。

協定內容

ICMP的全稱是 Internet Control Message Protocol 。從技術角度來說,ICMP就是一個“錯誤偵測與回報機制”,其目的就是讓我們能夠檢測網路的連線狀況﹐也能確保連線的準確性﹐其功能主要有:
ICMP常用類型ICMP常用類型
· 偵測遠端主機是否存在。
· 建立及維護路由資料。
· 重導資料傳送路徑(ICMP重定向)。
· 資料流量控制。ICMP在溝通之中,主要是透過不同的類別(Type)與代碼(Code) 讓機器來識別不同的連線狀況。常用的類別如下表所列﹕
ICMP 是個非常有用的協定﹐尤其是當我們要對網路連線狀況進行判斷的時候。

重要性

ICMP協定對於網路安全具有極其重要的意義。ICMP協定本身的特點決定了它非常容易被用於攻擊網路上的路由器主機。例如,在1999年8月海信集團“懸賞”50萬元人民幣測試防火牆的過程中,其防火牆遭受到的ICMP攻擊達334050次之多,占整個攻擊總數的90%以上!可見,ICMP的重要性絕不可以忽視!
ICMP常用類型ICMP常用類型
比如,可以利用作業系統規定的ICMP數據包最大尺寸不超過64KB這一規定,向主機發起“Ping of Death”(死亡之Ping)攻擊。“Ping of Death” 攻擊的原理是:如果ICMP數據包的尺寸超過64KB上限時,主機就會出現記憶體分配錯誤,導致TCP/IP堆疊崩潰,致使主機當機。(作業系統已經取消了傳送ICMP數據包的大小的限制,解決了這個漏洞)
此外,向目標主機長時間、連續、大量地傳送ICMP數據包,也會最終使系統癱瘓。大量的ICMP數據包會形成“ICMP風暴”,使得目標主機耗費大量的CPU資源處理,疲於奔命。

校驗算法

以下代碼在Visual Studio 2008 + Windows 7下調試通過。
lpsz指定要計算的數據包首地址,_dwSize指定該數據包的長度。
int CalcCheckSum(char* lpsz,DWORD _dwSize)
{
int dwSize;
__asm // 嵌入彙編
{
mov ecx,_dwSize
shr ecx,1
xor ebx,ebx
mov esi,lpsz
read: //所有word相加,保存至EBX暫存器
lodsw
movzx eax,ax
add ebx,eax
loop read
test _dwSize,1 //校驗數據是否是奇數位的
jz calc
lodsb
movzx eax,al
add ebx,eax
calc:
mov eax,ebx //高低位相加
and eax,0ffffh
shr ebx,16
add eax,ebx
not ax
mov dwSize,eax
}
return dwSize;
}

抵禦攻擊

雖然ICMP協定給黑客以可乘之機,但是ICMP攻擊也並非無藥可醫。只要在日常網路管理中未雨綢繆,提前做好準備,就可以有效地避免ICMP攻擊造成的損失。
對於“Ping of Death”攻擊,可以採取兩種方法進行防範:第一種方法是在路由器上對ICMP數據包進行頻寬限制,將ICMP占用的頻寬控制在一定的範圍內,這樣即使有ICMP攻擊,它所占用的頻寬也是非常有限的,對整個網路的影響非常少;第二種方法就是在主機上設定ICMP數據包的處理規則,最好是設定拒絕所有的ICMP數據包。
設定ICMP數據包處理規則的方法也有兩種,一種是在作業系統上設定包過濾,另一種是在主機上安裝防火牆。具體設定如下:
1.在Windows 2000 Server中設定ICMP過濾
Windows 2000 Server提供了“路由遠程訪問”服務,但是默認情況下是沒有啟動的,因此首先要啟動它:點擊“管理工具”中的“路由與遠程訪問”,啟動設定嚮導。在其中選擇“手動配置伺服器”項,點擊[下一步]按鈕。稍等片刻後,系統會提示“路由和遠程訪問服務現在已被安裝。要開始服務嗎?”,點擊[是]按鈕啟動服務。
服務啟動後,在計算機名稱的分支下會出現一個“IP路由選擇”,點擊它展開分支,再點擊“常規”,會在右邊出現伺服器中的網路連線(即網卡)。用滑鼠右鍵點擊你要配置的網路連線,在彈出的選單中點擊“屬性”,會彈出一個網路連線屬性的視窗,如圖1所示。
圖1圖1
圖1中有兩個按鈕,一個是“輸入篩選器”(指對此伺服器接受的數據包進行篩選),另一個是“輸出篩選器”(指對此伺服器傳送的數據包進行篩選),這裡應該點擊[輸入篩選器] 按鈕,會彈出一個“添加篩選器”視窗,再點擊[添加]按鈕,表示要增加一個篩選條件。
在“協定”右邊的下拉列表中選擇“ICMP”,在隨後出現的“ICMP類型”和“ICMP編碼”中均輸入“255”,代表所有的ICMP類型及其編碼。ICMP有許多不同的類型(Ping就是一種類型),每種類型也有許多不同的狀態,用不同的“編碼”來表示。因為其類型和編碼很複雜,這裡不再敘述。
圖2圖2
點擊[確定]按鈕返回“輸入篩選器”視窗,此時會發現“篩選器”列表中多了一項內容(如圖2所示)。點擊[確定]按鈕返回“本地連線”視窗,再點擊[確定]按鈕,此時篩選器就生效了,從其他計算機上Ping這台主機就不會成功了。
2. 用防火牆設定ICMP過濾
圖3圖3
許多防火牆在默認情況下都啟用了ICMP過濾的功能。如果沒有啟用,只要選中“防禦ICMP攻擊”、“防止別人用ping命令探測”就可以了,如圖3所示。

防禦方法

選擇合適的防火牆
有效防止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類型

這是一個完整的ICMP類型的列表:Table C-1. ICMP類型
TYPECODEDescriptionQueryError
0
0
Echo Reply——回顯應答(Ping應答)
x
3
0
Network Unreachable——網路不可達
x
3
1
Host Unreachable——主機不可達
x
3
2
Protocol Unreachable——協定不可達
x
3
3
Port Unreachable——連線埠不可達
x
3
4
Fragmentation needed but no frag. bit set——需要進行分片但設定不分片比特
x
3
5
Source routing failed——源站選路失敗
x
3
6
Destination network unknown——目的網路未知
x
3
7
Destination host unknown——目的主機未知
x
3
8
Source host isolated (obsolete)——源主機被隔離(作廢不用)
x
3
9
Destination network administratively prohibited——目的網路被強制禁止
x
3
10
Destination host administratively prohibited——目的主機被強制禁止
x
3
11
Network unreachable for TOS——由於服務類型TOS,網路不可達
x
3
12
Host unreachable for TOS——由於服務類型TOS,主機不可達
x
3
13
Communication administratively prohibited by filtering——由於過濾,通信被強制禁止
x
3
14
Host precedence violation——主機越權
x
3
15
Precedence cutoff in effect——優先中止生效
x
4
0
Source quench——源端被關閉(基本流控制)
5
0
Redirect for network——對網路重定向
5
1
Redirect for host——對主機重定向
5
2
Redirect for TOS and network——對服務類型和網路重定向
5
3
Redirect for TOS and host——對服務類型和主機重定向
8
0
Echo request——回顯請求(Ping請求)
x
9
0
Router advertisement——路由器通告
10
0
Route solicitation——路由器請求
11
0
TTL equals 0 during transit——傳輸期間生存時間為0
x
11
1
TTL equals 0 during reassembly——在數據報組裝期間生存時間為0
x
12
0
IP header bad (catchall error)——壞的IP首部(包括各種差錯)
x
12
1
Required options missing——缺少必需的選項
x
13
0
Timestamp request (obsolete)——時間戳請求(作廢不用)
x
14
Timestamp reply (obsolete)——時間戳應答(作廢不用)
x
15
0
Information request (obsolete)——信息請求(作廢不用)
x
16
0
Information reply (obsolete)——信息應答(作廢不用)
x
17
0
Address mask request——地址掩碼請求
x
18
0
Address mask reply——地址掩碼應答

相關詞條

熱門詞條

聯絡我們