天天看點

全面解析Web應用防火牆

原文 http://netsecurity.51cto.com/art/201007/210199.htm

有趣的是,還沒有人能真正知道web應用防火牆究竟是什麼,或者确切的說,還沒有一個大家認可的精确定義。從廣義上來說,Web應用防火牆就是一些 增強 Web應用安全性的工具。然而,如果我們要深究它精确的定義,就可能會得到更多的疑問。因為一些Web應用防火牆是硬體裝置,一些則是應用軟體;一些是基 于網絡的,另一些則是嵌入WEB伺服器的。

國外市場上具有WEB應用防火牆功能的産品名稱就有不同的幾十種,更不用說是産品的形式和描述了。它難以界定的原因是這個名稱包含的東西太多了。較 低的網絡層(Web應用防火牆被安置在第七層)被許多裝置所覆寫,每一種裝置都有它們獨特的功能,比如路由器,交換機,防火牆,入侵檢測系統,入侵防禦系 統等等。然而,在HTTP的世界裡,所有這些功能都被融入在一個裝置裡:Web應用防火牆。

總體來說,Web應用防火牆的具有以下四個方面的功能:

1. 審計裝置:用來截獲所有HTTP資料或者僅僅滿足某些規則的會話

2. 通路控制裝置:用來控制對Web應用的通路,既包括主動安全模式也包括被動安全模式

3. 架構/網絡設計工具:當運作在反向代理模式,他們被用來配置設定職能,集中控制,虛拟基礎結構等。

4. WEB應用加強工具:這些功能增強被保護Web應用的安全性,它不僅能夠屏蔽WEB應用固有弱點,而且能夠保護WEB應用程式設計錯誤導緻的安全隐患。

但是,需要指出的是,并非每種被稱為Web應用防火牆的裝置都同時具有以上四種功能。

由于WEB應用防火牆的多面性,擁有不同知識背景的人往往會關注它不同方面的特點。比如具有網絡入侵檢測背景的人更傾向于把它看作是運作在HTTP 層上的 IDS裝置;具有防火牆自身背景的人更趨向與把它看作一種防火牆的功能子產品。還有一種了解來自于“深層檢測防火牆”這個術語。他們認為深層檢測防火牆是一 種和Web應用防火牆功能相當的裝置。然而,盡管兩種裝置有些相似之處,但是差異還是很大的。深層檢測防火牆通常工作在的網絡的第三層以及更高的層次,而 Web應用防火牆則在第七層處理HTTP服務并且很好地支援它。

直接更改WEB代碼解決安全問題是否更好?這是毋庸置疑的,但也沒那麼容易(實作)。

因為,通過更改WEB應用代碼是否一定就能增強系統安全性能,這本身就存在争論。而且現實也更加複雜:

◆不可能確定100%的安全。人的能力有限,會不可避免地犯錯誤。

◆絕大多數情況下,很少有人力求100%的安全。如今的現實生活中那些引領應用發展的人更多注重功能而不是安全。這種觀念正在改變,隻是有點緩慢。

◆一個複雜的系統通常包含第三方産品(元件,函數庫),它們的安全性能是不為人知的。如果這個産品的源代碼是保密的,那麼你必須依賴商品的廠商提供更新檔。即使有些情況下源代碼是公開的,你也不可能有精力去修正它們。

◆我們不得不使用存在安全隐患的業務系統,盡管這些舊系統根本無法改進。

是以,為了獲得最好的效果,我們需要雙管齊下:一方面,必須提高管理者和開發者的安全意識;另一方面,盡可能提高應用系統的安全性。

Web應用防火牆的特點

異常檢測協定

如果閱讀過各種RFC,就會發現一個被反複強調的主題。大多數RFC建議應用自己使用協定時要保守,而對于接受其他發送者的協定時可以自由些。 Web伺服器就是這樣做的,但這樣的行為也給所有的攻擊者打開了大門。幾乎所有的WAF對HTTP的請求執行某種異常檢測,拒絕不符合Http标準的請 求。并且,它也可以隻允許HTTP協定的部分選項通過,進而減少攻擊的影響範圍。甚至,一些WAF還可以嚴格限定HTTP協定中那些過于松散或未被完全制 定的選項。

增強的輸入驗證

就頻繁發生的Web安全問題而言,有些是源于對Web設計模型的誤解,有些則來自于程式師認為浏覽器是可信的。很多WEB程式員用 JavaScript在浏覽器上實作輸入驗證。而浏覽器隻是一個使用者控制的簡單工具,是以攻擊者可以非常容易地繞過輸入驗證,直接将惡意代碼輸入到WEB 應用伺服器。

有一個解決上述問題的正确方法,就是在服務端進行輸入驗證。如果這個方法不能實作,還可以通過在客戶和應用伺服器之間增加代理,讓代理去執行Web頁面上嵌入的JavaScript,實作輸入驗證。

消極的安全模型vs.積極的安全模型

曾經設定過防火牆規則的人,可能會碰到這樣的建議:允許已知安全的流量,拒絕其他一切通路。這就是一種很好的積極安全模型。恰恰相反,消極安全模型則是預設允許一切通路,隻拒絕一些已知危險的流量模式。

每種安全模型方式都存在各自的問題:

消極安全模型:什麼是危險的?

積極安全模型:什麼是安全的?

消極安全模式通常使用的更多。識别出一種危險的模式并且配置自己的系統禁止它。這個操作簡單而有趣,卻不十分安全。它依賴于人們對于危險的認識,如果問題存在,卻沒有被意識到(這種情況很常見),就會為攻擊者留下可趁之機。

積極安全模式(又稱為白名單模式)看上去是一種制定政策的更好方式,非常适于配置防火牆政策。在Web應用安全領域中,積極安全模式通常被概括成對應用中的每一個腳本的枚舉。對枚舉的每一個腳本,需要建立一個相應清單,表中内容如下所示:

◆允許的請求方式(比如,GET/POST或者隻POST)

◆允許的Content-Type

◆允許的Content-Length

◆允許的參數

◆指定參數和可選參數

◆參數類型(比如,文本或整數)

◆附加參數限制

上述清單僅僅是個例子,實際的積極安全模式通常包括更多的要素。它試圖從外部完成程式員本應從内部完成的工作:為送出到Web應用的資訊驗證每一個 比特。如果肯花時間的話,使用積極安全模式就是一個比較好的選擇。這個模式的難點之一,在于應用模式會随着應用的發展而改變。每當應用中添加新腳本或更改 舊腳本,就需要更新模式。但是,它适用于保護那些穩定的、無人維護的舊應用。

自動開發政策可以解決以上問題:

◆一些WAF能夠監視流量,并根據這些流量資料自動配置政策,有些産品可以實時進行這樣的工作。

◆通過白名單,可以辨別特定的IP位址是可信的,然後,依據觀察的流量,配置WAF,更新安全政策。

◆如果通過一個全面的衰減測試,(仿真正确的行為)來建立一個應用,并且在WAF處于監控狀态時執行測試,那麼WAF可以自動生成政策。

可見,沒有哪個模式是完全令人滿意的。消極安全模式适用于處理已知問題,而積極安全模式則适用于穩定的Web應用。理想的做法是,在現實生活中,将二者結合使用,取長補短。

及時更新檔

積極安全模式理論上更好一些因為浏覽器和WEB應用程式之間的通信協定通過HTML規範進行了很好的定義。現在的Web開發語言都可以處理帶有多個 參數的 HTTP請求。因為這些參數在Web應用防火牆中都是可見的,是以WEB應用防火牆可以分析這些參數判斷是否存在允許該請求。,

當一個應用中的漏洞被發現時大多數情況下我們會盡可能在代碼中修補它。受諸多因素的影響(如應用的規模,是否有開發人員,法律問題等等),開發更新檔的過程可能需要幾分鐘,或者一直到無限長的是時間。這些時間正是攻擊者發起攻擊的好機會。

如果開發人員能夠在非常短的時間内在代碼中修補好漏洞,那你就不用擔心了。但如果修補這個漏洞需要花費幾天,甚至幾周來修複呢?Web應用防火牆就 是處理這個問題的理想工具:隻要給一個安全專家不錯的WAF和足夠的漏洞資訊,他就能在不到一個小時的時間内屏蔽掉這個漏洞。當然,這種屏蔽掉漏洞的方式 不是非常完美的,并且沒有安裝對應的更新檔就是一種安全威脅,但我們在沒有選擇的情況下,任何保護措施都比沒有保護措施更好。

及時更新檔的原理可以更好的适用于基于XML的應用中,因為這些應用的通信協定都具規範性。

基于規則的保護和基于異常的保護

現在市場上大多數的産品是基于規則的WAF。其原理是每一個會話都要經過一系列的測試,每一項測試都由一個過多個檢測規則組成,如果測試沒通過,請求就會被認為非法并拒絕。

基于規則的WAFs很容易建構并且能有效的防範已知安全問題。當我們要制定自定義防禦政策時使用它會更加便捷。但是因為它們必須要首先确認每一個威脅的特點,是以要由一個強大的規則資料庫支援。WAF生産商維護這個資料庫,并且他們要提供自動更新的工具。

這個方法不能有效保護自己開發的WEB應用或者零日漏洞(攻擊者使用的沒有公開的漏洞),這些威脅使用基于異常的WAF更加有效。

異常保護的基本觀念是建立一個保護層,這個保護層能夠根據檢測合法應用資料建立統計模型,以此模型為依據判别實際通信資料是否是攻擊。理論上,一但 建構成功,這個基于異常的系統應該能夠探測出任何的異常情況。擁有了它,我們不再需要規則資料庫而且零日攻擊也不再成問題了。但基于異常保護的系統很難構 建,是以并不常見。因為使用者不了解它的工作原理也不相信它,是以它也就不如基于規則的WAF應用廣範。

狀态管理

HTTP的無狀态性對Web應用安全有很多負面影響。會話隻能夠在應用層上實作,但對許多應用來說這個附加的功能隻能滿足業務的需要而考慮不到安全因素了。Web應用防火牆則将重點放在會話保護上,它的特征包括:

強制登入頁面。在大多數站點, 你可以從任何你所知道的URL上通路站點,這通常友善了攻擊者而給防禦增加了困難。WAF能夠判斷使用者是否是第一次通路并且将請求重定向到預設登入頁面并且記錄事件。

分别檢測每一個使用者會話。如果能夠區分不同的會話,這就帶來了無限的可能。比如,我們能夠監視登陸請求的發送頻率和使用者的頁面跳轉。通過檢測使用者的整個操作行為我們可以更容易識别攻擊。

對暴力攻擊的識别和響應。通常的Web應用網絡是沒有檢測暴力攻擊的。有了狀态管理模式,WAF能檢測出異常事件(比如登陸失敗),并且在達到極限 值時進行處理。此時它可以增加更多的身份認證請求的時間,這個輕微的變化使用者感覺不到,但對于足以對付自動攻擊腳本了。如果一個認證腳本需要50毫秒完 成,那它可以發出大約每秒20次的請求。如果你增加一點延時,比如說,一秒種的延遲,那會将請求降低至每秒不足一次。與此同時,發出進一步檢測的警告,這 将構成一個相當好的防禦。

實作會話逾時。超出預設時間會話将失效,并且使用者将被要求重新認證。使用者在長時間沒有請求時将會自動登出。

會話劫持的檢測和防禦。許多情況下,會話劫持會改變IP位址和一些請求資料(HTTP請求的報頭會不同)。狀态監控工具能檢測出這些異常并防止非法應用的發生。在這種情況下應該終止會話,要求使用者重新認證,并且記錄一個警告日志資訊。

隻允許包含在前一請求應答中的連結。一些WAF很嚴格,隻允許使用者通路前一次請求傳回頁面中的連結。這看上去是一個有趣的特點但很難得到實施。一個問題在于它不允許使用者使用多個浏覽器視窗,另一個問題是它令使用JavaScript自動建立連接配接的應用失效。

其他防護技術

WAF的另外一些安全增強的功能用來解決WEB程式員過分信任輸入資料帶來的問題。比如:

隐藏表單域保護。有時,内部應用資料通過隐藏表單變量實作,而它們并不是真的隐藏的。程式員通常用隐藏表單變量的方式來儲存執行狀态,給使用者發送資料,以確定這些資料傳回時未被修改。這是一個複雜繁瑣的過程,WAF經常使用密碼簽名技術來處理。

Cookies保護。和隐藏表單相似的是,cookies經常用來傳遞使用者個人的應用資料,而不一樣的是,一些cookies可能含有敏感資料。 WAFs 通常會将整個内容加密,或者是将整個cookies機制虛拟化。有了這種設定,終端使用者隻能夠看到cookies令牌(如同會話令牌),進而保證 cookies在WAF中安全地存放

抗入侵規避技術。基于網絡的IDS對付WEB攻擊的問題就是攻擊規避技術。改寫HTTP輸入請求資料(攻擊資料)的方式太多,并且各種改寫的請求能 夠逃避IDS探測。在這個方面如果能完全了解HTTP就是大幅度的改進。比如,WAF每次可以看到整個HTTP請求,就可以避免所有類型的HTTP請求分 片的攻擊。因為很好的了解HTTP協定,是以能夠将動态請求和靜态請求分别對待,就不用花大量時間保護不會被攻擊的靜态資料。這樣WAF可以有足夠的計算 能力對付各種攻擊規避技術, 而這些功能由NIDSs完成是很耗時的。

響應監視和資訊洩露保護。資訊洩露防護是我們給監視HTTP輸出資料的一個名稱。從原理上來說它和請求監視是一樣的,目的是監視可疑的輸出,并防止 可疑的 http輸出資料到達使用者。最有可能的應用模式是監視信用卡号和社會保險号。另外,這個技術的另一項應用是發現成功入侵的迹象。因為有經驗攻擊者總會給信 息編碼來防止監測,是以防止這樣有決心并技術熟練的攻擊者擷取資訊是很困難的。但是,在攻擊者沒有完全掌控伺服器而僅僅嘗試WEB應用的安全漏洞的情況 下,這項技術可以起到防護效果。

繼續閱讀