蔣 華,徐中原,王 鑫
(桂林電子科技大學計算機科學與工程學院,廣西桂林541004)
據(jù)WhiteHat Security統(tǒng)計,近幾年來跨站腳本 (XSS攻擊)攻擊一直在威脅Web安全的嚴重程度指數(shù)中名列前茅[1]。與此同時,從2005年起,跨站腳本 (XSS)蠕蟲也已在國內很多社交網站上陸續(xù)嶄露頭腳,其傳播速度和范圍都令傳統(tǒng)的網絡蠕蟲黯然失色[2]。
目前對于XSS攻擊主要的防范措施都集中在服務器端,通過對用戶的輸入進行過濾來防范XSS攻擊,但是這樣做的缺點是很容易使惡意攻擊者通過探測工具繞過過濾來實施注入攻擊。另外,如果在服務器端所設立的過濾算法過于復雜,將不可避免地影響到服務器的性能。
此外,近幾年來防范措施設置在客戶端方面的設想和做法也已陸續(xù)被提出,王夏莉,張玉清等提出了通過將用戶對Web應用程序的HTTP請求數(shù)據(jù)包分離為GET和POST請求數(shù)據(jù)包分別進行分析處理的客戶端防范方法,該研究設計的StopXSS對防范XSS蠕蟲攻擊有一定的作用,但對XSS攻擊竊取用戶敏感信息和隱私數(shù)據(jù)方面防范不足[3];Vogt P等提出了基于動態(tài)分析追蹤的客戶端防范方法[4]、章明等使用靜態(tài)約束分析和動態(tài)檢測相結合的客戶端防御方法[5],可對XSS攻擊進行比較有效的防范,但面對XSS蠕蟲的攻擊束手無策。
針對此種情況該論文結合上述研究的優(yōu)點設計出了純客戶端的XSS防御設計方案,通過實驗驗證了該方法不僅可以更加有效地防御XSS攻擊,檢測準確率可以達95%左右,另一方面對于XSS攻擊向量的變種亦具有同樣的防御能力[6],同時該方法還具有檢測防范0-Day XSS蠕蟲的能力。
XSS(cross site scripting)即跨站腳本攻擊,主要是由于Web應用程序對用戶輸入沒有進行合理的過濾造成的[7]。惡意用戶利用XSS漏洞可以編寫專門的攻擊代碼注入到Web應用程序,當其它用戶瀏覽Web應用程序中的此頁面時,腳本代碼就會在用戶的瀏覽器中執(zhí)行從而竊取用戶的敏感信息或隱私數(shù)據(jù)等,然后以用戶的身份登錄Web應用程序或利用已竊取的信息實施破壞。
XSS蠕蟲是一種利用XSS漏洞進行攻擊和傳播的蠕蟲。XSS蠕蟲的第一次亮相是在2005年的MySpace網絡社區(qū)中,在短短20個小時內即感染超過百萬的用戶,兩天后MySpace不得不關閉站點進行維護,造成了巨大的經濟損失[8]。隨后在國內的新浪、百度、人人網等知名網站中也先后爆發(fā)過XSS蠕蟲,但值得注意的是目前XSS蠕蟲還處在發(fā)展階段,已爆發(fā)的蠕蟲大部分還不具備攻擊性,如加上掛馬、釣魚等代碼則可對用戶的財產和隱私安全造成嚴重影響。
(1)反射型XSS攻擊:反射性XSS是指用戶點擊了某個鏈接如郵件中的鏈接、新聞標記中的鏈接或攻擊者偽裝為用戶的朋友直接發(fā)送的鏈接等,而這個鏈接是XSS攻擊者經過精心構造、在其中包含惡意腳本代碼的危險鏈接,惡意腳本代碼在用戶點擊后即在用戶的瀏覽器中運行,在瀏覽器端如沒有相應的防范措施,惡意攻擊者就可以竊取用戶的隱私數(shù)據(jù)或敏感信息如cookie等。
(2)存儲型XSS攻擊:存儲型XSS主要是由于Web應用程序對用戶輸入的過濾存在漏洞,從而導致惡意用戶將惡意代碼以正常數(shù)據(jù)信息的形式提交到Web應用程序的服務器中,當用戶訪問相對應的頁面時Web應用程序就會從服務器加載包含惡意代碼的頁面?zhèn)鬟f到訪問用戶的瀏覽器中并執(zhí)行,竊取用戶的敏感信息或進行其它惡意攻擊行為。
(3)基于DOM的XSS攻擊:與前2種攻擊方式不同的是基于DOM的XSS攻擊惡意代碼并不是直接嵌入HTML頁面中的,而是和正常的HTML頁面一起返回到客戶端,然后在客戶端由瀏覽器將惡意代碼插入到HTML頁面中并執(zhí)行攻擊。由于此類型的XSS攻擊和蠕蟲很少或目前還沒有被發(fā)現(xiàn),因此在本文中不做進一步的研究。
(4)XSS蠕蟲:根據(jù)目前所發(fā)現(xiàn)的XSS蠕蟲和對XSS蠕蟲的分析,目前存在的主要是反射性XSS蠕蟲 (如新浪XSS蠕蟲事件等)和存儲型的XSS蠕蟲 (MySpace蠕蟲事件等),XSS蠕蟲的工作原理如圖1所示,攻擊者首先利用Web應用程序的漏洞 (反射型的或存儲型的)將惡意代碼提交到服務器中并保存起來,當訪問用戶瀏覽到包含XSS蠕蟲的頁面時或點擊到包含XSS蠕蟲的鏈接時,用戶瀏覽器就會自動執(zhí)行蠕蟲負載,然后會以受害用戶的身份向Web應用程序發(fā)出復制傳播的請求,如復制相應的鏈接或用戶資料到受害者的空間或頁面中,甚至發(fā)送相應的請求等其它操作。由于蠕蟲復制傳播需要向服務器提交相應的信息和數(shù)據(jù),因此在正常情況下XSS蠕蟲都是通過POST請求來完成復制和傳播操作的,可以說提交POST請求是XSS蠕蟲復制傳播所必經的一步。
圖1 XSS蠕蟲工作原理
針對以上問題的分析,本文提出了一種結合動態(tài)污點分析和HTTP請求與響應數(shù)據(jù)包分析處理的方法,并且根據(jù)該方法設計了檢測工具WXDS(web XSS defense system),利用動態(tài)污點分析標記并跟蹤用戶的敏感信息和隱私數(shù)據(jù),防止惡意程序代碼在用戶不知情的情況下將這些信息發(fā)送到第三方,泄漏用戶隱私信息或敏感數(shù)據(jù),最終造成對用戶的損失。同時,針對提交的HTTP請求進行攔截分析,分析請求中的POST請求包,對其進行過濾判斷,如發(fā)現(xiàn)可疑的請求根據(jù)所設定的警告等級采取對于的措施:自動處理或及時向用戶發(fā)出警報,請求用戶予以處理。
動態(tài)污點分析是一種程序分析方法,目前廣泛應用于各種領域,如:攻擊檢測、程序理解、信息安全驗證等。本文所使用動態(tài)污點分析是一種基于動態(tài)信息流的污點分析方法,具體為先將特定的信息或輸入數(shù)據(jù) (見表1的信息數(shù)據(jù))定義為敏感數(shù)據(jù)并對其進行標記[9-11],同時,對在程序運行時標記數(shù)據(jù)所參與的運算進行分析處理,根據(jù)預先設定的污點分析傳遞方法對相關的計算結果與依賴關系添加污點標記,將其標記為新的污點數(shù)據(jù),于此同時,對其參與的運算亦進行動態(tài)污點分析,在有輸出時根據(jù)同源策略進行判定,在發(fā)現(xiàn)有標記污點的數(shù)據(jù)要發(fā)送到第三方時對用戶發(fā)出警報,請求用戶予以處理。
污點數(shù)據(jù)的提取依據(jù)表1中所示,確定污點數(shù)據(jù)的主要依據(jù)是它包含可能被攻擊者利用來進行惡意攻擊或獲取用戶的隱私信息 (如cookie等),列表1中所列數(shù)據(jù)主要是參考的JavaScript權威指南,如將來有其它的敏感數(shù)據(jù)源,根據(jù)本文的分析策略亦可以及時進行擴展。
當某個敏感數(shù)據(jù)參加某個算術、邏輯或賦值運算時,被賦予的變量和運算結果也會被標記為污點數(shù)據(jù),同時該方法也可以標記直接控制依賴關系,即當某項操作是否運行依賴于某個污點數(shù)據(jù)時 (如if控制語句的判斷條件是測試某一個污點數(shù)據(jù)或switch語句中的匹配問題等)。如圖2所示,第3、5行中為賦值運算,第6行是算術運算和7-15行中利用switch語句和循環(huán)實現(xiàn)將cookie的內容傳遞到字符串a中的操作,如果僅僅從數(shù)據(jù)依賴的角度看,switch語句結束后變量a是不會被標記為污點數(shù)據(jù)的。
表1 被污點標記的JavaScript屬性和方法
根據(jù)如圖3中的約束,圖2中所示的運算運行結束后,變量b、c和a均被標記為污染數(shù)據(jù),同時對它們之后所參與的其它運算繼續(xù)進行跟蹤和污點分析。
圖2 污點數(shù)據(jù)運算分析
綜上所述,當污點數(shù)據(jù)參與如圖3中所示的運算后,最終得出的結果均為污點數(shù)據(jù),并繼續(xù)對其之后參與的后續(xù)運算繼續(xù)進行跟蹤分析。
圖3 污點標記
用戶正常情況下訪問網絡的HTTP請求分析如下:在正常瀏覽網站頁面、下載資料等不需要提交用戶信息或其它數(shù)據(jù)等操作時向服務器提交GET請求;在進行登錄、驗證、上傳等需要提交用戶信息或其它數(shù)據(jù)等操作時向服務器提交POST請求。
但在以下3種情況下當用戶正常情況下瀏覽網站頁面時也會提交POST請求:
(1)某些網站為了記錄用戶的點擊數(shù)、點擊操作或豐富用戶的瀏覽體驗,會向網站服務器提交POST請求。
(2)一些瀏覽器的安裝插件為了統(tǒng)計某些信息而提交POST請求,如goole、火狐瀏覽器等都有此操作。
(3)XSS攻擊發(fā)送的POST請求,例如XSS蠕蟲的自我復制和傳播。
根據(jù)動態(tài)污點分析,在情況 (1)中由于沒有攜帶污染數(shù)據(jù),并且對用戶的正常操作沒有影響,因此在默認情況下可以放行,但是在 (2)中情況下由于提交的POST請求和用戶訪問的頁面不違反同源策略,動態(tài)污點分析不會對此予以發(fā)出警報,因此這時就需要用戶手動判別是否允許提交其對應的POST請求。
在用戶進行登錄、驗證和上傳數(shù)據(jù)等發(fā)送POST請求的情況下需要輸入一定的數(shù)據(jù)信息,例如:用戶名、密碼、標題、上傳或傳輸一些數(shù)據(jù)等,此時可以通過JavaScript判斷是否有用戶的輸入行為等操作,從而判斷此POST請求是否為用戶的意愿行為。此外,由于 (1)和 (2)中的情況雖然不存在攻擊情況但侵犯了用戶的訪問隱私,因此可根據(jù)用戶的個人意愿予以放行或阻止。
由上述可以看出基于動態(tài)污點分析的技術使得用戶的隱私信息和敏感數(shù)據(jù)不被XSS攻擊獲得,同時WXDS可以判斷出2.2中 (1)中的情況,減少對用戶使用操作的復雜度和難度,并且在防止XSS蠕蟲方面,本文采用的是直接截斷XSS蠕蟲復制傳播所必需的POST請求,而不是針對某一個或某一類蠕蟲的特定行為特征,因此此種方法具有檢測防范0-Day XSS蠕蟲的能力。同時由于WXDS具有動態(tài)跟蹤分析功能,因此對于防范未來的XSS蠕蟲可能對用戶產生危害如竊取用戶信息、欺騙用戶進行某種操作等方面具有一定的防御功能,對向未來XSS蠕蟲的防范具有良好的可擴展性。
本次實驗是在虛擬機VMware Workstation v9.0.1中進行,為了檢驗WXDS對XSS攻擊的防范效果及其準確性,本文在互聯(lián)網上收集了15種常見的XSS攻擊腳本,并且自行制作了包含XSS漏洞訪問各種敏感信息的網站來進行訪問實驗分析,同時為了測試誤報率,本文通過對實驗結果和網站代碼進行人工分析,針對這些網站的檢測率和誤報率分析結果如表2所示,分析結果顯示WXDS的誤報率是比較低的。
雖然所采用的目標網站和XSS攻擊腳本的樣本均有所不同,但所采用的實驗環(huán)境、統(tǒng)計計算方法和策略均是一般,因此,是可以對WXDS和文獻[3]中的StopXSS進行檢測率和誤報率的相關對比的。由表2可知,顯然WXDS的誤報率低于文獻[3]中設計的監(jiān)測工具StopXSS的0.32的誤報率。
表2 XSS的檢測率和誤報率
為了測試在瀏覽器中安裝WXDS是否會影響用戶瀏覽網站的體驗效果,本文以用戶比較熟悉的百度和淘寶網為例進行實驗,分別打開百度和淘寶網,記錄其打開所用的時間,采用十次測試匯總計算,實驗結果如圖4所示。由圖4可知在安裝WXDS和未安裝WXDS的情況下打開網站頁面的速度相差無幾,即在安裝WXDS的情況下并不會對用戶的正常上網的訪問速度造成重大影響。
對蠕蟲的防范,本文在自制的Web應用程序中建立了兩個用戶Jack和Mary,基本配置如圖5所示,其中Jack為攻擊者,他在自己的主頁中的“個人資料”中注入了經過修改的Samy XSS蠕蟲修改代碼并成功保存,當Mary使用安裝有WXDS擴展的瀏覽器在訪問Jack的頁面信息的個人資料欄時彈出如圖6所示的警示框。而此時Mary只是瀏覽頁面,顯然并不需要提交POST請求,因此可取消該此POST請求。
圖4 訪問百度和人人網的網速對比
圖5 實驗環(huán)境配置
通過對XSS攻擊以及由其所衍生的XSS蠕蟲的危害分析,本文提出了基于動態(tài)污點分析和HTTP請求數(shù)據(jù)包截獲分析處理相結合的XSS防范方法,實驗分析結果表明,該方法可以有效發(fā)現(xiàn)和防范XSS攻擊和XSS蠕蟲的侵犯。
但是本文所提出的方法系統(tǒng)還有一部分是基于手動的,這就要求用戶對網絡情況和HTTP請求等相關知識具有相當?shù)牧私獠拍茏龀鰷蚀_的判斷,因此,對使用用戶提高了要求。另外對未來XSS蠕蟲的發(fā)展和變異等方面還有待進一步的研究和防范??傊瑢崿F(xiàn)自動化的檢測防范是下一步所研究的工作重點,然后在此基礎上再對XSS蠕蟲的變種進行研究和防范。
[1]Wichers D.The top 10 most critical web application security risk[R].Belgium:The Open Web Application Security Project(OWASP),2010.
[2]Faghani M,Saidi H.Social networks’XSSworms[C]//International Conference on Computational science and Engieering.Vancouver,Canada:IEEE Computer Society,2009:1137-1141.
[3]WANG Xiali,ZHANG Yuqing.A behavior-based client defense scheme against XSS[J].Journal of Graduate University of Chinese Academy of Sciences,2011,28(5):668-675(in Chinese).[王夏莉,張玉清.一種基于行為的XSS客戶端防范方法[J].中國科學院研究生院學報,2011,28(5):668-675.]
[4]Vogt P.Cross site scripting(XSS)attack prevention with dynamic data tainting on the client side[D].Vienna:Technical University of Vienna,2006.
[5]ZHANG Ming,SHIYong.Research on cross-site scripting protection with constraint analysis[J].Computer Engineering and Design,2013,34(4):1192-1196(in Chinese).[章明,施勇.基于約束分析的跨站腳本防御方法研究[J].計算機工程與設計,2013,34(4):1192-1196.]
[6]CHEN Jingfeng,WANG Yiding,ZHANG Yuqing,et al.Automatic generation of attack vectors for stored-XSS[J].Journal of Graduate University of Chinese Academy of Sciences,2012,29(6):815-820(in Chinese).[陳景峰,王一丁,張玉清,等.存儲型XSS攻擊向量自動化生成技術 [J].中國科學院研究生院學報,2012,29(6):815-820.]
[7]Fogie S,Hansen R,Rager A,et al.XSS attacks:Cross site scripting exploits and defense[M].New York:SyngressMedia,2007.
[8]Sun F,Xu L,Su Z.Client-side detection of XSSworms bymonitoring payload propagation[C]//Proceeding of the 14th European Conference on Research in Computer Security.Saint-Malo,F(xiàn)rance:ACM,2009:539-554.
[9]LU Kaikui.The research and realizetion of dynamic taint analysis based security attack detection technology[D].Chengdu:University of Electronoc Science and Technology of China,2010(in Chinese).[陸開奎.基于動態(tài)污點分析的漏洞攻擊檢測技術研究與實現(xiàn)[D].成都:電子科技大學,2013.]
[10]QIN Ying.Research and implementation of behavior-based crosssite scripting attack detection technique[D].Xi'an:Xidian University,2010(in Chinese).[秦英.基于行為的跨站腳本攻擊檢測技術研究與實現(xiàn)[D].西安:西安電子科技大學,2010.]
[11]ZHOU Ling.Technology research of dynamic taint analysis based on information flow [D].Chengdu:University of Electronoc Science and Technology of China,2010(in Chinese).[周凌.基于信息流的動態(tài)污點分析技術研究[D].成都:電子科技大學,2010.]