本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域,尤其涉及一種基于XSS和CSRF的Web攻擊防御系統(tǒng)及其方法,具有精確度高和誤判率低的特點(diǎn)。
背景技術(shù):
互聯(lián)網(wǎng)行業(yè)的飛速發(fā)展,網(wǎng)絡(luò)與信息安全的重要性日趨增強(qiáng),大至軍事、國(guó)防、政府、銀行等關(guān)鍵行業(yè),小至一般的企業(yè)乃至個(gè)人,都面臨著網(wǎng)絡(luò)攻擊,蠕蟲(chóng)泛濫,隱私泄漏等風(fēng)險(xiǎn)。隨著企業(yè)和政府越來(lái)越多的系統(tǒng)引用WEB服務(wù),黑客針對(duì)WEB業(yè)務(wù)的攻擊,亦迅猛增長(zhǎng)。一方面,WEB技術(shù)具有便捷性,交互性以及通用性,因此被越來(lái)越多的行業(yè)采用;另一方面,針對(duì)WEB網(wǎng)絡(luò)攻擊又呈現(xiàn)手段多樣化、技術(shù)平民化、周期縮短化的態(tài)勢(shì),嚴(yán)重阻礙了該項(xiàng)技術(shù)的發(fā)展。在所有的WEB攻擊中,CSS和CSRF的技術(shù)攻擊最為嚴(yán)重,指攻擊者在網(wǎng)頁(yè)中嵌入客戶端腳本,通常是JavaScript編寫(xiě)的惡意代碼,當(dāng)用戶使用瀏覽器瀏覽被嵌入惡意代碼的網(wǎng)頁(yè)時(shí),惡意代碼將會(huì)在用戶的瀏覽器上執(zhí)行;利用這兩種攻擊,攻擊者可以進(jìn)行session挾持、數(shù)據(jù)竊取、身份冒充、釣魚(yú)等攻擊行為,甚至利用漏洞編寫(xiě)蠕蟲(chóng)病毒來(lái)感染大量訪問(wèn)機(jī)器。因此,亟需針對(duì)這兩種攻擊的防范措施出臺(tái)。本發(fā)明以此為目標(biāo),對(duì)XSS和CSRF的攻擊和防范進(jìn)行深入研究,提出Web攻擊防御系統(tǒng)及其方法。
技術(shù)實(shí)現(xiàn)要素:
跨站腳本攻擊是當(dāng)前web應(yīng)用程序安全面臨的主要威脅之一,XSS和CSRF就是這類攻擊,它們對(duì)站點(diǎn)和用戶都有巨大的危害,但是由于安全產(chǎn)品特殊應(yīng)用需求,以及各個(gè)組織的工具自身的技術(shù)與安全防護(hù)問(wèn)題,針對(duì)XSS和CSRF攻擊缺乏比較系統(tǒng)和詳細(xì)的文獻(xiàn)資料,本發(fā)明希望深入研究這類攻擊,提供一種基于XSS和CSRF的Web攻擊防御系統(tǒng)及其方法,為網(wǎng)絡(luò)安全人員提供參考。
實(shí)現(xiàn)本發(fā)明目的技術(shù)方案是:
本發(fā)明主要針對(duì)XSS和CSRF這兩種腳本注入攻擊提出防御策略,通過(guò)過(guò)濾模塊,白名單模塊和令牌攔截模塊三種方式層層過(guò)濾用戶數(shù)據(jù),實(shí)現(xiàn)兩種攻擊的高精度識(shí)別,低誤報(bào)率的攔截響應(yīng),為維護(hù)網(wǎng)絡(luò)安全奠定了理論基礎(chǔ)。
一、基于XSS和CSRF的Web攻擊防御系統(tǒng)(簡(jiǎn)稱系統(tǒng))
本系統(tǒng)包括用戶和Web服務(wù)器;
設(shè)置有攻擊防御服務(wù)器,攻擊防御服務(wù)器包括過(guò)濾模塊、白名單模塊和令牌攔截模塊;
其交互關(guān)系是:
用戶、過(guò)濾模塊、令牌攔截模塊和Web服務(wù)器依次交互;
白名單模塊模塊分別與過(guò)濾模塊和令牌攔截模塊交互。
二、基于XSS和CSRF的Web攻擊防御方法(簡(jiǎn)稱方法)
本方法的研究思路是在研究跨站腳本攻擊的應(yīng)用基礎(chǔ)之上,尤其是對(duì)XSS和CSRF這種危害較大的攻擊進(jìn)行詳細(xì)研究,采用Servlet技術(shù)靜態(tài)過(guò)濾用戶輸入,白名單模塊凈化重組HTML數(shù)據(jù),令牌動(dòng)態(tài)攔截非法HTTP數(shù)據(jù),實(shí)現(xiàn)XSS和CSRF這兩種攻擊的防御功能。
本方法包括下列步驟:
①過(guò)濾模塊采用驗(yàn)證用戶輸入合法性,特殊字符處理,cookie防盜,以及遞歸凈化敏感詞匯四種方式過(guò)濾用戶輸入;
②白名單模塊針對(duì)HTML腳本注入,使用HTML解析庫(kù)遍歷所有的節(jié)點(diǎn),獲取其中數(shù)據(jù)的原有標(biāo)簽屬性,通過(guò)白名單模塊中的標(biāo)簽重新構(gòu)建HTML元素樹(shù),從根本上防范HTML腳本注入攻擊;
③令牌攔截模塊通過(guò)Token驗(yàn)證功能對(duì)不符合要求的HTTP請(qǐng)求進(jìn)行攔截。
本發(fā)明具有下列優(yōu)點(diǎn)和積極效果:
①精確度高:本系統(tǒng)采用過(guò)濾模塊,白名單模塊,令牌攔截模塊三種方式對(duì)XSS和CSRF跨站攻擊方式進(jìn)行識(shí)別防御,三種技術(shù)相鋪相成,對(duì)跨站腳本攻擊的識(shí)別精確度高;
②誤判率低:跨站腳本攻擊的核心是攻擊者冒用用戶的身份,對(duì)Web發(fā)起請(qǐng)求,過(guò)濾模塊靜態(tài)過(guò)濾數(shù)據(jù),令牌攔截模塊動(dòng)態(tài)插入Token ,動(dòng)靜結(jié)合大大降低了識(shí)別的誤判率;
③可擴(kuò)展性:針對(duì)白名單模塊,在不斷積累和升級(jí)的過(guò)程中,會(huì)有豐富各異的HTML標(biāo)簽屬性,確認(rèn)安全后,都可以添加到白名單模塊,白名單模塊的大小直接影響防御安全指數(shù)。
附圖說(shuō)明
圖1是本系統(tǒng)的網(wǎng)絡(luò)拓?fù)鋱D;
其中:
100—用戶;
200—攻擊防御服務(wù)器,
210—過(guò)濾模塊,220—白名單模塊,230—令牌攔截模塊;
300—Web服務(wù)器。
英譯漢
1、XSS:Cross Site Scripting,跨站腳本攻擊;
2、CSRF:Cross Site Request Forgery,跨站請(qǐng)求偽造;
3、JS:JavaScript,是一種直譯式腳本語(yǔ)言,是一種動(dòng)態(tài)類型、弱類型、基于原型的語(yǔ)言,內(nèi)置支持類型;
4、HTML:超文本標(biāo)記語(yǔ)言,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例詳細(xì)說(shuō)明:
一、系統(tǒng)
1、總體
如圖1,本系統(tǒng)包括用戶100和Web服務(wù)器300;
設(shè)置有攻擊防御服務(wù)器200,攻擊防御服務(wù)器200包括過(guò)濾模塊210、白名單模塊220和令牌攔截模塊230;
其交互關(guān)系是:
用戶100、過(guò)濾模塊210、令牌攔截模塊230和Web服務(wù)器300依次交互;
白名單模塊模塊220分別與過(guò)濾模塊210和令牌攔截模塊230交互。
2、功能塊
1)用戶100
用戶100是移動(dòng)終端,包括手機(jī)和筆記本。
2)攻擊防御服務(wù)器200
其內(nèi)嵌有過(guò)濾模塊210、白名單模塊模塊220和令牌攔截模塊230。
(1)過(guò)濾模塊210
過(guò)濾模塊210是一種采用Servlet技術(shù),實(shí)現(xiàn)HTTP請(qǐng)求和響應(yīng)過(guò)濾的方法。
Servlet是在Java Servlet規(guī)范2.3中定義的,它能夠?qū)ervlet容器的請(qǐng)求和響應(yīng)對(duì)象進(jìn)行檢查和修改。Servlet過(guò)濾模塊本身并不生成請(qǐng)求和響應(yīng)對(duì)象,它只提供過(guò)濾作用。Servlet過(guò)濾模塊負(fù)責(zé)過(guò)濾的Web組件可以是Servlet,JSP或HTML文件。
過(guò)濾模塊210通過(guò)驗(yàn)證用戶輸入合法性、特殊字符處理、cookie防盜以及遞歸凈化敏感詞匯四種方式過(guò)濾用戶輸入,以起到對(duì)跨站腳本攻擊的有效防范;
過(guò)濾后的數(shù)據(jù)如果是HTML格式,則發(fā)送給白名單模塊模塊220;否則則發(fā)送給令牌攔截模塊230。
②白名單模塊模塊220
白名單模塊模塊220是一種重新整理HTML標(biāo)簽及屬性的方法;
針對(duì)HTML腳本注入,使用HTML解析庫(kù)遍歷所有的節(jié)點(diǎn),獲取其中數(shù)據(jù)的原有標(biāo)簽屬性,通過(guò)白名單模塊模塊220中的標(biāo)簽重新構(gòu)建HTML元素樹(shù),從根本上防范HTML腳本注入攻擊;
白名單模塊模塊220處理后的數(shù)據(jù)發(fā)送給令牌攔截模塊230。
③令牌攔截模塊230
令牌攔截模塊230是一種插入令牌和攔截HTTP請(qǐng)求的方法;
通過(guò)過(guò)濾模塊210或者白名單模塊模塊220處理后的數(shù)據(jù),令牌攔截模塊230在HTTP的請(qǐng)求session加入Token這個(gè)隨機(jī)值,并加入驗(yàn)證機(jī)制,如果HTTP請(qǐng)求中沒(méi)有該Token,或者該Token不正確,則令牌攔截模塊拒絕該HTTP請(qǐng)求,從而防御CSRF攻擊;成功通過(guò)令牌攔截模塊230的數(shù)據(jù)則直接進(jìn)入Web服務(wù)器300。
3)Web服務(wù)器300
Web服務(wù)器300一般指網(wǎng)站服務(wù)器,是指駐留于因特網(wǎng)上某種類型計(jì)算機(jī)的程序。
3、本系統(tǒng)的工作機(jī)理:
當(dāng)用戶100訪問(wèn)Web服務(wù)器300時(shí),數(shù)據(jù)包首先流經(jīng)過(guò)濾模塊210,它采用Servlet函數(shù)庫(kù)攔截HTTP請(qǐng)求包HttpServletRequest,通過(guò)對(duì)用戶的輸入進(jìn)行用戶數(shù)據(jù)合法性驗(yàn)證,特殊字符處理,cookie防盜,遞歸凈化敏感詞匯這四種技術(shù)手段,實(shí)現(xiàn)數(shù)據(jù)過(guò)濾,抵御80%以上的跨站腳本攻擊。過(guò)濾后的數(shù)據(jù)如果是HTML語(yǔ)句則通過(guò)白名單模塊模塊220處理,如果屬性標(biāo)簽于白名單模塊模塊220中存在,則不做處理,直接發(fā)送給令牌攔截模塊230;否則HTML語(yǔ)句將通過(guò)白名單模塊的重新整理成新的語(yǔ)句再發(fā)送給令牌攔截模塊230,它對(duì)響應(yīng)頁(yè)面腳本標(biāo)簽插入,并轉(zhuǎn)給用戶瀏覽器,當(dāng)頁(yè)面到達(dá)瀏覽器后,令牌攔截模塊230進(jìn)行Token插入操作,用戶提交表單時(shí)的頁(yè)面信息將會(huì)與Token值保持一致,如果Token值不存在,或者頁(yè)面信息與Token不一致,令牌攔截模塊230將拒絕該訪問(wèn)的請(qǐng)求,從而實(shí)現(xiàn)防御跨站腳本攻擊的功能。
二、方法
1、步驟①:
a、用戶數(shù)據(jù)合法性驗(yàn)證,在表單端對(duì)用戶輸入的文本長(zhǎng)度,數(shù)據(jù)類型,格式進(jìn)行嚴(yán)格限制,例如輸入手機(jī)號(hào)碼的文本框只允許11位純數(shù)字,郵箱名文本框郵箱的格式要正確;
b、特殊字符處理,XSS的核心都是利用了腳本注入,不信賴用戶輸入,對(duì)特殊字符如”<”,”>”,”;”,”’”轉(zhuǎn)義,就可以從根本上防止這一問(wèn)題;
c、cookie防盜,為cookie加上HttpOnly標(biāo)記,被標(biāo)記上的cookie是不允許任何腳本讀取或修改的,這樣即使Web應(yīng)用產(chǎn)生了XSS漏洞,cookie信息也能得到較好的保護(hù),達(dá)到減輕損失的目的;
d、遞歸凈化敏感詞匯,在變量中構(gòu)造腳本代碼,輸入中帶入了<scr<script>ipt></scr<script>ipt>,只有通過(guò)遞歸查找script才能發(fā)現(xiàn)此類攻擊。
2、步驟②:
a、針對(duì)HTML語(yǔ)句輸入,采用HTML解析庫(kù)遍歷節(jié)點(diǎn);
b、標(biāo)簽在白名單模塊中的語(yǔ)句,不做任何處理;
c、標(biāo)簽不在白名單模塊中的語(yǔ)句,通過(guò)白名單模塊重新構(gòu)建HTML語(yǔ)句。
3、步驟③:
a、用戶登錄Web服務(wù)器,經(jīng)過(guò)令牌攔截模塊獲取的HTTP請(qǐng)求數(shù)據(jù);
b、對(duì)響應(yīng)頁(yè)面腳本標(biāo)簽插入,并轉(zhuǎn)給用戶瀏覽器,當(dāng)頁(yè)面到達(dá)瀏覽器后,令牌攔截模塊采用跨瀏覽器的JavaScript庫(kù)jQuery進(jìn)行Token插入操作;
c、用戶提交表單時(shí)的頁(yè)面信息將會(huì)與Token值保持一致,并且在提交之前,令牌攔截模塊會(huì)對(duì)HTTP請(qǐng)求進(jìn)行攔截查看,如果Token值不存在,或者頁(yè)面信息與Token不一致,攔截器將拒絕該訪問(wèn)的請(qǐng)求。
4、過(guò)濾模塊210的工作流程包括下列步驟:
過(guò)濾模塊210負(fù)責(zé)過(guò)濾的Web組件可以是Servlet,JSP或HTML文件。Servlet的原理:在HttpServletRequest到達(dá)Servlet之前,攔截客戶的HttpServletRequest;根據(jù)需要檢查HttpServletRequest,也可以修改HttpServletRequest 頭和數(shù)據(jù)。在HttpServletResponse 到達(dá)客戶端之前,攔截HttpServletResponse。根據(jù)需要檢查HttpServletResponse,可以修改HttpServletResponse頭和數(shù)據(jù);
a、用戶數(shù)據(jù)合法性驗(yàn)證,在表單端對(duì)用戶輸入的文本長(zhǎng)度,數(shù)據(jù)類型,格式進(jìn)行嚴(yán)格限制,例如輸入手機(jī)號(hào)碼的文本框只允許11位純數(shù)字,郵箱名文本框郵箱的格式要正確;
b、特殊字符處理,對(duì)特殊字符如”<”,”>”,”;”,”’”轉(zhuǎn)義,這一個(gè)層面做好,至少可以堵住超過(guò)一半的XSS 攻擊。XSS的核心都是利用了腳本注入,因此我們解決辦法其實(shí)很簡(jiǎn)單,不信賴用戶輸入,對(duì)特殊字符如”<”,”>”轉(zhuǎn)義,就可以從根本上防止這一問(wèn)題;
c、cookie防盜,為cookie加上HttpOnly標(biāo)記。HTTP是一個(gè)無(wú)狀態(tài)維持的協(xié)議,但有些場(chǎng)景下我們需要維護(hù)狀態(tài)信息,cookie和session則是用來(lái)解決狀態(tài)維護(hù)問(wèn)題,當(dāng)用戶首次登入時(shí),服務(wù)器為該用戶創(chuàng)建一個(gè) session ID,同時(shí)向游覽器傳送一個(gè) cookie,cookie保存會(huì)話連接中用到的數(shù)據(jù),session ID作為會(huì)話標(biāo)識(shí),游覽器后續(xù)的請(qǐng)求均基于該session ID,攻擊者獲得session得到用戶的執(zhí)行權(quán)限。竊取cookie一般都會(huì)依賴JavaScript讀取 cookie信息,而HttpOnly標(biāo)記則會(huì)告訴瀏覽器,被標(biāo)記上的cookie是不允許任何腳本讀取或修改的,這樣即使Web應(yīng)用產(chǎn)生了XSS漏洞,cookie信息也能得到較好的保護(hù),達(dá)到減輕損失的目的;
d、遞歸凈化敏感詞匯,在變量中構(gòu)造腳本代碼,輸入中帶入了<scr<script>ipt></scr<script>ipt>,只有通過(guò)遞歸查找script才能發(fā)現(xiàn)此類攻擊;
5、白名單模塊模塊220的工作流程包括下列步驟:
白名單模塊模塊220控制允許的HTML標(biāo)簽及各標(biāo)簽的屬性,并通過(guò)自定義的函數(shù)對(duì)任意標(biāo)簽及其屬性進(jìn)行處理。一般提供給用戶使用的富文本編輯器,都是一些比較常用的功能,比如視頻,圖片(表情),文字(加粗,加斜杠,字號(hào),顏色,分割符號(hào),字體),存儲(chǔ)常用功能的標(biāo)簽于白名單模塊中。在處理用戶輸入的HTML語(yǔ)句時(shí),使用HTML解析庫(kù)遍歷每個(gè)節(jié)點(diǎn),獲取其中的標(biāo)簽屬性,如果屬性在白名單模塊中存在,則標(biāo)簽內(nèi)容不變,不做處理;如果標(biāo)簽屬性不在白名單模塊中,則獲取其中數(shù)據(jù)原有的標(biāo)簽屬性,重新構(gòu)建 HTML 元素樹(shù),在構(gòu)建過(guò)程中,所有的標(biāo)簽屬性只從白名單模塊中提取,標(biāo)簽內(nèi)容保持不變;
a、針對(duì)HTML語(yǔ)句輸入,采用HTML解析庫(kù)遍歷節(jié)點(diǎn);
b、標(biāo)簽在白名單模塊中的語(yǔ)句,不做任何處理;
c、標(biāo)簽不在白名單模塊中的語(yǔ)句,通過(guò)白名單模塊重新構(gòu)建HTML語(yǔ)句。
6、令牌攔截模塊230的工作流程包括下列步驟:
CSRF攻擊之所以能夠成功,是因?yàn)楣粽呖梢詡卧煊脩舻恼?qǐng)求,該請(qǐng)求中所有的用戶驗(yàn)證信息都存在于cookie中,因此攻擊者可以在不知道這些驗(yàn)證信息的情況下直接利用用戶自己的cookie來(lái)通過(guò)安全驗(yàn)證。由此可知,抵御CSRF攻擊的關(guān)鍵在于:在請(qǐng)求中放入攻擊者所不能偽造的信息,并且該信息不存在于cookie之中。鑒于此,該系統(tǒng)中在HTTP的請(qǐng)求session加入令牌Token這個(gè)隨機(jī)值,服務(wù)器端設(shè)置攔截器進(jìn)行驗(yàn)證,如果HTTP請(qǐng)求中沒(méi)有該值,或者該值不正確,則服務(wù)器拒絕該請(qǐng)求,從而防御CSRF攻擊;令牌攔截模塊的設(shè)計(jì)原理是通過(guò)對(duì)于客戶端與服務(wù)器的請(qǐng)求進(jìn)行攔截,并對(duì)信息作出相應(yīng)的響應(yīng)處理;
a、用戶登錄Web服務(wù)器,經(jīng)過(guò)令牌攔截模塊獲取的HTTP請(qǐng)求數(shù)據(jù);
b、對(duì)響應(yīng)頁(yè)面腳本標(biāo)簽插入,并轉(zhuǎn)給用戶瀏覽器,當(dāng)頁(yè)面到達(dá)瀏覽器后,令牌攔截模塊采用跨瀏覽器的JavaScript庫(kù)jQuery進(jìn)行Token插入操作;
c、用戶提交表單時(shí)的頁(yè)面信息將會(huì)與Token值保持一致,并且在提交之前,令牌攔截模塊會(huì)對(duì)HTTP請(qǐng)求進(jìn)行攔截查看,如果Token值不存在,或者頁(yè)面信息與Token不一致,攔截器將拒絕該訪問(wèn)的請(qǐng)求。
三、應(yīng)用
跨站腳本攻擊是目前最流行的網(wǎng)絡(luò)攻擊方式之一,同時(shí),它像釣魚(yú)攻擊一樣針對(duì)普通用戶,而且危害性更大。該專利提出的防御系統(tǒng)是以代理的形式為Web應(yīng)用提供服務(wù),這對(duì)防御系統(tǒng)來(lái)說(shuō)是一個(gè)很大的改進(jìn)。該系統(tǒng)可以應(yīng)用于政府、運(yùn)營(yíng)商、金融、能源等企事業(yè)單位的官方網(wǎng)站,協(xié)助用戶降低XSS和CSRF的Web應(yīng)用安全風(fēng)險(xiǎn),Web服務(wù)器和系統(tǒng)對(duì)接后,會(huì)實(shí)時(shí)將告警日志信息上傳用于維護(hù)和更新白名單模塊,總結(jié)出Web攻擊特征和防護(hù)規(guī)則優(yōu)化方案,在取得用戶授權(quán)的情況下,協(xié)助用戶快速調(diào)整設(shè)備的安全防護(hù)策略,精確攔截Web攻擊。