最近在工作上開始接觸到有關應用層DDoS的問題,對於還是菜鳥的我來說是一項全新的知識,因此想將學習的內容記錄下來,當作是一種自我學習。
如果內容有理解錯誤的地方或是哪裡需要補充的話,請各位IT邦的大神們多多指教喔!
DDoS 攻擊可以發生在 OSI 模型的各個層級,其中以網路層 (第三層) 和傳輸層 (第四層) 最為常見。但近年來,針對應用層 (第七層) 的 DDoS 攻擊逐年增長,也使得 DDoS 攻擊的複雜程度增加許多。
應用層 (第七層) DDoS 攻擊是一種針對 OSI 模型應用層的分散式阻斷服務攻擊。旨在通過消耗應用程式資源或干擾正常的用戶請求,使目標服務無法正常運作,讓用戶無法存取或使用該服務。
其原理是攻擊者利用網路應用程式協定的漏洞,或是操控分散於不同地方的多部電腦主機、IOT設備和其他網路資源作為攻擊流量來源,對目標發起大量看起來合法的請求,藉以壓垮目標網路或伺服器的資源、降低其效能或使其癱瘓。
由於攻擊者可能會透過模擬真實的用戶流量,很難去判斷其究竟是正常請求或是惡意流量,因此應用層的DDoS攻擊通常較難防禦。
HTTP 為瀏覽網站的網路協議,通常用於載入網頁或透過網路傳送表單內容。攻擊者主要是通過偽裝成正常的HTTP請求 (常見為 HTTP GET 或 HTTP POST),旨在使用HTTP請求讓目標伺服器達到飽和不堪負荷。
常見的HTTP Flood攻擊有兩種:
為了實現最大效率,攻擊者通常會建立殭屍網路,透過惡意軟體感染大量電腦和 IOT 設備並同時對目標發起攻擊來增加攻擊的規模和效果,使 HTTP Flood 攻擊更具破壞性。
例如,一間租車公司同時有多位客戶來租車並要開車離開,員工要忙著確認租賃合約、車子狀況、客戶資訊等等,都確認無誤後,客戶才能開車離開,但租車公司的車道一次也只能讓一台車子離開,導致服務壅塞。
與HTTP Flood 攻擊相似,同樣是針對Web應用程式製造大量偽裝的訪問請求,甚至有些網路上的資料會將兩者寫成相同的攻擊模式。但就我的理解來看,HTTP Flood 攻擊比較偏向消耗網路頻寬和伺服器的儲存資源;而CC 攻擊側重於模擬真實用戶的操作來消耗伺服器的計算資源。
像是粉絲搶演唱會門票一樣,時間一到開放購買,在同一時間湧入大量連線,導致網頁一直轉或是網頁當掉。
Slow attack是攻擊者利用通訊協定中的漏洞,對目標伺服器建立較緩慢的網路連線,並且刻意將回應時間拉長,長時間佔用伺服器的連線,以佔滿耗盡攻擊目標的系統資源造成網路癱瘓。
與HTTP Flood 攻擊和 CC 攻擊不同,Slow Attack 不需要大量的資源僅用一台電腦就可以發起攻擊,並且因為低速緩慢攻擊很難與正常流量區分開來,因此可能存在很長一段時間不被發現,同時阻止或減慢對真實使用者的服務。
發起低速緩慢攻擊的兩種常用工具是 Slowloris 和 R.U.D.Y.。
例如去便利商店買東西,結帳時用一圓硬幣一個一個拿給店員結帳;又例如打給客服專線詢問事情,但故意放慢說話速度來佔據電話線路,佔滿店員/客服的時間,使其無法服務其他客人。
攻擊者藉著發送小型請求來導致大規模的回應,癱瘓目標受害者的網路與主機資源。
常見的放大攻擊有DNS放大攻擊(DNS Response Amplification Attack) 和 NTP 放大攻擊 (Network Time Protocol)
攻擊者透過操控殭屍網路,將封包中的Source IP 偽造成目標受害者的 IP,並向沒做好安全設定的 DNS server 或 NTP server 發送大量請求封包,DNS 或 NTP server 則會將大量的請求結果傳到目標受害者的 IP。
例如一個小屁孩打電話到餐廳將所有餐點都點了一份,並提供目標受害者的電話號碼,要求餐廳回電將所有訂單重複一遍。接著目標受害者就會接到來自餐廳的電話,提供給他不需要的大量訊息。
第七層攻擊之所以難以防禦,是因為很難判別流量到底是否為惡意。
可以架設如 Load Balance 或使用 CDN 服務等等反向代理,透過 Reverse Proxy 的機制來防止源伺服器被攻擊。
或對網路請求發起挑戰,例如Javascrip Challenge或人機驗證 (Captcha),測試該使用者是否為真實用戶或是機器人。
而對於HTTP Flood攻擊,工程師可以使用WAF (Web Application Firewall) 辨識包在傳輸資訊內的Web應用程式內容,即時分析並透過不同的處理規則來緩解攻擊。