Posted on 2009-02-16 23:32
S.l.e!ep.¢% 閱讀(353)
評論(1) 編輯 收藏 引用 所屬分類:
VC
1. SYN Flood?1
2. WinNuke?3
3. Smurf?4
4. Land-based?5
5. Ping of Death?5
6. PingSweep?6
7. Pingflood?6
8. Teardrop?7
9. UDP Flood?8
10. IGMP攻擊?8
?
1. SYN Flood
特征:
SYN Flood是當前最流行的DoS(拒絕服務攻擊)與DDoS(分布式拒絕服務攻擊)的方式之一,這是一種利用TCP協議缺陷,發送大量偽造的TCP連接請求,從而使得被攻擊方資源耗盡(CPU滿負荷或內存不足)的攻擊方式。
正常的TCP建立連接的過程:
第一步,請求端(客戶端)發送一個包含SYN標志的TCP報文,SYN即同步(Synchronize),同步報文會指明客戶端使用的端口以及TCP連接的初始序號;
第二步,服務器在收到客戶端的SYN報文后,將返回一個SYN+ACK的報文,表示客戶端的請求被接受,同時TCP序號被加一,ACK即確認(Acknowledgement)。
第三步,客戶端也返回一個確認報文ACK給服務器端,同樣TCP序列號被加一,到此一個TCP連接完成。
以上的連接過程在TCP協議中被稱為三次握手(Three-way Handshake)。
問題就出在TCP連接的三次握手中,假設一個用戶向服務器發送了SYN報文后突然死機或掉線,那么服務器在發出SYN+ACK應答報文后是無法收到客戶端的ACK報文的(第三次握手無法完成),這種情況下服務器端一般會重試(再次發送SYN+ACK給客戶端)并等待一段時間后丟棄這個未完成的連接,這段時間的長度我們稱為SYN Timeout,一般來說這個時間是分鐘的數量級(大約為30秒-2分鐘);一個用戶出現異常導致服務器的一個線程等待1分鐘并不是什么很大的問題,但如果有一個惡意的攻擊者大量模擬這種情況,服務器端將為了維護一個非常大的半連接列表而消耗非常多的資源----數以萬計的半連接,即使是簡單的保存并遍歷也會消耗非常多的CPU時間和內存,何況還要不斷對這個列表中的IP進行SYN+ACK的重試。實際上如果服務器的TCP/IP棧不夠強大,最后的結果往往是堆棧溢出崩潰---即使服務器端的系統足夠強大,服務器端也將忙于處理攻擊者偽造的TCP連接請求而無暇理睬客戶的正常請求(畢竟客戶端的正常請求比率非常之小),此時從正常客戶的角度看來,服務器失去響應,這種情況我們稱作:服務器端受到了SYN Flood攻擊(SYN洪水攻擊)。
預防:
1.?縮短SYN Timeout時間,由于SYN Flood攻擊的效果取決于服務器上保持的SYN半連接數,這個值=SYN攻擊的頻度 x? SYN Timeout,所以通過縮短從接收到SYN報文到確定這個報文無效并丟棄改連接的時間,例如設置為20秒以下(過低的SYN Timeout設置可能會影響客戶的正常訪問),可以成倍的降低服務器的負荷。
2.?設置SYN Cookie,就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重復SYN報文,就認定是受到了攻擊,以后從這個IP地址來的包會被一概丟棄。
可是上述的兩種方法只能對付比較原始的SYN Flood攻擊,縮短SYN Timeout時間僅在對方攻擊頻度不高的情況下生效,SYN Cookie更依賴于對方使用真實的IP地址,如果攻擊者以數萬/秒的速度發送SYN報文,同時利用SOCK_RAW隨機改寫IP報文中的源地址,以上的方法將毫無用武之地。
3.?修改最大半連接數目TcpMaxHalfOpen以及半連接的測試次數TcpMaxHalfOpenRetried(當超過次數目時,開始啟動SYN Flood防護),一般TcpMaxHalfOpen=TcpMaxHalfOpenRetried*1.25。
4.?基于DNS解析的負載均衡
5.?丟棄第一個SYN請求數據包,等待超時重傳。
2. WinNuke
特征:
WinNuke攻擊是一種拒絕服務攻擊,又稱“帶外傳輸攻擊”,它的特征是攻擊目標端口,被攻擊的目標端口通常是139、138、137、113、53,而且URG位設為1,即緊急模式。WinNuke攻擊就是利用了Windows操作系統的一個漏洞,向這些端口發送一些攜帶TCP帶外(OOB)數據報文的,但這些攻擊報文與正常攜帶OOB數據報文不同的是,其指針字段與數據的實際位置不符,即存在重合。這樣Windows操作系統在處理這些數據的時候,就會崩潰。目前的WinNuke系列工具已經從最初的簡單選擇IP攻擊某個端口,發展到可以攻擊一個IP區間范圍的計算機,并且可以進行連續攻擊,還能夠驗證攻擊的效果,還可以檢測和選擇端口。所以,使用它可以造成某一個IP地址區間的計算機全部藍屏死機。
預防:
首先判斷數據包目標端口是否為139、138、137等,并判斷URG位是否為1。如果是,則丟棄該數據包,并對這種攻擊進行審計(記錄事件發生的時間、源主機和目標主機的MAC地址和IP地址)。
3. Smurf
特征:
該攻擊方法結合使用了IP欺騙和ICMP回復方法使大量網絡傳輸充斥目標系統,引起目標系統拒絕為正常系統進行服務。通過向一個子網的廣播地址發一個帶有特定請求(如ICMP回應請求)的包,并且將源地址偽裝成想要攻擊的主機地址。子網上所有主機都回應廣播包請求而向被攻擊主機發包,使該主機受到攻擊。
預防:
每次收到ICMP Request包時,先記錄下來(可以用hash表),記錄的項包括ICMP頭標識符(ID),源IP,目標IP;當下次收到ICMP Reply包時,根據源IP與目標IP,去查找保存的記錄,判斷本次的ICMP Reply頭標識符與保存的ICMP Request標識符是否一致,如果不一致,則有可能受到Smurf攻擊,將該包丟棄。
4. Land-based
特征:
攻擊者將一個包的源地址和目的地址都設置為目標主機的地址(一般是在局域網內,所以也可以是源MAC地址和目的MAC地址都等于本機MAC地址),然后將該包通過IP欺騙的方式發送給被攻擊主機,這種包可以造成被攻擊主機因試圖與自己建立連接而陷入死循環,從而很大程度地降低了系統性能。
預防:
由于如果目的MAC地址不等于本機,直接被網卡扔掉,因此只需判斷目的網卡MAC與源網卡MAC是否相同即可。如果相同,則丟棄。
5. Ping of Death
特征:
據TCP/IP的規范,一個包的長度最大為65536字節。盡管一個包的長度不能超過65536字節,但是一個包分成的多個片段的疊加卻能做到。當一個主機收到了長度大于65536字節的包時,就是受到了Ping of Death攻擊,該攻擊會造成主機的宕機。
預防:
對接收到的ICMP Ping包,檢查IP頭,看是否有分片,如果有分片的話,則將第一個ICMP Ping包保存下來,對于下一個ICMP Ping包,則根據源IP與目標IP找到上次保存的,如果次包與保存的包的標識符相同,則累加包長度,如果超過65536,則說明有可能受到ping of death攻擊,將該包丟棄。
6. PingSweep
特征:
使用ICMP Echo輪詢多個主機。
預防:
預防:
對接收到的ICMP Ping包,將其記錄下來,對隨后的Ping包,如果是同一的源地址,則將計數加一,如果超過指定的允許數目,則將該包丟棄。
7. Pingflood
特征:
該攻擊在短時間內向目的主機發送大量ping包,造成網絡堵塞或主機資源耗盡。
預防:
對接收到的ICMP Ping包,將其記錄下來,對隨后的Ping包,如果是同一的源地址,則將計數加一,如果超過指定的允許數目,則將該包丟棄。
8. Teardrop
特征:
Teardrop是基于UDP的病態分片數據包的攻擊方法,其工作原理是向被攻擊者發送多個分片的IP包(IP分片數據包中包括該分片數據包屬于哪個數據包以及在數據包中的位置等信息),某些操作系統收到含有重疊偏移的偽造分片數據包時將會出現系統崩潰、重啟等現象。(利用UDP包重組時重疊偏移(假設數據包中第二片IP包的偏移量小于第一片結束的位移,而且算上第二片IP包的Data,也未超過第一片的尾部,這就是重疊現象。)的漏洞對系統主機發動拒絕服務攻擊,最終導致主機菪掉;對于Windows系統會導致藍屏死機,并顯示STOP 0x0000000A錯誤。)
預防:
對接收到的分片數據包進行分析,計算數據包的片偏移量(Offset)是否有誤。
9. UDP Flood
特征:
UDP淹沒攻擊是導致基于主機的服務拒絕攻擊的一種。UDP 是一種無連接的協議,而且它不需要用任何程序建立連接來傳輸數據。當攻擊者隨機地向受害系統的端口發送 UDP 數據包的時候,就可能發生了 UDP 淹沒攻擊。當受害系統接收到一個 UDP 數據包的時候,它會確定目的端口正在等待中的應用程序。當它發現該端口中并不存在正在等待的應用程序,它就會產生一個目的地址無法連接的 ICMP 數據包發送給該偽造的源地址。如果向受害者計算機端口發送了足夠多的 UDP 數據包的時候,整個系統就會癱瘓。
預防:
監控指定的源IP與目標IP為同一的UDP數據包,并計數,當超過指定的允許的數目時,則丟棄該包。
10. IGMP攻擊
特征:
IGMP攻擊就是偽造一個目的地址是單個ip, 但ip層指定協議為IGMP,系統會為你打造一個IGMP報頭,因為組播使用D類地址,所以系統不知如何處理,造成崩潰。
預防:
對接收到的IP包,檢查其包頭,看是否是IGMP(2)協議,并且目標地址是單個IP,而非D類地址,則丟棄該包。