江 導
(順德職業(yè)技術(shù)學院 廣東 528000)
WEB 瀏覽器是一個軟件程序,用于與 WWW 建立聯(lián)結(jié),并與之進行通信,它可以在 WWW 系統(tǒng)中根據(jù)鏈接確定信息資源的位置,并將用戶感興趣的信息資源取回來,對 HTML 文件進行解釋,然后將文字圖像顯示出來,或者將多媒體信息還原出來。瀏覽器主要包括用戶界面、瀏覽器引擎、網(wǎng)絡、JS解釋器、數(shù)據(jù)存儲等組件。目前典型的 WEB 瀏覽器有 Internet Explorer、360極速瀏覽器、360安全瀏覽器、搜狗瀏覽器、獵豹瀏覽器等,它們適用于各種不同的環(huán)境。
WEB漏洞:
WEB應用程序的正常運行,涉及到客戶端瀏覽器、網(wǎng)絡協(xié)議傳輸、服務器響應、數(shù)據(jù)庫査詢等許多方面。其中無論哪一方面出現(xiàn)漏洞,均可能導致WEB安全問題。漏洞即某個程序(包括操作系統(tǒng))在設計時未考慮周全,當程序遇到一個看似合理,但實際無法處理的問題時,引發(fā)的不可預見的錯誤。系統(tǒng)漏洞又稱安全缺陷,如漏洞被惡意用戶利用,會造成信息泄漏,如黑客攻擊網(wǎng)站即利用網(wǎng)絡服務器操作系統(tǒng)的漏洞。任何事物都非十全十美,作為應用于桌面的操作系統(tǒng)—Windows 以及運行于該環(huán)境中的 WEB 瀏覽器也是如此。這直接危害到我們使用計算機的安全行為,漏洞受病毒及惡意代碼利用,容易導致巨大損失。OWASP于2010年發(fā)布的Top 10應用程序,其中涉及到WEB應用程序的方面的有:客戶端的注入漏洞、跨站腳本漏洞、服務端的授權(quán)管理、安全誤配置、不安全的密碼存儲、網(wǎng)絡傳輸層的失效的 URL訪問重定向、弱保護等。
跨站腳本是服務端代碼漏洞產(chǎn)生的問題,因此唯有從服務端入手才能徹底解決。下面我們就主要討論瀏覽器XSS動態(tài)檢測技術(shù)。
動態(tài)檢測技術(shù)之所以稱為“動態(tài)”,是指它不直接在文本層次分析可執(zhí)行代碼的行為,而是在代碼運行時進行動態(tài)調(diào)試、分析。動態(tài)檢測技術(shù)將代碼語義分析工作交給現(xiàn)成的代碼解析器,可以極大降低系統(tǒng)復雜度,避免語法語義分析不到位導致的誤判。
在XSS攻擊檢測領(lǐng)域,動態(tài)檢測意味著瀏覽器端XSS過濾器不再是一個相對獨立的附加組件,而是與瀏覽器各組件結(jié)合更緊密的一個安全機制。從瀏覽器架構(gòu)的角度看,動態(tài)檢測技術(shù)工作在HTML解析器和Javascript解析器之間,即在HTML解析器生成的文檔對象模型(Document Object Model,簡稱DOM)樹中檢測腳本節(jié)點,完成后才將DOM樹中的腳本結(jié)點傳遞給JavaScript引擎執(zhí)行。因此,動態(tài)檢測技術(shù)可以完全規(guī)避瀏覽器的 HTML解析“怪癖”,直接在 DOM樹中命中HTML文檔中的可執(zhí)行腳本,準確率大幅提升。動態(tài)檢測技術(shù)有其優(yōu)點,動態(tài)檢測技術(shù)在DOM樹的基礎(chǔ)上作檢測,因此與靜態(tài)檢測技術(shù)相比,它最顯著的優(yōu)點就是不受瀏覽器解析怪癖的影響。無論多么復雜晦澀的HTML文檔,只要瀏覽器能解析出DOM樹,動態(tài)檢測時就不會產(chǎn)生歧義。同時,動態(tài)檢測直接從DOM樹的腳本節(jié)點下手還有個優(yōu)點,它無須重復掃描分析HTML文檔。與傳統(tǒng)的模擬解析方法相比,這可以提升一定的性能。有優(yōu)點,自然也少不了缺點,XSSAuditor假設服務端只采用簡單的幾種參數(shù)變換,并使用字符串精確匹配算法從URL中查找可疑腳本,這顯然不能覆蓋所有場景。一旦攻擊者發(fā)現(xiàn)服務端采用了XSSAuditor未知的參數(shù)轉(zhuǎn)換方法,就可以繞過它的檢測。另外,檢測策略不夠完善,對間接腳本注入無能為力。常見的反射型XSS攻擊都是將可執(zhí)行腳本作為參數(shù)直接注入HTML響應中的,而XSSAuditor也作了針對性的匹配檢測。然而,對于間接注入的惡意代碼,XSSAuditor就無能為力了。
針對XSSAuditor未考慮復雜的服務端參數(shù)轉(zhuǎn)換,攻擊者可以針對存在復雜參數(shù)轉(zhuǎn)換的服務端發(fā)起反射型XSS攻擊。
例如,下面的服務端代碼會把參數(shù)中的“you”改成“me”,然后返回給瀏覽器:
1
2
Hello3
4 $name=$_GET[‘name’];
5 $new_name=str_replace("you",''me",$name);
6 echo $new_name;
7 ?>
正常的URL請求如下所示:
http://l 27.0.0.l/xss5.php?name=you
服務端收到請求后,會將參數(shù)中的“you”替換成“me”,因此正常的HTTP回應內(nèi)容如下段代碼所示:
2
3 Hello
4 me
5