總結自:微信公衆號「網絡安全每日說」瀏覽器
流量清洗是指在所有的網絡流量中區分出正常流量和惡意流量,將惡意流量阻斷和丟棄,而只將正常的流量交付給服務器。安全
與其餘的網絡安全檢測和防禦手段相似,流量清洗也須要考慮漏報率和誤報率的問題。一般,漏報率和誤報率是一對矛盾,須要經過對檢測和防禦規則的調整來進行平衡。服務器
若是流量清洗的漏報率過高,就會有大量的攻擊請求穿透流量清洗設備,若是沒法有效地減小攻擊流量,也就達不到減輕服務器壓力的效果微信
相反,若是誤報率過高,就會出現大量的正常請求在清洗過程當中被中斷,嚴重影響正常的服務和業務運行。網絡
優秀的流量清洗設備,應該可以同時將誤報率和漏報率下降到能夠接受的程度,這樣就可以在不影響網絡或業務系統正常運行的狀況下,最大限度地將惡意攻擊流量從所有網絡流量中去除。要達到這個目的,須要同時使用多種準確而高效的清洗技術,這些技術包括:IP信譽檢查、攻擊特徵匹配、速度檢查與限制、TCP代理和驗證、協議完整性驗證和客戶端真實性驗證。分佈式
IP信譽機制是指爲互聯網上的IP地址賦予必定的信譽值,那些過去或如今常常被做爲殭屍主機發送垃圾郵件或發動拒絕服務攻擊的IP地址會被賦予較低的信譽值,說明這些IP地址更有可能成爲網絡攻擊的來源。工具
IP信譽檢查的極端狀況就是IP黑名單機制,即若是數據包的來源存在於黑名單當發生分佈式拒絕服務攻擊時,流量清洗設備會對經過的網絡流量進行IP信譽檢查,在其內部的IP地址信譽庫中查找每個數據包來源的信譽值,並會優先丟棄信譽值低的IP地址所發來的數據包或創建的會話鏈接,以此保證信譽高的IP地址與服務器的正常通訊。性能
在大多數狀況下,發動分佈式拒絕服務攻擊須要藉助攻擊工具。爲了提升發送請求的效率,攻擊工具發出的數據包一般是由編寫者僞造並固化到工具當中的,而不是在交互過程當中產生的,所以一種攻擊工具所發出的數據包載荷會具備一些特徵。流量清洗設備能夠將這些數據包載荷中的特徵做爲指紋,來識別工具發出的攻擊流量。指紋識別能夠分爲靜態指紋識別和動態指紋識別兩種。靜態指紋識別是指預先將多種攻擊工具的指紋特徵保存在流量清洗設備內部,設備將通過的網絡數據包與內部的特徵庫進行比對,直接丟棄符合特徵的數據包;動態指紋識別則須要清洗設備對流過的網絡數據包進行學習,在學習到若干個數據包的載荷部分以後,將其指紋特徵記錄下來,後續命中這些指紋特徵的數據包會被丟棄,而長期不被命中的指紋特徵會逐漸老化直至消失。學習
一些攻擊方法在數據包載荷上可能並不存在明顯的特徵,沒有辦法進行攻擊特徵匹配,但卻在請求數據包發送的頻率和速度上有着明顯的異常。這些攻擊方法能夠經過速度檢查與限制來進行清洗。測試
例如,在受到THC SSL DoS攻擊時,會在同一個SSL會話中屢次進行加密密鑰的重協商,而正常狀況下是不會反覆重協商加密密鑰的。所以,當流量清洗設備進行統計時,若是發現SSL會話中密鑰重協商的次數超過了特定的閾值,就能夠直接中斷這個會話並把來源加入黑名單中。再如,在受到Slowloris和慢速POST請求攻擊時,客戶端和服務器之間會以很是低的速率進行交互和數據傳輸。流量清洗設備在發現HTTP的請求長時間沒有完成傳輸時,就能夠將會話中斷。此外,對於UDP洪水攻擊等一些沒有明顯特徵、僅經過大流量進行攻擊的方法,能夠經過限制流速的方式對其進行緩解。
SYN洪水攻擊等攻擊方式都是利用TCP協議的弱點,將被攻擊目標的鏈接表佔滿,使其沒法建立新的鏈接而達到拒絕服務攻擊的目的。流量清洗設備能夠經過TCP代理和驗證的方法來緩解這種攻擊形成的危害。在一個TCP SYN請求到達流量清洗設備後,設備並不將它交給後面的服務器,而是直接回復一個SYN+ACK響應,並等待客戶端回覆。若是SYN請求來自合法的用戶,那麼他會對SYN+ACK進行響應,這時流量清洗設備會代替用戶與其保護以後,合法的用戶和服務器之間就能夠透過流量清洗設備,進行正常數據通訊。對於用戶來講整個過程是徹底透明的,正常的交互沒有受到任何影響。的服務器創建起TCP鏈接,並將這個鏈接加入信任列表當中。
而若是這個SYN請求來自攻擊者,那麼他一般不會對SYN+ACK進行應答,從而造成半開鏈接。這樣流量清洗設備會暫時保留這個半開鏈接,並在通過短暫的超時時間以後丟棄這個鏈接
相比於所保護的服務器,流量清洗設備對鏈接表操做進行了專門優化,可以處理極其龐大的鏈接請求數量,所以即便有很是多的SYN請求同時涌向清洗設備,清洗設備也可以處理。在這個過程當中,因爲清洗設備攔截在被保護的服務器以前,服務器並無消耗任何的鏈接資源,所以保證了服務器的性能不受影響。
流量清洗設備在做爲TCP代理進行防禦時,除了攔截半開鏈接外,還能夠進行TCP協議的一些交互式驗證。例如,在收到第一個SYN請求時,經過直接丟棄、發送RST包或發送錯誤序列號的ACK包的方式來中斷鏈接過程,並檢查客戶端是否從新發起鏈接請求。經過這種驗證,也能夠識別並丟棄許多不合法的鏈接。
爲了提升發送攻擊請求的效率,大多數的攻擊方法都會只發送攻擊請求,而不接收服務器響應的數據,或者沒法徹底理解和處理響應數據。所以,若是可以對請求來源進行交互式驗證,就能夠檢查請求來源協議實現的完整性。對於協議實現不完整的請求來源,一般能夠將其做爲攻擊主機丟棄其發送的數據。在DNS解析的過程當中,若是域名解析請求得到的響應數據中Flags字段的Truncated位被置位,一般客戶端就會使用TCP 53端口從新發送域名解析請求。
而攻擊者使用的攻擊工具因爲不接收或不處理解析請求的響應數據,也就不會使用TCP 53端口進行從新鏈接。流量清洗設備能夠利用這個區別來有效地區分合法用戶與攻擊者,攔截惡意的DNS攻擊請求
對於提供HTTP服務的Web服務器,也可使用相似的方式進行協議完整性驗證。例如,可使用HTTP協議中的302重定向來驗證請求的來源是否接收了響應數據並完整實現了HTTP協議的功能。HTTP的302狀態碼錶示被請求的資源被臨時轉移,並會給出一個轉移後的地址。正常的合法用戶在接收到302重定向後會順着跳轉地址尋找對應的資源
而攻擊者的攻擊工具因爲不接收或不處理響應數據,則不會進行跳轉,所以攻擊請求會被清洗設備攔截,Web服務器不會受到任何影響
進行協議完整性驗證可以清洗掉一部分簡單的攻擊工具所發送的攻擊流量,可是,一些攻擊工具在開發過程當中使用了現成的協議庫,這樣就可以完整實現協議交互,經過協議完整性檢驗。對於這些攻擊工具,須要使用客戶端真實性驗證技術進行攻擊流量清洗。客戶端真實性驗證是指對客戶端程序進行挑戰–應答式的交互驗證,檢查客戶端可否完成特定的功能,以此來肯定請求數據是否來自真實的客戶端。對基於頁面的Web服務,能夠經過檢查客戶端是否支持JavaScript來驗證請求是否來自真實的瀏覽器客戶端。當收到HTTP請求時,流量清洗設備會使用JavaScript等腳本語言發送一條簡單的運算操做。若是請求是由真實的瀏覽器發出的,那麼瀏覽器會進行正確運算並返回結果,流量清洗設備進行結果驗證後就會讓瀏覽器進行正確運算並返回結果,流量清洗設備進行結果驗證後就會讓瀏覽器跳轉到Web服務器上真正的資源位置,不會影響正經常使用戶的訪問,而若是請求是由攻擊者經過攻擊工具發送的,因爲大部分工具沒有實現JavaScript的解析和執行功能,於是不能返回正確的運算結果,流量清洗設備會直接丟棄這些請求,而不會給出跳轉到Web服務器的鏈接,所以Web服務器不會受到影響
固然,攻擊者也能夠犧牲工具的一部分攻擊效率,並在工具中加入JavaScript的解析和執行功能,以便經過JavaScript驗證。這時,則須要使用驗證碼進行人機識別。驗證碼的全稱是「全自動區分計算機和人類的圖靈測試」(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA),這是一種用於分辨人與計算機的反向圖靈測試。
圖靈測試和反向圖靈測試
圖靈測試(又稱「圖靈判斷」)是圖靈提出的一個關於機器人的著名判斷原則。圖靈測試是一種測試機器是否是具有人類智能的方法。被測試的包括一我的和一臺聲稱本身有人類智力的機器。測試人在與被測試者(一我的和一臺機器)隔開的狀況下,經過一些裝置(如鍵盤)向被測試者隨意提問。問過一些問題後,若是測試人不能確認被測試者的答覆中哪一個是人、哪一個是機器的回答,那麼這臺機器就經過了測試,並被認爲具備人類智能。目前,尚未一臺機器可以經過圖靈測試。能夠看出,圖靈測試是由人來出題考驗機器,其目的是讓出題人沒法分辨給出答案的是人仍是機器;而驗證碼與這個過程相反,是由機器來自動生成題目,其目的是讓出題人可以有效地分辨給出答案的是否是真實的人。所以,驗證碼一般被認爲是一種反向圖靈測試。常見的驗證碼是讓用戶輸入一個扭曲變形的圖片上所顯示的文字。對於真實的人類用戶來講,一般可以比較容易地識別出這些文字,給出正確的識別結果,從而經過測試並繼續進行訪問
而對於計算機來講,想要識別驗證碼中的文字則至關困難。對於沒法給出驗證碼正確識別結果的請求,流量清洗設備會直接丟棄,從而保護Web服務器不受影響誤區:DDoS的雲端清洗服務和本地緩解設備能夠相互替代。DDoS實際上是多種攻擊的統稱,不一樣的攻擊也許要不一樣的緩解方法。一般,雲端清洗服務主要採用稀釋和分流的方法,擅長應對流量型DDoS攻擊;而本地緩解設備可以處理的流量較小,更容易組合使用多種清洗技術,適合對抗系統資源消耗型和應用資源消耗型DDoS攻擊。用戶應該根據本身的業務特色和主要威脅,選擇適合自身的解決方案。