淺談 DDoS 攻擊與防護

淺談 DDoS 攻擊與防護

什麼是 DDoS正則表達式

DDoS 是英文 Distributed Denial of Service 的縮寫,中文譯做分佈式拒絕服務。那什麼又是拒絕服務(Denial of Service)呢?凡是能致使合法用戶不可以正常訪問網絡服務的行爲都算是拒絕服務攻擊。也就是說拒絕服務攻擊的目的很是明確,就是要阻止合法用戶對正常網絡資源的訪問,從而達成攻擊者不可告人的目的。數據庫

分佈式拒絕服務攻擊一旦被實施,攻擊網絡包就會從不少 DoS 攻擊源猶如洪水般涌向受害主機。從而把合法用戶的網絡請求淹沒,致使合法用戶沒法正常訪問服務器的網絡資源。express

DDoS 攻擊方式分類

  • 反射型

    瀏覽器

通常而言,咱們會根據針對的協議類型和攻擊方式的不一樣,把 DDoS 分紅 SYN Flood、ACK Flood、Connection Flood、UDP Flood、NTP Flood、SSDP Flood、DNS Flood、HTTP Flood、ICMP Flood、CC 等各種攻擊類型。緩存

每一種攻擊類型都有其特色,而反射型的 DDoS 攻擊是一種新的變種。攻擊者並不直接攻擊目標服務的 IP,而是利用互聯網的某些特殊服務開放的服務器,經過僞造被攻擊者的 IP 地址向有開放服務的服務器發送構造的請求報文,該服務器會將數倍於請求報文的回覆數據發送到被攻擊 IP,從而對後者間接造成 DDoS 攻擊。sass

以下圖所示,這裏的攻擊者(Attacker,實際狀況中更多的會利用傀儡機進行攻擊)不直接把攻擊包發給受害者,而是冒充受害者給放大器(Amplifiers)發包,而後經過放大器再反射給受害者。安全


 



在反射型攻擊中,攻擊者利用了網絡協議的缺陷或者漏洞進行 IP 欺騙,主要是由於不少協議(例如 ICMP、UDP 等)對源 IP 不進行認證。同時,要達到更好的攻擊效果,黑客通常會選擇具備放大效果的協議服務進行攻擊。服務器

總結一下就是利用 IP 欺騙進行反射和放大,從而達到四兩撥千斤的效果。目前常見的反射攻擊有:DNS 反射攻擊、NTP 反射攻擊、SSDP 反射攻擊等。網絡

注:將源地址設爲假的沒法迴應,即爲 SYN Flood 攻擊。製造流量和攻擊目標收到的流量爲 1:1,回報率低。架構

 

  • 流量放大型

經過遞歸等手法將攻擊流量放大的攻擊類型,好比:以反射型中常見的 SSDP 協議爲例,攻擊者將 Search type 設置爲 ALL。搜索全部可用的設備和服務,這種遞歸效果產生的放大倍數是很是大的,攻擊者只須要以較小的僞造源地址的查詢流量就能夠製造出幾十甚至上百倍的應答流量發送至目標。

  • 混合型

在實際狀況中,攻擊者只求達到打垮對方的目的。發展到如今,高級攻擊者已經不傾向使用單一的攻擊手段。而是根據目標系統的具體環境靈動組合,發動多種攻擊手段。

好比:TCP 和 UDP、網絡層和應用層攻擊同時進行,這樣的攻擊既具有了海量的流量,又利用了協議、系統的缺陷,盡其所能地展開攻勢。對於被攻擊目標來講,須要面對不一樣協議、不一樣資源的分佈式的攻擊,分析、響應和處理的成本就會大大增長。

 



  • 脈衝波型

這是一種新型的 DDoS 攻擊方法,給某些 DDoS 攻擊解決方案帶來了問題,由於它容許攻擊者攻擊之前認爲是安全的服務器。之因此將這種新技術命名爲脈衝波,是因爲其攻擊流量展示出來的圖形看起來很像不連貫的重複的脈衝狀。這類攻擊一般呈現一個有上有下的斜三角形的形狀,這個過程體現了攻擊者正在慢慢地組裝機器人並將目標對準待攻擊的目標。

一次新的脈衝波攻擊從零開始,在很短的時間跨度內達到最大值,而後歸零,再回到最大值,如此循環重複,中間的時間間隔很短。脈衝波型 DDoS 相對難以防護,由於其攻擊方式避開了觸發自動化的防護機制。

        

 

  • 鏈路泛洪

隨着 DDoS 攻擊技術的發展,又出現了一種新型的攻擊方式 Link Flooding Attack,這種方式不直接攻擊目標而是以堵塞目標網絡的上一級鏈路爲目的。對於使用了 IP Anycast 的企業網絡來講,常規的 DDoS 攻擊流量會被分攤到不一樣地址的基礎設施,這樣能有效緩解大流量攻擊。因此攻擊者發明了一種新方法,攻擊至目標網絡 traceroute 的倒數第二跳,即上聯路由,導致鏈路擁塞。

 

常見 DDoS 攻擊方法

DDoS 攻擊從層次上可分爲網絡層攻擊與應用層攻擊,從攻擊手法上可分爲快型流量攻擊與慢型流量攻擊,但其原理都是形成資源過載,致使服務不可用。

網絡層 DDoS 攻擊

網絡層 DDoS 攻擊常見手段有:SYN Flood、ACK Flood、Connection Flood、UDP Flood、ICMP Flood、TCP Flood、Proxy Flood 等。

  • SYN Flood 攻擊

SYN Flood 攻擊是一種利用 TCP 協議缺陷,發送大量僞造的 TCP 鏈接請求,從而使得被攻擊方資源耗盡(CPU 滿負載或內存不足)的攻擊方式。創建 TCP鏈接,須要三次握手(客戶端發送 SYN 報文、服務端收到請求並返回報文表示接受、客戶端也返回確認,完成鏈接)。

SYN Flood 就是用戶向服務器發送報文後忽然死機或掉線,那麼服務器在發出應答報文後就沒法收到客戶端的確認報文(第三次握手沒法完成),這時服務器端通常會重試並等待一段時間(至少 30s)後再丟棄這個未完成的鏈接。

一個用戶出現異常致使服務器的一個線程等待一下子並非大問題,但惡意攻擊者大量模擬(構造源 IP 去發送 SYN 包)這種狀況,服務器端爲了維護數以萬計的半鏈接而消耗很是多的資源,結果每每是無暇理睬正常客戶的請求,甚至崩潰。從正常客戶的角度看來,網站失去了響應,沒法訪問。

 



  • ACK Flood

ACK Flood 攻擊是在 TCP 鏈接創建以後進行的。全部數據傳輸的 TCP 報文都是帶有 ACK 標誌位的,主機在接收到一個帶有 ACK 標誌位的數據包的時候,須要檢查該數據包所表示的鏈接四元組是否存在。若是存在則檢查該數據包所表示的狀態是否合法,而後再向應用層傳遞該數據包。若是在檢查中發現該數據包不合法(例如:該數據包所指向的目的端口在本機並未開放),則主機操做系統協議棧會迴應 RST 包告訴對方此端口不存在。

這裏,服務器要作兩個動做:查表、迴應 ACK/RST。對比主機以及防火牆在接收到 ACK 報文和 SYN 報文時所作動做的複雜程度,顯然 ACK 報文帶來的負載要小得多。這種攻擊方式顯然沒有 SYN Flood 給服務器帶來的衝擊大,所以攻擊者必定要用大流量 ACK 小包衝擊纔會對服務器形成影響。因此在實際環境中,只有當攻擊程序每秒鐘發送 ACK 報文的速率達到必定的程度,才能使主機和防火牆的負載有大的變化。

當發包速率很大的時候,主機操做系統將耗費大量的精力接收報文、判斷狀態,同時要主動迴應 RST 報文,正常的數據包就可能沒法獲得及時的處理。這時候客戶端的表現就是訪問頁面反應很慢,丟包率較高。可是狀態檢測的防火牆經過判斷 ACK 報文的狀態是否合法,藉助其強大的硬件能力能夠較爲有效的過濾攻擊報文。固然若是攻擊流量很是大,因爲須要維護很大的鏈接狀態表同時要檢查數量巨大的 ACK 報文的狀態,防火牆也會不堪重負致使網絡癱瘓。

目前 ACK Flood 並無成爲攻擊的主流,而一般是與其餘攻擊方式組合在一塊兒使用。

 

  • Connection Flood

Connection Flood 是典型的而且很是有效的利用小流量衝擊大帶寬網絡服務的攻擊方式。這種攻擊的原理是利用真實的 IP 地址向服務器發起大量的鏈接,而且創建鏈接以後很長時間不釋放。長期佔用服務器的資源,形成服務器上殘餘鏈接 (WAIT 狀態) 過多,效率下降,甚至資源耗盡,沒法響應其它客戶所發起的鏈接。

其中一種攻擊方法是每秒鐘向服務器發起大量的鏈接請求,這相似於固定源 IP 的 SYN Flood 攻擊,不一樣的是採用了真實的源 IP 地址。一般這能夠在防火牆上限制每一個源 IP 地址每秒鐘的鏈接數來達到防禦目的。

但如今已有工具採用慢速鏈接的方式,也即幾秒鐘才和服務器創建一個鏈接,鏈接創建成功以後並不釋放並定時發送垃圾數據包給服務器使鏈接得以長時間保持。這樣一個 IP 地址就能夠和服務器創建成百上千的鏈接,而服務器能夠承受的鏈接數是有限的,這就達到了拒絕服務的效果。

 



  • UDP Flood 攻擊

因爲 UDP 是一種無鏈接的協議,所以攻擊者能夠僞造大量的源 IP 地址去發送 UDP 包,此種攻擊屬於大流量攻擊。正常應用狀況下,UDP 包雙向流量會基本相等,所以在消耗對方資源的時候也在消耗本身的資源。

  • ICMP Flood 攻擊

此攻擊屬於大流量攻擊,其原理就是不斷髮送不正常的 ICMP 包(所謂不正常就是 ICMP 包內容很大),致使目標帶寬被佔用。但其自己資源也會被消耗,而且目前不少服務器都是禁 ping 的(在防火牆裏能夠屏蔽 ICMP 包),所以這種方式已經落伍。

  • Smurf 攻擊

這種攻擊相似於 ICMP Flood 攻擊,但它能巧妙地修改進程。Smurf 攻擊經過使用將回復地址設置成受害網絡的廣播地址的 ICMP 應答請求數據包,來淹沒受害主機。最終致使該網絡的全部主機都對此 ICMP 應答請求作出答覆,致使網絡阻塞。更加複雜的 Smurf 將源地址改成第三方的受害者,最終致使第三方崩潰。

應用層 DDoS 攻擊

應用層 DDoS 攻擊不是發生在網絡層,是發生在 TCP 創建握手成功以後,應用程序處理請求的時候。常見的有:CC 攻擊、DNS Flood、慢速鏈接攻擊等。

  • CC 攻擊

CC 攻擊(Challenge Collapsar)是 DDoS 攻擊的一種,其前身名爲 Fatboy 攻擊,也是一種常見的網站攻擊方法。CC 攻擊還有一段比較有趣的歷史,Collapsar 是綠盟科技的一款防護 DDoS 攻擊的產品品牌,Collapasar 在對抗拒絕服務攻擊的領域內具備比較高的影響力和口碑。然而黑客爲了挑釁,研發了一款 Challenge Collapasar 工具簡稱 CC,表示要向 Collapasar 發起挑戰。

CC 攻擊的原理就是藉助代理服務器針對目標系統的消耗資源比較大的頁面不斷髮起正常的請求,形成對方服務器資源耗盡,一直到宕機崩潰。所以在發送 CC 攻擊前,咱們須要尋找加載比較慢,消耗資源比較多的網頁。好比:須要查詢數據庫的頁面、讀寫硬盤的文件等。相比其它的 DDoS 攻擊 CC 更有技術含量一些,這種攻擊你見不到真實源 IP。見不到特別大的異常流量,但形成服務器沒法進行正常鏈接。

 



  • Slowloris 攻擊

Slowloris 是一種慢速鏈接攻擊,Slowloris 是利用 Web Server 的漏洞或設計缺陷,直接形成拒絕服務。其原理是:以極低的速度往服務器發送 HTTP 請求,Apache 等中間件默認會設置最大併發連接數,而這種攻擊就是會持續保持鏈接,致使服務器連接飽和不可用。Slowloris 有點相似於 SYN Flood 攻擊,只不過 Slowloris 是基於 HTTP 協議。

Slowloris  PoC

# 構造如下畸形 HTTP 請求包
GET / HTTP/1.1\r\n
Host: Victim host\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n
Content-Length: 42\r\n

完整的 HTTP 請求頭結尾應該是兩次的 \r\n\r\n,這裏少了一次,所以服務器將會一直等待。

  • Slow Attack

Slow Attack 也是一種慢速 DoS 攻擊,它經過消耗服務器的系統資源和鏈接數,致使 Web 服務器沒法正常工做。常見的攻擊方式包括 Slow Header、Slow Body 和 Slow Read。

  1. Slow Header:正常的 HTTP Header 以兩個 CLRF 結尾,經過發送只包含一個 CLRF 的畸形 Header 請求來佔用 Web 服務器鏈接,從而達到消耗掉服務器全部可用的鏈接數。最終形成 Web 服務器資源飽和並拒絕新的服務。

  2. Slow Read:向服務器請求很大的文件,而後經過設置 TCP 滑動窗口較小值,致使服務器以極慢的速度傳輸文件。這樣,就會佔用服務器大量的內存,從而形成拒絕服務。

  3. Slow Body:在向服務器發送 HTTP Post 包時,指定一個很是大的 Content-Length 值,而後以極低的速度發包並保持鏈接不斷,最終致使服務器鏈接飽和不可用。


Kali Linux 提供的專用測試工具 SlowHTTPTest 可以實現以上三種 Slow Attack 方式。

  • JavaScript DDoS

基於 JavaScript 的 DDoS 攻擊利用的工具是普通網民的上網終端,這也意味着只要裝有瀏覽器的電腦,都能被用做爲 DDoS 攻擊者的工具。當被操縱的瀏覽器數量達到必定程度時,這種 DDoS 攻擊方式將會帶來巨大的破壞性。

攻擊者會在海量訪問的網頁中嵌入指向攻擊目標網站的惡意 JavaScript 代碼,當互聯網用戶訪問該網頁時,則流量被指向攻擊目標網站。比較典型攻擊事件:GitHub DDoS 攻擊。

  • ReDoS 攻擊

ReDoS (Regular expression Denial of Service), 中文譯做正則表達式拒絕服務攻擊。開發人員使用了正則表達式來對用戶輸入的數據進行有效性校驗,當編寫校驗的正則表達式存在缺陷或者不嚴謹時,攻擊者能夠構造特殊的字符串來大量消耗服務器的系統資源,從而形成服務器的服務中斷或中止。 更詳細介紹可參考:「淺析 ReDoS 的原理與實踐」一文。

  • DNS Query Flood

DNS 做爲互聯網的核心服務之一,天然也是 DDoS 攻擊的一大主要目標。DNS Query Flood 採用的方法是操縱大量傀儡機器,向目標服務器發送大量的域名解析請求。服務器在接收到域名解析請求時,首先會在服務器上查找是否有對應的緩存,若查找不到且該域名沒法直接解析時,便向其上層 DNS 服務器遞歸查詢域名信息。

一般,攻擊者請求解析的域名是隨機生成或者是網絡上根本不存在的域名。因爲在本地域名服務器沒法查到對應的結果,本地域名服務器必須使用遞歸查詢向上層域名服務器提交解析請求,引發連鎖反應。解析過程給本地域名服務器帶來必定的負載,每秒鐘域名解析請求超過必定的數量就會形成域名服務器解析域名超時。

 



根據微軟的統計數據,一臺 DNS 服務器所能承受的動態域名查詢的上限是每秒鐘 9000 個請求。而一臺 P3 的 PC 機上能夠輕易地構造出每秒鐘幾萬個域名解析請求,足以使一臺硬件配置極高的 DNS 服務器癱瘓,因而可知 DNS 服務器的脆弱性。

無線 DDoS 攻擊

  • Auth Flood 攻擊

Auth Flood 攻擊,即身份驗證洪水攻擊。該攻擊目標主要針對那些處於經過驗證和 AP 創建關聯的關聯客戶端,攻擊者將向 AP 發送大量僞造的身份驗證請求幀(僞造的身份驗證服務和狀態代碼),當收到大量僞造的身份驗證請求超過所能承受的能力時,AP將斷開其餘無線服務鏈接。

  • Deauth Flood 攻擊

Deauth Flood 攻擊即爲取消驗證洪水攻擊,它旨在經過欺騙從 AP 到客戶端單播地址的取消身份驗證幀來將客戶端轉爲未關聯 / 未認證的狀態。對於目前的工具來講,這種形式的攻擊在打斷客戶無線服務方面很是有效和快捷。通常來講,在攻擊者發送另外一個取消身份驗證幀以前,客戶端會從新關聯和認證以再次獲取服務。攻擊者反覆欺騙取消身份驗證幀就能使全部客戶端持續拒絕服務。

  • Association Flood 攻擊

Association Flood 攻擊即爲關聯洪水攻擊。在無線路由器或者接入點內置一個列表即爲鏈接狀態表,裏面可顯示出全部與該 AP 創建鏈接的無線客戶端狀態。它試圖經過利用大量模仿和僞造的無線客戶端關聯來填充 AP 的客戶端關聯表,從而達到淹沒 AP 的目的。

因爲開放身份驗證(空身份驗證)容許任何客戶端經過身份驗證後關聯。利用這種漏洞的攻擊者能夠經過建立多個到達已鏈接或已關聯的客戶端來模仿不少客戶端,從而淹沒目標 AP 的客戶端關聯表。

  • Disassociation Flood 攻擊

Disassociation Flood 攻擊即爲取消關聯洪水攻擊,和 Deauth Flood 攻擊表現方式很類似。它經過欺騙從 AP 到客戶端的取消關聯幀來強制客戶端成爲未關聯 / 未認證的狀態。通常來講,在攻擊者發送另外一個取消關聯幀以前,客戶端會從新關聯以再次獲取服務。攻擊者反覆欺騙取消關聯幀就能使客戶端持續拒絕服務。

Disassociation Broadcast 攻擊和 Disassociation Flood 攻擊原理基本一致,只是在發送程度及使用工具上有所區別。前者不少時候用於配合進行無線中間人攻擊,然後者經常使用於目標肯定的點對點無線 DoS,好比:破壞或干擾指定機構或部門的無線接入點等。

  • RF Jamming 攻擊

RF Jamming 攻擊即爲 RF 干擾攻擊。該攻擊是經過發出干擾射頻達到破壞正常無線通訊的目的。而前面幾種攻擊主要是基於無線通訊過程及協議的。RF 爲射頻,主要包括無線信號發射機及收信機等。

DDoS 攻擊現象斷定方法

  • SYN 類攻擊判斷

  1. 服務器 CPU 佔用率很高。

  2. 出現大量的 SYN_RECEIVED 的網絡鏈接狀態。

  3. 網絡恢復後,服務器負載瞬時變高。網絡斷開後瞬時負載下將。

  • UDP 類攻擊判斷

  1. 服務器 CPU 佔用率很高。

  2. 網卡每秒接受大量的數據包。

  3. 網絡 TCP 狀態信息正常。

  • CC 類攻擊判斷

  1. 服務器 CPU 佔用率很高。

  2. Web 服務器出現相似 Service Unavailable 提示。

  3. 出現大量的 ESTABLISHED 的網絡鏈接狀態且單個 IP 高達幾十個甚至上百個鏈接。

  4. 用戶沒法正常訪問網站頁面或打開過程很是緩慢,軟重啓後短時間內恢復正常,幾分鐘後又沒法訪問。

DDoS 攻擊防護方法

  • 網絡層 DDoS 防護

  1. 限制單 IP 請求頻率。

  2. 網絡架構上作好優化,採用負載均衡分流。

  3. 防火牆等安全設備上設置禁止 ICMP 包等。

  4. 經過 DDoS 硬件防火牆的數據包規則過濾、數據流指紋檢測過濾、及數據包內容定製過濾等技術對異常流量進行清洗過濾。

  5. 採用 ISP 近源清洗,使用電信運營商提供的近源清洗和流量壓制,避免全站服務對全部用戶完全沒法訪問。這是對超過自身帶寬儲備和自身 DDoS 防護能力以外超大流量的補充性緩解措施。

  • 應用層 DDoS 防護

  1. 優化操做系統的 TCP/IP 棧。

  2. 應用服務器嚴格限制單個 IP 容許的鏈接數和 CPU 使用時間。

  3. 編寫代碼時,儘可能實現優化併合理使用緩存技術。儘可能讓網站靜態化,減小沒必要要的動態查詢。網站靜態化不只能大大提升抗攻擊能力,並且還給駭客入侵帶來很多麻煩,至少到如今爲止關於 HTML 的溢出還沒出現。

  4. 增長 WAF(Web Application Firewall)設備,WAF 的中文名稱叫作 Web 應用防火牆。Web 應用防火牆是經過執行一系列針對 HTTP / HTTPS 的安全策略來專門爲 Web 應用提供保護的一款產品。

  5. 使用 CDN / 雲清洗,在攻擊發生時,進行雲清洗。一般雲清洗廠商策略有如下幾步:預先設置好網站的 CNAME,將域名指向雲清洗廠商的 DNS 服務器;在通常狀況下,雲清洗廠商的 DNS 仍將穿透 CDN 的回源的請求指向源站,在檢測到攻擊發生時,域名指向本身的清洗集羣,而後再將清洗後的流量回源。

  6. CDN 僅對 Web 類服務有效,針對遊戲類 TCP 直連的服務無效。這時可使用 DNS 引流 + ADS (Anti-DDoS System) 設備來清洗,還有在客戶端和服務端通訊協議作處理(如:封包加標籤,依賴信息對稱等)。


DDoS 攻擊究其本質實際上是沒法完全防護的,咱們能作得就是不斷優化自身的網絡和服務架構,來提升對 DDoS 的防護能力。

參考文檔

http://www.google.comhttp://t.cn/RrSkw6ahttp://t.cn/RrSkNKehttp://t.cn/RrSFJ1Bhttp://t.cn/RrovtI3http://t.cn/RrKGEIbhttp://t.cn/RCwYkYfhttp://t.cn/RrKIAlNhttp://t.cn/RrKQ8j8http://t.cn/RcCzPCO

相關文章
相關標籤/搜索