ICMP
出自 MBA智库百科(https://wiki.mbalib.com/)
ICMP(Internet control Message Protocol)
目錄 |
ICMP的全稱是Intemet Control Message Protocol,即網際網路控制報文協議,是一個標準的TCP/IP協議,工作在IP層,所有的IP路由器和主機都支持該協議,其功能是在lP主機、路由器之間傳遞網路通不通、主機是否可達、路由是否可用等反映網路本身狀況的控制消息。
ICMP的使用者主要是路由器,接受者是IP數據報的源發主機端。當路由器發現某份IP數據報因為某種原因無法繼續轉發和投遞時,相關的實體形成ICMP報文,並從該IP數據報中截取源發主機IP地址,形成新的IP數據報轉發給源發主機,以報告差錯的發生及原因。
為標識出ICMP,IP數據報協議段的值是1。ICMP報文分為ICMP報文頭部和ICMP報文體部兩部分。
ICMP頭部主要有類型(Type)、代碼(Code)和校驗和等3個欄位。其中類型欄位為單位元組整數,表示差錯的類型;代碼欄位為單位元組整數,表示差錯的原因;類型和代碼段規定了報文的意義及這種報文分組其餘部分的格式;校驗和表示整個ICMP報文的校驗結果。
——ICMP有52種類型和代碼,各有其所用。例如TYPE=3的Destinationunreachable報文,包含15個子類型代碼(code),用於準確區分哪些設備不能到達,有時還可以指出不能達到的原因。
——ICMP收集到的診斷信息包括:主機關閉或數據報不能到達目的地;網關已經失去緩存功能或不通;網路上的其它故障或網關能夠引導主機在更短路由上發送等。因此ICMP經常被廣域網管理員用作診斷工具,幫助網路管理人員和用戶識別網路問題。
——ICMP最廣泛的應用是ping應用程式。ping命令是一個專用於TCP/IP協議的探測工具,它發送ICMP數據包,直接在系統內核中實現,用於確定本地主機是否能與另一臺主機交換(發送與接收)數據報。通過這種機制監測某台主機的存在與否或者與鏈路的暢通與否並可分析網路速度。
—一利用ICMP來瞭解IP數據報的整個路由。利用路由器對IP數據報的1TrL值減1,若1TrL=0則丟棄數據報,並返回TYEE=3的ICMP報文的特點,跟蹤IP數據報發送的路由。由源髮端主機形成一系列宿主機無法處理的IP數據報(如對應一個不存在的埠號),並使其生存期值依次為1、2、3?,逐個發往網路。由於主機和路由器對路由信息的緩存能力,這些1TrL值依次遞增的數據報將沿著原路徑向宿結點前進。如果整個路徑中包括了N個路由器,則可返回N個主機不可達和一個埠不可達報文,瞭解路徑中的路由。
——利用源髮端發送一系列報文長度逐漸變化的ICMP報文,而轉髮網絡對於大於MPU的數據報產生主機不可達報文的特點,測試出整個路徑最大MTU。
——利用ICMP來估算鏈路的速度等等。
由於ICMP過於簡單,所以它對網路的安全有比較大的負面影響。
——ICMP協議是無連接的。只要在源髮端完成ICMP報文的封裝並傳遞給路由器,這個報文就會像郵包一樣被投遞到宿主機端。這使得ICMP協議非常靈活快捷。但同時這也是一個非常致命的缺陷——源髮端的人可以隨便利用SOCK—RAW(原始套介面)編程技術直接改寫報文的ICMP酋部和IP首部,偽造ICMP報文併發送出去,卻不用擔心源髮端會在接收端留下任何痕跡,從而製造出各種各樣的攻擊軟體。
——利用ICMP可以進行網路掃描,從而查出目標網路中存活的主機和主機所使用的操作系統等。
——利用ICMP的重定向功能,可調整路由器的路由列表或向用戶的主機發送ICMP重定向報文,從而導致DOS攻擊。
——由於ICMP報文是系統內核或進程直接處理而不是通過埠,所以ICMP木馬正是利用這個機會將自己偽裝成一個ping的進程,系統就會將ICMPECHOREPLY(ping的回包)的監聽、處理權交給木馬進程。使木馬接受、分析並從報文中解碼出命令和數據。
——超時報文(Time Exceeded;TYPE:=11)通常用於錯誤處理,也可用於定位網路。但利用追蹤路由命令發送一個人為設置的、TTL值很低的報文,而導致路由器發回一個超時報文,其中包括路由器的IP地址。另外超時報文還可以和子類型code一起使用。如果接受端沒有收到全部報文,並且重組這些報文的時間已經超時,該子類型將向發送主機發出信息。掃描程式通過只發出第一個報文來掃描網路,等待對方主機發回網路超時的信息。如果系統的埠沒有被防火牆屏蔽,這種子類型可以用於定位埠地址。
ICMP非常有用,但今天各種各樣的不充分的ICMP被濫用,沒有遵守RFC792原先制訂的標準。所以應採取一定的措施使它變得安全一點。
——可利用報文過濾技術對ICMP報文進行過濾。因為攻擊者可以利用ICMP來獲取用戶網路上的大量信息,為居心不測者攻擊內部網路提供方便。往往我們希望內部網路用戶可以ping外界主機,而外界主機不可ping內部主機。因為ICMP需要雙向通訊。所以我們可以在路由器的出站和人站方向上都設置訪問列表進行控制。這正是根據出站和人站處理整個的“ICMP的限制”問題。一般出站的ICMP回聲被限制只支持個人或單個伺服器,而用人站的ICMP回聲驗證遠程機器。
——對於安全性要求不高的網路,或不需要防止埠掃描的網路,可以不考慮有關ICMP的問題。然而,對於安全性至關重要的網路,最好讓儘可能少的ICMP類型通過防火牆。在所有的ICMP報文中,目的不可達報文是通過防火牆到達內網中最重要的報文。有的網管員就只允許目的不可達一種ICMP報文通過防火牆,目的不可達報文與路徑最大傳輸單元MTU的確定有關。在防火牆上如果禁止所有的ICMP報文通過,會對IP的性能和網路效率有所影響。
——如果用過濾方式來保護web伺服器或其它公用伺服器,也可允許源結束報文進入企業內部網。但是一般地只有公開地址的伺服器、防火牆、聯人網際網路的路由器有真正的理由使用ICMP與外界對話。建議所有對外的傳輸都經過代理,對內的ICMP傳輸回到代理地址的時候要經過防火牆。這至少限制了ICMP超時數據包進入一個內部地址,卻可能阻塞超時數據包。
- 孟朝霞,吳晨暉.ICMP的應用、缺陷及防禦[J].運城學院學報.2003,3