十二問(wèn)讓你全面了解跨站腳本攻擊 |
發(fā)布時(shí)間: 2012/9/14 18:24:29 |
作為網(wǎng)站的業(yè)務(wù)管理者,在欣賞自己為客戶提供的豐富業(yè)務(wù)和趣味性體驗(yàn)時(shí),你是否曾經(jīng)想過(guò)網(wǎng)站會(huì)成為攻擊者攻擊第三方的媒介,從而導(dǎo)致公信度大為受損?作為一個(gè)網(wǎng)站的訪客,你是否曾經(jīng)想過(guò)在訪問(wèn)這個(gè)自己再熟悉不過(guò)的網(wǎng)站時(shí),你的私密信息已經(jīng)被他人竊取? 這些都與跨站腳本攻擊有關(guān)。下面讓我們?cè)敿?xì)了解這類攻擊。 Q1:什么是跨站腳本? 跨站腳本(Cross-site scripting,簡(jiǎn)稱XSS),是一種迫使Web站點(diǎn)回顯可執(zhí)行代碼的攻擊技術(shù),而這些可執(zhí)行代碼由攻擊者提供、最終為用戶瀏覽器加載。不同于大多數(shù)攻擊(一般只涉及攻擊者和受害者),XSS涉及到三方,即攻擊者、客戶端與網(wǎng)站。XSS的攻擊目標(biāo)是為了盜取客戶端的cookie或者其他網(wǎng)站用于識(shí)別客戶端身份的敏感信息。獲取到合法用戶的信息后,攻擊者甚至可以假冒最終用戶與網(wǎng)站進(jìn)行交互。 XSS漏洞成因是由于動(dòng)態(tài)網(wǎng)頁(yè)的Web應(yīng)用對(duì)用戶提交請(qǐng)求參數(shù)未做充分的檢查過(guò)濾,允許用戶在提交的數(shù)據(jù)中摻入HTML代碼(最主要的是“>”、“<”),然后未加編碼地輸出到第三方用戶的瀏覽器,這些攻擊者惡意提交代碼會(huì)被受害用戶的瀏覽器解釋執(zhí)行。 Q2:XSS縮寫來(lái)源? 依照英文縮寫習(xí)慣,簡(jiǎn)稱跨站腳本為CSS。這樣會(huì)引起它和另一個(gè)名詞“層疊樣式表”(Cascading Style Sheets,CSS)的混淆。此CSS非彼CSS。為了以示區(qū)別,一些安全人士就習(xí)慣將跨站腳本簡(jiǎn)稱為XSS。[2] Q3:XSS存在哪些威脅? 攻擊者可以利用XSS漏洞、借助存在漏洞的Web網(wǎng)站攻擊其他瀏覽相關(guān)網(wǎng)頁(yè)的用戶,竊取用戶瀏覽會(huì)話中諸如用戶名和口令(可能包含在cookie里)的敏感信息、通過(guò)插入惡意代碼對(duì)用戶執(zhí)行掛馬攻擊。XSS漏洞還可能被攻擊者用于網(wǎng)頁(yè)篡改,只是多數(shù)情況為了經(jīng)濟(jì)利益最大化,攻擊者不會(huì)直接進(jìn)行篡改。 Q4:XSS漏洞的普及率有多高? 國(guó)際Web應(yīng)用安全組織WASC(Web Application Security Consortium)最新數(shù)據(jù)[4]表明,采樣分析了10297個(gè)網(wǎng)站,其中有31.47%站點(diǎn)存在XSS漏洞,且XSS在發(fā)現(xiàn)的漏洞中占到總數(shù)的41.41%,高居榜首。
Q5:能否列舉XSS實(shí)例? 2005年,一位叫Samy的MySpace用戶自創(chuàng)了一種XSS蠕蟲,24小時(shí)內(nèi),其網(wǎng)絡(luò)空間朋友數(shù)目成功從73上升到1百萬(wàn)。[5] 2006年,PayPal遭到XSS攻擊,攻擊者將PayPal站點(diǎn)的訪問(wèn)者重定向到一個(gè)新的頁(yè)面,上面警告用戶他們的帳號(hào)已經(jīng)不再安全,需要重新設(shè)置,并提示輸入PayPal的登錄信息、用戶社保信息及信用卡信息。[6] 2008年5月,eBay承認(rèn)其PayPal頁(yè)面存在XSS漏洞,該漏洞會(huì)被攻擊者用于盜取用戶證書或cookie。[7] Q6:攻擊者如何通過(guò)XSS攻擊偷取cookie? 在此,僅做舉例說(shuō)明,幫助讀者理解XSS攻擊的思路。本文中的例子來(lái)自[1]。 首先,讓我們假設(shè):存在一個(gè)網(wǎng)站www.vulnerableexample.com。該網(wǎng)站上有一個(gè)腳本welcome.cgi,參數(shù)設(shè)定為name。此腳本會(huì)讀取HTTP請(qǐng)求的部分,然后未做任何安全性驗(yàn)證,就將請(qǐng)求內(nèi)容部分或全部回顯到響應(yīng)頁(yè)面。 通常,如果用戶端發(fā)送以下請(qǐng)求: GET /welcome.cgi?name=Sammi HTTP/1.0 Host: www.vulnerableexample.com 服務(wù)器將會(huì)有如下響應(yīng): Hi Sammi ... 彈出Alert窗口示例 上述機(jī)制將如何為攻擊者所利用呢?我們先列舉一個(gè)直觀的方法。通常,攻擊者會(huì)應(yīng)用社會(huì)工程學(xué)(Social Engineering)設(shè)法誘騙受害者點(diǎn)擊由攻擊者精心構(gòu)造的鏈接,如發(fā)送一封標(biāo)題為“免費(fèi)聽(tīng)林肯公園北京現(xiàn)場(chǎng)演唱會(huì)”的郵件J。 攻擊者構(gòu)造的惡意鏈接如下: http://www.vulnerableexample.com/welcome.cgi?name= 受害者一旦點(diǎn)擊了惡意鏈接,會(huì)發(fā)送如下請(qǐng)求到www.vulnerableexample.site站點(diǎn): GET /welcome.cgi?name= HTTP/1.0 Host: www.vulnerableexample.com ... 站點(diǎn)將返回如下響應(yīng): Hi Welcome! ... 因?yàn)榉⻊?wù)器端返回的HTML頁(yè)面包含一段JavaScript代碼,受害者瀏覽器會(huì)解釋執(zhí)行。這段代碼被執(zhí)行后,將被允許訪問(wèn)瀏覽器中屬于www.vulnerableexample.com站點(diǎn)的cookie。此時(shí),用戶側(cè)瀏覽器上會(huì)彈出一個(gè)alert窗口。 網(wǎng)站收集cookie示例 真實(shí)的攻擊步驟中,這些cookie會(huì)被發(fā)送給攻擊者。攻擊者為此會(huì)搭建一個(gè)網(wǎng)站(我們稱為www.attackerexample.com),還會(huì)應(yīng)用一個(gè)腳本負(fù)責(zé)接收盜取的cookie。攻擊者會(huì)寫一段惡意代碼,用于實(shí)現(xiàn)訪問(wèn)攻擊者站點(diǎn)、并能調(diào)用接收cookie的腳本。最終,攻擊者可以從www.attackerexample.com站點(diǎn)獲取到cookie。 構(gòu)造的惡意鏈接如下: http://www.vulnerableexample.com/welcome.cgi?name= 服務(wù)器響應(yīng)內(nèi)容顯示為: Hi Welcome! ... 瀏覽器會(huì)加載服務(wù)器端返回頁(yè)面,執(zhí)行內(nèi)嵌的JavaScript,并發(fā)送一個(gè)請(qǐng)求到www.attackerexample.com站點(diǎn)上的collect.cgi腳本,瀏覽器中保存的www.vulnerableexample.com站點(diǎn)的cookie值也會(huì)一起發(fā)送過(guò)去。攻擊者獲取到客戶在www.vulnerable.site站點(diǎn)的cookie,還可以假冒受害者。 Q7:加密是否能有效防護(hù)XSS攻擊? 通常大家會(huì)認(rèn)為如果網(wǎng)站使用了HTTPS,提供更有保障的安全,可以幸免于XSS攻擊。其實(shí)這是一種誤解。HTTPS僅提供傳輸層的安全,在應(yīng)用層仍然面臨XSS的威脅。[2] Q8:XSS漏洞是否可能引起非法執(zhí)行命令? 如果瀏覽器設(shè)置安全性不夠時(shí),XSS漏洞允許插入JavaScript,也就意味著攻擊者可能獲取受限的客戶端執(zhí)行權(quán)限。如果攻擊者進(jìn)而利用瀏覽器的漏洞,就有可能在客戶端非法執(zhí)行命令。簡(jiǎn)言之,XSS漏洞有助于進(jìn)一步利用瀏覽器漏洞。[2] Q9:從網(wǎng)站開(kāi)發(fā)者角度,如何防護(hù)XSS攻擊? 來(lái)自應(yīng)用安全國(guó)際組織OWASP的建議[3],對(duì)XSS最佳的防護(hù)應(yīng)該結(jié)合以下兩種方法:驗(yàn)證所有輸入數(shù)據(jù),有效檢測(cè)攻擊;對(duì)所有輸出數(shù)據(jù)進(jìn)行適當(dāng)?shù)木幋a,以防止任何已成功注入的腳本在瀏覽器端運(yùn)行。具體如下: ·輸入驗(yàn)證:某個(gè)數(shù)據(jù)被接受為可被顯示或存儲(chǔ)之前,使用標(biāo)準(zhǔn)輸入驗(yàn)證機(jī)制,驗(yàn)證所有輸入數(shù)據(jù)的長(zhǎng)度、類型、語(yǔ)法以及業(yè)務(wù)規(guī)則。 ·強(qiáng)壯的輸出編碼:數(shù)據(jù)輸出前,確保用戶提交的數(shù)據(jù)已被正確進(jìn)行entity編碼,建議對(duì)所有字符進(jìn)行編碼而不僅局限于某個(gè)子集。 ·明確指定輸出的編碼方式(如ISO 8859-1或 UTF 8):不要允許攻擊者為你的用戶選擇編碼方式。 ·注意黑名單驗(yàn)證方式的局限性:僅僅查找或替換一些字符(如"<" ">"或類似"script"的關(guān)鍵字),很容易被XSS變種攻擊繞過(guò)驗(yàn)證機(jī)制。 ·警惕規(guī)范化錯(cuò)誤:驗(yàn)證輸入之前,必須進(jìn)行解碼及規(guī)范化以符合應(yīng)用程序當(dāng)前的內(nèi)部表示方法。請(qǐng)確定應(yīng)用程序?qū)ν惠斎氩蛔鰞纱谓獯a。 Q10:從網(wǎng)站用戶角度,如何防護(hù)XSS攻擊? 當(dāng)你打開(kāi)一封Email或附件、瀏覽論壇帖子時(shí),可能惡意腳本會(huì)自動(dòng)執(zhí)行,因此,在做這些操作時(shí)一定要特別謹(jǐn)慎。建議在瀏覽器設(shè)置中關(guān)閉JavaScript。如果使用IE瀏覽器,將安全級(jí)別設(shè)置到“高”。具體可以參照瀏覽器安全的相關(guān)文章。[2] 這里需要再次提醒的是,XSS攻擊其實(shí)伴隨著社會(huì)工程學(xué)的成功應(yīng)用,需要增強(qiáng)安全意識(shí),只信任值得信任的站點(diǎn)或內(nèi)容。 Q11:如果修補(bǔ)XSS漏洞對(duì)網(wǎng)站來(lái)說(shuō)困難較大,不修補(bǔ)會(huì)怎樣? 如果不能及時(shí)修補(bǔ)XSS漏洞,網(wǎng)站可能成為攻擊者攻擊第三方的媒介,公信度受損;網(wǎng)站用戶成為受害者,敏感信息泄漏,F(xiàn)實(shí)中,確實(shí)存在某些無(wú)法修補(bǔ)漏洞的客觀原因,如Web應(yīng)用開(kāi)發(fā)年代久遠(yuǎn)或者整改代碼需要付出過(guò)于高昂的代價(jià)。這種情況下, 選擇Web安全網(wǎng)關(guān)會(huì)是一種合理選擇。正確應(yīng)用這類安全工具,會(huì)極大緩解XSS攻擊,降低安全風(fēng)險(xiǎn)。 Q12:下一代XSS會(huì)是怎樣的? 隨著AJAX(Asynchronous JavaScript and XML,異步JavaScript和XML)技術(shù)的普遍應(yīng)用,XSS的攻擊危害將被放大。使用AJAX的最大優(yōu)點(diǎn),就是可以不用更新整個(gè)頁(yè)面來(lái)維護(hù)數(shù)據(jù),Web應(yīng)用可以更迅速地響應(yīng)用戶請(qǐng)求。AJAX會(huì)處理來(lái)自Web服務(wù)器及源自第三方的豐富信息,這對(duì)XSS攻擊提供了良好的機(jī)會(huì)。AJAX應(yīng)用架構(gòu)會(huì)泄漏更多應(yīng)用的細(xì)節(jié),如函數(shù)和變量名稱、函數(shù)參數(shù)及返回類型、數(shù)據(jù)類型及有效范圍等。AJAX應(yīng)用架構(gòu)還有著較傳統(tǒng)架構(gòu)更多的應(yīng)用輸入,這就增加了可被攻擊的點(diǎn)。 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |