DDOS攻擊與防御簡單闡述,列出DDOS的攻擊方法和防御方法


參考1:https://www.hi-linux.com/posts/50873.html#%E7%BD%91%E7%BB%9C%E5%B1%82-ddos-%E6%94%BB%E5%87%BB

什么是 DDoS

DDoS 是英文 Distributed Denial of Service 的縮寫,中文譯作分布式拒絕服務。那什么又是拒絕服務(Denial of Service)呢?凡是能導致合法用戶不能夠正常訪問網絡服務的行為都算是拒絕服務攻擊。也就是說拒絕服務攻擊的目的非常明確,就是要阻止合法用戶對正常網絡資源的訪問,從而達成攻擊者不可告人的目的。

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

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 攻擊。

如下圖所示,這里的攻擊者(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\nHost: Victim host\r\nUser-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\nContent-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.com
http://t.cn/RrSkw6a
http://t.cn/RrSkNKe
http://t.cn/RrSFJ1B
http://t.cn/RrovtI3
http://t.cn/RrKGEIb
http://t.cn/RCwYkYf
http://t.cn/RrKIAlN
http://t.cn/RrKQ8j8
http://t.cn/RcCzPCO


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM