Web應(yīng)用防火墻入門
作者:iisutm安全小組
原文:www.iisutm.com
Web應(yīng)用防火墻正日趨流行,過去這些工具被很少數(shù)的大型項目壟斷,但是,隨著大量的低成本產(chǎn)品的面市以及可供選擇的開源試用產(chǎn)品的出現(xiàn),它們 終能被大多數(shù)人所使用。在這篇文章中,先向大家介紹Web應(yīng)用防火墻能干什么,然后快速的概覽一下Web應(yīng)用防火墻 有用的一些特征。通過這篇文章的閱讀,大家能清楚地了解web應(yīng)用防火墻這個主題,掌握相關(guān)知識。
;
什么是web應(yīng)用防火墻?
有趣的是,還沒有人能真正知道web應(yīng)用防火墻究竟是什么,或者確切的說,還沒有一個大家認(rèn)可的精確定義。從廣義上來說,Web應(yīng)用防火墻就是一些增強(qiáng) Web應(yīng)用安全性的工具。然而,如果我們要深究它精確的定義,就可能會得到更多的疑問。因為一些Web應(yīng)用防火墻是硬件設(shè)備,一些則是應(yīng)用軟件;一些是基于網(wǎng)絡(luò)的,另一些則是嵌入WEB服務(wù)器的。
國外市場上具有WEB應(yīng)用防火墻功能的產(chǎn)品名稱就有不同的幾十種,更不用說是產(chǎn)品的形式和描述了。它難以界定的原因是這個名稱包含的東西太多了。較低的網(wǎng)絡(luò)層(Web應(yīng)用防火墻被安置在第七層)被許多設(shè)備所覆蓋,每一種設(shè)備都有它們獨特的功能,比如路由器,交換機(jī),防火墻,入侵檢測系統(tǒng),入侵防御系統(tǒng)等等。然而,在HTTP的世界里,所有這些功能都被融入在一個設(shè)備里:Web應(yīng)用防火墻。
總體來說,Web應(yīng)用防火墻的具有以下四個方面的功能:
1. 審計設(shè)備:用來截獲所有HTTP數(shù)據(jù)或者僅僅滿足某些規(guī)則的會話
2. 訪問控制設(shè)備:用來控制對Web應(yīng)用的訪問,既包括主動安全模式也包括被動安全模式
3. 架構(gòu)/網(wǎng)絡(luò)設(shè)計工具:當(dāng)運(yùn)行在反向代理模式,他們被用來分配職能,集中控制,虛擬基礎(chǔ)結(jié)構(gòu)等。
4. WEB應(yīng)用加固工具:這些功能增強(qiáng)被保護(hù)Web應(yīng)用的安全性,它不僅能夠屏蔽WEB應(yīng)用固有弱點,而且能夠保護(hù)WEB應(yīng)用編程錯誤導(dǎo)致的安全隱患。
但是,需要指出的是,并非每種被稱為Web應(yīng)用防火墻的設(shè)備都同時具有以上四種功能。
由于WEB應(yīng)用防火墻的多面性,擁有不同知識背景的人往往會關(guān)注它不同方面的特點。比如具有網(wǎng)絡(luò)入侵檢測背景的人更傾向于把它看作是運(yùn)行在HTTP層上的 IDS設(shè)備;具有防火墻自身背景的人更趨向與把它看作一種防火墻的功能模塊。還有一種理解來自于“深度檢測防火墻這個術(shù)語。他們認(rèn)為深度檢測防火墻是一種和Web應(yīng)用防火墻功能相當(dāng)?shù)脑O(shè)備。然而,盡管兩種設(shè)備有些相似之處,但是差異還是很大的。深度檢測防火墻通常工作在的網(wǎng)絡(luò)的第三層以及更高的層次,而 Web應(yīng)用防火墻則在第七層處理HTTP服務(wù)并且很好地支持它。
直接更改WEB代碼解決安全問題是否更好?這是毋庸置疑的,但也沒那么容易(實現(xiàn))。
因為,通過更改WEB應(yīng)用代碼是否一定就能增強(qiáng)系統(tǒng)安全性能,這本身就存在爭論。而且現(xiàn)實也更加復(fù)雜:
* 不可能確保的安全。人的能力有限,會不可避免地犯錯誤。
;* 絕大多數(shù)情況下,很少有人力求的安全。如今的現(xiàn)實生活中那些引領(lǐng)應(yīng)用發(fā)展的人更多注重功能而不是安全。這種觀念正在改變,只是有點緩慢。
;* 一個復(fù)雜的系統(tǒng)通常包含第三方產(chǎn)品(組件,函數(shù)庫),它們的安全性能是不為人知的。如果這個產(chǎn)品的源代碼是保密的,那么你必須依賴商品的廠商提供補(bǔ)丁。即使有些情況下源代碼是公開的,你也不可能有精力去修正它們。
;* 我們不得不使用存在安全隱患的業(yè)務(wù)系統(tǒng),盡管這些舊系統(tǒng)根本無法改進(jìn)。
因此,為了獲得 好的效果,我們需要雙管齊下:一方面,必須提高管理者和開發(fā)者的安全意識;另一方面,盡可能提高應(yīng)用系統(tǒng)的安全性。
Web應(yīng)用防火墻的特點
Web應(yīng)用防火墻的一些常見特點如下。
異常檢測協(xié)議
如果閱讀過各種RFC,就會發(fā)現(xiàn)一個被反復(fù)強(qiáng)調(diào)的主題。大多數(shù)RFC建議應(yīng)用自己使用協(xié)議時要保守,而對于接受其他發(fā)送者的協(xié)議時可以自由些。Web服務(wù)器就是這樣做的,但這樣的行為也給所有的攻擊者打開了大門。幾乎所有的WAF對HTTP的請求執(zhí)行某種異常檢測,拒絕不符合Http標(biāo)準(zhǔn)的請求。并且,它也可以只允許HTTP協(xié)議的部分選項通過,從而減少攻擊的影響范圍。甚至,一些WAF還可以嚴(yán)格限定HTTP協(xié)議中那些過于松散或未被完全制定的選項。
增強(qiáng)的輸入驗證
就頻繁發(fā)生的Web安全問題而言,有些是源于對Web設(shè)計模型的誤解,有些則來自于程序師認(rèn)為瀏覽器是可信的。很多WEB程序員用JavaScript在瀏覽器上實現(xiàn)輸入驗證。而瀏覽器只是一個用戶控制的簡單工具,因此攻擊者可以非常容易地繞過輸入驗證,直接將惡意代碼輸入到WEB應(yīng)用服務(wù)器。
有一個解決上述問題的正確方法,就是在服務(wù)端進(jìn)行輸入驗證。如果這個方法不能實現(xiàn),還可以通過在客戶和應(yīng)用服務(wù)器之間增加代理,讓代理去執(zhí)行Web頁面上嵌入的JavaScript,實現(xiàn)輸入驗證。
消極的安全模型VS積極的安全模型
曾經(jīng)設(shè)置過防火墻規(guī)則的人,可能會碰到這樣的建議:允許已知安全的流量,拒絕其他一切訪問。這就是一種很好的積極安全模型。恰恰相反,消極安全模型則是默認(rèn)允許一切訪問,只拒絕一些已知危險的流量模式。
每種安全模型方式都存在各自的問題:
消極安全模型:什么是危險的?
積極安全模型:什么是安全的?
消極安全模式通常使用的更多。識別出一種危險的模式并且配置自己的系統(tǒng)禁止它。這個操作簡單而有趣,卻不十分安全。它依賴于人們對于危險的認(rèn)識,如果問題存在,卻沒有被意識到(這種情況很常見),就會為攻擊者留下可趁之機(jī)。
積極安全模式(又稱為白名單模式)看上去是一種制定策略的更好方式,非常適于配置防火墻策略。在Web應(yīng)用安全領(lǐng)域中,積極安全模式通常被概括成對應(yīng)用中的每一個腳本的枚舉。對枚舉的每一個腳本,需要建立一個相應(yīng)列表,表中內(nèi)容如下所示:
* 允許的請求方式(比如,GET/POST或者只POST)
;* 允許的Content-Type
;* 允許的Content-Length
;* 允許的參數(shù)
;* 指定參數(shù)和可選參數(shù)
;* 參數(shù)類型(比如,文本或整數(shù))
;* 附加參數(shù)限制
上述列表僅僅是個例子,實際的積極安全模式通常包括更多的要素。它試圖從外部完成程序員本應(yīng)從內(nèi)部完成的工作:為提交到Web應(yīng)用的信息驗證每一個比特。如果肯花時間的話,使用積極安全模式就是一個比較好的選擇。這個模式的難點之一,在于應(yīng)用模式會隨著應(yīng)用的發(fā)展而改變。每當(dāng)應(yīng)用中添加新腳本或更改舊腳本,就需要更新模式。但是,它適用于保護(hù)那些穩(wěn)定的、無人維護(hù)的舊應(yīng)用。
自動開發(fā)策略可以解決以上問題:
* 一些WAF能夠監(jiān)視流量,并根據(jù)這些流量數(shù)據(jù)自動配置策略,有些產(chǎn)品可以實時進(jìn)行這樣的工作。
;* 通過白名單,可以標(biāo)識特定的IP地址是可信的,然后,依據(jù)觀察的流量,配置WAF,更新安全策略。
;* 如果通過一個全面的衰減測試,(仿真正確的行為,)來創(chuàng)建一個應(yīng)用,并且在WAF處于監(jiān)控狀態(tài)時執(zhí)行測試,那么WAF可以自動生成策略。
可見,沒有哪個模式是完全令人滿意的。消極安全模式適用于處理已知問題,而積極安全模式則適用于穩(wěn)定的Web應(yīng)用。理想的做法是,在現(xiàn)實生活中,將二者結(jié)合使用,取長補(bǔ)短。
及時補(bǔ)丁
積極安全模式理論上更好一些因為瀏覽器和WEB應(yīng)用程序之間的通信協(xié)議通過HTML規(guī)范進(jìn)行了很好的定義,F(xiàn)在的Web開發(fā)語言都可以處理帶有多個參數(shù)的 HTTP請求。因為這些參數(shù)在Web應(yīng)用防火墻中都是可見的,因此WEB應(yīng)用防火墻可以分析這些參數(shù)判斷是否存在允許該請求。,
當(dāng)一個應(yīng)用中的漏洞被發(fā)現(xiàn)時大多數(shù)情況下我們會盡可能在代碼中修補(bǔ)它。受諸多因素的影響(如應(yīng)用的規(guī)模,是否有開發(fā)人員,法律問題等等 ),開發(fā)補(bǔ)丁的過程可能需要幾分鐘,或者一直到無限長的是時間。這些時間正是攻擊者發(fā)起攻擊的好機(jī)會。
如果開發(fā)人員能夠在非常短的時間內(nèi)在代碼中修補(bǔ)好漏洞,那你就不用擔(dān)心了。但如果修補(bǔ)這個漏洞需要花費(fèi)幾天,甚至幾周來修復(fù)呢?Web應(yīng)用防火墻就是處理這個問題的理想工具:只要給一個安全專家不錯的WAF和足夠的漏洞信息,他就能在不到一個小時的時間內(nèi)屏蔽掉這個漏洞。當(dāng)然,這種屏蔽掉漏洞的方式不是非常完美的,并且沒有安裝對應(yīng)的補(bǔ)丁就是一種安全威脅,但我們在沒有選擇的情況下,任何保護(hù)措施都比沒有保護(hù)措施更好。
及時補(bǔ)丁的原理可以更好的適用于基于XML的應(yīng)用中,因為這些應(yīng)用的通信協(xié)議都具規(guī)范性。
基于規(guī)則的保護(hù)和基于異常的保護(hù)
現(xiàn)在市場上大多數(shù)的產(chǎn)品是基于規(guī)則的WAF。其原理是每一個會話都要經(jīng)過一系列的測試,每一項測試都由一個過多個檢測規(guī)則組成,如果測試沒通過,請求就會被認(rèn)為非法并拒絕。
基于規(guī)則的WAFs很容易構(gòu)建并且能有效的防范已知安全問題。當(dāng)我們要制定自定義防御策略時使用它會更加便捷。但是因為它們必須要首先確認(rèn)每一個威脅的特點,所以要由一個強(qiáng)大的規(guī)則數(shù)據(jù)庫支持。WAF生產(chǎn)商維護(hù)這個數(shù)據(jù)庫,并且他們要提供自動更新的工具。
這個方法不能有效保護(hù)自己開發(fā)的WEB應(yīng)用或者零日漏洞(攻擊者使用的沒有公開的漏洞),這些威脅使用基于異常的WAF更加有效。
異常保護(hù)的基本觀念是建立一個保護(hù)層,這個保護(hù)層能夠根據(jù)檢測合法應(yīng)用數(shù)據(jù)建立統(tǒng)計模型,以此模型為依據(jù)判別實際通信數(shù)據(jù)是否是攻擊。理論上,一但構(gòu)建成功,這個基于異常的系統(tǒng)應(yīng)該能夠探測出任何的異常情況。擁有了它,我們不再需要規(guī)則數(shù)據(jù)庫而且零日攻擊也不再成問題了。但基于異常保護(hù)的系統(tǒng)很難構(gòu)建,所以并不常見。因為用戶不了解它的工作原理也不相信它,所以它也就不如基于規(guī)則的WAF應(yīng)用廣范。
狀態(tài)管理
HTTP的無狀態(tài)性對Web應(yīng)用安全有很多負(fù)面影響。會話只能夠在應(yīng)用層上實現(xiàn),但對許多應(yīng)用來說這個附加的功能只能滿足業(yè)務(wù)的需要而考慮不到安全因素了。Web應(yīng)用防火墻則將重點放在會話保護(hù)上,它的特征包括:
強(qiáng)制登錄頁面。在大多數(shù)站點, 你可以從任何你所知道的URL上訪問站點,這通常方便了攻擊者而給防御增加了困難。WAF能夠判斷用戶是否是第一次訪問并且將請求重定向到默認(rèn)登錄頁面并且記錄事件。
分別檢測每一個用戶會話。如果能夠區(qū)分不同的會話,這就帶來了無限的可能。比如,我們能夠監(jiān)視登陸請求的發(fā)送頻率和用戶的頁面跳轉(zhuǎn)。通過檢測用戶的整個操作行為我們可以更容易識別攻擊。
對暴力攻擊的識別和響應(yīng)。通常的Web應(yīng)用網(wǎng)絡(luò)是沒有檢測暴力攻擊的。有了狀態(tài)管理模式,WAF能檢測出異常事件(比如登陸失。,并且在達(dá)到極限值時進(jìn)行處理。此時它可以增加更多的身份認(rèn)證請求的時間,這個輕微的變化用戶感覺不到,但對于足以對付自動攻擊腳本了。如果一個認(rèn)證腳本需要50毫秒完成,那它可以發(fā)出大約每秒20次的請求。如果你增加一點延時,比如說,一秒種的延遲,那會將請求降低至每秒不足一次。與此同時,發(fā)出進(jìn)一步檢測的警告,這將構(gòu)成一個相當(dāng)好的防御。
實現(xiàn)會話超時。超出默認(rèn)時間會話將失效,并且用戶將被要求重新認(rèn)證。用戶在長時間沒有請求時將會自動退出登錄。
會話劫持的檢測和防御。許多情況下,會話劫持會改變IP地址和一些請求數(shù)據(jù)(HTTP請求的報頭會不同)。狀態(tài)監(jiān)控工具能檢測出這些異常并防止非法應(yīng)用的發(fā)生。在這種情況下應(yīng)該終止會話,要求用戶重新認(rèn)證,并且記錄一個警告日志信息。
只允許包含在前一請求應(yīng)答中的鏈接。一些WAF很嚴(yán)格,只允許用戶訪問前一次請求返回頁面中的鏈接。這看上去是一個有趣的特點但很難得到實施。一個問題在于它不允許用戶使用多個瀏覽器窗口,另一個問題是它令使用JavaScript自動建立連接的應(yīng)用失效。
其他防護(hù)技術(shù)
WAF的另外一些安全增強(qiáng)的功能用來解決WEB程序員過分信任輸入數(shù)據(jù)帶來的問題。比如:
隱藏表單域保護(hù)。有時,內(nèi)部應(yīng)用數(shù)據(jù)通過隱藏表單變量實現(xiàn),而它們并不是真的隱藏的。程序員通常用隱藏表單變量的方式來保存執(zhí)行狀態(tài),給用戶發(fā)送數(shù)據(jù),以確保這些數(shù)據(jù)返回時未被修改。這是一個復(fù)雜繁瑣的過程,WAF經(jīng)常使用密碼簽名技術(shù)來處理。
Cookies保護(hù)。和隱藏表單相似的是,cookies經(jīng)常用來傳遞用戶個人的應(yīng)用數(shù)據(jù),而不一樣的是,一些cookies可能含有敏感數(shù)據(jù)。WAFs 通常會將整個內(nèi)容加密,或者是將整個cookies機(jī)制虛擬化。有了這種設(shè)置,終端用戶只能夠看到cookies令牌(如同會話令牌),從而保證 cookies在WAF中安全地存放
抗入侵規(guī)避技術(shù);诰W(wǎng)絡(luò)的IDS對付WEB攻擊的問題就是攻擊規(guī)避技術(shù)。改寫HTTP輸入請求數(shù)據(jù)(攻擊數(shù)據(jù))的方式太多,并且各種改寫的請求能夠逃避IDS探測。在這個方面如果能完全理解HTTP就是大幅度的改進(jìn)。比如,WAF每次可以看到整個HTTP請求,就可以避免所有類型的HTTP請求分片的攻擊。因為很好的了解HTTP協(xié)議,因此能夠?qū)討B(tài)請求和靜態(tài)請求分別對待,就不用花大量時間保護(hù)不會被攻擊的靜態(tài)數(shù)據(jù)。這樣WAF可以有足夠的計算能力對付各種攻擊規(guī)避技術(shù), 而這些功能由NIDSs完成是很耗時的。
響應(yīng)監(jiān)視和信息泄露保護(hù)。信息泄露防護(hù)是我們給監(jiān)視HTTP輸出數(shù)據(jù)的一個名稱。從原理上來說它和請求監(jiān)視是一樣的,目的是監(jiān)視可疑的輸出,并防止可疑的 http輸出數(shù)據(jù)到達(dá)用戶。 有可能的應(yīng)用模式是監(jiān)視信用卡號和社會保險號。另外,這個技術(shù)的另一項應(yīng)用是發(fā)現(xiàn)成功入侵的跡象。因為有經(jīng)驗攻擊者總會給信息編碼來防止監(jiān)測,所以防止這樣有決心并技術(shù)熟練的攻擊者獲取信息是很困難的。但是,在攻擊者沒有完全掌控服務(wù)器而僅僅嘗試WEB應(yīng)用的安全漏洞的情況下,這項技術(shù)可以起到防護(hù)效果。
標(biāo)簽: 防火墻