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