首頁>技術>

很多人認為,DDoS攻擊就是一種透過多臺母機,對同一個或數個目標伺服器發動攻擊的駭客手段。

有問題的是,大多數人會將DoS和DDoS混為一談,覺得SYN Flood屬於DoS的一種,而DoS=DDoS,因此如果一臺伺服器能夠防禦DDoS就一定可以防禦SYN Flood。

事實上,DDoS攻擊和其他型別的DoS攻擊手段(諸如UDP、SYN、Fraggle)是不同型別的攻擊手段。

如果真的要劃分的話,DDoS反而比SYN Flood容易發動得多,而且攻擊所耗費的成本也不具備技術含量,也就是DDoS<SYN Flood<DoS。

DoS攻擊從原理上來說就是一種基於DoS的拒絕服務攻擊。從不同的角度,我們能把DDoS攻擊分為多達幾十種類型的攻擊手段。

(DDoS放在現代來說可能更像一個代名詞,就像80年代我們說的海爾,和現在的海爾不是一種概念,以前的海爾很明顯只生產洗衣機,伴隨著技術的快速發展,現在的海爾囊括了冰箱、酒櫃、洗衣機、空調、電視等等)

攻擊手段

早期的DoS攻擊手段採用的是手動配置,滲透漏洞時完全依靠手動生成;後來由於技術的進步,這種早期依靠人工輸入程式碼的方法實在是浪費時間,於是又演變為了後來的半自動化(攻擊者使用自動化Scripts掃描、主控端伺服器進行資訊記錄等),接著演變為了目前的自動化DoS。

攻擊速率

影響力

入侵目標

攻擊線路

攻擊特徵

基於系統及協議的分類

又分為洪水攻擊(UDP、ICMP)、擴大攻擊(Smurf、Fraggle)、協議攻擊(TCP、SYN)、畸形資料包攻擊(IP地址攻擊、IP資料包屬性攻擊)

以上不同型別的DoS攻擊,不僅在手段上採取的技術和渠道不同,所展現出來的的現象也不一樣。

SYN Flood,是一種常見又典型的DoS攻擊。

說到原理,得先從TCP是如何建立連線開始講起。

通訊雙方最少要經過三次成功的資訊交換,才能進入連線全開狀態(Full-Open),用行話說就是“三次握手”。

以下圖為例,假設左邊是客戶機,右邊是伺服器(一般用於大型資料庫系統,例如Oracle、SQL Server、Informix、Sybase等),伺服器在某個埠(Port)上監聽客戶機發出的連線請求。

客戶機首先發送SYN(Synchronization)訊息給伺服器方,要求伺服器做好接收資料的準備;伺服器收到後,反饋SYN-ACK(Synchronization-Acknowledgement)訊息給客戶機,目的有兩個,一是為了確認客戶機做好了接收資料的準備,另一方面要求客戶機也做好接收資料的準備,這時候伺服器方確認好接收狀態後等待客戶機的確認,此時的連線狀態處於Half-Open,直到客戶機收到後再次傳送ACK報文給伺服器,確認伺服器方也做好了接收資料的準備,至此三次握手完成,建立連線。

上述這種理論性的情況,主要是建立在雙方誠實可信、網路狀態良好的前提下,實際情況是有一方可能出現網路不穩定丟包、一方故意不傳送確認訊息等等。

假設伺服器方透過某TCP埠提供服務,在收到客戶機的SYN訊息後積極反饋了SYN-ACK報文,使連線進入Half-Open狀態,因為伺服器方不確定自己給客戶機發送出去的SYN-ACK訊息是否成功,因此會給每個待完成的Half-Open連線設定一個Timer,超過時間沒有收到客戶機的ACK訊息就會再發送一次SYN-ACK給客戶機,直到重試超過一定次數才放棄。

試想一下,假如同時出現了大量這種不回覆確認資訊的客戶機,就會導致伺服器方因為這些大量不能完成的Half-Open連線佔據,導致資源耗盡、對其後的連線請求直接拒絕。

上文中我也說過,SYN Flood是DoS攻擊的一種,因為從總的攻擊手段和目的來看,確實是一種以佔用目標伺服器的資源來使伺服器無法承接後續訪問/連線/請求而跳轉為拒絕服務的攻擊手段。

DoS是拒絕服務攻擊,DDoS是分散式拒絕服務攻擊,而SYN Flood是SYN泛洪攻擊,懂了嗎?

這就好比,有一輛能夠承載48人左右的空公交車從初始地發車,公交車司機的仇人故意指使幾百只機器人候車,這輛公交車實際上擠滿了48只不下車的機器人之後,再也無法裝下多餘的乘客了;即使有真正的乘客想上車,公交車司機大手一揮,“人滿了你可憋上車了吧!”然後拒絕了這些真正的乘客。

SYN Flood分類

(一)Direct Attack

攻擊方使用固定的源地址發起攻擊,這種方法對攻擊方的消耗最小

(二)Spoofing Attack

攻擊方使用變化的源地址發起攻擊,這種方法需要攻擊方不停地修改源地址,實際上消耗也不大

(三)Distributed Direct Attack

這種攻擊主要是使用殭屍網路進行固定源地址的攻擊

接下來說說應對思路

最簡單粗暴的辦法,就是提高TCP埠連線容量的同時減少半開連線的資源佔用時間。在Linux上可以修改以下配置提高TCP半開連線佇列大小的上限:

/proc/sys/net/ipv4/tcp_max_syn_backlog

可以減少半開狀態下等待ACK訊息的時間或者重試傳送SYN-ACK訊息的次數:

/proc/sys/net/ipv4/tcp_synack_retries

抑或啟用某種半開連接回收機制,使得當半開連線佇列滿了以後做“除舊迎新”操作,當然並不是所有系統都支援這種機制。

以上方法更像是權宜之計,只是緩解了被攻擊時的系統壓力,以及稍稍提高了些防禦門檻,但也同時影響了部分正常的請求的建立,比如減少SYN-ACK重試次數,同樣也會降低某些網路環境不好的正常使用者的連線成功率;而且攻擊者只要稍稍改變策略就可以提高攻擊效果,比如當使用半開連接回收機制時,攻擊者只需提高攻擊頻率就可使大部分正常的等待的半開連線,在ACK訊息到來前就被踢出佇列。

和DDoS攻擊這種只需要頻寬硬扛(就像舉著盾讓對方打到消停一樣)的原理是不一樣的,

最終的策略是幾種方案和技術的結合使用,形成防禦體系,因此要完全解決SYN Flood泛洪攻擊所花費的成本,往往超出DDoS攻擊防護的數倍不止,畢竟對方也是花了超過DDoS攻擊成本的數倍不止呢...

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • ARP攻擊介紹