孫 偉 張凱寓 薛臨風 徐田華
1(中山大學數據科學與計算機學院 廣州 510006)2(軌道交通控制與安全國家重點實驗室(北京交通大學) 北京 100044) 3(中山大學電子與信息工程學院 廣州 510006) 4(信息技術教育部重點實驗室(中山大學) 廣州 510006)
XSS漏洞研究綜述
孫 偉3,4張凱寓1,4薛臨風1,4徐田華2
1(中山大學數據科學與計算機學院 廣州 510006)2(軌道交通控制與安全國家重點實驗室(北京交通大學) 北京 100044)3(中山大學電子與信息工程學院 廣州 510006)4(信息技術教育部重點實驗室(中山大學) 廣州 510006)
(sunwei@mail.sysu.edu.cn)
跨站腳本(cross-site scripting, XSS)是一種常見的針對Web應用程序安全漏洞的攻擊.惡意用戶利用漏洞將惡意腳本注入網頁之中,當用戶瀏覽該網頁時,便會觸發(fā)腳本,導致攻擊行為發(fā)生.由于HTML編碼方案的高度靈活性,攻擊者可通過多種方法繞過輸入驗證過濾器,導致XSS難以被發(fā)現和預防.為了有效減少XSS造成的危害損失,依照XSS的分類,對反射型XSS、存儲型XSS和基于DOM的XSS特征及原理進行了細致的分析和對比,并對數量龐大、形態(tài)各異的XSS攻擊向量進行歸納和梳理,通過舉例對Cookie竊取、會話劫持、釣魚欺騙等XSS常見利用方式進行說明,并對常用的XSS防御手段進行整理,最后對靜態(tài)分析、動態(tài)分析、機器學習等主流的XSS漏洞自動化檢測方法進行總結.
Web安全;跨站腳本;攻擊向量;漏洞利用;漏洞檢測方法
伴隨著Web技術的普及和發(fā)展,Web憑借其開放性和易用性受到越來越多開發(fā)者和用戶的青睞,然而,在Web為人們生活提供便捷的同時,其應用程序中所包含的各類漏洞也隨之成為互聯網上最為嚴重的安全隱患之一[1],而跨站腳本(cross-site scripting, XSS)則是眾多Web漏洞中極具影響力和危害性的一種[2].攻擊者利用網站漏洞將惡意的腳本代碼注入到網頁之中,當用戶瀏覽該網頁時,便會觸發(fā)惡意代碼,從而實現Cookie竊取、會話劫持、釣魚欺騙等攻擊行為.
根據國家信息安全漏洞庫統計數據[3],截至2016年7月,漏洞庫共收集XSS漏洞9401個,其中2011年至今新增3801個.在開放式Web應用程序安全項目(OWASP)2007年、2010年、2013年發(fā)布的十大Web安全漏洞報告中[4-5],XSS漏洞危害排名始終居于前3.圖1對我國近5年來各類主要漏洞數量進行了統計, XSS漏洞僅次于緩沖區(qū)溢出漏洞排名第2.因此,如何準確檢出XSS漏洞并形成行之有效的防御措施,已成為目前Web安全領域亟待解決的問題.

圖1 2011—2016年國內漏洞數量分布圖
本文首先對XSS漏洞的分類、特性進行分析和對比,隨后結合國內外相關研究對XSS攻擊向量構造方法及漏洞利用方式進行歸納梳理,接著對目前主流的XSS漏洞防御手段進行了闡述,最后對目前XSS的自動化檢測方法進行了分析總結.
1 XSS漏洞分類及對比
XSS漏洞主要分為3類[6-7]:反射型XSS(reflected XSS)、存儲型XSS(stored XSS)和基于DOM的XSS(DOM-based XSS).
1.1 反射型XSS
反射型XSS也稱非持久性XSS,是XSS 中最為普遍的一種類型.該類型的XSS通過構造帶有惡意腳本的URL并誘使用戶點擊來觸發(fā)攻擊行為.如圖2所示,反射型XSS具體過程可描述如下:
1) 攻擊者精心構造包含惡意腳本的URL,通過email等方式發(fā)送給用戶,誘使用戶點擊,此時,惡意腳本作為URL中的參數傳遞;
2) 點擊URL后,用戶瀏覽器向服務器發(fā)送包含惡意腳本的請求;
3) 服務器將惡意腳本嵌入到響應(通常為HTML頁面)中發(fā)回給用戶,此時響應中的惡意腳本對瀏覽器而言是動態(tài)的可執(zhí)行腳本(反射的攻擊腳本);
4) 用戶瀏覽器收到響應后,其中的惡意腳本被解析和執(zhí)行,攻擊發(fā)生.
對于該類型的XSS漏洞,攻擊者除了基于構造的URL進行攻擊外,還可通過基于頁面輸入和HTTP 請求(GET報文)進行攻擊.

圖2 反射型XSS攻擊過程
下面給出2個典型的用于反射型XSS攻擊的URL,其中注入的腳本只使用最基本的測試向量,當用戶點擊該URL后,存在漏洞的站點不會對URL中的參數進行有效過濾,因此導致用戶受到攻擊.
%3Cscript%3Ealert%28XSS%29%3Cscript%3E
1.2 存儲型XSS
存儲型XSS又稱持久性XSS,該類型XSS通過各種手段將惡意腳本寫入服務器端的數據庫中,當有用戶瀏覽相應的網頁時便會觸發(fā)攻擊行為.如圖3所示,存儲型XSS具體過程可描述如下:
1) 攻擊者通過目標站點或與該站點共享同一個數據庫的其他站點,將惡意腳本(存儲的攻擊腳本)插入到數據庫中;
2) 用戶瀏覽器發(fā)送完全無害的訪問請求,試圖獲取該站點下的頁面;
3) 服務器端從站點數據庫取出惡意腳本嵌入到響應(通常為HTML頁面)中,發(fā)回給用戶;
4) 用戶瀏覽器收到響應后,其中的惡意腳本被解析和執(zhí)行,攻擊發(fā)生.
該類型XSS漏洞通常在留言板、個人資料等位置出現,并常被用于編寫危害性更大的XSS蠕蟲.

圖3 存儲型XSS攻擊過程
圖4給出一個存在于某新聞發(fā)布系統中的存儲型XSS漏洞案例,通過分析代碼可知,該系統對用戶注冊時輸入的用戶名字段未作特殊字符過濾,且對字段長度的限制不夠嚴格,由于該字段信息會被存入數據庫中,導致出現存儲型XSS漏洞.我們在注冊頁面注冊用戶名為
″