基本含義
Web套用防火牆正日趨流行,過去這些工具被很少數的大型項目壟斷,但是,隨著大量的低成本產品的面市以及可供選擇的開源試用產品的出現,它們最終能被大多數人所使用。在這篇文章中,先向大家介紹Web套用防火牆能幹什麼,然後快速的概覽一下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套用的安全漏洞的情況下,這項技術可以起到防護效果