SYN Flood防禦
前文描述過,SYN Flood攻擊大量消耗伺服器的CPU、記憶體資源,并占滿SYN等待隊列。相應的,我們修改核心參數即可有效緩解。主要參數如下:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
分别為啟用SYN Cookie、設定SYN最大隊列長度以及設定SYN+ACK最大重試次數。
SYN Cookie的作用是緩解伺服器資源壓力。啟用之前,伺服器在接到SYN資料包後,立即配置設定存儲空間,并随機化一個數字作為SYN号發送SYN+ACK資料包。然後儲存連接配接的狀态資訊等待用戶端确認。啟用SYN Cookie之後,伺服器不再配置設定存儲空間,而且通過基于時間種子的随機數算法設定一個SYN号,替代完全随機的SYN号。發送完SYN+ACK确認封包之後,清空資源不儲存任何狀态資訊。直到伺服器接到用戶端的最終ACK包,通過Cookie檢驗算法鑒定是否與發出去的SYN+ACK封包序列号比對,比對則通過完成握手,失敗則丢棄。當然,前文的進階攻擊中有SYN混合ACK的攻擊方法,則是對此種防禦方法的反擊,其中優劣由雙方的硬體配置決定
tcp_max_syn_backlog則是使用伺服器的記憶體資源,換取更大的等待隊列長度,讓攻擊資料包不至于占滿所有連接配接而導緻正常使用者無法完成握手。net.ipv4.tcp_synack_retries是降低伺服器SYN+ACK封包重試次數,盡快釋放等待資源。這三種措施與攻擊的三種危害一一對應,完完全全地對症下藥。但這些措施也是雙刃劍,可能消耗伺服器更多的記憶體資源,甚至影響正常使用者建立TCP連接配接,需要評估伺服器硬體資源和攻擊大小謹慎設定。
除了定制TCP/IP協定棧之外,還有一種常見做法是TCP首包丢棄方案,利用TCP協定的重傳機制識别正常使用者和攻擊封包。當防禦裝置接到一個IP位址的SYN封包後,簡單比對該IP是否存在于白名單中,存在則轉發到後端。如不存在于白名單中,檢查是否是該IP在一定時間段内的首次SYN封包,不是則檢查是否重傳封包,是重傳則轉發并加入白名單,不是則丢棄并加入黑名單。是首次SYN封包則丢棄并等待一段時間以試圖接受該IP的SYN重傳封包,等待逾時則判定為攻擊封包加入黑名單。
首包丢棄方案對使用者體驗會略有影響,因為丢棄首包重傳會增大業務的響應時間,有鑒于此發展出了一種更優的TCP Proxy方案。所有的SYN資料封包由清洗裝置接受,按照SYN Cookie方案處理。和裝置成功建立了TCP三向交握的IP位址被判定為合法使用者加入白名單,由裝置僞裝真實用戶端IP位址再與真實伺服器完成三次握手,随後轉發資料。而指定時間内沒有和裝置完成三次握手的IP位址,被判定為惡意IP位址屏蔽一定時間。除了SYN Cookie結合TCP Proxy外,清洗裝置還具備多種畸形TCP标志位資料包探測的能力,通過對SYN封包傳回非預期應答測試用戶端反應的方式來鑒别正常通路和惡意行為。
清洗裝置的硬體具有特殊的網絡處理器晶片和特别優化的作業系統、TCP/IP協定棧,可以處理非常巨大的流量和SYN隊列。
HTTP Flood防禦
HTTP Flood攻擊防禦主要通過緩存的方式進行,盡量由裝置的緩存直接傳回結果來保護後端業務。大型的網際網路企業,會有龐大的CDN節點緩存内容。
當進階攻擊者穿透緩存時,清洗裝置會截獲HTTP請求做特殊處理。最簡單的方法就是對源IP的HTTP請求頻率做統計,高于一定頻率的IP位址加入黑名單。這種方法過于簡單,容易帶來誤殺,并且無法屏蔽來自代理伺服器的攻擊,是以逐漸廢止,取而代之的是JavaScript跳轉人機識别方案。
HTTP Flood是由程式模拟HTTP請求,一般來說不會解析服務端傳回資料,更不會解析JS之類代碼。是以當清洗裝置截獲到HTTP請求時,傳回一段特殊JavaScript代碼,正常使用者的浏覽器會處理并正常跳轉不影響使用,而攻擊程式會攻擊到空處。
DNS Flood防禦
DNS攻擊防禦也有類似HTTP的防禦手段,第一方案是緩存。其次是重發,可以是直接丢棄DNS封包導緻UDP層面的請求重發,可以是傳回特殊響應強制要求用戶端使用TCP協定重發DNS查詢請求。
特殊的,對于授權域DNS的保護,裝置會在業務正常時期提取收到的DNS域名清單和ISP DNS IP清單備用,在攻擊時,非此清單的請求一律丢棄,大幅降低性能壓力。對于域名,實行同樣的域名白名單機制,非白名單中的域名解析請求,做丢棄處理。
慢速連接配接攻擊防禦
Slowloris攻擊防禦比較簡單,主要方案有兩個。
第一個是統計每個TCP連接配接的時長并計算機關時間内通過的封包數量即可做精确識别。一個TCP連接配接中,HTTP封包太少和封包太多都是不正常的,過少可能是慢速連接配接攻擊,過多可能是使用HTTP 1.1協定進行的HTTP Flood攻擊,在一個TCP連接配接中發送多個HTTP請求。
第二個是限制HTTP頭部傳輸的最大許可時間。超過指定時間HTTP Header還沒有傳輸完成,直接判定源IP位址為慢速連接配接攻擊,中斷連接配接并加入黑名單。
本文轉自echoroot 51CTO部落格,原文連結:http://blog.51cto.com/echoroot/1957328,如需轉載請自行聯系原作者