《白帽子講Web安全》13-應用層拒絕服務攻擊

第13章 應用層拒絕服務攻擊

DDOS攻擊被認爲是安全領域中最難解決的問題之一,迄今爲止也沒有一個完美的解決方案。

13.1 DDOS簡介

  1. Distributed Denial of Service,DDOS。
  2. DDOS,通過若干網絡節點同時發起攻擊,以達成規模效應,造成資源過載,導致服務不可用。
  3. 常見的DDOS攻擊有SYN flood、UDP flood、ICMP flood等。
    • 其中SYN flood是一種最爲經典的DDOS攻擊。
  4. 對抗SYN flood的主要措施有SYN Cookies/SYN Proxy\safereset等算法。
    • SYN Cookie的主要思想是爲每一個IP地址分配一個“Cookie”,並統計每個IP地址的訪問頻率。
    • 如果短時間收到大量……,則認爲受到攻擊,之後來自這個IP地址的包將被丟棄。
  5. 對抗DDOS的網絡設備可以串聯或並聯在網絡出口處。

13.2 應用層DDOS

應用層DDOS發生在應用層,TCP三次握手已經完成,連接已經建立,所以發起攻擊的IP地址也都是真實的。

13.2.1 CC攻擊

  1. CC攻擊
    • Challenge Collapasar
    • 原理:對一些消耗資源較大的應用頁面不斷髮起正常的請求,以達到消耗服務端資源的目的。
    • 在Web應用中,查詢數據庫、讀/寫硬盤文件等操作,相對都會消耗比較多的資源。
    • 以爬蟲類比:應用層DDOS攻擊與正常業務的界線比較模糊。
  2. 應用層DDOS攻擊還可以這樣完成:
    • 在黑客入侵了一個流量很大的網站後,通過篡改頁面,將巨大的用戶流量分流到目標網站。
    • eg. target拒絕服務
  3. 應用層DDOS攻擊是針對服務器性能的一種攻擊,許多優化服務器性能的方法,都或多或少地能緩解此種攻擊。
    • 但很多性能優化的方案並非是爲了對抗應用層DDOS攻擊而設計的,因此攻擊者想要找到一個資源消耗大的頁面並不困難。

13.2.2 限制請求頻率

  1. 最常見的針對應用層DDOS攻擊的防禦措施,是在應用中針對每個“客戶端”做一個請求頻率的限制。
  2. 案例代碼
    • 思路:通過IP地址和Cookie定位一個客戶端,如果客戶端的請求在一定時間內過於頻繁,則對之後來自該客戶端的所有請求都重定向到一個出錯頁面。
    • 架構上,這段代碼需要放在業務邏輯之前,才能起到保護後端應用的目的。

13.2.3 道高一尺,魔高一丈

  1. 如何讓IP地址發生變化?
    • 使用“代理服務器”
      • 代理獵手
      • AccessDriver
  2. 如何解決應用層DDOS攻擊?
    • 應用代碼要做好性能優化
      • 合理使用memcache
      • 及時地釋放資源
    • 在網絡架構上做好優化
      • 善於利用負載均衡分流
    • 實現一些對抗手段
      • 比如限制每個IP地址的請求頻率

13.3 驗證碼的那些事兒

  1. 驗證碼的破解,除了直接利用圖像相關算法識別驗證碼外,還可以利用Web實現上可能存在的漏洞破解驗證碼。
  2. 驗證碼的驗證過程,是比對用戶提交的明文和服務器端Session裏保存的驗證碼明文是否一致。
  3. 漏洞案例
    • 驗證碼消耗掉後SessionID爲更新,導致使用原有的SessionID可以一直重複提交同一個驗證碼。
    • 有的驗證碼實現方式,是提前將所有的驗證碼圖片生成好,以哈希過的字符串作爲驗證碼圖片的文件名。使用驗證碼時,則直接從圖片服務器返回已經生成好的驗證碼,這種設計原本的想法時爲了提高性能。
      • 破解方式:枚舉+遍歷,建立驗證碼到明文之間的一一對應關係,從而形成一張“彩虹表”
      • 修補方式:驗證碼的文件名需要隨機化,滿足“不可預測性”原則。

13.4 防禦應用層DDOS

  1. 人機識別
    • 驗證碼的核心是識別人與機器。
    • 可以讓客戶端解析一段JavaScript,判斷客戶端是否是在一個瀏覽器環境中發起的請求。
  2. 在Web Server這一層做些防禦
    • Apache的mod_qos
    • Yahoo的專利

13.5 資源耗盡攻擊

除了CC攻擊外,攻擊者還可能利用一些Web Server的漏洞或設計缺陷,直接造成拒絕服務。

  1. Slowloris攻擊
    • 此類拒絕服務的本質,實際上是對有限資源的無限制濫用。
  2. HTTP POST DOS
    • 這種攻擊的本質也是針對Apache的MaxClients限制的。
    • 解決方法:使用Web應用防火牆,或者一個定製的WebServer安全模塊。
    • 以上兩個例子:凡是資源有“限制”的地方,都可能發生資源濫用,從而導致拒絕服務,也就是一種“資源耗盡攻擊”。
  3. Server Limit DOS
    • 通過XSS攻擊,向客戶端寫入一個超長的Cookie,客戶端發送的HTTP包頭過大,服務器返回一個4xx錯誤,導致客戶端在清空Cookie之前,將無法再訪問該Cookie所在域的任何頁面。
    • 解決方法:調整Apache配置參數LimitRequestFieldSize,這個參數設置爲0時,對HTTP包頭的大小沒有限制。
  4. “拒絕服務攻擊”的本質實際上時一種“資源耗盡攻擊”,因此再設計系統時,需要考慮到各種可能出現的場景,避免出現“有限資源”被惡意濫用的情況。

13.6 一個正則引發的血案:ReDOS

  1. ReDOS是一種代碼實現上的缺陷。
  2. 正則表達式是基於NFA(Nonedeterministic Finite Automaton)的,它是一個狀態機,每個狀態和輸入符號都可能有許多不同的下一個狀態。正則引擎將遍歷所有可能的路徑直到最後。
  3. 這將極大地增加正則引擎解析數據時的消耗。
    • 惡意構造輸入時,導致整臺服務器的性能下降,表現的結果是系統速度很慢,有的進程或服務失去相應,與拒絕服務的後果是一樣的。

# 13.7 小結

  1. 應用層拒絕服務攻擊的本質也是對有限資源的無限制濫用所造成的。
  2. 解決這個問題的核心思路就是限制每個不可信任的資源使用者的配額。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章