Web應(yīng)用防火墻(WAF)并不能完全抵御攻擊
提問:在努力倡導(dǎo)軟件實(shí)施開發(fā)安全最佳做法的過程中,我遇到了一個(gè)障礙:我的高級開發(fā)經(jīng)理表示,我們已經(jīng)部署了Web應(yīng)用防火墻(WAF),它完全能夠發(fā)現(xiàn)所有開發(fā)人員遺漏的Web應(yīng)用安全漏洞。你能為我提供一些很好的反駁意見,來向他說明我們不能簡單地依靠WAF來防止糟糕的編碼嗎?
你的經(jīng)理可能是看了PCI數(shù)據(jù)安全標(biāo)準(zhǔn)(PCI DSS)6.6要求,該要求為企業(yè)提供了兩種選擇來保護(hù)Web應(yīng)用程序抵御已知攻擊,第一種是檢查所有在企業(yè)內(nèi)部開發(fā)的web應(yīng)用代碼,第二種是在web應(yīng)用和客戶端之間安裝Web應(yīng)用防火墻。你應(yīng)該告訴他,該法規(guī)的補(bǔ)充信息中提到,“恰當(dāng)?shù)夭渴疬@兩種方法能夠提供最佳的多層防御”。在現(xiàn)代威脅環(huán)境中,我們完全有必要同時(shí)部署WAF以及分配資源和時(shí)間來改善軟件開發(fā)安全。
雖然WAF提供了一條重要的防線來防御已知攻擊和一些未知攻擊,但沒有哪個(gè)單一的技術(shù)能夠“包治百病”。例如,WAF不能幫助企業(yè)避免應(yīng)用邏輯錯(cuò)誤,然而,對于運(yùn)行很多動(dòng)態(tài)代碼的復(fù)雜Web 2.0應(yīng)用,或者底層網(wǎng)絡(luò)和操作系統(tǒng)級漏洞,這是很容易出現(xiàn)的錯(cuò)誤。但它還有后續(xù)成本。WAF具有廣泛的日志記錄功能,管理員需要登錄分析儀來利用這些日志信息。
這正是安全編碼和編碼審查發(fā)揮價(jià)值的地方。通過在代碼水平解決問題,不僅降低了任何與安全有關(guān)的設(shè)計(jì)和編碼缺陷的數(shù)量和嚴(yán)重程度,而且顯著提高了整體應(yīng)用安全性。雖然未來的代碼修訂版仍然需要審查,但采用安全開發(fā)做法開發(fā)的應(yīng)用不需要與那些完全依賴于防火墻保護(hù)的應(yīng)用一樣持續(xù)維護(hù)。
在這種情況下,也許最好的反駁是:微軟在推出其安全開發(fā)生命周期(SDL)后,顯著提高了其產(chǎn)品安全性。SDL為整個(gè)軟件行業(yè)制定了標(biāo)準(zhǔn),很多其他公司(包括思科和Adobe)都采用SDL或者基于SDL建立起安全開發(fā)的做法。我們可以從很多方面感受到微軟取得的成功,比如在推出產(chǎn)品一年后產(chǎn)品中發(fā)現(xiàn)的漏洞數(shù)量的變化。在Windows Vista(Vista是第一個(gè)使用SDL開發(fā)的微軟操作系統(tǒng))推出一年后,與未采用SDL的Windows XP的漏洞要少了45%;SQL Server 2005比未采用SDL的SQL Server 2000的漏洞要少91%。
在部署更好的內(nèi)部軟件開發(fā)安全最佳做法后,企業(yè)不需要完全依賴WAF來成功阻止針對其應(yīng)用的攻擊。從安全的角度進(jìn)行編碼讓應(yīng)用更加強(qiáng)大,這降低了攻擊面,并提高了抵御攻擊的能力。WAF永遠(yuǎn)無法防止每一個(gè)漏洞被攻擊者利用,而對于攻擊者而言,編碼漏洞更少的應(yīng)用不再那么有吸引力。
如果你的經(jīng)理仍然不相信,那么,能夠很好地說明需要安全應(yīng)用開發(fā)的方法就是:攻擊你們自己的應(yīng)用。最安全的演示方法是在虛擬實(shí)驗(yàn)室運(yùn)行應(yīng)用,使用Metasploit等工具來攻擊它。當(dāng)發(fā)現(xiàn)一個(gè)漏洞時(shí),概念證明可用于顯示攻擊者可以如何建立一個(gè)反向shell或者其他后門來進(jìn)入應(yīng)用和運(yùn)行應(yīng)用的系統(tǒng)。這將清楚地展示你的應(yīng)用中的漏洞將如何被利用,而防火墻根本無法阻止這一切。