總結自:微信公眾號“網絡安全每日說”
簡介
流量清洗是指在全部的網絡流量中區分出正常流量和惡意流量,將惡意流量阻斷和丟棄,而只將正常的流量交付給服務器。
與其他的網絡安全檢測和防護手段類似,流量清洗也需要考慮漏報率和誤報率的問題。通常,漏報率和誤報率是一對矛盾,需要通過對檢測和防護規則的調整來進行平衡。
如果流量清洗的漏報率太高,就會有大量的攻擊請求穿透流量清洗設備,如果無法有效地減少攻擊流量,也就達不到減輕服務器壓力的效果
相反,如果誤報率太高,就會出現大量的正常請求在清洗過程中被中斷,嚴重影響正常的服務和業務運行。
優秀的流量清洗設備,應該能夠同時將誤報率和漏報率降低到可以接受的程度,這樣就能夠在不影響網絡或業務系統正常運行的情況下,最大限度地將惡意攻擊流量從全部網絡流量中去除。要達到這個目的,需要同時使用多種准確而高效的清洗技術,這些技術包括:IP信譽檢查、攻擊特征匹配、速度檢查與限制、TCP代理和驗證、協議完整性驗證和客戶端真實性驗證。
1.IP信譽檢查
IP信譽機制是指為互聯網上的IP地址賦予一定的信譽值,那些過去或現在經常被作為僵屍主機發送垃圾郵件或發動拒絕服務攻擊的IP地址會被賦予較低的信譽值,說明這些IP地址更有可能成為網絡攻擊的來源。
IP信譽檢查的極端情況就是IP黑名單機制,即如果數據包的來源存在於黑名單當發生分布式拒絕服務攻擊時,流量清洗設備會對通過的網絡流量進行IP信譽檢查,在其內部的IP地址信譽庫中查找每一個數據包來源的信譽值,並會優先丟棄信譽值低的IP地址所發來的數據包或建立的會話連接,以此保證信譽高的IP地址與服務器的正常通信。
2.攻擊特征匹配
在大多數情況下,發動分布式拒絕服務攻擊需要借助攻擊工具。為了提高發送請求的效率,攻擊工具發出的數據包通常是由編寫者偽造並固化到工具當中的,而不是在交互過程中產生的,因此一種攻擊工具所發出的數據包載荷會具有一些特征。流量清洗設備可以將這些數據包載荷中的特征作為指紋,來識別工具發出的攻擊流量。指紋識別可以分為靜態指紋識別和動態指紋識別兩種。靜態指紋識別是指預先將多種攻擊工具的指紋特征保存在流量清洗設備內部,設備將經過的網絡數據包與內部的特征庫進行比對,直接丟棄符合特征的數據包;動態指紋識別則需要清洗設備對流過的網絡數據包進行學習,在學習到若干個數據包的載荷部分之后,將其指紋特征記錄下來,后續命中這些指紋特征的數據包會被丟棄,而長期不被命中的指紋特征會逐漸老化直至消失。
3.速度檢查與限制
一些攻擊方法在數據包載荷上可能並不存在明顯的特征,沒有辦法進行攻擊特征匹配,但卻在請求數據包發送的頻率和速度上有着明顯的異常。這些攻擊方法可以通過速度檢查與限制來進行清洗。
例如,在受到THC SSL DoS攻擊時,會在同一個SSL會話中多次進行加密密鑰的重協商,而正常情況下是不會反復重協商加密密鑰的。因此,當流量清洗設備進行統計時,如果發現SSL會話中密鑰重協商的次數超過了特定的閾值,就可以直接中斷這個會話並把來源加入黑名單中。再如,在受到Slowloris和慢速POST請求攻擊時,客戶端和服務器之間會以非常低的速率進行交互和數據傳輸。流量清洗設備在發現HTTP的請求長時間沒有完成傳輸時,就可以將會話中斷。此外,對於UDP洪水攻擊等一些沒有明顯特征、僅通過大流量進行攻擊的方法,可以通過限制流速的方式對其進行緩解。
4.TCP代理和驗證
SYN洪水攻擊等攻擊方式都是利用TCP協議的弱點,將被攻擊目標的連接表占滿,使其無法創建新的連接而達到拒絕服務攻擊的目的。流量清洗設備可以通過TCP代理和驗證的方法來緩解這種攻擊造成的危害。在一個TCP SYN請求到達流量清洗設備后,設備並不將它交給后面的服務器,而是直接回復一個SYN+ACK響應,並等待客戶端回復。如果SYN請求來自合法的用戶,那么他會對SYN+ACK進行響應,這時流量清洗設備會代替用戶與其保護之后,合法的用戶和服務器之間就可以透過流量清洗設備,進行正常數據通信。對於用戶來說整個過程是完全透明的,正常的交互沒有受到任何影響。的服務器建立起TCP連接,並將這個連接加入信任列表當中。
而如果這個SYN請求來自攻擊者,那么他通常不會對SYN+ACK進行應答,從而形成半開連接。這樣流量清洗設備會暫時保留這個半開連接,並在經過短暫的超時時間之后丟棄這個連接
相比於所保護的服務器,流量清洗設備對連接表操作進行了專門優化,能夠處理極其龐大的連接請求數量,因此即使有非常多的SYN請求同時涌向清洗設備,清洗設備也能夠處理。在這個過程中,由於清洗設備攔截在被保護的服務器之前,服務器並沒有消耗任何的連接資源,因此保證了服務器的性能不受影響。
流量清洗設備在作為TCP代理進行防護時,除了攔截半開連接外,還可以進行TCP協議的一些交互式驗證。例如,在收到第一個SYN請求時,通過直接丟棄、發送RST包或發送錯誤序列號的ACK包的方式來中斷連接過程,並檢查客戶端是否重新發起連接請求。通過這種驗證,也可以識別並丟棄許多不合法的連接。
5.協議完整性驗證
為了提高發送攻擊請求的效率,大多數的攻擊方法都會只發送攻擊請求,而不接收服務器響應的數據,或者無法完全理解和處理響應數據。因此,如果能夠對請求來源進行交互式驗證,就可以檢查請求來源協議實現的完整性。對於協議實現不完整的請求來源,通常可以將其作為攻擊主機丟棄其發送的數據。在DNS解析的過程中,如果域名解析請求獲得的響應數據中Flags字段的Truncated位被置位,通常客戶端就會使用TCP 53端口重新發送域名解析請求。
而攻擊者使用的攻擊工具由於不接收或不處理解析請求的響應數據,也就不會使用TCP 53端口進行重新連接。流量清洗設備可以利用這個區別來有效地區分合法用戶與攻擊者,攔截惡意的DNS攻擊請求
對於提供HTTP服務的Web服務器,也可以使用類似的方式進行協議完整性驗證。例如,可以使用HTTP協議中的302重定向來驗證請求的來源是否接收了響應數據並完整實現了HTTP協議的功能。HTTP的302狀態碼表示被請求的資源被臨時轉移,並會給出一個轉移后的地址。正常的合法用戶在接收到302重定向后會順着跳轉地址尋找對應的資源
而攻擊者的攻擊工具由於不接收或不處理響應數據,則不會進行跳轉,因此攻擊請求會被清洗設備攔截,Web服務器不會受到任何影響
6.客戶端真實性驗證
進行協議完整性驗證能夠清洗掉一部分簡單的攻擊工具所發送的攻擊流量,但是,一些攻擊工具在開發過程中使用了現成的協議庫,這樣就能夠完整實現協議交互,通過協議完整性檢驗。對於這些攻擊工具,需要使用客戶端真實性驗證技術進行攻擊流量清洗。客戶端真實性驗證是指對客戶端程序進行挑戰–應答式的交互驗證,檢查客戶端能否完成特定的功能,以此來確定請求數據是否來自真實的客戶端。對基於頁面的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攻擊。用戶應該根據自己的業務特點和主要威脅,選擇適合自身的解決方案。