簡述:ICMP協(xié)議的安全措施
安全是我們永遠不能忽視的問題,尤其是網(wǎng)絡安全,這方面的內(nèi)容并不好控制,那么對于ICMP協(xié)議的安全問題我們再來詳細地談一談,希望文章中的一些內(nèi)容,對您能夠有所參考。
1. ICMP對安全的重要性
ICMP協(xié)議本身的特點決定了它非常容易被用于攻擊網(wǎng)絡上的路由器和主機比如,可以利用操作系統(tǒng)規(guī)定的ICMP數(shù)據(jù)包最大尺寸不超過64KB這一規(guī)定,向主機發(fā)起"Ping of Death"(死亡之Ping)攻擊."Ping of Death" 攻擊的原理是:如果ICMP數(shù)據(jù)包的尺寸超過64KB上限時,主機就會出現(xiàn)內(nèi)存分配錯誤,導致TCP/IP堆棧崩潰,致使主機死機.此外,向目標主機長時間、連續(xù)、大量地發(fā)送ICMP數(shù)據(jù)包,也會最終使系統(tǒng)癱瘓.大量的ICMP數(shù)據(jù)包會形成"ICMP風暴",使得目標主機耗費大量的CPU資源處理,疲于奔命.
應對措施:
對于"Ping of Death"攻擊,可以采取兩種方法進行防范:第一種方法是在路由器上對ICMP數(shù)據(jù)包進行帶寬限制,將ICMP占用的帶寬控制在一定的范圍內(nèi),這樣即使有ICMP攻擊,它所占用的帶寬也是非常有限的,對整個網(wǎng)絡的影響非常少;第二種方法就是在主機上設置ICMP數(shù)據(jù)包的處理規(guī)則,最好是設定拒絕所有的ICMP數(shù)據(jù)包.設置ICMP數(shù)據(jù)包處理規(guī)則的方法也有兩種,一種是在操作系統(tǒng)上設置包過濾,另一種是在主機上安裝防火墻.
2.ICMP信息在哪種情況下能發(fā)出?
IP網(wǎng)絡不可靠并且不能保證信息傳遞,因此當發(fā)生問題時通知發(fā)送人是很重要的.ICMP協(xié)議是一種提供有關(guān)阻止數(shù)據(jù)包傳遞的網(wǎng)絡故障問題反饋信息的機制.它讓TCP等上層協(xié)議能夠意識到數(shù)據(jù)包沒有送達目的地,ICMP協(xié)議提供一種查出災難性問題的方法.這些災難性的問題包括"TTL exceeded"(超過生存時間)和"需要分更多的數(shù)據(jù)段"等.ICMP協(xié)議不報告IP校驗失敗等常見的問題.這是因為我們假定TCP或者其它可靠的協(xié)議能夠處理這類數(shù)據(jù)包損壞的問題.而且,如果我們使用UDP等不可靠的協(xié)議,我們就不應理會較小數(shù)量的數(shù)據(jù)損失. 總之,引進ICMP協(xié)議,目的就是為了當網(wǎng)絡出現(xiàn)問題的時候返回有用的描述錯誤的信息,而不是使IP協(xié)議變得絕對可靠.
反之,網(wǎng)絡問題需要立即報告.例如,如果IP TTL值(IP生存時間)將達到零,這就可能是網(wǎng)絡的某個部分發(fā)生了路由環(huán)路問題,這樣將沒有任何數(shù)據(jù)包能發(fā)送到目的地.端點系統(tǒng)需要了解這些類型的故障.ICMP是一種發(fā)送各種消息報告網(wǎng)絡狀態(tài)的協(xié)議,而非僅僅是簡單的ping(聯(lián)通性測試程序).回應請求(echo request)僅是ICMP協(xié)議提供的眾多消息之一.Ping信息可以被過濾掉.但是,大多數(shù)ICMP消息類型是IP、TCP和其它協(xié)議正常運行所需要的.永遠不要相信ICMP協(xié)議是邪惡的并且簡單的封鎖這個協(xié)議.
為了避免信息無限制地返回,不會產(chǎn)生和發(fā)送針對ICMP消息的ICMP消息,而且ICMP信息只在處理數(shù)據(jù)報偏移量為0時發(fā)送.ICMP消息在以下幾種情況下會被發(fā)送出來:
1.當數(shù)據(jù)報不能到達目的地時
2.當網(wǎng)關(guān)失去緩存和轉(zhuǎn)發(fā)數(shù)據(jù)報功能時
3.當網(wǎng)關(guān)發(fā)現(xiàn)并能夠引導主機在更短的路由上發(fā)送數(shù)據(jù)報時
3.ICMP協(xié)議
ICMP協(xié)議本身非常復雜.每一種類型的ICMP消息也稱"主要類型(major type)"擁有自己的"子類型編碼(minor codes)".ICMP協(xié)議工作在第3層,因此,它能夠在互聯(lián)網(wǎng)上路由.一個ICMP數(shù)據(jù)包實際上就是一個IP數(shù)據(jù)部分包含ICMP協(xié)議數(shù)據(jù)的IP數(shù)據(jù)包.每一個ICMP消息都將包含引發(fā)這條ICMP消息的數(shù)據(jù)包的完全IP包頭,這樣,端點系統(tǒng)就會知道實際上哪一個數(shù)據(jù)包沒有發(fā)送到目的地.另外引發(fā)此ICMP消息的數(shù)據(jù)包的前8個字節(jié)也將包括在內(nèi),這通常是TCP或者UDP包頭.
簡略的說,ICMP協(xié)議消息包含永遠不會變化的三個字段,隨后是ICMP數(shù)據(jù),然后是引發(fā)此消息的源IP數(shù)據(jù)包包頭.不會變化的三個字段中,前8個字節(jié)包含ICMP類型(主要類型)、第二個字段包含了類型代碼、第三個字段是ICMP消息校驗值.
我們需要認識到,ICMP協(xié)議在某些情況下不會發(fā)送錯誤信息.ICMP不會對ICMP信息做出響應.如果ICMP回應其它ICMP消息,這些消息的數(shù)量會爆炸性增長而演變?yōu)橐粓鯥CMP消息風暴.為了防止出現(xiàn)廣播風暴,ICMP消息也不會回應一個廣播或者多播地址.
最有用的ICMP數(shù)據(jù)包類型"目標不可達"(類型三)的消息.錯誤消息一般由路由器生成,并且發(fā)送給數(shù)據(jù)包的來源.大多數(shù)錯誤信息還將發(fā)送給與發(fā)送的數(shù)據(jù)包有關(guān)的應用程序.在這種情況下,TCP協(xié)議將廣泛使用ICMP協(xié)議.我們在后面將很快看到這種情況.
在IPv4協(xié)議中最常用的ICMP消息類型有以下幾種:
回顯應答(類型0)和回顯請求(類型8):這是Ping程序發(fā)送的信息.
目標不可達(類型3)
源抑制(類型4):這是一種用于通知發(fā)送者路由器或者主機出現(xiàn)阻塞現(xiàn)象的ICMP消息,發(fā)送者需要降低發(fā)送速度.
重定向(類型5):這個消息用來向可以訪問兩臺路由器的主機說"請使用另一臺路由器".
路由器信息應答(類型9)和路由器信息請求(類型10)
超時(類型11):這個消息有兩種用途.第一,當超過IP生存期時向發(fā)送系統(tǒng)發(fā)出錯誤信息.第二,如果分段的IP數(shù)據(jù)報沒有在某種時限內(nèi)重新組合,這個消息將通知發(fā)送系統(tǒng).
當然,上述各種類型的消息中都包含子類型代碼.類型三消息"目標不可達"本身有15個子類型代碼.我們就不提供每一項的細節(jié)了.但是,ICMP協(xié)議中有一項非常重要的應用要依靠類型三的消息.
3.1 PMTU
路徑最大傳輸單元(PMTU)是各種協(xié)議用來尋找整條路徑中支持的最大的MTU(最大傳輸單元)的機制,小于此限制的數(shù)據(jù)可以不用分段.發(fā)送者在其本地接口設置最大的數(shù)據(jù)包規(guī)格,然后,在IP包頭中使用DF(不要分段)的標記發(fā)出數(shù)據(jù)包.如果有問題發(fā)送者就會收到第三種類型的ICMP錯誤信息,其子類型代碼是"要求分段,但是已經(jīng)設置了DF標記".當發(fā)生這種情況是,發(fā)送者知道它必須要減小發(fā)送數(shù)據(jù)的規(guī)格.如果沒有返回錯誤信息,這就表明MTU的設置沒有問題.
在查找PMTU時的主要問題是人們常封鎖ICMP協(xié)議,阻止這個報錯信息傳遞到發(fā)送數(shù)據(jù)的主機.這種情況很多時候發(fā)生在你設法連接的遠程站點.假如你向一臺Web服務器發(fā)送一個請求,但是,一個空白頁卻不斷出現(xiàn).在虛擬專用網(wǎng)連接上的人們經(jīng)常會看到這種情況,這是因為由于有的虛擬專用網(wǎng)封裝的額外的文件頭,它們的MTU比通常的容量要小一些.當遠程Web服務器向虛擬專用網(wǎng)用戶發(fā)送其要求的內(nèi)容時,如果數(shù)據(jù)包太大,用戶前面最后的路由跳數(shù)需要為這個數(shù)據(jù)分段.如果發(fā)送方設置DF標記之后,它能做的一切就是通知發(fā)送者必須發(fā)送較小的數(shù)據(jù)包.但是,發(fā)送者封鎖了ICMP協(xié)議,因此這個網(wǎng)站將永遠不會看到這種ICMP信息.不過一個好消息是大多數(shù)TCP協(xié)議的執(zhí)行都是智能化的.如果它們一直得不到發(fā)送數(shù)據(jù)的許可,它們會自己以較小的分段尺寸發(fā)送數(shù)據(jù).但是,如果你使用某些流行的、操作方便的操作系統(tǒng),這種機制并沒實現(xiàn).
簡言之,封鎖ICMP協(xié)議對于成功地運行網(wǎng)絡是有害的.這不僅會破壞ping,事實上,如果ICMP協(xié)議不工作,許多協(xié)議都將不能完全發(fā)揮作用.
4. 小結(jié)
查找路徑最大傳輸單元能夠讓規(guī)格正確的數(shù)據(jù)包在各種數(shù)據(jù)包容量的鏈路上傳送. ICMP對于恰當?shù)穆酚珊蛿?shù)據(jù)包傳遞是非常重要的,你只能封鎖你不需要的那一些消息.