淺談DDos攻擊與防禦
來自博客:淺談DDos攻擊與防禦
最近重新拜讀了道哥的經典力作《白帽子講Web安全》一書,發覺好書看一遍是不夠的,每次品味都有不同的味道。道哥此書側重於企業安全,即所講所寫偏重企業內部的安全建設,而不是針對某些漏洞大書特書。再次細讀,深感需要做點筆記加強加強記憶,於是便以本篇開始,記錄一些曾經看過的經典書籍的筆記。本篇主要用於記錄《白帽子講Web安全》讀後感之DDos攻擊與防禦相關的知識。本篇記錄的絕大部分內容來自《白帽子講Web安全》,感謝道哥!DDos簡介
DDos又叫分散式拒絕服務,全稱Distributed Denial of Service,利用DDos造成的攻擊稱為拒絕服務攻擊,其原理就是利用大量的請求造成資源過載,導致服務不可用。
DDos攻擊從層次上可分為網路層攻擊與應用層攻擊,從攻擊手法上可分為快型流量攻擊與慢型流量攻擊,但其原理都是造成資源過載,導致服務不可用。
網路層DDos攻擊
網路層DDos攻擊包括SYN flood、UDP flood、ICMP flood等。
SYN flood攻擊
SYN flood攻擊主要利用了TCP三次握手過程中的bug,我們知道TCP三次握手過程是要建立連接的雙方發送SYN,SYN+ACK,ACK數據包,而當攻擊方隨意構造源ip去發送SYN包時,伺服器返回的SYN+ACK就不能得到應答(因為ip是隨意構造的),此時伺服器就會嘗試重新發送,並且會有至少30s的等待時間,導致資源飽和服務不可用,此攻擊屬於慢型dos攻擊。
UDP flood攻擊
由於udp是一種無連接的協議,因此攻擊者可以偽造大量的源IP地址去發送udp包,此種攻擊屬於大流量攻擊。正常應用情況下,UDP包雙向流量會基本相等,因此在消耗對方資源的時候也在消耗自己的資源。
ICMP flood攻擊
此攻擊屬於大流量攻擊,其原理就是不斷發送不正常的ICMP包(所謂不正常就是ICMP包內容很大),導致目標帶寬被佔用,但其本身資源也會被消耗。並且目前很多伺服器都是禁ping的(在防火牆在可以屏蔽icmp包),因此這種方式已經落伍。
網路層DDos防禦
- 網路架構上做好優化,採用負載均衡分流。
- 添加抗DDos設備,流量清洗。
- 限制單ip請求頻率。
- 防火牆等防護設置禁止icmp包等
網路層的DDos攻擊究其本質其實是無法防禦的,我們能做得就是不斷優化自身的網路架構,以及提升網路帶寬。
應用層DDos攻擊
應用層DDos攻擊不是發生在網路層,是發生在TCP建立握手成功之後,應用程序處理請求的時候。
CC攻擊
CC攻擊還有一段比較有趣的來歷,據說當時綠盟為了防禦DDos攻擊研發了一款產品,叫做「Collapasar」,能夠有效的防禦SYN flood攻擊。然而黑客為了挑釁,研發了一款Challenge Collapasar工具(簡稱CC)。
CC攻擊的原理,就是針對消耗資源比較大的頁面不斷發起不正常的請求,導致資源耗盡。因此在發送CC攻擊前,我們需要尋找載入比較慢,消耗資源比較多的網頁,比如需要查詢資料庫的頁面、讀寫硬碟文件的等。通過cc攻擊,使用爬蟲對某些載入需要消耗大量資源的頁面發起http請求。slowloris
這是由於webserver中間件漏洞引發的拒絕服務攻擊,其原理是以極低的速度往伺服器發送HTTP請求。apache等中間件默認會設置最大並發鏈接數,而這種攻擊就是會持續保持連接,導致服務飽和不可用。slowloris有點類似基於HTTP協議的SYN flood攻擊。
poc構造以下畸形http請求包
GET / HTTP/1.1rnnHost: Victim hostrnnUser-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)rnnContent-Length: 42rnn
完整的http請求頭結尾應該是兩次的rnrn,這裡少了一次,因此伺服器將會一直等待。
HTTP POST DOS
其原理是在發送HTTP POST包時,指定一個非常大的Content-Length值,然後以極低的速度發包,保持連接不斷,導致服務飽和不可用。
poc構造以下畸形http請求包
GET / HTTP/1.1rnnHost: Victim hostrnnUser-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)rnnContent-Length: 9999999999rnrnn
Slow Read attack
Slow Read attack攻擊方式是採用調整TCP協議中的滑動窗口大小,來對伺服器單次發送發送的數據大小進行控制,使得伺服器需要對一個回應分成很多個包來發送。
Server Limit Dos
這是由於cookie導致的dos攻擊,當然其原理還是基於webserver的特性。apache默認最大的http包頭長度為8192位元組,如果超出此長度,則會返回4xx錯誤。如果我們利用存儲型xss漏洞,將一個超長的cookie寫入客戶端頁面,則用戶再訪問此頁面後,由於請求頭載入了惡意的超長cookie,導致其不能訪問該站的頁面(除非清空cookie)
ReDos
這是由於代碼寫得有缺陷,導致使用正則時,會出現大量佔用資源的情況,導致服務不可用,這是利用了正則表達式在匹配時的某些特性決定的。
應用層DDos防禦
- 判斷User-Agent欄位(不可靠,因為可以隨意構造)
- 網頁中鑲嵌js代碼(不可靠,因為爬蟲也可攜帶瀏覽器引擎,或者執行js代碼)
- 針對ip+cookie,限制訪問頻率(由於cookie可以更改,ip可以使用代理,或者肉雞,也不可靠)
- 關閉apache最大連接數等,合理配置中間件,緩解ddos攻擊。
- 頁面中添加驗證碼,比如搜索資料庫時。
- 編寫代碼時,盡量實現優化,併合理使用緩存技術,減少資料庫的讀取操作。
應用層的防禦有時比網路層的更難,因為導致應用層被dos攻擊的因素非常多,有時往往是因為程序員的失誤,導致某個頁面載入需要消耗大量資源,有時是因為中間件配置不當等等。而應用層DDos防禦的核心就是區分人與機器(爬蟲),因為大量的請求不可能是人為的,肯定是機器構造的。因此如果能有效的區分人與爬蟲行為,則可以很好地防禦此攻擊。
轉載請說明出處:淺談DDos攻擊與防禦|nMask』Blog
本文地址:淺談DDos攻擊與防禦
推薦閱讀:
※網路掃黃,從技術上如何實現?
※XPwn 2016 | 做安全就做未來安全
※Hacking Tools搜羅大集合(上)
※如何使用QEMU和Volatility攻擊全盤加密的系統
※哪些安全會議值得參加?