背景知識
1.1 什麼是XSS攻擊
XSS是一種經常出現在web套用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如
同源策略(same origin policy)。這種類型的漏洞由於被駭客用來編寫危害性更大的
網路釣魚(Phishing)攻擊而變得廣為人知。對於
跨站腳本攻擊,駭客界共識是:跨站腳本攻擊是新型的“
緩衝區溢出攻擊“,而JavaScript是新型的“ShellCode”。
數據來源:2007 OWASP Top 10的MITRE數據
註:OWASP是世界上最知名的Web安全與
資料庫安全研究組織
在2007年OWASP所統計的所有安全威脅中,跨站腳本攻擊占到了22%,高居所有Web威脅之首。
XSS攻擊的危害包括
1、盜取各類用戶
帳號,如機器登錄帳號、用戶網銀帳號、各類管理員帳號
2、控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
3、盜竊企業重要的具有商業價值的資料
4、非法轉賬
5、強制傳送電子郵件
6、網站掛馬
7、控制受害者機器向其它網站發起攻擊
1.2 XSS漏洞的分類
XSS漏洞按照攻擊利用手法的不同,有以下三種類型:
類型A,本地利用漏洞,這種漏洞存在於頁面中客戶端腳本自身。其攻擊過程如下所示:
Alice給Bob傳送一個惡意構造了Web的
URL。
Bob點擊並查看了這個URL。
惡意頁面中的JavaScript打開一個具有漏洞的HTML頁面並將其安裝在Bob電腦上。
具有漏洞的HTML頁面包含了在Bob電腦本地域執行的JavaScript。
Alice的
惡意腳本可以在Bob的電腦上執行Bob所持有的許可權下的命令。
類型B,反射式漏洞,這種漏洞和類型A有些類似,不同的是Web客戶端使用Server端腳本生成頁面為用戶提供數據時,如果未經驗證的用戶數據被包含在頁面中而未經
HTML實體編碼,客戶端代碼便能夠注入到
動態頁面中。其攻擊過程如下:
Alice經常瀏覽某個網站,此網站為Bob所擁有。Bob的站點運行Alice使用用戶名/密碼進行登錄,並存儲敏感信息(比如銀行帳戶信息)。
Charly發現Bob的站點包含反射性的XSS漏洞。
Charly編寫一個利用漏洞的URL,並將其冒充為來自Bob的郵件傳送給Alice。
Alice在登錄到Bob的站點後,瀏覽Charly提供的URL。
嵌入到URL中的
惡意腳本在Alice的瀏覽器中執行,就像它直接來自Bob的伺服器一樣。此腳本盜竊敏感信息(授權、信用卡、帳號信息等)然後在Alice完全不知情的情況下將這些信息傳送到Charly的Web站點。
類型C,存儲式漏洞,該類型是套用最為廣泛而且有可能影響到Web伺服器自身安全的漏洞,
駭客將攻擊腳本上傳到Web伺服器上,使得所有訪問該頁面的用戶都面臨信息泄漏的可能,其中也包括了Web伺服器的管理員。其攻擊過程如下:
Bob擁有一個Web站點,該站點允許用戶發布信息/瀏覽已發布的信息。
Charly注意到Bob的站點具有類型C的XSS漏洞。
Charly發布一個熱點信息,吸引其它用戶紛紛閱讀。
Bob或者是任何的其他人如Alice瀏覽該信息,其會話cookies或者其它信息將被Charly盜走。
類型A直接威脅用戶個體,而類型B和類型C所威脅的對象都是企業級Web套用。
傳統防禦技術
2.1.1基於特徵的防禦
XSS漏洞和著名的SQL
注入漏洞一樣,都是利用了Web頁面的編寫不完善,所以每一個漏洞所利用和針對的弱點都不盡相同。這就給XSS漏洞防禦帶來了困難:不可能以單一特徵來概括所有XSS攻擊。
傳統XSS防禦多採用
特徵匹配方式,在所有提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,採用的模式匹配方法一般會需要對“javascript”這個
關鍵字進行檢索,一旦發現提交信息中包含“javascript”,就認定為XSS攻擊。這種檢測方法的缺陷顯而易見:駭客可以通過插入字元或完全編碼的方式躲避檢測:
躲避方法1)在javascript中加入多個tab鍵,得到
< IMG SRC="jav ascript:alert('XSS');" >;
躲避方法2) 在javascript中加入(空格)
字元,得到
< IMG SRC="javascri pt:alert('XSS');" >;
躲避方法3) 在javascript中加入(回車)字元,得到
< IMG SRC="javascript:alert('XSS');" >;
躲避方法4)在javascript中的每個
字元間加入回車換行符,得到
< IMG SRC="javascrip\r\nt:alert('XSS');" >
躲避方法5)對"javascript:alert('XSS')"採用完全編碼,得到
< IMGSRC=javascrip?74:alert('XSS') >
上述方法都可以很容易的躲避基於特徵的檢測。而除了會有大量的漏報外,基於特徵的
還存在大量的誤報可能:在上面的例子中,對上述某網站這樣一個地址,由於包含了關鍵字“javascript”,也將會觸發報警。
2.1.2 基於代碼修改的防禦
和SQL注入防禦一樣,XSS攻擊也是利用了Web頁面的編寫疏忽,所以還有一種方法就是從Web套用開發的角度來避免:
步驟1、對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度範圍內、採用適當格式、採用所預期的字元的內容提交,對其他的一律過濾。
步驟2、實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。
步驟3、確認接收的的內容被妥善的規範化,僅包含最小的、安全的Tag(沒有javascript),去掉任何對遠程內容的引用(尤其是樣式表和javascript),使用HTTP only的cookie。
當然,如上操作將會降低Web業務系統的可用性,用戶僅能輸入少量的制定字元,人與系統間的互動被降到極致,僅適用於信息發布型站點。並且考慮到很少有Web編碼人員受過正規的安全培訓,很難做到完全避免頁面中的XSS漏洞。
3 綜論
XSS攻擊作為Web業務的最大威脅之一,不僅危害Web業務本身,對訪問Web業務的用戶也會帶來直接的影響,如何防範和阻止XSS攻擊,保障Web站點的業務安全,是定位於業務威脅防禦的入侵防禦產品的本職工作。
受攻擊事件
新浪微博XSS受攻擊事件
2011年6月28日晚,新浪微博出現了一次比較大的XSS攻擊事件。大量用戶自動傳送諸如:“郭美美事件的一些未注意到的細節”,“建黨大業中穿幫的地方”,“讓女人心動的100句詩歌”,“3D肉蒲團高清國語版種子”,“這是傳說中的神仙眷侶啊”,“驚爆!范冰冰艷照真流出了”等等微博和私信,並自動關注一位名為
hellosamy的用戶。
事件的經過線索如下:
20:30,某網站中的病毒頁面無法訪問
20:32,新浪微博中hellosamy用戶無法訪問
21:02,新浪漏洞修補完畢
百度貼吧xss攻擊事件
2014年3月9晚,六安吧等幾十個貼吧出現點擊推廣貼會自動轉發等。並且吧友所關注的每個關注的貼吧都會轉一遍,病毒循環發帖。並且導致吧務人員,和吧友被封禁。