1. 程式人生 > >泛洪攻擊以及防護方法

泛洪攻擊以及防護方法

泛洪攻擊種類:

SYN泛洪攻擊

   SYN攻擊利用的是TCP三次握手機制,攻擊端利用偽造的IP地址向被攻擊端發出請求,而被攻擊端發出的響應報文將永遠傳送不到目的地,那麼被攻擊端在等待關閉這個連線的過程中消耗了資源,如果有成千上萬的這種連線,主機資源將被耗盡,從而達到攻擊的目的。我們可以利用路由器的TCP攔截功能,使網路上的主機受到保護(以Cisco路由器為例)。

DHCP報文泛洪攻擊

DHCP報文泛洪攻擊是指:惡意使用者利用工具偽造大量DHCP報文傳送到伺服器,一方面惡意耗盡了IP資源,使得合法使用者無法獲得IP資源;另一方面,如果交換機上開啟了DHCP Snooping功能,會將接收到的DHCP報文上送到
CPU
。因此大量的DHCP報文攻擊裝置會使DHCP伺服器高負荷執行,甚至會導致裝置癱瘓。

ARP報文泛洪攻擊

ARP報文泛洪類似DHCP泛洪,同樣是惡意使用者發出大量的ARP報文,造成L3裝置的ARP表項溢位,影響正常使用者的轉發

預防方法:(最好的預防措施是使用STCP協議連結)

對於預防SYN洪泛攻擊措施如下

1增加TCP backlog佇列

由於其基本攻擊原理是依賴於終端主機連線套接字的backlog溢位,因此一個顯然的基於終端主機的解決方案是增加backlog佇列大小,而且這種方法已經廣泛的運用於大多數伺服器了。增加backlog佇列通常是通過修改應用的listen()函式呼叫和一個作業系統核心引數SOMAXCONN——它用於設定一個應用程式能夠接收的backlog上限值。這種方法本身並不能被完全認為是抵禦SYN洪泛的有效方法,即使在一些能夠有效支援超大backlog佇列分配的作業系統中,因為攻擊者能夠任意生成比其作業系統支援的backlog還大得多的資料報。

2減少SYN-RECEIVED的時間

另一個基於終端主機的解決方法是縮短一個TCB從進入SYN-RECEIVED狀態到因未進入下一個狀態而被回收之間的時間。但這個方案的一個明顯缺點是攻擊可以利用因擁塞而丟包的ACK-SYN或者握手完成的ACK包,這樣合法連線的TCB就會由於主機忙於重傳這些包(因為SYN-RECEIVED時間減少)而被回收。此外,在管理員減少SYN-RECEIVED狀態時間多少和攻擊者的發包率之間僅僅是一個線性關係而已。基於上述原因,此方案並不建議採用。

3 SYN快取

另外兩種方案是基於SYN快取和SYN cookies(見6.4)的,簡化因接收SYN而生成TCB時初始化的狀態,推遲全狀態的例項化[4]。在採用SYN快取的主機中,一個帶有被限制大小的HASH表空間被用於存放那些將被分配給TCB的資料的一個子集。如果當握手完成的ACK接收到了,這些資料將被複制到一個完整的TCB中,否則超出存活時間的HASH值將會在需要時被回收。在Lemon的FreeBSD中,對於一個半開連線的SYN快取是160位元組,而一個完整的TCB是736位元組,並且支援15359個SYN快取空間。

SYN快取的資料結構對於那些試圖讓HASH表空間溢位的攻擊者是健壯的。因為在其HASH值裡面包含了對方的埠號和一些密碼位元。由於堆疊相對於連結串列是一種更加高效的資料結構,因此堆疊被用於SYN快取以提高速度。在Lemon的測試中,處於活躍攻擊下的主機用SYN快取能夠建立連線且僅僅比正常時間延緩了15%的時間。

4 SYN Cookies

對比SYN快取的方法,SYN Cookies技術做到了接收到一個SYN時完全不需要分配空間。因為構成連線狀態的最基本資料都被編碼壓縮排SYN-ACK的序列號位元位裡了。對於一個合法連線,伺服器將收到一個帶有序列號(其實序列號已經加1)的ACK報文段,然後基本的TCB資料將被重新生成,一個完整的TCB通過解壓確認資料將被安全的例項化。這種解壓即使在重度攻擊下仍然能夠成功,因為在主機端根本沒有任何儲存負載,只有計算編碼資料到ACK序列號中的負載。其不足之處就是,不是所有的TCB資料都能新增到32位的序列號段中,所以一些高效能要求的TCP選項將不能被編碼。其另一個問題是這樣的SYN-ACK報文段將不能被轉發(因為轉發需要完整的狀態資料)。

Andre Oppermann最近的一些研究是運用TCP時間戳選項結合序列號欄位編碼更多的狀態資訊,儲存那些高效能選項的應用,比如TCP視窗大小,TCP選擇性確認選項(TCP Selective Acknowledgment Options )以及TCP MD5摘要對SYN cookies的支援。這使SYN Cookies向前邁進了一步,他消除了之前SYN cooikes實現不能支援這些功能的缺陷。

TCP SYN cookies 的規範格式並不涉及互操作性問題,因為它們僅在本地被處理,對於生成和驗證的規範和過程在不同實現中會稍有不同。

4.1 SYN cookies的生成

為了在使用SYN cookies時計算出SYN-ACK序列號(就是SYN cookies),主機首先要結合一些本機的密碼位元,一個包括IP地址和TCP埠號的資料結構,SYN初始序列號,和一些標識密碼位元的索引資料。在所有上述位元組之上生成一個MD5摘要,然後一些位元位從hash值裡被截斷以便將其放入到SYN-ACK序列號中。由於序列號的大小大約是全部hash值的四分之一,因此這種截斷是必要的,但是通常驗證的時候至少要用3位元組大小的hash位元位,這意味著在不知道密碼位元位的情況下仍然有將近2^24種可能性去猜測驗證cookies。為了將hash值傳送出去,cookies的一些位元位將使SYN包含的MSS(最大報文段長度)的上限值變小,並影響在hash值中標識本機密碼位的索引位。

4.2 SYN cookies的驗證

為了驗證SYN cookies,首先要將收到的ACK報文段中的確認號減1以便重新生成SYN cookies。對於這些已被截斷過的hash位驗證值的計算是基於雙方IP地址,埠號,序列號減1和與cookie中索引號對應的密碼池中的值。如果被計算出來的這些值與cookie中的值相同,此時TCB才初始化並開始建立連線。被編碼的MSS上界被用來設定一個不超過最初值的合理大小的MSS值。MSS通常由3個位元位來實現,這三個位元位對應8個由一般鏈路的MTU(最大傳輸單元)和乙太網頭部計算出的MSS值。

5混合方式

混合方式將上述的兩種或更多防禦方法聯合起來使用。例如,一些終端機作業系統同時實現了一個超大backlog佇列和SYN cookies,但是僅僅當backlog的大小超過一定閾值時SYN cookies才被使用,這樣就能在不涉及SYN cookies缺點的情況下正常使用,也允許在遭受攻擊時轉移到SYN-cookies防禦。

6基於網路的對策

6.1過濾

網路層最基本的防禦是RFC 2827[3]裡描述的過濾應用。採用輸入源過濾,ISP拒絕將一個源IP地址不屬於其來源子網的包進行更遠的路由。輸入源過濾能夠有效地阻止用IP偽裝的SYN洪泛攻擊。然而這種方法在目前是沒用的,因為其很難大規模部署。而且輸入源過濾同樣不能抵禦分散式攻擊。

6.2防火牆與代理

一個有防火牆或者代理的裝置在網路中就能夠通過兩種方法緩衝SYN洪泛攻擊,一種是對連線發起人偽裝SYN-ACK包,另一種是對伺服器偽裝ACK包。

如果連線發起人是合法的,防火牆/代理就會收到ACK,然後在它自己和伺服器之間建立連線並偽裝連線發起人的地址。防火牆/代理將連線雙方分割開。這種分割能夠抵禦SYN洪泛攻擊,因為伺服器方根本沒接受收過攻擊者的SYN。只要防火牆/代理實現了一些基於TCP的防禦策略,比如SYN cookies或SYN 快取,他就能夠保護所有在其後面的伺服器免於SYN洪泛攻擊。

另一種是響應SYN-ACK的偽裝ACK包通過防火牆/代理到達伺服器。這種偽裝防止伺服器的TCB一直停留在SYN-RECEIVED狀態,因此保證了backlog佇列中的空餘空間。防火牆/代理將會停留等待一段時間,如果連線發起人正確的ACK沒有被檢測到,它將會通過偽裝的TCP RET報文使伺服器釋放TCB。對合法的連線,資料包流能夠在沒有防火牆/代理的影響下繼續進行。這種方法相比於上面偽裝SYN-ACK的方法更具吸引力,因為當合法連線建立以後防火牆/代理不需要直接參與到連線中去。

對於ARP泛洪攻擊預防措施如下:

給個連結自己看: