JavaScript常見安全漏洞及自動檢測技術 |
發(fā)布時間: 2012/5/28 7:27:20 |
隨著Web2.0的發(fā)展以及Ajax框架的普及,富客戶端Web應用(Rich Internet Applications,RIA)日益增多,越來越多的邏輯已經(jīng)開始從服務器端轉移至客戶端,這些邏輯通常都是使用JavaScript語言所編寫。但遺憾的是,目前開發(fā)人員普遍不太關注JavaScript代碼的安全性。據(jù)IBMX-Force2011年中期趨勢報告揭示,世界五百強的網(wǎng)站及常見知名網(wǎng)站中有40%存在JavaScript安全漏洞。本文將結合代碼向讀者展示常見Java Script安全漏洞,旨在幫助讀者能夠在日常編碼工作中規(guī)避這些安全漏洞。此外,客戶端Java Script安全漏洞與服務器端安全漏洞原理略為不同,自動化檢測JavsScript安全漏洞目前存在較大的技術難題,本文將結合案例跟讀者分享如何利用IBM Rational AppScan Standard Edition V8.0新特性(JavaScript Security Analyzer,JSA)技術自動化檢測JavaScript安全漏洞。 JavaScript常見安全漏洞 2010年12月份,IBM發(fā)布了關于Web應用中客戶端JavaScript安全漏洞的白皮書,其中介紹了IBM安全研究機構曾做過的JavaScript安全狀況調(diào)查。樣本數(shù)據(jù)包括了675家網(wǎng)站,其中有財富500強公司的網(wǎng)站和另外175家著名網(wǎng)站,包括IT公司、Web應用安全服務公司、社交網(wǎng)站等。為了不影響這些網(wǎng)站的正常運行,研究人員使用了非侵入式爬蟲,僅掃描了無需登錄即可訪問的部分頁面,每個站點不超過200個頁面。這些頁面都被保存下來,研究人員采用IBM的JavaScript安全分析技術離線分析了這些頁面,集中分析了基于DOM的跨站點腳本編制及重定向兩種漏洞。 測試結果令人驚嘆,這些知名網(wǎng)站中有14%存在嚴峻的JavaScript安全問題,黑客可以利用這些漏洞進行植入流氓軟件,植入釣魚站點,以及劫持用戶會話等。更令人驚嘆不已的是,隨著IBM的JavaScript安全分析技術的成熟發(fā)展,2011年中期X-Force報告顯示,IBM重新測試了上述這些知名網(wǎng)站并發(fā)現(xiàn)了更多的安全漏洞,大約有40%的網(wǎng)站存在JavaScript安全漏洞。 下文本文將結合代碼向讀者展示常見這些JavaScript安全漏洞,以便讀者在實際編碼過程中注意到這些安全問題,及早規(guī)避這些風險。 1、基于DOM的跨站點腳本編制 我們都聽說過XSS(Cross Site Script,跨站點腳本編制,也稱為跨站腳本攻擊),指的是攻擊者向合法的Web頁面中插入惡意腳本代碼(通常是HTML代碼和JavaScript代碼)然后提交請求給服務器,隨即服務器響應頁面即被植入了攻擊者的惡意腳本代碼,攻擊者可以利用這些惡意腳本代碼進行會話劫持等攻擊。跨站點腳本編制通常分為反射型和持久型:當請求數(shù)據(jù)在服務器響應頁面中呈現(xiàn)為未編碼和未過濾時,即為反射型跨站點腳本編制;持久型指的是包含惡意代碼的請求數(shù)據(jù)被保存在Web應用的服務器上,每次用戶訪問某個頁面的時候,惡意代碼都會被自動執(zhí)行,這種攻擊對于Web2.0類型的社交網(wǎng)站來說尤為常見,威脅也更大。應對跨站點腳本編制的主要方法有兩點:一是不要信任用戶的任何輸入,盡量采用白名單技術來驗證輸入?yún)?shù);二是輸出的時候?qū)τ脩籼峁┑膬?nèi)容進行轉義處理。 但鮮為人知的是還有第三種跨站點腳本編制漏洞。2005年AmitKlein發(fā)表了白皮書《基于DOM的跨站點腳本編制—第三類跨站點腳本編制形式》("DOM Based Cross Site Scripting or XSS of theThird Kind"),它揭示了基于DOM的跨站點腳本編制不需要依賴于服務器端響應的內(nèi)容,如果某些HTML頁面使用了document.location、document.URL或者document.referer等DOM元素的屬性,攻擊者可以利用這些屬性植入惡意腳本實施基于DOM的跨站點腳本編制攻擊。 下面我們將通過一個很簡單的HTML頁面來演示基于DOM的跨站點腳本編制原理。假設有這么一個靜態(tài)HTML頁面(如清單1所示),用來展示歡迎用戶成功登錄的信息。 清單1.存在DOM based XSS的HTML代碼 按照該頁面JavaScript代碼邏輯,它會接受URL中傳入的name參數(shù)并展示歡迎信息,如清單2所示: 清單2.正常情況下的訪問URL 但如果惡意攻擊者輸入類似如下的腳本,見清單3,該頁面則會執(zhí)行被注入的JavaScript腳本。 清單3.訪問URL中注入腳本 很明顯,受害者的瀏覽器訪問以上URL的時候,服務器端會跟正常情況下一樣返回清單1中所示HTML頁面,然后瀏覽器會繼續(xù)將這個HTML解析成DOM,DOM中包含的document對象的URL屬性將包含清單3中注入的腳本內(nèi)容,當瀏覽器解析到JavaScript的時候會執(zhí)行這段被注入的腳本,跨站點腳本編制攻擊即成功實現(xiàn)。 值得關注的是,通過以上示例可以看出,惡意代碼不需要嵌入服務器的響應中,基于DOM的跨站點腳本編制攻擊也能成功。可能某些讀者會認為:目前主流瀏覽器會自動轉義URL中的'<'和'>'符號,轉義后的注入腳本就不會被執(zhí)行了,基于DOM的跨站點腳本編制也就不再有什么威脅了。這句話前半段是對的,但后半段就不準確了。我們要意識到攻擊者可以很輕松地繞過瀏覽器對URL的轉義,譬如攻擊者可以利用錨點'#'來欺騙瀏覽器,如清單4所示。瀏覽器會認為'#'后面的都是片段信息,將不會做任何處理。 本文出自:億恩科技【www.23lll.com】 |