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