新聞中心
我們今天主要向大家講述的是互聯(lián)網(wǎng)的巨大威脅之ICMP洪水攻擊,幾年前的某天晚上9時(shí),突然有兩個(gè)“大蝦”進(jìn)入一個(gè)聊天室,提議里面的50多個(gè)網(wǎng)民“去響應(yīng)號(hào)召,做愛國(guó)的事”,以下是原話摘錄:

我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、平山ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的平山網(wǎng)站制作公司
大蝦甲:今晚10點(diǎn),大家一起去ping白宮!
大蝦乙:嗯嗯!ping死白宮!
網(wǎng)民:怎么做?
大蝦甲:你怎么這么笨?開MS-DOS窗口,輸入 ping xxx.xxx.xxx.xxx -l 65500 -t就可以了!
網(wǎng)民:這樣有什么用?
大蝦甲:只要這樣做,白宮網(wǎng)站就進(jìn)不去了。
網(wǎng)民:哦~~原來如此~~~這樣做是什么原理?高手可以解釋一下嗎?
大蝦甲:這個(gè)嘛……還是讓他來說吧!
大蝦乙:這個(gè)……這個(gè)……咳,總之別問這么多,照著做就是了,上頭說過好像是什么DOS攻擊吧,這樣做,白宮網(wǎng)站的服務(wù)器就會(huì)垮掉。
大蝦甲:總之到時(shí)候你們一起這樣做就可以了!10點(diǎn)準(zhǔn)時(shí)開始,我們先去準(zhǔn)備了!
網(wǎng)民:不懂……
不懂歸不懂,當(dāng)晚10點(diǎn),愛國(guó)的網(wǎng)民們一起用上面“高手”給出的命令開始了雄偉的“愛國(guó)反擊戰(zhàn)”——一場(chǎng)無聊的鬧劇!
他們這樣做是什么原理?那樣的“攻擊”有效嗎?要解釋這些,就要從ICMP協(xié)議說起。
一、什么是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é)議自身沒有內(nèi)在機(jī)制來獲取差錯(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)文(見圖表,ICMP報(bào)文的結(jié)構(gòu)和幾種常見的ICMP報(bào)文格式),IP頭部的Protocol值為1就說明這是一個(gè)ICMP報(bào)文,ICMP頭部中的類型(Type)域用于說明ICMP報(bào)文的作用及格式,此外還有一個(gè)代碼(Code)域用于詳細(xì)說明某種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)作廢。
下面是幾種常見的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)文,如果途中沒有異常(例如被路由器丟棄、目標(biāo)不回應(yīng)ICMP或傳輸失敗),則目標(biāo)返回Type=0的ICMP報(bào)文,說明這臺(tái)主機(jī)存在,更詳細(xì)的tracert通過計(jì)算ICMP報(bào)文通過的節(jié)點(diǎn)來確定主機(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)文,它要告訴我們:“嘿,別連接了,我不在家的!”,常見的不可到達(dá)類型還有網(wǎng)絡(luò)不可到達(dá)(Code=0)、主機(jī)不可到達(dá)(Code=1)、協(xié)議不可到達(dá)(Code=2)等。源抑制則充當(dāng)一個(gè)控制流量的角色,它通知主機(jī)減少數(shù)據(jù)報(bào)流量,由于ICMP沒有恢復(fù)傳輸?shù)膱?bào)文,所以只要停止該報(bào)文,主機(jī)就會(huì)逐漸恢復(fù)傳輸速率。最后,無連接方式網(wǎng)絡(luò)的問題就是數(shù)據(jù)報(bào)會(huì)丟失,或者長(zhǎng)時(shí)間在網(wǎng)絡(luò)游蕩而找不到目標(biāo),或者擁塞導(dǎo)致主機(jī)在規(guī)定時(shí)間內(nèi)無法重組數(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)來回一次的傳輸時(shí)間。傳輸時(shí),主機(jī)填充原始時(shí)間戳,接收方收到請(qǐng)求后填充接收時(shí)間戳后以Type=14的報(bào)文格式返回,發(fā)送方計(jì)算這個(gè)時(shí)間差。一些系統(tǒng)不響應(yīng)這種報(bào)文。
三、回到正題:這樣的攻擊有效嗎?
在前面講過了,ping使用的是ECHO應(yīng)答,不知道大家注意過沒有,ping的返回很慢,用NetXRAY抓包僅為1--5包/秒,這是為什么呢?事實(shí)上,ICMP本身并不慢(由于ICMP是SOCK_RAW產(chǎn)生的原始報(bào)文,速度比SOCK_STREAM的SYN和SOCK_DGRAM的UDP要快幾乎10倍!),這樣的速度是ping程序故意延遲的(為什么?M$可不想每個(gè)人都能用ping來干壞事),同樣,我測(cè)試過一些號(hào)稱“ping洪水”的程序,發(fā)現(xiàn)它們的效率和ping.exe沒什么兩樣。
經(jīng)過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)常有人問ping -l 65500 -t的攻擊威力如何……哎,悲哀啊悲哀……)
四、什么是ICMP洪水?
1.ICMP洪水的成因
ping.exe和IcmpSendEcho速度慢的另一個(gè)原因是它們必須等待目標(biāo)主機(jī)返回REPLY信息,這個(gè)過程需要花費(fèi)大量時(shí)間,而Flood——洪水,顧名思義,是速度極快的,當(dāng)一個(gè)程序發(fā)送數(shù)據(jù)包的速度達(dá)到了每秒1000個(gè)以上,它的性質(zhì)就成了洪水產(chǎn)生器,洪水?dāng)?shù)據(jù)是從洪水產(chǎn)生器里出來的,但這樣還不夠,沒有足夠的帶寬,再猛的洪水也只能像公路塞車那樣慢慢移動(dòng),成了雞肋。要做真正的洪水,就需要有一條足夠?qū)挼母咚俟凡趴梢?。極慢的發(fā)送速度+56Kbps小貓等于什么?等于一個(gè)未關(guān)緊的水龍頭,根本沒用。
由于ping.exe無法提速,這就需要專門的工具來做洪水了。足夠快的數(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都是無病呻吟,撓癢都不夠!(希望不要再問“小金,你的R-Series怎么不好用啊”、“我用小金的AnGryPing攻擊別人半天都沒事!”、“獨(dú)裁者的攻擊怎么無效啊?”這樣的問題了,天啊,我頭都大了!)
還有許多人都忽略的問題:發(fā)送的速度與數(shù)據(jù)包大小成反比,而且太大的數(shù)據(jù)包會(huì)被路由器等設(shè)備過濾掉!找到一個(gè)合適的數(shù)據(jù)包大小,對(duì)提高Flood的效率有很大幫助!
3.洪水——兩敗俱傷的攻擊方式
別以為洪水無所不能,實(shí)際上,你展開ICMP洪水攻擊時(shí),攻擊程序在消耗對(duì)方帶寬和資源時(shí),也在消耗你的帶寬和資源。這只是個(gè)看誰撐得住的攻擊而已。實(shí)際上,有經(jīng)驗(yàn)的攻擊者都是用被控制的服務(wù)器(肉雞)來代替自己的機(jī)器發(fā)動(dòng)攻擊的,不到萬不得已或者你對(duì)自己的機(jī)器網(wǎng)速有自信,否則盡量少用自己的機(jī)器來拼搏!
五、不同方式的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)]有還擊能力那還無所謂,固定IP用戶不推薦使用這種Flood),直接Flood主要是為了顧及Win9x/Me不能偽造IP的缺陷,否則一般還是別用為妙。
簡(jiǎn)單示意圖:
ICMP
攻擊者[IP=211.97.54.3]--------------------------------->受害者[截獲攻擊者IP=211.97.54.3]==>換IP回來反擊,嘿嘿
2.偽造IP的Flood
如果你是Win2000/XP并且是Administrator權(quán)限,可以試試看FakePing,它能隨意偽造一個(gè)IP來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è)工具的名稱來命名的“Smurf”洪水攻擊,把隱蔽性又提高了一個(gè)檔次,這種攻擊模式里,最終淹沒目標(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)致垃圾阻塞受害者的門口……
從示意圖可以看出,它比上面兩種方法多了一級(jí)路徑——受騙的主機(jī)(稱為“反射源”),所以,一個(gè)反射源是否有效或者效率低下,都會(huì)對(duì)Flood效果造成影響!
簡(jiǎn)單示意圖:
偽造受害者的ICMP 應(yīng)答
攻擊者[IP=211.97.54.3]-------------------------->正常的主機(jī)--------------->受害者[截獲攻擊者IP=……網(wǎng)易?!]==>哭啊……
以上是幾種常見的Flood方式,在測(cè)試中,我發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象:一些防火墻(如天網(wǎng))只能攔截ECHO請(qǐng)求(Ping)的ICMP報(bào)文,對(duì)于其他ICMP報(bào)文一概睜只眼閉只眼,不知道其他防火墻有沒有這個(gè)情況。所以想神不知鬼不覺對(duì)付你的敵人時(shí),請(qǐng)盡量避開直接ECHO Flood,換用Type=0的ECHO應(yīng)答或Type=14的時(shí)間戳應(yīng)答最好,其他類型的ICMP報(bào)文沒有詳細(xì)測(cè)試過,大家可以試試看Type=3、4、11的特殊報(bào)文會(huì)不會(huì)有更大效果。
六、ICMP Flood能防嗎?
先反問你一個(gè)問題:洪水迅猛的沖來時(shí),你能否拿著一個(gè)臉盆來抵擋?(坐上臉盆做現(xiàn)代魯賓遜倒是個(gè)不錯(cuò)的主意,沒準(zhǔn)能漂到MM身邊呢)
軟件的網(wǎng)絡(luò)防火墻能對(duì)付一些漏洞、溢出、OOB、IGMP攻擊,但是對(duì)于洪水類型的攻擊,它們根本無能為力,我通常對(duì)此的解釋是“傾倒垃圾”:“有蟑螂或老鼠在你家門前逗留,你可以把它們趕走,但如果有人把一車?yán)鴥A倒在你家門口呢?”前幾天看到mikespook大哥對(duì)此有更體面的解釋,轉(zhuǎn)載過來——“香蕉皮原理:如果有人給你一個(gè)香蕉和一個(gè)香蕉皮你能區(qū)分,并把沒有用的香蕉皮扔掉。
(一般軟件防火墻就是這么判斷并丟棄數(shù)據(jù)包的。)但是如果有人在同一時(shí)間內(nèi)在你身上倒一車香蕉皮,你再能區(qū)分有用沒用也沒啥作用了~~因?yàn)槟惚幌憬镀ぱ蜎]了~~~~(所以就算防火墻能區(qū)分是DoS的攻擊數(shù)據(jù)包,也只能識(shí)別,根本來不及丟棄~~死了,死了,死了~~)”
所以,洪水沒法防!能做的只有提高自己的帶寬和預(yù)防洪水的發(fā)生(雖然硬件防火墻和分流技術(shù)能做到,但那價(jià)格是太昂貴的,而且一般人也沒必要這樣做)。
以上的相關(guān)內(nèi)容就是對(duì)互聯(lián)網(wǎng)的巨大威脅之ICMP洪水攻擊的介紹,望你能有所收獲。
網(wǎng)站欄目:對(duì)ICMP洪水攻擊認(rèn)識(shí)描述
網(wǎng)頁網(wǎng)址:http://m.fisionsoft.com.cn/article/cdhoecc.html


咨詢
建站咨詢
