|
一、什么是ICMP協(xié)議?
ICMP全稱Internet Control Message Protocol(網(wǎng)際控制信息協(xié)議)。提起ICMP,一些人可能會(huì)感到陌生,實(shí)際上,ICMP與我們息息相關(guān)。在網(wǎng)絡(luò)體系結(jié)構(gòu)的各層次中,都需要控制,而不同的層次有不同的分工和控制內(nèi)容,IP層的控制功能是最復(fù)雜的,主要負(fù)責(zé)差錯(cuò)控制、擁塞控制等,任何控制都是建立在信息的基礎(chǔ)之上的,在基于IP數(shù)據(jù)報(bào)的網(wǎng)絡(luò)體系中,網(wǎng)關(guān)必須自己處理數(shù)據(jù)報(bào)的傳輸工作,而IP協(xié)議自身沒(méi)有內(nèi)在機(jī)制來(lái)獲取差錯(cuò)信息并處理。為了處理這些錯(cuò)誤,TCP/IP設(shè)計(jì)了ICMP協(xié)議,當(dāng)某個(gè)網(wǎng)關(guān)發(fā)現(xiàn)傳輸錯(cuò)誤時(shí),立即向信源主機(jī)發(fā)送ICMP報(bào)文,報(bào)告出錯(cuò)信息,讓信源主機(jī)采取相應(yīng)處理措施,它是一種差錯(cuò)和控制報(bào)文協(xié)議,不僅用于傳輸差錯(cuò)報(bào)文,還傳輸控制報(bào)文。
二、ICMP報(bào)文格式
ICMP報(bào)文包含在IP數(shù)據(jù)報(bào)中,屬于IP的一個(gè)用戶,IP頭部就在ICMP報(bào)文的前面,所以一個(gè)ICMP報(bào)文包括IP頭部、ICMP頭部和ICMP報(bào)文(見(jiàn)圖表,ICMP報(bào)文的結(jié)構(gòu)和幾種常見(jiàn)的ICMP報(bào)文格式),IP頭部的Protocol值為1就說(shuō)明這是一個(gè)ICMP報(bào)文,ICMP頭部中的類型(Type)域用于說(shuō)明ICMP報(bào)文的作用及格式,此外還有一個(gè)代碼(Code)域用于詳細(xì)說(shuō)明某種ICMP報(bào)文的類型,所有數(shù)據(jù)都在ICMP頭部后面。RFC定義了13種ICMP報(bào)文格式,具體如下:
類型代碼 類型描述
0 響應(yīng)應(yīng)答(ECHO-REPLY)
3 不可到達(dá)
4 源抑制
5 重定向
8 響應(yīng)請(qǐng)求(ECHO-REQUEST)
11 超時(shí)
12 參數(shù)失靈
13 時(shí)間戳請(qǐng)求
14 時(shí)間戳應(yīng)答
15 信息請(qǐng)求(*已作廢)
16 信息應(yīng)答(*已作廢)
17 地址掩碼請(qǐng)求
18 地址掩碼應(yīng)答
其中代碼為15、16的信息報(bào)文已經(jīng)作廢。
下面是幾種常見(jiàn)的ICMP報(bào)文:
1.響應(yīng)請(qǐng)求
我們?nèi)粘J褂米疃嗟膒ing,就是響應(yīng)請(qǐng)求(Type=8)和應(yīng)答(Type=0),一臺(tái)主機(jī)向一個(gè)節(jié)點(diǎn)發(fā)送一個(gè)Type=8的ICMP報(bào)文,如果途中沒(méi)有異常(例如被路由器丟棄、目標(biāo)不回應(yīng)ICMP或傳輸失。,則目標(biāo)返回Type=0的ICMP報(bào)文,說(shuō)明這臺(tái)主機(jī)存在,更詳細(xì)的tracert通過(guò)計(jì)算ICMP報(bào)文通過(guò)的節(jié)點(diǎn)來(lái)確定主機(jī)與目標(biāo)之間的網(wǎng)絡(luò)距離。
2.目標(biāo)不可到達(dá)、源抑制和超時(shí)報(bào)文
這三種報(bào)文的格式是一樣的,目標(biāo)不可到達(dá)報(bào)文(Type=3)在路由器或主機(jī)不能傳遞數(shù)據(jù)報(bào)時(shí)使用,例如我們要連接對(duì)方一個(gè)不存在的系統(tǒng)端口(端口號(hào)小于1024)時(shí),將返回Type=3、Code=3的ICMP報(bào)文,它要告訴我們:“嘿,別連接了,我不在家的!”,常見(jiàn)的不可到達(dá)類型還有網(wǎng)絡(luò)不可到達(dá)(Code=0)、主機(jī)不可到達(dá)(Code=1)、協(xié)議不可到達(dá)(Code=2)等。源抑制則充當(dāng)一個(gè)控制流量的角色,它通知主機(jī)減少數(shù)據(jù)報(bào)流量,由于ICMP沒(méi)有恢復(fù)傳輸?shù)膱?bào)文,所以只要停止該報(bào)文,主機(jī)就會(huì)逐漸恢復(fù)傳輸速率。最后,無(wú)連接方式網(wǎng)絡(luò)的問(wèn)題就是數(shù)據(jù)報(bào)會(huì)丟失,或者長(zhǎng)時(shí)間在網(wǎng)絡(luò)游蕩而找不到目標(biāo),或者擁塞導(dǎo)致主機(jī)在規(guī)定時(shí)間內(nèi)無(wú)法重組數(shù)據(jù)報(bào)分段,這時(shí)就要觸發(fā)ICMP超時(shí)報(bào)文的產(chǎn)生。超時(shí)報(bào)文的代碼域有兩種取值:Code=0表示傳輸超時(shí),Code=1表示重組分段超時(shí)。
3.時(shí)間戳
時(shí)間戳請(qǐng)求報(bào)文(Type=13)和時(shí)間戳應(yīng)答報(bào)文(Type=14)用于測(cè)試兩臺(tái)主機(jī)之間數(shù)據(jù)報(bào)來(lái)回一次的傳輸時(shí)間。傳輸時(shí),主機(jī)填充原始時(shí)間戳,接收方收到請(qǐng)求后填充接收時(shí)間戳后以Type=14的報(bào)文格式返回,發(fā)送方計(jì)算這個(gè)時(shí)間差。一些系統(tǒng)不響應(yīng)這種報(bào)文。
三、回到正題:這樣的攻擊有效嗎?
在前面講過(guò)了,ping使用的是ECHO應(yīng)答,不知道大家注意過(guò)沒(méi)有,ping的返回很慢,用NetXRAY抓包僅為1--5包/秒,這是為什么呢?事實(shí)上,ICMP本身并不慢(由于ICMP是SOCK_RAW產(chǎn)生的原始報(bào)文,速度比SOCK_STREAM的SYN和SOCK_DGRAM的UDP要快幾乎10倍。@樣的速度是ping程序故意延遲的(為什么?M$可不想每個(gè)人都能用ping來(lái)干壞事),同樣,我測(cè)試過(guò)一些號(hào)稱“ping洪水”的程序,發(fā)現(xiàn)它們的效率和ping.exe沒(méi)什么兩樣,經(jīng)過(guò)Dependency Walker查看程序調(diào)用的函數(shù)發(fā)現(xiàn),他們用的是icmp.dll提供的IcmpSendEcho這個(gè)API,這個(gè)函數(shù)是計(jì)算ECHO時(shí)間的,速度當(dāng)然慢!而那兩個(gè)“高手”號(hào)召的ping攻擊實(shí)際上就是為了實(shí)現(xiàn)ICMP洪水攻擊,但是他們用的方法……想想洪水的速度和山澗小溪的速度相差多少吧!就用ping.exe和IcmpSendEcho這種小溪慢慢流淌的速度能做什么?還不是讓人家看笑話!這種攻擊根本就是浪費(fèi)自己的時(shí)間。ㄈ缃襁經(jīng)常有人問(wèn)ping -l 65500 -t的攻擊威力如何……哎,悲哀啊悲哀……)
1.ICMP洪水的成因
ping.exe和IcmpSendEcho速度慢的另一個(gè)原因是它們必須等待目標(biāo)主機(jī)返回REPLY信息,這個(gè)過(guò)程需要花費(fèi)大量時(shí)間,而Flood——洪水,顧名思義,是速度極快的,當(dāng)一個(gè)程序發(fā)送數(shù)據(jù)包的速度達(dá)到了每秒1000個(gè)以上,它的性質(zhì)就成了洪水產(chǎn)生器,洪水?dāng)?shù)據(jù)是從洪水產(chǎn)生器里出來(lái)的,但這樣還不夠,沒(méi)有足夠的帶寬,再猛的洪水也只能像公路塞車那樣慢慢移動(dòng),成了雞肋。要做真正的洪水,就需要有一條足夠?qū)挼母咚俟凡趴梢。極慢的發(fā)送速度 56Kbps小貓等于什么?等于一個(gè)未關(guān)緊的水龍頭,根本沒(méi)用。
由于ping.exe無(wú)法提速,這就需要專門(mén)的工具來(lái)做洪水了。足夠快的數(shù)據(jù)包速度 足夠的帶寬,這才是洪水。
2.實(shí)現(xiàn)ICMP洪水的前提
最大的前提是攻擊者的速度!如果你要用56K撥號(hào)去攻擊一個(gè)512Kbps ADSL用戶,后果和一只螞蟻伸腿想絆倒大象的天方夜譚是一樣的!其次是你的機(jī)器運(yùn)行速度和數(shù)據(jù)吞吐量,由于涉及IP校驗(yàn)和的計(jì)算(先設(shè)置頭校驗(yàn)和域的數(shù)值為0,然后對(duì)整個(gè)數(shù)據(jù)報(bào)頭按每16位求異或,再把結(jié)果取反,就得到了校驗(yàn)和),如果數(shù)據(jù)處理能力不夠,在這步就慢了一個(gè)級(jí)別,效果當(dāng)然大打折扣。最后就是目標(biāo)機(jī)器的帶寬!如果對(duì)方比你大很多(例如你2M ADSL,別人用DDN或T1),那么任何Flood都是無(wú)病呻吟,撓癢都不夠。ㄏM灰賳(wèn)“小金,你的R-Series怎么不好用啊”、“我用小金的AnGryPing攻擊別人半天都沒(méi)事!”、“獨(dú)裁者的攻擊怎么無(wú)效?”這樣的問(wèn)題了,天啊,我頭都大了!)
還有許多人都忽略的問(wèn)題:發(fā)送的速度與數(shù)據(jù)包大小成反比,而且太大的數(shù)據(jù)包會(huì)被路由器等設(shè)備過(guò)濾掉!找到一個(gè)合適的數(shù)據(jù)包大小,對(duì)提高Flood的效率有很大幫助!
3.洪水——兩敗俱傷的攻擊方式
別以為洪水無(wú)所不能,實(shí)際上,你展開(kāi)洪水攻擊時(shí),攻擊程序在消耗對(duì)方帶寬和資源時(shí),也在消耗你的帶寬和資源。這只是個(gè)看誰(shuí)撐得住的攻擊而已。實(shí)際上,有經(jīng)驗(yàn)的攻擊者都是用被控制的服務(wù)器(肉雞)來(lái)代替自己的機(jī)器發(fā)動(dòng)攻擊的,不到萬(wàn)不得已或者你對(duì)自己的機(jī)器網(wǎng)速有自信,否則盡量少用自己的機(jī)器來(lái)拼搏!
五、不**式的ICMP洪水
1.直接Flood
要做這個(gè)的首要條件是你的帶寬夠,然后就是要一個(gè)好用的ICMP Flooder,別用ping.exe那種探路用的垃圾,例如我以前發(fā)布的AnGryPing,發(fā)包速度達(dá)到6000---9000包/秒(512 Kbps ADSL),默認(rèn)是32bytes的ECHO報(bào)文洪水,用它即使不能flood別人下去,防火墻也叫得夠慘的了。直接攻擊會(huì)暴露自己IP(如果對(duì)方?jīng)]有還擊能力那還無(wú)所謂,固定IP用戶不推薦使用這種Flood),直接Flood主要是為了顧及Win9x/Me不能偽造IP的缺陷,否則一般還是別用為妙。
簡(jiǎn)單示意:
ICMP
攻擊者[IP=211.97.54.3]--------------------------------->受害者[截獲攻擊者IP=211.97.54.3]==>換IP回來(lái)反擊,嘿嘿
2.偽造IP的Flood
如果你是Win2000/XP并且是Administrator權(quán)限,可以試試看FakePing,它能隨意偽造一個(gè)IP來(lái)Flood,讓對(duì)方摸不到頭腦,屬于比較隱蔽陰險(xiǎn)的Flood。
簡(jiǎn)單示意:
偽造IP=1.1.1.1的ICMP
攻擊者[IP=211.97.54.3]--------------------------------->受害者[截獲攻擊者IP=1.1.1.1]==>倒死
3.反射
用采取這種方式的第一個(gè)工具的名稱來(lái)命名的“Smurf”洪水攻擊,把隱蔽性又提高了一個(gè)檔次,這種攻擊模式里,最終淹沒(méi)目標(biāo)的洪水不是由攻擊者發(fā)出的,也不是偽造IP發(fā)出的,而是正常通訊的服務(wù)器發(fā)出的!
實(shí)現(xiàn)的原理也不算復(fù)雜,Smurf方式把源IP設(shè)置為受害者IP,然后向多臺(tái)服務(wù)器發(fā)送ICMP報(bào)文(通常是ECHO請(qǐng)求),這些接收?qǐng)?bào)文的服務(wù)器被報(bào)文欺騙,向受害者返回ECHO應(yīng)答(Type=0),導(dǎo)致垃圾阻塞受害者的門(mén)口……
從示意圖可以看出,它比上面兩種方法多了一級(jí)路徑——受騙的主機(jī)(稱為“反射源”),所以,一個(gè)反射源是否有效或者效率低下,都會(huì)對(duì)Flood效果造成影響! 本新聞共 3頁(yè),當(dāng)前在第 1頁(yè) 1 2 3 |
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|