国产天然素人av中文在线-中文字幕在线日本无吗二区-岛国av激情一区二区-日韩高清精品一区二区

怎樣預(yù)防Web應(yīng)用程序的漏洞?

來源:本站日期:2013-5-11

  如今的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ù)

  如今的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ā)生命周期中的安全性
  盡管軟件開發(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
  實(shí)現(xiàn)。在編碼過程中,軟件開發(fā)人員必須使用特定應(yīng)用領(lǐng)域內(nèi)避免關(guān)鍵漏洞的最佳實(shí)踐。這種實(shí)踐的例子包括輸入和輸出校驗(yàn)、識(shí)別惡意字符以及使用參數(shù)化的命令。4 盡管這些技術(shù)在避免大多數(shù)安全漏洞方面很有效,但因?yàn)槿狈Π踩嚓P(guān)的知識(shí),開發(fā)人員通常并不使用它們或者使用得不正確。邊欄“為什么開發(fā)人員不使用安全編碼實(shí)踐?”更詳細(xì)地討論了這個(gè)問題。
  測(cè)試。有很多技術(shù)可以在測(cè)試階段使用,包括滲透測(cè)試(目前最流行的技術(shù))、靜態(tài)分析、動(dòng)態(tài)分析以及運(yùn)行時(shí)的異常檢測(cè)。4 問題在于開發(fā)人員通常會(huì)關(guān)注需求功能的測(cè)試而忽略安全方面。另外,現(xiàn)有的自動(dòng)化工具要么在漏洞探測(cè)覆蓋度方面比較差要么產(chǎn)生太多的誤報(bào)。
  部署。在運(yùn)行時(shí)環(huán)境中,會(huì)有不同的攻擊探測(cè)機(jī)制。這些機(jī)制可以按照不同的級(jí)別運(yùn)行并使用不同的探測(cè)方式。它們的使用障礙在于性能開銷以及不準(zhǔn)確的結(jié)果會(huì)打亂系統(tǒng)的正常行為。
  開發(fā)安全的代碼
  為了編寫沒有漏洞的安全代碼,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)。
  輸入校驗(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)的值。
  熱點(diǎn)防護(hù)
  為了應(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ì)增加字符串的長(zhǎng)度,如果結(jié)果字符串的長(zhǎng)度超過數(shù)據(jù)庫限制的話,可能會(huì)導(dǎo)致數(shù)據(jù)截?cái)唷?br />   正確使用參數(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)致類似的漏洞。
  輸出校驗(yàn)
  在將一個(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ù)的原來意義。
  探測(cè)漏洞
  識(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它是一種簡(jiǎn)化版本的代碼審查適用于分析不像前面那么重要的代碼。檢查也是手動(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è)試
  黑盒測(cè)試指的是從外部的視角分析程序的執(zhí)行。簡(jiǎn)而言之,它會(huì)比較軟件執(zhí)行的輸出與期望的結(jié)果。5 對(duì)于軟件的檢驗(yàn)和確認(rèn)來說,測(cè)試可能是最常用的技術(shù)了。
  對(duì)于黑盒測(cè)試來講,有多種級(jí)別,從單元測(cè)試到集成測(cè)試再到系統(tǒng)測(cè)試。測(cè)試方式可以是正式的(基于模型和定義良好的測(cè)試規(guī)范)也可以不那么正式(被稱為“冒煙測(cè)試”,一種粗糙的測(cè)試目的是快速暴露簡(jiǎn)單的缺陷)。
  健壯性是黑盒測(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ù)的功能所以用的很有限。

0
首頁
報(bào)價(jià)
案例
聯(lián)系