對(duì)DDoS攻擊實(shí)例之SYN Flood攻擊的詳細(xì)內(nèi)容講述
此文章主要介紹的是DDoS攻擊實(shí)例 SYN Flood攻擊,我們大家都知道SYN-Flood是目前使用最廣泛的DDoS攻擊手段,早先的DoS的手段在向分布式這一階段發(fā)展的時(shí)候也經(jīng)歷了千軍萬(wàn)馬過(guò)獨(dú)木橋的過(guò)程。
SYN-Flood的攻擊效果最好,應(yīng)該是眾黑客不約而同選擇它的原因吧。那么我們一起來(lái)看看SYN-Flood的詳細(xì)情況。
SYN-Flood是目前最流行的DDoS攻擊手段,早先的DoS的手段在向分布式這一階段發(fā)展的時(shí)候也經(jīng)歷了浪里淘沙的過(guò)程。SYN-Flood的攻擊效果最好,應(yīng)該是眾黑客不約而同選擇它的原因吧。那么我們一起來(lái)看看SYN-Flood的詳細(xì)情況。
Syn Flood原理 - 三次握手
Syn Flood利用了TCP/IP協(xié)議的固有漏洞。面向連接的TCP三次握手是Syn Flood存在的基礎(chǔ)。
TCP連接的三次握手
如圖二,在第一步中,客戶端向服務(wù)端提出連接請(qǐng)求。這時(shí)TCP SYN標(biāo)志置位??蛻舳烁嬖V服務(wù)端序列號(hào)區(qū)域合法,需要檢查??蛻舳嗽赥CP報(bào)頭的序列號(hào)區(qū)中插入自己的ISN。服務(wù)端收到該TCP分段后,在第二步以自己的ISN回應(yīng)(SYN標(biāo)志置位),同時(shí)確認(rèn)收到客戶端的第一個(gè)TCP分段(ACK標(biāo)志置位)。在第三步中,客戶端確認(rèn)收到服務(wù)端的ISN(ACK標(biāo)志置位)。到此為止建立完整的TCP連接,開(kāi)始全雙工模式的數(shù)據(jù)傳輸過(guò)程。
Syn Flood攻擊者不會(huì)完成三次握手
假設(shè)一個(gè)用戶向服務(wù)器發(fā)送了SYN報(bào)文后突然死機(jī)或掉線,那么服務(wù)器在發(fā)出SYN+ACK應(yīng)答報(bào)文后是無(wú)法收到客戶端的ACK報(bào)文的(第三次握手無(wú)法完成),這種情況下服務(wù)器端一般會(huì)重試(再次發(fā)送SYN+ACK給客戶端)并等待一段時(shí)間后丟棄這個(gè)未完成的連接,這段時(shí)間的長(zhǎng)度我們稱為SYN Timeout,一般來(lái)說(shuō)這個(gè)時(shí)間是分鐘的數(shù)量級(jí)(大約為30秒-2分鐘);
一個(gè)用戶出現(xiàn)異常導(dǎo)致服務(wù)器的一個(gè)線程等待1分鐘并不是什么很大的問(wèn)題,但如果有一個(gè)惡意的攻擊者大量模擬這種情況,服務(wù)器端將為了維護(hù)一個(gè)非常大的半連接列表而消耗非常多的資源----數(shù)以萬(wàn)計(jì)的半連接,即使是簡(jiǎn)單的保存并遍歷也會(huì)消耗非常多的CPU時(shí)間和內(nèi)存,何況還要不斷對(duì)這個(gè)列表中的IP進(jìn)行SYN+ACK的重試。
實(shí)際上如果服務(wù)器的TCP/IP棧不夠強(qiáng)大,最后的結(jié)果往往是堆棧溢出崩潰---即使服務(wù)器端的系統(tǒng)足夠強(qiáng)大,服務(wù)器端也將忙于處理攻擊者偽造的TCP連接請(qǐng)求而無(wú)暇理睬客戶的正常請(qǐng)求(畢竟客戶端的正常請(qǐng)求比率非常之小),此時(shí)從正??蛻舻慕嵌瓤磥?lái),服務(wù)器失去響應(yīng),這種情況我們稱做:服務(wù)器端受到了SYN Flood攻擊(SYN洪水攻擊)。
下面是我在實(shí)驗(yàn)室中模擬的一次Syn Flood攻擊的實(shí)際過(guò)程
這一個(gè)局域網(wǎng)環(huán)境,只有一臺(tái)攻擊機(jī)(PIII667/128/mandrake),被攻擊的是一臺(tái)Solaris 8.0 (spark)的主機(jī),網(wǎng)絡(luò)設(shè)備是Cisco的百兆交換機(jī)。這是在攻擊并未進(jìn)行之前,在Solaris上進(jìn)行snoop的記錄,snoop與tcpdump等網(wǎng)絡(luò)監(jiān)聽(tīng)工具一樣,也是一個(gè)很好的網(wǎng)絡(luò)抓包與分析的工具??梢钥吹焦糁?,目標(biāo)主機(jī)上接到的基本上都是一些普通的網(wǎng)絡(luò)包。 …
…
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
? -> (multicast) ETHER Type=0000 (LLC/802.3), size = 52 bytes
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]
192.168.0.210 -> 192.168.0.255 NBT Datagram Service Type=17 Source=ROOTDC[20]
192.168.0.247 -> 192.168.0.255 NBT Datagram Service Type=17 Source=TSC[0]
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
192.168.0.200 -> (broadcast) ARP C Who is 192.168.0.102, 192.168.0.102 ?
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]
192.168.0.66 -> 192.168.0.255 NBT Datagram Service Type=17 Source=GU[0]
192.168.0.210 -> 192.168.0.255 NBT Datagram Service Type=17 Source=ROOTDC[20]
? -> (multicast) ETHER Type=0000 (LLC/802.3), size = 52 bytes
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
? -> (broadcast) ETHER Type=886F (Unknown), size = 1510 bytes
…
…
接著,攻擊機(jī)開(kāi)始發(fā)包,DDoS開(kāi)始了…,突然間sun主機(jī)上的snoop窗口開(kāi)始飛速地翻屏,顯示出接到數(shù)量巨大的Syn請(qǐng)求。這時(shí)的屏幕就好象是時(shí)速300公里的列車上的一扇車窗。這是在Syn Flood攻擊時(shí)的snoop輸出結(jié)果: …#p#
…
127.0.0.178 -> lab183.lab.net AUTH C port=1352
127.0.0.178 -> lab183.lab.net TCP D=114 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=115 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net UUCP-PATH C port=1352
127.0.0.178 -> lab183.lab.net TCP D=118 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net NNTP C port=1352
127.0.0.178 -> lab183.lab.net TCP D=121 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=122 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=124 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=125 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=126 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=128 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=130 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=131 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=133 S=1352 Syn Seq=674711609 Len=0 Win=65535
127.0.0.178 -> lab183.lab.net TCP D=135 S=1352 Syn Seq=674711609 Len=0 Win=65535
…
…
這時(shí)候內(nèi)容完全不同了,再也收不到剛才那些正常的網(wǎng)絡(luò)包,只有DDoS包。大家注意一下,這里所有的Syn Flood攻擊包的源地址都是偽造的,給追查工作帶來(lái)很大困難。這時(shí)在被攻擊主機(jī)上積累了多少Syn的半連接呢?我們用netstat來(lái)看一下:
# netstat -an | grep SYN
…
…
192.168.0.183.9 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.13 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.19 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.21 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.22 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.23 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.25 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.37 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
192.168.0.183.53 127.0.0.79.1801 0 0 24656 0 SYN_RCVD
…
…
其中SYN_RCVD表示當(dāng)前未完成的TCP SYN隊(duì)列,統(tǒng)計(jì)一下:
# netstat -an | grep SYN | wc -l
5273
# netstat -an | grep SYN | wc -l
5154
# netstat -an | grep SYN | wc -l
5267
…..
共有五千多個(gè)Syn的半連接存儲(chǔ)在內(nèi)存中。這時(shí)候被攻擊機(jī)已經(jīng)不能響應(yīng)新的服務(wù)請(qǐng)求了,系統(tǒng)運(yùn)行非常慢,也無(wú)法ping通。
上述的相關(guān)內(nèi)容就是對(duì)對(duì)DDoS攻擊實(shí)例之SYN Flood攻擊的詳細(xì)內(nèi)容講述的描述,希望會(huì)給你帶來(lái)一些幫助在此方面。