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