欧美激情网,国产欧美亚洲高清,欧美屁股xxxxx,欧美群妇大交群,欧美人与物ⅴideos另类,区二区三区在线 | 欧洲

知識學(xué)堂
  • ·聯(lián)系電話:+86.023-75585550
  • ·聯(lián)系傳真:+86.023-75585550
  • ·24小時手機(jī):13896886023
  • ·QQ 咨 詢:361652718 513960520
當(dāng)前位置 > 首頁 > 知識學(xué)堂 > 常見技術(shù)問題
JavaScript常見安全漏洞及自動檢測技術(shù)
更新時間:2012-06-18 | 發(fā)布人:本站 | 點擊率:546
隨著Web2.0 的發(fā)展以及Ajax框架的普及,富客戶端Web應(yīng)用(Rich Internet Applications,RIA)日益增多,越來越多的邏輯已經(jīng)開始從服務(wù)器端轉(zhuǎn)移至客戶端,這些邏輯通常都是使用 JavaScript 語言所編寫。但遺憾的是,目前開發(fā)人員普遍不太關(guān)注 JavaScript 代碼的安全性。據(jù) IBM X-Force 2011 年中期趨勢報告揭示,世界五百強(qiáng)的網(wǎng)站及常見知名網(wǎng)站中有 40% 存在 JavaScript 安全漏洞。本文將結(jié)合代碼向讀者展示常見 JavaScript 安全漏洞,旨在幫助讀者能夠在日常編碼工作中規(guī)避這些安全漏洞。此外,客戶端 JavaScript 安全漏洞與服務(wù)器端安全漏洞原理略為不同,自動化檢測 JavsScript 安全漏洞目前存在較大的技術(shù)難題,本文將結(jié)合案例跟讀者分享如何利用 IBM Rational AppScan Standard Edition V8.0 新特性(JavaScript Security Analyzer,JSA)技術(shù)自動化檢測 JavaScript 安全漏洞。
 
  JavaScript 常見安全漏洞
 
  2010 年 12 月份,IBM 發(fā)布了關(guān)于 Web 應(yīng)用中客戶端 JavaScript 安全漏洞的白皮書,其中介紹了 IBM 安全研究機(jī)構(gòu)曾做過的 JavaScript 安全狀況調(diào)查。樣本數(shù)據(jù)包括了 675 家網(wǎng)站,其中有財富 500 強(qiáng)公司的網(wǎng)站和另外 175 家著名網(wǎng)站,包括 IT 公司、Web 應(yīng)用安全服務(wù)公司、社交網(wǎng)站等。為了不影響這些網(wǎng)站的正常運(yùn)行,研究人員使用了非侵入式爬蟲,僅掃描了無需登錄即可訪問的部分頁面,每個站點不超過 200 個頁面。這些頁面都被保存下來,研究人員采用 IBM 的 JavaScript 安全分析技術(shù)離線分析了這些頁面,集中分析了基于 DOM 的跨站點腳本編制及重定向兩種漏洞。
 
  測試結(jié)果令人驚嘆,這些知名網(wǎng)站中有 14% 存在嚴(yán)峻的 JavaScript 安全問題,黑客可以利用這些漏洞進(jìn)行植入流氓軟件,植入釣魚站點,以及劫持用戶會話等。更令人驚嘆不已的是,隨著 IBM 的 JavaScript 安全分析技術(shù)的成熟發(fā)展,2011 年中期 X-Force 報告顯示,IBM 重新測試了上述這些知名網(wǎng)站并發(fā)現(xiàn)了更多的安全漏洞,大約有 40% 的網(wǎng)站存在 JavaScript 安全漏洞。
 
  下文本文將結(jié)合代碼向讀者展示常見這些 JavaScript 安全漏洞,以便讀者在實際編碼過程中注意到這些安全問題,及早規(guī)避這些風(fēng)險。
 
  1、基于DOM 的跨站點腳本編制
 
  我們都聽說過 XSS(Cross Site Script,跨站點腳本編制,也稱為跨站腳本攻擊),指的是攻擊者向合法的 Web 頁面中插入惡意腳本代碼(通常是 HTML 代碼和 JavaScript 代碼)然后提交請求給服務(wù)器,隨即服務(wù)器響應(yīng)頁面即被植入了攻擊者的惡意腳本代碼,攻擊者可以利用這些惡意腳本代碼進(jìn)行會話劫持等攻擊?缯军c腳本編制通常分為反射型和持久型:當(dāng)請求數(shù)據(jù)在服務(wù)器響應(yīng)頁面中呈現(xiàn)為未編碼和未過濾時,即為反射型跨站點腳本編制;持久型指的是包含惡意代碼的請求數(shù)據(jù)被保存在 Web 應(yīng)用的服務(wù)器上,每次用戶訪問某個頁面的時候,惡意代碼都會被自動執(zhí)行,這種攻擊對于 Web2.0 類型的社交網(wǎng)站來說尤為常見,威脅也更大。應(yīng)對跨站點腳本編制的主要方法有兩點:一是不要信任用戶的任何輸入,盡量采用白名單技術(shù)來驗證輸入?yún)?shù);二是輸出的時候?qū)τ脩籼峁┑膬?nèi)容進(jìn)行轉(zhuǎn)義處理。
 
  但鮮為人知的是還有第三種跨站點腳本編制漏洞。2005 年 Amit Klein 發(fā)表了白皮書《基于 DOM 的跨站點腳本編制—第三類跨站點腳本編制形式》("DOM Based Cross Site Scripting or XSS of the Third Kind"),它揭示了基于 DOM 的跨站點腳本編制不需要依賴于服務(wù)器端響應(yīng)的內(nèi)容,如果某些 HTML 頁面使用了 document.location、document.URL 或者 document.referer 等 DOM 元素的屬性,攻擊者可以利用這些屬性植入惡意腳本實施基于 DOM 的跨站點腳本編制攻擊。
 
  下面我們將通過一個很簡單的 HTML 頁面來演示基于 DOM 的跨站點腳本編制原理。假設(shè)有這么一個靜態(tài) HTML 頁面(如清單 1 所示),用來展示歡迎用戶成功登錄的信息。
 
  清單 1. 存在 DOM based XSS 的 HTML 代碼
 
<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
 var pos=document.URL.indexOf("name=")+5;
 document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
</HTML>
  按照該頁面 JavaScript 代碼邏輯,它會接受 URL 中傳入的 name 參數(shù)并展示歡迎信息,如清單 2 所示:
 
  清單 2. 正常情況下的訪問 URL
 
http://www.vulnerable.site/welcome.html?name=Jeremy
  但如果惡意攻擊者輸入類似如下的腳本,見清單 3,該頁面則會執(zhí)行被注入的 JavaScript 腳本。
 
  清單 3. 訪問 URL 中注入腳本
 
http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
  很明顯,受害者的瀏覽器訪問以上 URL 的時候,服務(wù)器端會跟正常情況下一樣返回清單 1 中所示 HTML 頁面,然后瀏覽器會繼續(xù)將這個 HTML 解析成 DOM,DOM 中包含的 document 對象的 URL 屬性將包含清單 3 中注入的腳本內(nèi)容,當(dāng)瀏覽器解析到 JavaScript 的時候會執(zhí)行這段被注入的腳本,跨站點腳本編制攻擊即成功實現(xiàn)。
 
  值得關(guān)注的是,通過以上示例可以看出,惡意代碼不需要嵌入服務(wù)器的響應(yīng)中,基于 DOM 的跨站點腳本編制攻擊也能成功?赡苣承┳x者會認(rèn)為:目前主流瀏覽器會自動轉(zhuǎn)義 URL 中的 '<' 和 '>' 符號,轉(zhuǎn)義后的注入腳本就不會被執(zhí)行了,基于 DOM 的跨站點腳本編制也就不再有什么威脅了。這句話前半段是對的,但后半段就不準(zhǔn)確了。我們要意識到攻擊者可以很輕松地繞過瀏覽器對 URL 的轉(zhuǎn)義,譬如攻擊者可以利用錨點 '#' 來欺騙瀏覽器,如清單 4 所示。瀏覽器會認(rèn)為 '#' 后面的都是片段信息,將不會做任何處理。
<SCRIPT>
 var sData = document.location.search.substring(1);
 var sPos = sData.indexOf("url=") +4;
 var ePos = sData.indexOf("&", sPos);
 var newURL;
if (ePos<0) {
 newURL = sData.substring(sPos);
 } else {
 newURL = sData.substring(sPos, ePos);
 }
 window.location.href = newURL;
</SCRIPT>
  可以看出,這些 JavaScript 腳本負(fù)責(zé)執(zhí)行重定向,新地址是從 document.location、document.URL 或者 document.referer 等 DOM 元素的屬性值中截取出來的,譬如用戶輸入清單 6 所示。
 
  清單 6. 執(zhí)行重定向的 URL
 
http://www.vulnerable.site/redirect.html?url=http://www.phishing.site
  顯然用戶一旦執(zhí)行了清單 6 所示 URL,將被重定向到釣魚網(wǎng)站。這個漏洞的原理很簡單,比服務(wù)器端的重定向漏洞更好理解。但通過 URL 重定向釣魚的情況下,釣魚站點的網(wǎng)址并不會被服務(wù)端攔截和過濾,因此,這個漏洞往往比服務(wù)器端重定向漏洞更具有隱蔽性。
 
  3、客戶端 JavaScript Cookie 引用
 
  Cookie 通常由 Web 服務(wù)器創(chuàng)建并存儲在客戶端瀏覽器中,用來在客戶端保存用戶的身份標(biāo)識、Session 信息,甚至授權(quán)信息等?蛻舳 JavaScript 代碼可以操作 Cookie 數(shù)據(jù)。如果在客戶端使用 JavaScript 創(chuàng)建或修改站點的 cookie,那么攻擊者就可以查看到這些代碼,通過閱讀代碼了解其邏輯,甚至根據(jù)自己所了解的知識將其用來修改 cookie。一旦 cookie 包含了很重要的信息,譬如包含了權(quán)限信息等,攻擊者很容易利用這些漏洞進(jìn)行特權(quán)升級等攻擊。
 
  4、JavaScript 劫持
 
  許多 Web 應(yīng)用程序都利用 JSON 作為 Ajax 的數(shù)據(jù)傳輸機(jī)制,這通常都容易受到 JavaScript 劫持攻擊,傳統(tǒng)的 Web 應(yīng)用程序反而不易受攻擊。JSON 實際上就是一段 JavaScript,通常是數(shù)組格式。攻擊者在其惡意站點的頁面中通過 <SCRIPT> 標(biāo)簽調(diào)用被攻擊站點的一個 JSON 動態(tài)數(shù)據(jù)接口,并通過 JavaScript Function Hook 等技術(shù)取得這些 JSON 數(shù)據(jù)。如果用戶登錄被攻擊網(wǎng)站后(假定其身份認(rèn)證信息是基于 Session Cookie 來保存的),又被攻擊者誘引訪問了惡意站點頁面,那么,由于 <SCRIPT src="> 這種標(biāo)簽的請求會帶上 Cookie 信息,惡意站點會發(fā)送 JSON 數(shù)據(jù)獲取請求至被攻擊站點,被攻擊站點服務(wù)器會認(rèn)為當(dāng)前請求是合法的,并返回給惡意站點當(dāng)前用戶的相關(guān) JSON 數(shù)據(jù),從而導(dǎo)致用戶數(shù)據(jù)泄密。整個過程相當(dāng)于一個站外類型的跨站點請求偽造 CSRF 攻擊。
 
  隨著 Ajax 的進(jìn)一步推廣,以及 HTML5 的逐步應(yīng)用,還有更多的客戶端安全漏洞出現(xiàn)。目前對于 JavaScript 的安全研究尚不多,新推出的 HTML5 客戶端存儲、跨域通信等新特型也都跟安全緊密相關(guān),有興趣的讀者可以作進(jìn)一步閱讀。鑒于筆者知識有限,JavaScript 相關(guān)安全漏洞暫且分享這么多,下面將談?wù)?JavaScript 安全漏洞的檢測技術(shù)。
 
  自動化檢測 JavaScript 安全漏洞
 
  正如我們所熟知,檢測代碼安全漏洞一般有白盒檢查和黑盒檢查。白盒檢查側(cè)重于對代碼的分析,可以通過手工代碼審查,或者自動代碼分析工具。黑盒檢查主要是模擬黑客攻擊的方式進(jìn)行滲透測試。通常而言,黑盒檢查的準(zhǔn)確度高一些,但代碼覆蓋面比較小,而白盒檢查的代碼覆蓋率較高,但誤報率比較高。兩種方式相結(jié)合能夠互相彌補(bǔ)不足,混合檢查方式將會是未來的趨勢。
 
  結(jié)合 JavaScript 代碼而言,出于跨瀏覽器兼容、更好的 Ajax 特性需求等原因,越來越多的 Web 應(yīng)用依賴于第三方的 JavaScript 代碼庫,譬如 Dojo、JQuery 等。這些代碼庫為了降低文件大小,往往都進(jìn)行了代碼壓縮,導(dǎo)致其可讀性極差,因此手工代碼審查幾乎不具備可行性。此外,頁面 JavaScript 調(diào)用入口很多,手工對其進(jìn)行滲透測試的工作量和難度都非常大。因此,我們需要推薦使用自動化測試工具來檢測 JavaScript 安全漏洞。
 
  Rational AppScan JSA 原理簡述
 
  JSA 是 Rational AppScan Standard V8.0 新推出的一項 AppScan 擴(kuò)展,用來進(jìn)行執(zhí)行靜態(tài) JavaScript 分析,以檢測常見客戶端安全漏洞。JSA 融合了 JavaScript 靜態(tài)污點分析技術(shù)和網(wǎng)站動態(tài)爬蟲技術(shù)。簡而言之,AppScan 會保存爬蟲所探索到的所有 URL 的完整的 HTTP 響應(yīng),然后 JSA 對這些響應(yīng)頁面逐個進(jìn)行 JavaScript 代碼分析。JSA 在分析每個頁面時應(yīng)用兩個階段:數(shù)據(jù)流分析和字符串分析。首先,JSA 查找從源(Source)到接收器(Sink)中未經(jīng)過清除工具(Sanitizer)的軌跡。如果可找到此軌跡(Trace),那么 JSA 將在第二步中使用字符串分析的變體——字符串前綴分析(SPA)進(jìn)行驗證。相比于單純的 JavaScript 代碼靜態(tài)分析技術(shù)而言,JSA 技術(shù)更為先進(jìn)和準(zhǔn)確,因為它是在完全解析好的 HTML 頁面及 DOM 環(huán)境中進(jìn)行安全漏洞分析。
  如今 Web2.0 網(wǎng)站及 Ajax 應(yīng)用中,HTML 頁面往往都需要瀏覽器基于服務(wù)器響應(yīng)里的 HTML 和 JavaScript 代碼進(jìn)行動態(tài)解析后才形成完整的 HTML 和 DOM,單純基于服務(wù)器響應(yīng)中的 JavaScript 代碼進(jìn)行靜態(tài)污點分析存在一個明顯缺陷 -- 其所測 JavaScript 代碼及執(zhí)行環(huán)境不一定完整,因此它無法保證測試的準(zhǔn)確度和全面性。JSA 正是克服了以上缺點,融合了白盒檢測和黑盒檢測兩種測試方法的優(yōu)點,并引入 IBM 的字符串分析技術(shù)利用AppScan檢測JavaScript安全漏洞
 
  Altoro Mutual 是 IBM 所提供的 Web 安全漏洞演示網(wǎng)站,下文筆者將向讀者展示如何利用 AppScan JSA 來檢測該網(wǎng)站所存在的 JavaScript 安全漏洞。
 
  啟動 AppScan,點擊菜單"掃描– 掃描配置"打開掃描配置對話框,設(shè)置起始 URL 為"http://demo.testfire.net"。
 
▲圖1. 設(shè)置起始 URL
 
  在掃描配置對話框左側(cè),點擊"登錄管理",然后點擊右側(cè)的"記錄 ..."按鈕錄制登錄過程,確保會話中檢測處于活動狀態(tài)。
 
▲圖2. 設(shè)置登錄方法
 
  在掃描配置對話框左側(cè),點擊"測試策略",檢查測試策略設(shè)置。默認(rèn)測試策略應(yīng)該是"缺省",其已經(jīng)包含了常見 JavaScript 測試,可以點擊"已啟用 / 已禁止"查看當(dāng)前默認(rèn)啟用的測試策略。
 
▲圖3. 檢查測試策略
 
  關(guān)閉掃描配置對話框,點擊菜單"掃描 -- 僅探索"或單擊快捷按鈕(如圖 4 所示)啟動探索。本文僅示例如何檢測 JavaScript 安全漏洞,所以選擇"僅探索"+ 客戶端 JavaScript 分析的測試方式。
 
▲圖4. 啟動探索
 
  點擊菜單"工具– 擴(kuò)展名– JavaScript Security Analyzer"或者快捷按鈕(如圖 5 所示)打開"分析 JavaScript"。在彈出的 JavaScript Security Analyzer 對話框中,單擊"立即分析"。
 
,所以 JSA 有著更好的準(zhǔn)確性和全面性。
 
▲圖5. 分析 JavaScript
 
  JavaScript Security Analyzer 掃描完成后,即在結(jié)果列表中列出所發(fā)現(xiàn)的客戶端 JavaScript 安全漏洞。如下圖所示,Altoro Mutual 站點存在"基于 DOM 的跨站點腳本編制"及"開放式重定向"漏洞,下文將展示這些漏洞的詳細(xì)信息。
 
▲圖6. 查看掃描結(jié)果
 
  展開結(jié)果列表中的"基于 DOM 的跨站點腳本編制",單擊第一個"JavaScript"問題,在下方的問題信息中將會展示其詳細(xì)信息。我們可以看出,AppScan 保存了對 JavaScript 問題代碼的分析結(jié)果,并用黃色標(biāo)識定位了源(Source)和接收器(Sink),利于開發(fā)人員快速修復(fù)該漏洞。
 
▲圖7. 基于 DOM 的跨站點腳本編制問題信息
 
  同樣,展開并查看"開放式重定向"問題,在問題信息欄中展示了該漏洞的代碼分析結(jié)果。
 
▲圖8. 開放式重定向問題信息
 
  注意:
 
  本文為了快速展示如何檢測 JavaScript 安全漏洞,所以選擇"僅探索"+ 客戶端 JavaScript 分析的測試方式。實際工作中,建議您只需要跟通常一樣進(jìn)行掃描(即手工探索結(jié)合自動探索站點,然后執(zhí)行測試),AppScan 默認(rèn)會在測試過程中自動執(zhí)行 JavaScript Security Analyzer。
 
  Rational AppScan Standard 能檢測已知常見 JavaScript 安全漏洞,但 Altoro Mutual 僅展示了基于 DOM 的跨站腳本編制和重定向漏洞,故本案例的結(jié)果列表中僅包含上述兩項安全漏洞。
 
  結(jié)論
 
  本文介紹了 JavaScript 常見安全漏洞,分析了手工檢測 JavaScript 代碼存在較大的技術(shù)難度。IBM Rational AppScan V8.x 新推出了 JSA 擴(kuò)展組件,在業(yè)界率先提供了客戶端 JavaScript 安全檢測方案。本文跟讀者分享了 JSA 的基本原理和技術(shù)優(yōu)勢,并結(jié)合案例向讀者演示了如何使用 IBM Rational AppScan JSA 測試客戶端 JavaScript 安全。由于見解所限,如有不及之處,歡迎交流,共同提高。
 
  關(guān)于作者:何健,IBM 高級軟件工程師,現(xiàn)在 IBM 中國軟件開發(fā)中心從事企業(yè)電子商務(wù)應(yīng)用的開發(fā)及安全審計。有多年 Java EE 應(yīng)用設(shè)計開發(fā)經(jīng)驗,對 Web 應(yīng)用安全及 Web 應(yīng)用架構(gòu)有濃厚興趣。您可以通過 developerWorks 社區(qū)與何健進(jìn)行交流