登錄

ICMP

百科 > 計算機 > ICMP

1.什么是ICMP

  ICMP的全稱是Intemet Control Message Protocol,即因特網(wǎng)控制報文協(xié)議,是一個標準的TCP/IP協(xié)議,工作在IP層,所有的IP路由器和主機都支持該協(xié)議,其功能是在lP主機、路由器之間傳遞網(wǎng)絡(luò)通不通、主機是否可達、路由是否可用等反映網(wǎng)絡(luò)本身狀況的控制消息。

  ICMP的使用者主要是路由器,接受者是IP數(shù)據(jù)報的源發(fā)主機端。當路由器發(fā)現(xiàn)某份IP數(shù)據(jù)報因為某種原因無法繼續(xù)轉(zhuǎn)發(fā)和投遞時,相關(guān)的實體形成ICMP報文,并從該IP數(shù)據(jù)報中截取源發(fā)主機IP地址,形成新的IP數(shù)據(jù)報轉(zhuǎn)發(fā)給源發(fā)主機,以報告差錯的發(fā)生及原因。

  為標識出ICMP,IP數(shù)據(jù)報協(xié)議段的值是1。ICMP報文分為ICMP報文頭部和ICMP報文體部兩部分。

  ICMP頭部主要有類型(Type)、代碼(Code)和校驗和等3個字段。其中類型字段為單字節(jié)整數(shù),表示差錯的類型;代碼字段為單字節(jié)整數(shù),表示差錯的原因;類型和代碼段規(guī)定了報文的意義及這種報文分組其余部分的格式;校驗和表示整個ICMP報文的校驗結(jié)果。

2.ICMP的應(yīng)用

  ——ICMP有52種類型和代碼,各有其所用。例如TYPE=3的Destinationunreachable報文,包含15個子類型代碼(code),用于準確區(qū)分哪些設(shè)備不能到達,有時還可以指出不能達到的原因。

  ——ICMP收集到的診斷信息包括:主機關(guān)閉或數(shù)據(jù)報不能到達目的地;網(wǎng)關(guān)已經(jīng)失去緩存功能或不通;網(wǎng)絡(luò)上的其它故障或網(wǎng)關(guān)能夠引導(dǎo)主機在更短路由上發(fā)送等。因此ICMP經(jīng)常被廣域網(wǎng)管理員用作診斷工具,幫助網(wǎng)絡(luò)管理人員和用戶識別網(wǎng)絡(luò)問題。

  ——ICMP最廣泛的應(yīng)用是ping應(yīng)用程序。ping命令是一個專用于TCP/IP協(xié)議的探測工具,它發(fā)送ICMP數(shù)據(jù)包,直接在系統(tǒng)內(nèi)核中實現(xiàn),用于確定本地主機是否能與另一臺主機交換(發(fā)送與接收)數(shù)據(jù)報。通過這種機制監(jiān)測某臺主機的存在與否或者與鏈路的暢通與否并可分析網(wǎng)絡(luò)速度。

  —一利用ICMP來了解IP數(shù)據(jù)報的整個路由。利用路由器對IP數(shù)據(jù)報的1TrL值減1,若1TrL=0則丟棄數(shù)據(jù)報,并返回TYEE=3的ICMP報文的特點,跟蹤IP數(shù)據(jù)報發(fā)送的路由。由源發(fā)端主機形成一系列宿主機無法處理的IP數(shù)據(jù)報(如對應(yīng)一個不存在的端口號),并使其生存期值依次為1、2、3?,逐個發(fā)往網(wǎng)絡(luò)。由于主機和路由器對路由信息的緩存能力,這些1TrL值依次遞增的數(shù)據(jù)報將沿著原路徑向宿結(jié)點前進。如果整個路徑中包括了N個路由器,則可返回N個主機不可達和一個端口不可達報文,了解路徑中的路由。

  ——利用源發(fā)端發(fā)送一系列報文長度逐漸變化的ICMP報文,而轉(zhuǎn)發(fā)網(wǎng)絡(luò)對于大于MPU的數(shù)據(jù)報產(chǎn)生主機不可達報文的特點,測試出整個路徑最大MTU。

  ——利用ICMP來估算鏈路的速度等等。

3.ICMP的缺陷

  由于ICMP過于簡單,所以它對網(wǎng)絡(luò)的安全有比較大的負面影響。

  ——ICMP協(xié)議是無連接的。只要在源發(fā)端完成ICMP報文的封裝并傳遞給路由器,這個報文就會像郵包一樣被投遞到宿主機端。這使得ICMP協(xié)議非常靈活快捷。但同時這也是一個非常致命的缺陷——源發(fā)端的人可以隨便利用SOCK—RAW(原始套接口)編程技術(shù)直接改寫報文的ICMP酋部和IP首部,偽造ICMP報文并發(fā)送出去,卻不用擔(dān)心源發(fā)端會在接收端留下任何痕跡,從而制造出各種各樣的攻擊軟件。

  ——利用ICMP可以進行網(wǎng)絡(luò)掃描,從而查出目標網(wǎng)絡(luò)中存活的主機和主機所使用的操作系統(tǒng)等。

  ——利用ICMP的重定向功能,可調(diào)整路由器的路由列表或向用戶的主機發(fā)送ICMP重定向報文,從而導(dǎo)致DOS攻擊。

  ——由于ICMP報文是系統(tǒng)內(nèi)核或進程直接處理而不是通過端口,所以ICMP木馬正是利用這個機會將自己偽裝成一個ping的進程,系統(tǒng)就會將ICMPECHOREPLY(ping的回包)的監(jiān)聽、處理權(quán)交給木馬進程。使木馬接受、分析并從報文中解碼出命令和數(shù)據(jù)。

  ——超時報文(Time Exceeded;TYPE:=11)通常用于錯誤處理,也可用于定位網(wǎng)絡(luò)。但利用追蹤路由命令發(fā)送一個人為設(shè)置的、TTL值很低的報文,而導(dǎo)致路由器發(fā)回一個超時報文,其中包括路由器的IP地址。另外超時報文還可以和子類型code一起使用。如果接受端沒有收到全部報文,并且重組這些報文的時間已經(jīng)超時,該子類型將向發(fā)送主機發(fā)出信息。掃描程序通過只發(fā)出第一個報文來掃描網(wǎng)絡(luò),等待對方主機發(fā)回網(wǎng)絡(luò)超時的信息。如果系統(tǒng)的端口沒有被防火墻屏蔽,這種子類型可以用于定位端口地址。

4.ICMP漏洞的防御

  ICMP非常有用,但今天各種各樣的不充分的ICMP被濫用,沒有遵守RFC792原先制訂的標準。所以應(yīng)采取一定的措施使它變得安全一點。

  ——可利用報文過濾技術(shù)對ICMP報文進行過濾。因為攻擊者可以利用ICMP來獲取用戶網(wǎng)絡(luò)上的大量信息,為居心不測者攻擊內(nèi)部網(wǎng)絡(luò)提供方便。往往我們希望內(nèi)部網(wǎng)絡(luò)用戶可以ping外界主機,而外界主機不可ping內(nèi)部主機。因為ICMP需要雙向通訊。所以我們可以在路由器的出站和人站方向上都設(shè)置訪問列表進行控制。這正是根據(jù)出站和人站處理整個的“ICMP的限制”問題。一般出站的ICMP回聲被限制只支持個人或單個服務(wù)器,而用人站的ICMP回聲驗證遠程機器。

  ——對于安全性要求不高的網(wǎng)絡(luò),或不需要防止端口掃描的網(wǎng)絡(luò),可以不考慮有關(guān)ICMP的問題。然而,對于安全性至關(guān)重要的網(wǎng)絡(luò),最好讓盡可能少的ICMP類型通過防火墻。在所有的ICMP報文中,目的不可達報文是通過防火墻到達內(nèi)網(wǎng)中最重要的報文。有的網(wǎng)管員就只允許目的不可達一種ICMP報文通過防火墻,目的不可達報文與路徑最大傳輸單元MTU的確定有關(guān)。在防火墻上如果禁止所有的ICMP報文通過,會對IP的性能和網(wǎng)絡(luò)效率有所影響。

  ——如果用過濾方式來保護web服務(wù)器或其它公用服務(wù)器,也可允許源結(jié)束報文進入企業(yè)內(nèi)部網(wǎng)。但是一般地只有公開地址的服務(wù)器、防火墻、聯(lián)人因特網(wǎng)的路由器有真正的理由使用ICMP與外界對話。建議所有對外的傳輸都經(jīng)過代理,對內(nèi)的ICMP傳輸回到代理地址的時候要經(jīng)過防火墻。這至少限制了ICMP超時數(shù)據(jù)包進入一個內(nèi)部地址,卻可能阻塞超時數(shù)據(jù)包。

評論  |   0條評論