如今的Web應(yīng)用程序可能會(huì)包含危險(xiǎn)的安全缺陷。這些應(yīng)用程序的全球化部署使其很容易遭受攻擊,這些攻擊會(huì)發(fā)現(xiàn)并惡意探測(cè)各種安全漏洞。
Web環(huán)境中兩個(gè)主要的風(fēng)險(xiǎn)在于:注入——也就是SQL注入,它會(huì)讓黑客更改發(fā)往數(shù)據(jù)庫的查詢——以及跨站腳本攻擊(XSS),它們也是最危險(xiǎn)的(Category:OWASP_Top_Ten_Project)。注入攻擊會(huì)利用有問題代碼的應(yīng)用程序來插入和執(zhí)行黑客指定的命令,從而能夠訪問關(guān)鍵的數(shù)據(jù)和資源。當(dāng)應(yīng)用程序?qū)⒂脩籼峁┑臄?shù)據(jù)不加檢驗(yàn)或編碼就發(fā)送到掃瞄 器上時(shí),會(huì)產(chǎn)生XSS漏洞。
盡管2009年OWASP(Open Web Application Security Project)的一個(gè)報(bào)告表明安全方面的投資在增加Category:OWASP_Security_Spending_Benchmarks),但是NTA Monitor的2010 Web應(yīng)用安全報(bào)名表明Web的安全性跟前一年相比實(shí)際在下降。實(shí)際上,Web應(yīng)用的漏洞給公司和組織帶來了很多的問題。按照WhiteHat Security最新的Web站點(diǎn)安全性數(shù)據(jù)報(bào)告所示,被評(píng)估網(wǎng)站的63%是有漏洞的,每個(gè)平均有六個(gè)未解決的缺陷WhiteHat Website Security Statistics Report)。這些漏洞創(chuàng)建并維持了一個(gè)基于攻擊竊取數(shù)據(jù)和資源的地下經(jīng)濟(jì)鏈。
Web應(yīng)用程序需要有深度防備的措施來幸免和減少安全性漏洞。1這種方式假設(shè)所有的安全預(yù)防措施都可能失敗,所以安全性依賴于多層的機(jī)制從而能夠覆蓋其他層的失敗。為了減少成功攻擊的可能性,軟件工程師團(tuán)隊(duì)必須做出必要的努力來引入適當(dāng)?shù)陌踩苑雷o(hù)措施。要達(dá)到這一點(diǎn)必須使用各種技術(shù)和工具來確保安全性涵蓋軟件產(chǎn)品開發(fā)生命周期的所有階段。
盡管軟件開發(fā)的生命周期有多種不同的劃分方式,但正如圖1所示,它通常包含如下的階段:初始化、規(guī)范和設(shè)計(jì)、實(shí)現(xiàn)(編碼)、測(cè)試、部署以及停用,這些階段應(yīng)用開發(fā)人員可以不地重復(fù)迭代。2
盡管開發(fā)人員應(yīng)該在產(chǎn)品的整個(gè)生命周期中都關(guān)懷 代碼安全性,3但是他們應(yīng)該特別關(guān)注三個(gè)關(guān)鍵階段:1
為了編寫沒有漏洞的安全代碼,4 基于Web基礎(chǔ)設(shè)施的關(guān)鍵業(yè)務(wù)開發(fā)人員就要遵循編碼實(shí)踐,這個(gè)實(shí)踐包括了深度防備的措施,它假設(shè)所有的安全性預(yù)防措施都會(huì)失敗。在實(shí)現(xiàn)階段依賴多層的安全機(jī)制是特別重要的,使用一個(gè)預(yù)防或保護(hù)措施來幸免安全漏洞是不夠的。
Web應(yīng)用程序的特征在于需要三層不同的安全防線:輸入校驗(yàn)、熱點(diǎn)保護(hù)以及輸出校驗(yàn)。
大多數(shù)的安全漏洞是因?yàn)槟繕?biāo)應(yīng)用程序沒有正確地校驗(yàn)輸入數(shù)據(jù)。1所以,應(yīng)用程序要考慮到所有惡意的輸入直到能證明其合法,這要涵蓋不可信環(huán)境中的所有數(shù)據(jù)。
輸入校驗(yàn)是第一道防線,總體來講就是縮小應(yīng)用程序同意輸入的范圍,它會(huì)直接作用在用戶提供的數(shù)據(jù)上。這種類型的防備要依賴輸入?yún)?shù)在一個(gè)合法的范圍內(nèi),或者如果用戶提供了超出了范圍的值就會(huì)停止執(zhí)行。在Web應(yīng)用程序中,這首先要標(biāo)準(zhǔn)化輸入將其轉(zhuǎn)換到基線字符集和編碼。接下來,應(yīng)用程序必須對(duì)標(biāo)準(zhǔn)化的輸入使用過濾策略,拒絕那些值在合法范圍之外的輸入。這種方式能夠幸免很多Web應(yīng)用程序中的問題,在執(zhí)行輸入校驗(yàn)時(shí)會(huì)使用正向模式匹配或正向校驗(yàn)。在這種情況下,開發(fā)人員建立規(guī)則來識(shí)別那些可接受的輸入而不是識(shí)別有什么輸入是不可接受的。盡管開發(fā)人員不能預(yù)測(cè)所有類型的攻擊,但他們應(yīng)該能夠說明所有類型的合法輸入。
關(guān)鍵問題在于,輸入校驗(yàn)通常使用地并不充分,這是因?yàn)檩斎雲(yún)?shù)的數(shù)據(jù)域同意存在惡意數(shù)據(jù),這是與校驗(yàn)執(zhí)行相獨(dú)立的。例如,在SQL注入漏洞中,大多數(shù)的SQL語句使用引號(hào)作為字符串分隔符,這就意味著黑客可以使用它來執(zhí)行SQL注入攻擊。4但是,在有些情況下,字符串輸入域必須同意存在引號(hào)值,所以應(yīng)用程序不能排除所有包含引號(hào)的值。
為了應(yīng)對(duì)輸入校驗(yàn)的局限性,有必要采納第二道防線
任何類型的攻擊都是以熱點(diǎn)為目標(biāo)的,熱點(diǎn)指的就是應(yīng)用程序中可能會(huì)有某種類型漏洞的代碼。通用的輸入校驗(yàn)會(huì)在應(yīng)用程序中進(jìn)行或者在整個(gè)Web應(yīng)用程序上下文中修改輸入,與之相比,第二道防線關(guān)注于保護(hù)重要的熱點(diǎn),例如保護(hù)那些真正使用輸入域值的代碼行。
一個(gè)具體的例子就是SQL注入攻擊,它們大多數(shù)會(huì)使用單引號(hào)或雙引號(hào)。有些編程語言提供了對(duì)這些字符的轉(zhuǎn)碼機(jī)制,這樣它們就能用在SQL語句中了,但是只能用來在語句中分隔值。4但是這些技術(shù)有兩個(gè)問題。第一,更高級(jí)的注入技術(shù),例如聯(lián)合使用引號(hào)和轉(zhuǎn)義字符,可以繞過這些機(jī)制。第二,引入轉(zhuǎn)義字符會(huì)增加字符串的長度,如果結(jié)果字符串的長度超過數(shù)據(jù)庫限制的話,可能會(huì)導(dǎo)致數(shù)據(jù)截?cái)唷?
正確使用參數(shù)化命令是預(yù)防注入攻擊最有效的方式。1在這種情況下,開發(fā)人員定義命令的結(jié)構(gòu),并使用占位符來代表命令的變量值。稍后,當(dāng)應(yīng)用程序?qū)?duì)應(yīng)的值關(guān)聯(lián)到命令上時(shí),命令解釋器會(huì)正確地使用它們而不會(huì)涉及到命令的結(jié)構(gòu)。
這種技術(shù)最著名的用法是數(shù)據(jù)庫的預(yù)處理語句,也被稱為參數(shù)化查詢。4 當(dāng)應(yīng)用程序創(chuàng)建預(yù)處理語句時(shí),語句發(fā)送到了數(shù)據(jù)庫端。應(yīng)用程序使用占位符來表示查詢的可變部分,占位符通常會(huì)是問號(hào)或標(biāo)簽。隨后,每次查詢執(zhí)行時(shí),應(yīng)用程序都要往對(duì)應(yīng)的可變部分綁定值。不管數(shù)據(jù)的內(nèi)容是什么,應(yīng)用程序會(huì)一直使用這個(gè)表達(dá)式作為一個(gè)值而并沒有SQL代碼。因此,不可能修改查詢的結(jié)構(gòu)。
為了確保正確使用數(shù)據(jù),很多語言同意類型綁定。但是預(yù)處理語句本身并不能修復(fù)不安全的語句——開發(fā)人員必須正確地使用它們。例如,像傳統(tǒng)語句一樣使用預(yù)處理語句——也就是使用字符串拼接來綁定SQL查詢——而不是對(duì)查詢的可變部分使用占位符會(huì)導(dǎo)致類似的漏洞。
在將一個(gè)進(jìn)程的輸出發(fā)送之前進(jìn)行校驗(yàn)?zāi)軌蛐颐庥脩羰盏剿麄儾粦?yīng)該看到的信息,例如應(yīng)用程序內(nèi)部的異常細(xì)節(jié),這些信息有助于發(fā)起其他的攻擊。在輸出校驗(yàn)的另一個(gè)例子當(dāng)中,保護(hù)系統(tǒng)會(huì)搜索應(yīng)用程序輸出的關(guān)鍵信息,如信用卡號(hào),并在發(fā)送給前端之前用星號(hào)代替。將信息編碼是能夠幸免XSS漏洞的一種輸出校驗(yàn)方式。4如果發(fā)送給掃瞄 器的數(shù)據(jù)要顯示在Web頁面上,它應(yīng)該進(jìn)行HTML編碼或百分號(hào)編碼,這取決于它在頁面的位置。通過這種方式,XSS所用的惡意字符不再具有破壞性,而且編碼會(huì)保留數(shù)據(jù)的原來意義。
識(shí)別安全的問題要求不僅測(cè)試應(yīng)用程序的功能還要尋找代碼中可能被黑客利用的隱藏的危險(xiǎn)缺陷。5探測(cè)漏洞的兩個(gè)主要方式是白盒分析和黑盒測(cè)試。
白盒分析需要在不執(zhí)行的情況下檢查代碼。開發(fā)人員可以按照以下兩種方式中的某一種來進(jìn)行:在代碼的審查或評(píng)審時(shí)以手動(dòng)方式進(jìn)行或者借助自動(dòng)分析工具自動(dòng)化進(jìn)行。
代碼審查(Code inspection)指的是程序員的同伴系統(tǒng)檢查交付的代碼,查找編碼錯(cuò)誤。6安全審查是減少應(yīng)用程序中漏洞最有效的方式;當(dāng)為關(guān)鍵的系統(tǒng)開發(fā)軟件時(shí),這是重要的過程。但是,這種審查方式通常是很費(fèi)時(shí)間的、代價(jià)昂貴并需要深入了解Web的安全知識(shí)。
代碼檢查(Code review)是代價(jià)稍為低廉的替代方案,6它是一種簡化版本的代碼審查適用于分析不像前面那么重要的代碼。檢查也是手動(dòng)進(jìn)行的,但是它不需要正式的審查會(huì)議。幾個(gè)專家分別進(jìn)行檢查,然后由主持人過濾和合并結(jié)果。盡管這是一個(gè)有效的方式,但代碼檢查的成本依舊是很高的。
為了減少白盒法分析的成本,開發(fā)人員有時(shí)依賴自動(dòng)化工具,如靜態(tài)代碼分析器。靜態(tài)代碼分析工具會(huì)檢查軟件代碼,要么是源碼格式要么是二進(jìn)制格式,并試圖識(shí)別出常見的編碼級(jí)別缺陷。4 使用現(xiàn)有工具所執(zhí)行的分析會(huì)因?yàn)樗鼈兊膹?fù)雜性而有所不同,這種差異體現(xiàn)在考慮單條語句和命令或考慮代碼行之間的依賴。除了模型檢查和數(shù)據(jù)流分析等功能之外,這些工具還會(huì)自動(dòng)關(guān)注可能的編碼錯(cuò)誤。它的主要問題在于細(xì)致的分析是很困難并且因?yàn)樵创a的復(fù)雜性和缺乏動(dòng)態(tài)(運(yùn)行時(shí))的視角有很多安全缺陷很難被發(fā)現(xiàn)。
盡管使用靜態(tài)代碼分析工具很重要,但是它有時(shí)會(huì)降低開發(fā)人員的生產(chǎn)效率,這主要是因?yàn)檎`報(bào),這會(huì)導(dǎo)致沒有用處的額外工作。7為了幸免這種情況,除了要有足夠的時(shí)間學(xué)習(xí)怎樣使用這些工具以外,開發(fā)人員需要一些策略來保證正確使用這些工具。例如,有必要指定規(guī)則來分類和選擇開發(fā)人員應(yīng)該處理的警告信息。同時(shí),開發(fā)人員還要配置分析工具只報(bào)告那些與當(dāng)前開發(fā)上下文相關(guān)的警告。沒有接受怎樣使用靜態(tài)分析訓(xùn)練的開發(fā)人員最終會(huì)低估它的真正效益并且通常不能發(fā)揮它的所有功能。
黑盒測(cè)試指的是從外部的視角分析程序的執(zhí)行。簡而言之,它會(huì)比較軟件執(zhí)行的輸出與期望的結(jié)果。5 對(duì)于軟件的檢驗(yàn)和確認(rèn)來說,測(cè)試可能是最常用的技術(shù)了。
對(duì)于黑盒測(cè)試來講,有多種級(jí)別,從單元測(cè)試到集成測(cè)試再到系統(tǒng)測(cè)試。測(cè)試方式可以是正式的(基于模型和定義良好的測(cè)試規(guī)范)也可以不那么正式(被稱為“冒煙測(cè)試”,一種粗糙的測(cè)試目的是快速暴露簡單的缺陷)。
健壯性是黑盒測(cè)試一種特別 形式,它的目標(biāo)是查看系統(tǒng)在錯(cuò)誤輸入條件下的行為。滲透測(cè)試是特別 類型的健壯性測(cè)試,它會(huì)分析在遇到惡意輸入時(shí)的代碼執(zhí)行并查找潛在的漏洞。在這種方式中,測(cè)試人員使用模糊技術(shù),這包含通過HTTP請(qǐng)求,提交意料之外的或非法的數(shù)據(jù)項(xiàng)到Web應(yīng)用程序上并檢查它的響應(yīng)。4測(cè)試人員不需要了解實(shí)現(xiàn)細(xì)節(jié)——他們?cè)谟脩舻慕嵌葋頊y(cè)試應(yīng)用程序的輸入。對(duì)于每種漏洞類型,可能會(huì)有上百次甚至上千次的測(cè)試。
滲透測(cè)試工具會(huì)自動(dòng)搜索漏洞,這幸免了手工為每種類型的漏洞構(gòu)建上百個(gè)甚至上千個(gè)測(cè)試所帶來的重復(fù)和乏味的工作。Web應(yīng)用的常見自動(dòng)化安全測(cè)試工具一般會(huì)稱為Web應(yīng)用或Web安全掃描器。這些掃描器可以很容易地測(cè)試應(yīng)用程序以發(fā)現(xiàn)漏洞。對(duì)于目標(biāo)應(yīng)用,它們會(huì)有一些預(yù)定義的測(cè)試用例,所以用戶只需要配置一下掃描器并讓它測(cè)試應(yīng)用即可。一旦掃描器完成測(cè)試,它會(huì)報(bào)告所探測(cè)到的漏洞。大多數(shù)的掃描器都是商業(yè)產(chǎn)品,盡管也有免費(fèi)的應(yīng)用程序掃描器,但是與商用版本相比,它們?nèi)鄙俅蠖鄶?shù)的功能所以用的很有限。
滲透測(cè)試和靜態(tài)代碼分析可以是手動(dòng)的也可以是自動(dòng)化的。因?yàn)槭謩?dòng)測(cè)試或檢查需要特別 的安全資源并且很費(fèi)時(shí)間,所以對(duì)于Web應(yīng)用的開發(fā)人員來說自動(dòng)化工具是常見的選擇。當(dāng)考慮漏洞檢測(cè)工具的局限性時(shí),很重要的一點(diǎn)就是安全測(cè)試是很困難的。確實(shí),衡量應(yīng)用程序的安全性是很有挑戰(zhàn)性的:盡管發(fā)現(xiàn)一些漏洞可能很容易,但是保證應(yīng)用沒有漏洞是困難的。1
滲透測(cè)試和靜態(tài)代碼分析工具都有其固有的局限性。滲透測(cè)試依賴于有效地代碼執(zhí)行,但是在實(shí)踐中,漏洞識(shí)別時(shí)只會(huì)檢查Web應(yīng)用的輸出。所以,缺少查看應(yīng)用的內(nèi)部行為會(huì)限制滲透測(cè)試的有效性。
另一方面,詳盡的源代碼分析可能比較困難。代碼的復(fù)雜性以及缺少動(dòng)態(tài)(運(yùn)行時(shí))的觀察可能會(huì)阻止發(fā)現(xiàn)很多安全缺陷。當(dāng)然,滲透測(cè)試不需要查看源碼,但是靜態(tài)代碼分析需要。
使用錯(cuò)誤的檢測(cè)工具會(huì)導(dǎo)致部署的應(yīng)用含有未檢測(cè)出的漏洞。圖2比較了在Web服務(wù)中,知名的并廣泛使用的滲透測(cè)試和靜態(tài)分析工具在檢測(cè)SQL注入漏洞中的表現(xiàn)。8結(jié)果顯示靜態(tài)代碼分析工具——包括FindBugs、Fortify 360以及IntelliJ IDEA(在圖中匿名為SA1到SA3)——的覆蓋度通常高于滲透測(cè)試工具,包括HP WebInspect、IBM Rational AppScan、Acunetix Web Vulnerability Scanner以及科英布拉大學(xué)開發(fā)的一個(gè)原型工具(在圖中匿名為VS1到VS4)。這兩種方式都有的一個(gè)問題就是誤報(bào),但是在靜態(tài)分析中更明顯。一個(gè)重要的發(fā)現(xiàn)在于相同方式下的不同工具對(duì)于相同的代碼通常報(bào)告不同的漏洞。
根據(jù)研究結(jié)果,需要強(qiáng)調(diào)工具的局限性使得有必要提高漏洞檢測(cè)的有效性,比如這可以通過聯(lián)合使用多種方式來實(shí)現(xiàn)。另外,開發(fā)人員需要定義一種機(jī)制來評(píng)估和比較不同的工具,這樣它們才能選擇最適合各種開發(fā)場(chǎng)景的工具。
為了防止對(duì)Web應(yīng)用的攻擊,軟件工程師必須實(shí)施攻擊檢測(cè)機(jī)制,通常稱為入侵檢測(cè)系統(tǒng)(intrusion detection system,IDS)或Web應(yīng)用防火墻(WAF)。不同的工具可以作用在應(yīng)用或網(wǎng)絡(luò)級(jí)別甚至在應(yīng)用的資源上,如數(shù)據(jù)庫,它們可以使用不同的方式如異常檢測(cè)或簽名匹配來檢測(cè)攻擊。
檢測(cè)攻擊要區(qū)分出與所學(xué)習(xí)行為的差別。攻擊檢測(cè)工具所使用的方式要么基于異常檢測(cè)要么基于簽名。8
異常檢測(cè)通常需要一個(gè)訓(xùn)練階段。訓(xùn)練階段會(huì)展現(xiàn)系統(tǒng)的無惡意請(qǐng)求,工具會(huì)在給定的架構(gòu)級(jí)別觀察它的行為并學(xué)習(xí)正常的操作。這些工具會(huì)考慮到每個(gè)Web應(yīng)用程序的細(xì)節(jié),但如果應(yīng)用程序的正確行為發(fā)生了變化或?qū)W習(xí)不完整的話,會(huì)產(chǎn)生很多錯(cuò)誤的警告。
相比之下,基于簽名的工具會(huì)查找預(yù)定義的一組規(guī)則模式或標(biāo)示攻擊的簽名。因?yàn)檫@些簽名通常是獨(dú)立于應(yīng)用的,所以工具的成功與應(yīng)用程序的運(yùn)行配置文件或任何訓(xùn)練過程無關(guān)。
在網(wǎng)絡(luò)級(jí)別進(jìn)行操作的工具通常會(huì)監(jiān)視和分析網(wǎng)絡(luò)流量,以保證攻擊在到達(dá)Web應(yīng)用之前檢測(cè)到。工作在應(yīng)用級(jí)別的攻擊檢測(cè)工具會(huì)分析發(fā)送給應(yīng)用的請(qǐng)求并試圖利用服務(wù)端程序和請(qǐng)求中參數(shù)的特定關(guān)系。工作在資源層的工具會(huì)保護(hù)與每種漏洞類型相關(guān)的資源。這些工具會(huì)在應(yīng)用層之下并接近受保護(hù)的資源。一個(gè)常見的例子是監(jiān)控對(duì)數(shù)據(jù)庫服務(wù)器的訪問來檢測(cè)SQL注入的IDS。
工具使用各種策略來收集應(yīng)用請(qǐng)求以及可能收到攻擊的信息。一些工具會(huì)使用嗅探策略來監(jiān)控和分析通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)以此來觀察HTTP流量,但是加密、編碼以及封裝可能會(huì)限制其有效性。同時(shí),網(wǎng)絡(luò)上可能會(huì)承載大量與受保護(hù)應(yīng)用無關(guān)的數(shù)據(jù)。另一些工具會(huì)分析應(yīng)用產(chǎn)生的日志甚至是應(yīng)用所在服務(wù)器所產(chǎn)生的日志。盡管這種策略不會(huì)直接延遲對(duì)應(yīng)用的請(qǐng)求,但是受限于日志中可以得到的信息。
而另一種策略就是在請(qǐng)求的來源和受保護(hù)的應(yīng)用或資源間引入一個(gè)代理。這能夠很容易地阻止攻擊,因?yàn)樗峁┝岁P(guān)于目標(biāo)應(yīng)用或資源的有用信息,但是,它引入了不良的延時(shí)從而會(huì)影響應(yīng)用的正常行為。
因?yàn)槊總€(gè)Web應(yīng)用程序的細(xì)節(jié)會(huì)影響到攻擊檢測(cè)工具的表現(xiàn),同時(shí)工具所運(yùn)行的架構(gòu)級(jí)別也會(huì)有所影響,所以它們的實(shí)際效果通常是未知的。10大多數(shù)工具的檢測(cè)覆蓋比較低(在很多場(chǎng)景下,低于20%),同時(shí)它們還會(huì)有很多誤報(bào)(高達(dá)所產(chǎn)成警報(bào)的50%)。此外,有些工具在特定的場(chǎng)景下展現(xiàn)的結(jié)果很好,但是在其他場(chǎng)景下所提供的結(jié)果很差。
數(shù)據(jù)庫級(jí)別的工具通常比應(yīng)用級(jí)別的工具表現(xiàn)更好一些,10不過它們會(huì)產(chǎn)生一些關(guān)于請(qǐng)求的誤報(bào),這些請(qǐng)求是不會(huì)成功攻擊數(shù)據(jù)庫的。基于異常檢測(cè)的工具對(duì)于簡單的應(yīng)用表現(xiàn)得更好,而基于簽名的工具對(duì)于復(fù)雜的應(yīng)用表現(xiàn)更好。在簡單的應(yīng)用程序中,工具能夠?qū)W習(xí)并且更好地描述行為,因此從模式中檢測(cè)偏差會(huì)更準(zhǔn)確。實(shí)際上,異常檢測(cè)的成功取決于訓(xùn)練階段。如果訓(xùn)練不完整或者應(yīng)用的正常操作配置在訓(xùn)練后發(fā)生了變化,那么攻擊檢測(cè)工具的有效性會(huì)降低。
使用這些工具的開發(fā)人員有時(shí)缺乏創(chuàng)建適當(dāng)配置的培訓(xùn)。這會(huì)減少工具的有效性,這凸顯了評(píng)估和對(duì)比不同工具及配置的重要性。10
要達(dá)到更好的結(jié)果并提高有效性需要新的技術(shù)來克服漏洞檢測(cè)工具的局限性。但是要克服這些局限性并不容易,因?yàn)樗枰獙鹘y(tǒng)方式改為顛覆性的方法。關(guān)鍵在于釋放一些約束并將不同的方法結(jié)合起來以克服單個(gè)方法的局限性。
Acunetix AcuSensor就是一個(gè)商業(yè)技術(shù)的例子,它將黑盒掃描和測(cè)試執(zhí)行反饋結(jié)合起來。反饋來自于植入到目標(biāo)應(yīng)用程序代碼中的傳感器(sensor)。Acunetix聲稱這種技術(shù)能夠發(fā)現(xiàn)更多的漏洞并能夠精確表明漏洞在代碼中的位置,而且誤報(bào)也會(huì)更少。
一項(xiàng)最近提出的技術(shù)試圖以更小的侵入性實(shí)現(xiàn)類似的效果,它聯(lián)合使用攻擊簽名和接口監(jiān)控來克服滲透測(cè)試對(duì)注入攻擊漏洞測(cè)試的局限性。11這是一種黑盒測(cè)試技術(shù),因?yàn)樗粫?huì)監(jiān)控應(yīng)用程序和漏洞相關(guān)資源的接口(如數(shù)據(jù)庫接口)。
Analysis and Monitoring for Neutralizing SQL-Injection Attacks(Amnesia)工具組合了靜態(tài)分析和運(yùn)行時(shí)監(jiān)控來檢測(cè)SQL注入攻擊。12它對(duì)Web應(yīng)用的源碼進(jìn)行靜態(tài)分析,構(gòu)建一個(gè)由應(yīng)用生成的合法查詢模型。在運(yùn)行時(shí),它監(jiān)控動(dòng)態(tài)生成的查詢,檢查是否與靜態(tài)生成的模型相符。這個(gè)工具認(rèn)為違反模型的查詢?yōu)楣舨⒆柚顾L問數(shù)據(jù)庫。
為了應(yīng)對(duì)Web應(yīng)用安全的新威脅,開發(fā)流程必須也要有所進(jìn)展。例如,微軟安全開發(fā)生命周期(Microsoft Security Development Lifecycle)完善了公司的開發(fā)流程并特別針對(duì)安全問題的解決,例如明確了開發(fā)團(tuán)隊(duì)的安全培訓(xùn)。13按照微軟的說法,這個(gè)流程的采納減少了軟件中的安全缺陷。盡管這只是一個(gè)例子,但是它表明在這個(gè)行業(yè)中,對(duì)軟件開發(fā)執(zhí)行安全流程是很重要的事情。
在整個(gè)軟件產(chǎn)品的開發(fā)和部署生命周期中,開發(fā)人員必須要考慮安全性。他們必須要使用安全編碼的最佳實(shí)踐、執(zhí)行足夠的安全測(cè)試并使用安全檢測(cè)系統(tǒng)在運(yùn)行時(shí)保護(hù)應(yīng)用程序。在這個(gè)任務(wù)中,開發(fā)人員需要得到一些幫助來獵取 需要的技術(shù)和能夠提高生產(chǎn)率的工具。
研究人員應(yīng)該提出創(chuàng)新的工具,能夠在開發(fā)過程中方便地使用并滿足部署時(shí)有效性和生產(chǎn)效率的要求。這個(gè)演變的中心是安全測(cè)試工具,對(duì)于檢驗(yàn)和確認(rèn)應(yīng)用程序以檢查安全漏洞來講,它們是至關(guān)重要的。不過,必須要探究 新的假設(shè)。一個(gè)可以預(yù)見的可能性就是開發(fā)編譯器,使其不僅能強(qiáng)制使用最佳編碼實(shí)現(xiàn),還能自動(dòng)化修改存在的安全漏洞。