關于冰盾 | 使用條款 | 網站地圖
 
你到底遭受了多大的SYN Flood攻擊?
你到底遭受了多大的SYN Flood攻擊?
作者:冰盾防火墻 網站:www.gjmudd.tw 日期:2015-01-06
 

Team: http://www.ph4nt0m.org
Author: 云舒(http://www.icylife.net
Date: 2007-12-07

這是一篇好玩的文章,它并不是講SYN Flood的攻擊原理的,也不描述防御攻擊的解決方案。在這里,我會隨便說說幾個通常被設備廠商或無意,或有意隱藏的幾個細節。如果你在考慮買防御攻擊的設備,希望這個文章能夠給你一些幫助——至少在和廠商談判的時候,知道問哪些問題,不會輕易被人忽悠了。

一. 以太網填充

目前的SYN Flood程序,為了提高發送效率,填充包頭的時候,沒有填充可選的字段,因此IP頭長度恰好是20字節(Byte),圖示如下:
typedef struct ip_hdr
{
unsigned char h_verlen;
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_and_flags;
unsigned char ttl;
unsigned char proto;
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;
}IP_HEADER;

同樣的,對于TCP頭部,長度也是20字節,圖示如下:
typedef struct tcp_hdr
{
unsigned short th_sport;
unsigned short th_dport;
unsigned int th_seq;
unsigned int th_ack;
unsigned char th_lenres;
unsigned char th_flag;
unsigned short th_win;
unsigned short th_sum;
unsigned short th_urp;
}TCP_HEADER;

也就是說,攻擊程序填充了一個40字節的數據包,開始發送。但是對于以太網來說,最小的包長度數據段必須達到46字節,而我們的包只有40字節,因此,網卡在發送的時候,會作一些處理。我們40字節的IP頭加TCP頭包的末尾,會被網卡填充6個0來滿足最小包的長度要求。這個時候,整個數據包的長度為14字節的以太網頭,20字節的IP頭,20字節的TCP頭,再加上因為最小包長度要求而填充的6個字節的0,一共是60字節。但是這并還沒有完,因為以太網在傳輸的時候,還有CRC檢驗的要求,發送數據之前,網卡會對數據包進行CRC檢驗,將4字節的CRC值附加到包頭的最后面。這個時候,我們的數據包長度已經不再是40字節,而是變成了64字節了。這時數據包的結構如下:
| 14字節以太網頭 | 20字節IP頭 | 20字節TCP頭 | 6字節填充 | 4字節檢驗 | 
| 目的MAC地址 | 源MAC地址 | 上層協議類型 | IP頭 | TCP頭 | 以太網填充 | CRC檢驗 |

這些工作都做完了,網卡就開始發送數據包了。但是遺憾的是,你在攻擊發起端使用一般的抓包工具,比如TcpDump,WireShark這些,是沒法看到這個過程的,這個過程只能由受攻擊的主機上抓包進行一些簡單的驗證。但是在被攻擊端使用類工具進行抓包,則可以明顯的看到,發送的只有IP頭和 TCP頭的SYN數據包,到達被攻擊的機器的時候,后面會多了6個字節的0填充,這就是剛才所說的以太網最小包長度填充了。比較遺憾的是,4字節的CRC 檢驗在網卡接受到數據包完成檢驗之后,就丟掉了,在被攻擊端也沒法使用常見的工具捕獲到。

也就是說,你填充的40字節的報文在到達被攻擊機器網卡的時候,已經不是40字節,而是64字節了。

二. 以太網傳輸

剛才我們說了在發送時候網卡對數據包的填充等操作,但是還沒完,我們來看看攻擊數據包在網絡上的傳輸過程。因為攻擊數據包很小,遠遠不夠最大傳輸單元(MTU)的1500字節,因此不會被分片。難道這些數據包就像生產流水線上的罐頭一樣,一個包連著一個包緊密的擠在一起傳輸的嗎?事實上不是這樣的。

以太網在傳輸的時候,還有前導碼(preamble)和幀間距(inter-frame gap)。其中前導碼占8字節(byte),64比特位。前導碼前面的7字節都是10101010,1和0間隔而成。但是第八個字節就變成了 10101011,當主機監測到連續的兩個1的時候,就知道后面開始是數據了,首先是目的MAC地址等等,依次解析。也就是說,前導碼是告訴主機做好接收數據準備的。幀間距是以太網數據包之間的間隙,幀間距的大小是12字節(byte),96比特位。因此,在網絡傳輸的時候,數據的結構如下:

| 8字節前導碼 | 6字節目的MAC地址 | 6字節源MAC地址 | 2字節上層協議類型 | 20字節IP頭 | 20字節TCP頭 | 6字節以太網填充 | 4字節CRC檢驗 | 12字節幀間距 |

也就是說,一個SYN包,在網絡上傳輸的時候占得帶寬,其實是84字節。

三. 百兆線速或者千兆線速

有了上面的基礎,現在可以開始討論網絡安全設備的線速問題了,這里的安全設備可以是Anti-DDOS設備,也可以是IDS,或者IPS等設備。當只填充IP頭和TCP頭的最小SYN包跑在以太網絡上的時候,100Mbit的網絡,能支持的最大PPS是100*10^6 / (8 * (64 + 8 + 12)) = 148809 pps,1000Mbit的網絡,能支持的最大PPS是1488090 pps。

當廠商來宣傳他們的安全設備的時候,他們的數據是否和這些符合呢?他們的IDS支持的最大流量是怎么計算的?包含了哪些內容?他們的Anti- DDOS設備宣傳的線速是符合實際情況的嗎?是否真的能夠防御相應的PPS的攻擊?當你和別人講,你們的IDS顯示你們遭受了N Gbit SYN Flood攻擊,PPS達到N百萬的時候,你真的遭受了大的攻擊嗎?

四. 總結以及參考

這是去年作DDOS防御方面的項目時的一些心得筆記,今天周五沒太多事情,就整理一下發出來,或許對一些朋友有幫助。

1. http://www.ietf.org/rfc/rfc894.txt,關于最小包長度和最大包長度的描述。
2. http://www.ietf.org/rfc/rfc2544.txt,關于前導碼,幀間距,PPS等的描述。
3. 《TCP/IP詳解》

 

 
最新內容:
防御DDoS攻擊的實時監測模型[2015-01-06]
防DDOS的路由器!網吧惡意攻擊經驗談[2015-01-06]
如何最大限度減輕DDoS攻擊危害[2015-01-06]
局域網偽造源地址DDoS攻擊解決方法[2015-01-06]
10個針對DDOS有關的快速補救措施[2015-01-06]
沖浪DDoS攻擊的趨勢與防御[2015-01-06]
相關內容:
广东26选5计划群

合作伙伴: 黑基網 補天科技 威盾科技 站長下載 新飛金信 北京電信 ZOL應用下載
中華人民共和國增值電信業務經營許可證京ICP備14024464 公安備案號 京1081234 
版權所有©2003-2014 冰盾防火墻  www.gjmudd.tw 法律聲明
總機:(010)51661195