◆趙菁
虛擬化平臺下SYN Flooding攻擊研究
◆趙菁
(北京信息職業(yè)技術(shù)學(xué)院 北京 100018)
本文引入Kali Linux和Windows 2003兩個虛擬機構(gòu)造了一個仿真環(huán)境,采用Kali Linux中自帶的hping3發(fā)起SYN Flooding攻擊,并且使用Wireshark對攻擊進(jìn)行了分析,最終給出攻擊的防御方法。
DDoS攻擊;SYN Flooding攻擊原理;攻擊的模擬與分析;SYN Flooding攻擊的防御
DDoS攻擊是全世界都面臨的問題,幾乎每家公司的服務(wù)器都受到過不同程度的攻擊。SYN FLOODING攻擊在單純的流量型攻擊中,是作為最常用的攻擊方式,在阿里云安全團(tuán)隊《2019年上半年DDoS攻擊態(tài)勢報告》顯示SYN_Flood占比達(dá)10.59%。DDoS攻擊手段呈現(xiàn)的特點是更加隱蔽復(fù)雜,峰值流量Tb級攻擊時代已經(jīng)到來,研究DDoS攻擊對該攻擊的防御具有積極意義。本文在討論了DDoS攻擊的原理、種類、SYN Flooding攻擊原理的基礎(chǔ)上,搭建了實驗仿真環(huán)境,再現(xiàn)了SYN FLOODING攻擊的情景,并使用Wireshark對攻擊進(jìn)行了分析,最后提出攻擊的防御方法。
DDoS最初的形式是DoS(Denial of Service)攻擊,DoS攻擊的原理是:通過消耗網(wǎng)絡(luò)帶寬、系統(tǒng)資源以導(dǎo)致網(wǎng)絡(luò)或系統(tǒng)瀕臨癱瘓甚至完全癱瘓,從而不能提供正常的網(wǎng)絡(luò)服務(wù)或使服務(wù)質(zhì)量顯著降低來達(dá)到攻擊的目的。
DDoS攻擊即分布式拒絕服務(wù)攻擊(Distributed Denial of Service)。在DoS攻擊中如果處于不同位置的多個攻擊者同時向一個或多個目標(biāo)發(fā)起拒絕服務(wù)攻擊,或一個或多個攻擊者控制了位于不同位置的多臺計算機,并利用這些計算機對受害者同時實施DoS攻擊,則稱這種攻擊為DDoS攻擊,它是DoS攻擊最主要的一種形式。
DoS是一對一攻擊。隨著網(wǎng)絡(luò)帶寬、計算機性能的高速發(fā)展,類似DoS這樣一對一的攻擊已經(jīng)起不了什么作用了,于是DDoS—分布式拒絕服務(wù)攻擊誕生了,其原理和DoS相同,不同之處在于DDoS攻擊是多對一進(jìn)行攻擊。具體過程是:黑客首先掃描Internet上的主機,發(fā)現(xiàn)存在漏洞的主機,然后在其上安置代理程序,從而攻占傀儡機,進(jìn)而通過這些傀儡機,對目標(biāo)系統(tǒng)發(fā)起大規(guī)模的攻擊,成倍地提高拒絕服務(wù)攻擊的威力,在同一時間以DoS攻擊的方式攻擊一臺服務(wù)器,最終導(dǎo)致被攻擊的服務(wù)器癱瘓。
DDoS攻擊的種類包括:Http Flooding攻擊、SYN Flooding攻擊、UDP Flooding攻擊、DNS Flooding攻擊等等,本文主要介紹SYN Flooding攻擊的原理與防御方法。
1.4.1 TCP三次握手的過程
TCP的連接建立是一個三次握手過程,目的是為了通信雙方確認(rèn)開始序號,以便后續(xù)通信的有序進(jìn)行。主要步驟如下:
(1)連接開始時,連接建立方(Client)發(fā)送SYN包,并包含了自己的初始序號a;
(2)連接接受方(Server)收到SYN包以后會回復(fù)一個SYN包,其中包含了對上一個a包的回應(yīng)信息ACK,回應(yīng)的序號為下一個希望收到包的序號,即a+1,然后還包含了自己的初始序號b;
(3)連接建立方(Client)收到回應(yīng)的SYN包以后,回復(fù)一個ACK包做響應(yīng),其中包含了下一個希望收到包的序號即b+1。
1.4.2什么是SYN Flooding
SYN Flooding攻擊是DDoS的一種形式,它利用TCP協(xié)議存在的半連接缺陷,發(fā)送大量虛假的TCP SYN報文(連接請求),但對服務(wù)器的TCP SYN+ACK應(yīng)答報文(連接響應(yīng))不做應(yīng)答,即三次握手的第三次握手(對響應(yīng)的響應(yīng))無法完成。在這種情況下,服務(wù)器端一般會重試(再次發(fā)送SYN+ACK給客戶端)并等待一段時間(稱為SYN Timeout,分鐘級,大約為0.5至2分鐘)后丟棄這個未完成的連接(稱為“半連接”,放在半連接表中),如果一個惡意的攻擊者大量發(fā)出這種請求,則服務(wù)器將會為了維護(hù)一個非常大的半連接列表而消耗非常多的資源。一般系統(tǒng)中,半連接數(shù)的上限為1024,超過此限制則不接受新的連接請求,此時從正??蛻舻慕嵌瓤矗?wù)器失去響應(yīng)了。此外,對服務(wù)器的性能也會有很大的影響。
在kali linux中打開一個終端,然后輸入:root@kali:~# hping3 -q -n --rand-source -S -p 80 --flood 192.168.203.200,攻擊就開始了。
從圖1可以看到,kali linux偽造了大量的源IP地址和源port,對測試機(IP:192.168.203.200)發(fā)送了TCP三次握手中的SYN包,進(jìn)行了SYN泛洪攻擊。
直接查看wireshark抓到的包不是很直觀,可以使用wireshark提供的統(tǒng)計功能的流量圖來查看,如圖2所示。在wireshark的菜單欄中:統(tǒng)計->流量圖。
圖1 使用wireshark抓到SYN泛洪攻擊包
圖2 wireshark中的流向圖
從這個流量圖中可以看到大量偽造的隨機源地址只向目標(biāo)主機發(fā)送了一個SYN請求。并且可以看到每一個包的流向,為抓包方便上圖是在kali linux上的截圖,所以無法看到SYN+ACK包從80端口發(fā)出去(需要在測試機上使用wireshark抓包)。在流量圖中可以看到兩點,一是短時間出現(xiàn)了大量的數(shù)據(jù)包,二是這些數(shù)據(jù)包并沒有后續(xù)。
TCP SYN Flooding的防御一般有以下方式:
(1)丟棄第一個SYN包
TCP SYN泛洪攻擊發(fā)送的SYN包,一般每個偽造源IP只會發(fā)送一個SYN包,所以丟棄每個源IP地址對應(yīng)的第一個SYN包可以達(dá)到避免泛洪攻擊的目的。
缺點是用戶體驗比較差,因為正常的用戶請求始終要發(fā)送兩次SYN包才能成功建立TCP連接。當(dāng)泛洪攻擊每一個SYN包發(fā)送兩次時,這種防御方式就失效了。
(2)反向探測
當(dāng)收到某個SYN包時,服務(wù)器不會直接返回SYN+ACK包,而是先發(fā)送一個用于反向探測的SYN包來確定源IP和端口的合法性(即是否在線,對面返回SYN+ACK)。如果對方合法,服務(wù)器再回復(fù)正確的SYN+ACK包。
(3)代理模式
使用防火墻代理與來源地址進(jìn)行TCP連接,當(dāng)正常建立連接后,防火墻再和后面的服務(wù)器進(jìn)行連接,并代理業(yè)務(wù)數(shù)據(jù)。
SYN Flooding攻擊可以利用TCP協(xié)議的缺陷對目標(biāo)服務(wù)器發(fā)起攻擊,以造成被攻擊目標(biāo)拒絕服務(wù)的嚴(yán)重后果。本文通過搭建仿真環(huán)境模擬了攻擊過程,為了更好地了解網(wǎng)絡(luò)攻擊的詳情,利用Wireshark的流向圖功能繪制出了TCP端點之間的數(shù)據(jù)流,更直觀地分析了SYN Flooding攻擊。通過丟棄第一個SYN包、反向探測和設(shè)置代理模式幾種方式可以有效地防御SYN Flooding攻擊。
[1]陶濤. SYN 洪泛攻擊原理及其防范策略[J].電腦知識與技術(shù),2012.
[2]劉雙強. SYN Flooding攻擊原理與防御措施[J]. 電腦知識與技術(shù),2009.