馬 炅,黃曉芳,陶 啟,張亞文
(西南科技大學 計算機科學與技術學院,四川 綿陽 621010)
?
一種新的自學習web應用響應分析算法
馬炅,黃曉芳,陶啟,張亞文
(西南科技大學 計算機科學與技術學院,四川 綿陽621010)
摘要:在web應用自動滲透測試技術的發(fā)展中,由于在web應用響應分析的自動化與智能化方面的研究不足,現有web應用自動滲透測試中仍然需要人為經驗干預,限制了滲透測試的效率,因此,在研究了關鍵字響應分析技術與被動提取技術的基礎上提出了自學習響應分析算法,該算法利用關鍵字詞庫對響應結果進行分析,若沒有匹配成功再利用啟發(fā)式分析技術進行分析,當分析結果有效則提取響應的關鍵字加入詞庫以達到自學習的目的;實驗證明,該算法能夠對測試響應結果自動地進行分析,突破了關鍵字分析技術只能分析含有關鍵字的響應這一局限,同時,比單純被動響應提取技術具有更高的效率。
關鍵詞:web應用;響應分析;自學習
0引言
伴隨著計算機技術與互聯(lián)網技術的迅猛發(fā)展,Internet極大地豐富了人類的生活,世界各地豐富多彩的信息得以在一瞬間進行交流。Web應用已經遍布使用到各行各業(yè)中,各種各樣的服務滿足了不同人群的不同需求。同時,web應用不再是一些共有的即能夠共享的信息,大量私密的和高度敏感的信息由于網上應用的需要而保存在相關Web服務器中。目前,Web應用還在朝著更加豐富和復雜、但又更易于讓用戶操作的方向不斷地發(fā)展。在互聯(lián)網給用戶帶來過去從未有過的豐富生活的同時,web應用的安全問題[1]也愈演愈烈,己經成為世界所關注的焦點。因此對web應用的安全測試就成為了當今網絡技術一個非常重要的研究課題。很多web應用滲透測試軟件應運而生,但是,因為web應用響應分析技術自動化水平較低,限制了滲透測試軟件在自動化智能化方向的發(fā)展,所以自動化web響應分析算法的研究成為解決這一問題的關鍵。
1相關研究
目前,對web安全問題的研究多是關于其運行環(huán)境的研究,例如web應用所依賴的服務器、服務器軟件、數據庫等。對web應用程序滲透測試技術[2-8]的研究在國內外都是剛剛起步,滲透測試程序會首先向web應用發(fā)送精心構造的帶有攻擊字符串的請求,然后根據web應用的響應來分析漏洞存在與否。但是,由于這些響應信息都是由程序員設計的,這就導致了由程序來理解分析這些響應信息就會有一定的困難。這也是在文獻[3-7]中滲透測試程序的響應是由人工分析而沒有實現分析自動化的原因。
為解決這一問題Raghavan等人在文[9]中提出了基于關鍵字的響應分析算法。該算法通過匹配響應頁面中的關鍵字(如“ODBC Error”、“incorect”、“wrong”、“missing”、“invalid”、“erro”、“error”等)來判斷滲透測試是否成功,web應用是否存在漏洞。該算法的優(yōu)點是當錯誤的響應信息中存在這些關鍵字時算法耗時短,計算資源、網絡資源占用少因而具有很高的效率。缺點也非常明顯,當錯誤的響應信息中不包含這些關鍵字時,該算法無法對響應做出正確的分析判斷。可見單純的關鍵字分析算法有著很大的局限性,不能運用于實踐之中。
YaoWen Huang等人在文[8]中提出了一個簡單的被動響應提取算法(negative response extraction,NRE),下面以SQL注入為例簡單闡述該算法的思想:
1)使用SQL注入字符串構造一個對目標web應用的請求,將響應記為R1;
2)使用一個非法字符串(如長度過大的字符串)構造會產生錯誤的web應用請求,將響應記為R2;
3)使用一個合法字符串構造一個web應用請求,將響應記為R3。
假定R1響應失敗,對比R1、R2、R3三個響應的相似程度可以推斷出R1響應的意義,其可能的組合如表1所示。
表1 NRE算法組合形式
該算法可以在不需要任何附加信息(如關鍵字)的前提下分析出R1響應所代表的含義,主要功能是判定R1響應失敗的原因是因為惡意字符串被過濾還是因為web應用根本不存在注入漏洞。但是該算法的缺點也是非常明顯:
首先,假定R1響應是一個滲透測試失敗的響應,那這個R1響應成功與否又依據什么來判定呢?
其次,對于一個SQL注入字符串就需要至少發(fā)送3次web請求,效率較低,網絡延遲會對滲透測試軟件產生很大影響。
2自學習響應分析算法
在以上研究的基礎上,我們對被動響應提取算法進行了改進,并結合關鍵字響應技術提出了一種自學習響應分析算法。該算法實現了自動化響應分析,算法描述如下:
1)利用關鍵字響應分析技術來分析帶有攻擊字符串請求所引發(fā)的響應,當匹配關鍵字成功時直接得出相應的結論,分析結束。若沒有匹配成功則執(zhí)行2。
2)啟發(fā)式響應分析,主要完成兩項工作:滲透測試結果判定與關鍵字學習。下面是啟發(fā)式響應分析中用到的概念與變量的定義。
定義1字符串S,模擬的get或post請求中的參數(構造方法在章節(jié)3.2.3闡述)。
定義2攻擊請求Q1,參數為S+攻擊字符串的get或post請求。
定義3錯誤請求Q2,帶有非法參數的get或post請求。
定義4正常請求Q3,參數僅為S的get或post請求。
定義5響應R1/R2/R3,為發(fā)送攻擊請求/錯誤請求/正常請求時所產生的響應。
定義6關系R,表示R1、R2、R3三者之間的關系。
定義7記錄FailCount,記錄滲透測試中攻擊字符串測試沒有通過的個數,初始值為0。
定義8屏蔽詞,英文中的代詞、數詞、冠詞、介詞、連詞、感嘆與其他詞(am、is、are、be、being等)。
定義9關鍵字詞庫,響應匹配關鍵字的集合,每個關鍵字有一個頻度屬性與更新時間屬性。
定義10準關鍵字詞庫,測試過程中所有字詞的集合,每個字詞有一個頻度屬性與更新時間屬性。
啟發(fā)式響應分析中,滲透測試結果判斷的流程如圖1所示。
圖1滲透測試結果判斷流程圖
步驟描述如下:
1)首先,分別發(fā)送請求Q1、Q2、Q3,獲得響應R1、R2、R3。
需要注意的是,與Y.W. Huang等人提出的NRE不同,該算法需要根據攻擊字符串與R1、R2、R3的關系R共同推斷該測試是否成功。也就是說,需要攻擊字符串與關系R共同確定其對應的測試結論,因為不同的攻擊字符串針對同一個關系R會得出不同的結論。下面是3個示例是3個攻擊字符串與關系R的組合。
示例一:攻擊字符串“’”(http://xxx.com/xx.php?id=’)與關系R所對應的結論如表2。
表2 “’”與關系R對應結論
示例二:攻擊字符串“ and 1=1”(http://xxx.com/xx.php?id=X and 1=1)與關系R所對應的結論如表3所示。
表3 “ and 1=1”與關系R對應結論
示例三:攻擊字符串“ and 1=2”(http://xxx.com/xx.php?id=X and 1=2)與關系R對應的結論如表4所示。
表4 “ and 1=2”與關系R對應結論
2)然后,根據攻擊字符串與關系R查表得出對應結論。因為,這些對應的結論里面對于成功的測試也只是給出可能成功的判斷,所以只有對一個注入點構造的所有攻擊字符串請求都得出可能存在漏洞時,才可以判斷它可能存在漏洞,只要一個攻擊字符串得出的結論是不存在漏洞,則該請求就不存在漏洞。
若最終結論是可能存在漏洞,則提取R1的英文文本信息,進行關鍵字學習,其流程如圖2所示。
圖2 關鍵字學習流程圖
過濾掉R1的屏蔽詞之后存入準關鍵字詞庫,之后計算關鍵字詞庫中詞條的平均匹配頻度AVG,然后把準關鍵字詞庫中頻度超過AVG且最近更新時間大于關鍵字詞庫中最小更新時間的記錄寫入關鍵字詞庫。
3算法實現
3.1系統(tǒng)架構
web響應分析算法是為了實現web滲透測試系統(tǒng)的自動化而設計,在研究基于Java的Web互動軟件設計與實現[10]等文的基礎上設計了該系統(tǒng)的總體架構如圖3所示。
圖3 系統(tǒng)總體架構圖
其中爬蟲模塊用于爬取web應用的內容,內容分析模塊將網頁內容構造成DOM樹,將可以與web應用進行交互的get請求或post表單提交給滲透測試模塊,滲透測試模塊使用攻擊字符串構造請求發(fā)送給web應用,并將web響應提交給響應分析模塊,最后把分析結果生成報告輸出。web響應分析算法的實現是在響應分析模塊中。
3.2算法實現
3.2.1建立詞庫
為了存儲關鍵字需要建立關鍵字詞庫與準關鍵字詞庫,在數據庫中建立兩個數據庫表,分別取名為keywords與pre_keywords。這兩個表除表名不同以外,其他都相同,都具有3個屬性列,分別為name(關鍵字拼寫)、freq(關鍵字被匹配的頻度)、update(最后一次被匹配的時間)。其中,關鍵字詞庫是根據滲透測試人員的實踐經驗添加的關鍵字,并為其freq與update賦予初值;準關鍵字詞庫是所有測試收集到的準關鍵字集合。
為了過濾代詞、數詞、冠詞、介詞、連詞、感嘆與其他詞,創(chuàng)建一個屏蔽詞庫表filter_words。
3.2.2關鍵字匹配
將文本信息拆分為單詞,經過屏蔽詞庫的過濾后存儲在一個字符串數組中。然后先使用關鍵字詞庫進行匹配(字符串完全相同或字符串是關鍵字的一部分,不區(qū)分大小寫),若匹配成功將該關鍵字的頻度freq+1,若沒有匹配成功,則使用準關鍵字詞庫中頻度超過關鍵字詞庫平均頻度80%的關鍵字進行匹配,同樣,匹配成功將該關鍵字的freq+1,同時更新update。以此法匹配字符串數組中的所有單詞,只要有一個匹配成功,就可以得出“滲透測試可能成功”的結論,并將總共匹配成功的關鍵字數記為N,這個N可以在一定程度上說明結論的可信性,N值越大,結論越可信,因此可以作為報告中的一個參數。如果都沒有匹配成功則進行啟發(fā)式分析。
3.2.3啟發(fā)式分析
在啟發(fā)式響應分析中字符串S的構造方法如下:
對于get請求如http://xxx.com/xxx.asp?Id=10、http://xxx.com/xxx.php?Loginname=xxx等,將“=”后面的字符串賦值給S;對于post請求,需要根據表單的name屬性來構造S,如對于,如果匹配到name屬性中含有“email”這一特征字,則需要構造一個郵箱地址形式的S,同理,匹配到name屬性“name”、“l(fā)ogin”等則需要構造一個簡單字符串;如果我們設置的所有特征字都沒有匹配到,就使用一個簡單默認字符串。
字符串S構造完成之后,按照啟發(fā)式分析算法,依次發(fā)送請求Q1、Q2、Q3。然后調用Winmerge比較響應R1、R2、R3,得出關系R,用R與攻擊字符串查表得出測試結論。
對同一個請求,所有攻擊字符串結果判定都為“可能存在漏洞”時,才判斷該請求的注入點可能存在漏洞。若最終測試結果為“可能存在漏洞”,就將R1解析為DOM樹,抽取其主要標簽的文本信息,經屏蔽詞庫過濾后,存入準關鍵字詞庫,如果該詞已存在則freq+1并更新update。
然后計算關鍵字詞庫的平均頻度AVG,把準關鍵字詞庫中頻度超過AVG且更新時間大于關鍵字詞庫中的最小更新時間的字詞加入到關鍵字詞庫中,并刪除其在準關鍵字詞庫中的記錄。
4實驗與結論
我們把滲透測試模塊與響應分析模塊組合成一個Demo程序。為滲透測試模塊提供一系列web應用的請求,然后由分析測試模塊進行分析。
Demo演示程序界面如圖4所示。
圖4 Demo演示程序界面
為了驗證算法的可行性與正確性我們做了4個實驗,分別為:
實驗一,連續(xù)測試50次本地搭建的帶有SQL注入漏洞的web應用,即對同一請求測試50次;
實驗二,測試200個不存在SQL注入漏洞的get請求;
實驗三,測試200個存在SQL注入漏洞的get請求;
實驗四,隨機測試500個get請求。
其中get請求都是通過google語法“inurl”搜索得到,實驗三中的請求也都經過人工測試確實是含有SQL注入漏洞的。由于只是測試該算法是可行性與正確性,測試數據不是很多,關鍵字只設置了“odbc”、“incorect”、“wrong”、“missing”、“invalid”、“mistake”、“error”并將關鍵字詞庫的頻度統(tǒng)一設定為50,時間設定為測試時的系統(tǒng)時間。實驗結果如表5所示。
表5 實驗結果
四次實驗之后關鍵字頻度如圖5所示。
圖5 關鍵字頻度
實驗一是對同一測試請求的多次訓練,成功將我們設置的mysql、root加入關鍵字詞庫;實驗二的對象因沒有漏洞故沒有產生新的關鍵字;實驗三的對象是已經證明存在SQL注入的請求,找出183個請求,新增warning、webroot、usr三個關鍵字;實驗四是隨機尋找的get請求,因為存在漏洞的請求較少,沒有新增關鍵字。
經過分析可以看出,該算法可以以一個較高的正確率自動化分析web應用請求,并自學習添加關鍵字??朔藛渭冴P鍵字分析與NRE的不足,同時又兼具了二者的優(yōu)點。其不足之處在于,需要大量的測試數據來進行訓練,初始關鍵字頻度的設定對于算法運行時的正確性與效率有著較高的影響,但這一參數的設定需要在長時間實踐中確定,而且隨著程序員web開發(fā)習慣的變化應做出相應的調整,這也是我們下一步研究改進的方向。
5結束語
本文提出的自學習響應分析算法實現了對響應的自動化分析與判定,對于web應用滲透測試程序自動化的發(fā)展有著積極的意義。進一步的研究工作是改進將關鍵字從準關鍵字詞庫加入到關鍵字詞庫的算法,使得自學習響應分析算法能夠更快更準確的將關鍵字找到并加入關鍵字詞庫。
參考文獻:
[1] 張炳帥. web安全深度剖析 [M]. 北京:電子工業(yè)出版社, 2015.
[2] 于莉莉,杜蒙杉,張平. web安全性測試技術綜述[J]. 計算機應用研究,2012(11):4001-4005.
[3] 邢斌,高嶺,孫騫. 一種自動化的滲透測試系統(tǒng)的設計與實現[J]. 計算機應用研究,2010, 27(4): 1384-1387.
[4] 潘古兵,周彥暉. 基于靜態(tài)分析和動態(tài)檢測的XSS漏洞發(fā)現 [J]. 計算機科學,2012(39): 51-53.
[5] 張宗之. 基于爬蟲技術的web應用漏洞挖掘的研究[D].北京:北京郵電大學,2012.
[6] 浦石. Web安全滲透測試研究 [D].西安:西安電子科技大學, 2010.
[7] 趙麗娟. Web應用程序滲透測試方法研究 [D].長沙:中南大學, 2014.
[8] Huang Y W, Huang S K, Lin T P. Web application security assessment by fault injection and behavior monitoring[A].Proceedings of the 12th International Conference on World Wide Web,2003[C]. Budapest, Hungary,2003.
[9] Raghavan S, Garcia-Molina H. Crawling the HiddenWeb[A]. Proceedings of the 27th VLDB Conference 2001[C]. Roma,Italy,2001.
[10] 蔡小剛,何麗,周利華. 基于Java的Web互動軟件設計與實現[J].計算機測量與控制,2003:44-46.
A New Algorithm of Self-learning Web Application Response Analysis
Ma Jiong, Huang Xiaofang, Tao Qi, Zhang Yawen
(College of Computer Science & Technology, Southwest University of Science & Technology,Mianyang621010, China)
Abstract:Little research about the analysis of web applications’s response has been done . Its level of automation and intelligence is very low. And web penetration still requires human intervention which directly limit its efficiency . To solve this problem,key words analysis and negative response extraction have been studied, and with the help of the two technology a algorithm named self-learnning response analysis is proposed. At first the algorithm use key words to ananlyse the response. If it fails, heuristic analysis technology is used to work it out. The key words extracted from the response will be stored in the database which is used to keep key words. Experimental results show that the algorithm can analyse the response quickly and correctly. And it can analyse the response that key words analysis can not. At the same time, it is more efficient than negative response extraction.
Keywords:web application; response analysis; self-learning
文章編號:1671-4598(2016)02-0251-04
DOI:10.16526/j.cnki.11-4762/tp.2016.02.069
中圖分類號:TP391
文獻標識碼:A
作者簡介:馬炅(1990-),男,山東泰安人,碩士研究生,主要從事網絡安全方向的研究。
基金項目:國家自然科學基金項目(61303230);四川省科技支撐計劃項目(11ZS2010)。
收稿日期:2015-08-26;修回日期:2015-09-17。