張琦+翟健宏
摘要: 關(guān)鍵詞: 中圖分類號(hào): 文獻(xiàn)標(biāo)志碼: A文章編號(hào): 2095-2163(2017)06-0103-06
Abstract: This paper designs a tool, that is able to autodetect WAF (Web Application Firewall) rules. The tool could get the WAF rules after the user offers the website and the target parameter. The tool is divided into three modules: WAF Discovery Module, Payloads Sending Module, Rules Retrieval Module. The tool adds regular expression matching function. And it uses shortest element detected first strategy and dichotomy to improve the performance. This paper uses multithreading and alleviates the network delay problem. Meanwhile, the paper also designes the good payload databases. It could make the detection more effective and accurate. The payload databases could always be inserted with new items.
0引言
隨著IT技術(shù)的不斷發(fā)展和進(jìn)步,互聯(lián)網(wǎng)已經(jīng)走進(jìn)了千家萬戶,成為人們生活中必不可少的一部分。截至2015年12月底,國(guó)內(nèi)網(wǎng)站數(shù)量已達(dá)426.7萬個(gè)[1]。在網(wǎng)站數(shù)量不斷增長(zhǎng)的同時(shí),網(wǎng)絡(luò)安全態(tài)勢(shì)也逐漸變得十分嚴(yán)峻。根據(jù)360互聯(lián)網(wǎng)安全中心與2017年2月12日發(fā)布的《2016年中國(guó)互聯(lián)網(wǎng)安全報(bào)告》,國(guó)內(nèi)掃描出的存在漏洞的網(wǎng)站已達(dá)91.7萬個(gè),占網(wǎng)站數(shù)量的21.4%,其中存在高危漏洞的網(wǎng)站有14.0萬個(gè),占網(wǎng)站數(shù)量的3.3%。保護(hù)網(wǎng)站應(yīng)用的安全,是每一家互聯(lián)網(wǎng)企業(yè)和其他網(wǎng)站建設(shè)機(jī)構(gòu)不可推卸的首要任務(wù)與基礎(chǔ)職責(zé)。
一般的網(wǎng)絡(luò)防火墻能夠?qū)Ψ?wù)器進(jìn)行一定的防護(hù),但是卻并不擅長(zhǎng)應(yīng)用層面的安全防護(hù)。由此,網(wǎng)站應(yīng)用防火墻(WAF,Web Application Firewall),則應(yīng)運(yùn)而生。WAF的主要功能是保護(hù)Web應(yīng)用不受到惡意攻擊,并通過對(duì)網(wǎng)站的請(qǐng)求和響應(yīng)開展高效的分析和統(tǒng)計(jì),能夠?qū)W(wǎng)站攻擊事件提供及時(shí)的報(bào)警、甚至停止響應(yīng),以保護(hù)網(wǎng)站服務(wù)器的安全。
大部分的WAF通過對(duì)請(qǐng)求或者響應(yīng)內(nèi)容進(jìn)行特征匹配[2],如果在請(qǐng)求中匹配到惡意字符串或者在響應(yīng)中匹配到敏感信息,則視此次請(qǐng)求為非法請(qǐng)求,可以停止響應(yīng),實(shí)現(xiàn)服務(wù)器的保護(hù)功能。優(yōu)秀的WAF產(chǎn)品能夠設(shè)計(jì)出良好的特征庫,檢測(cè)出大部分的惡意攻擊;同時(shí)也能夠擁有較低的誤報(bào)率,保證網(wǎng)站的正常功能需求。
因此,本文研究設(shè)計(jì)了一款WAF規(guī)則自動(dòng)發(fā)現(xiàn)的腳本應(yīng)用,能夠探測(cè)出網(wǎng)站配置的WAF規(guī)則以及沒有配置的規(guī)則,從而可以有針對(duì)性地優(yōu)化網(wǎng)站W(wǎng)AF的配置,提升自我安全防護(hù)。
1WAF規(guī)則的自動(dòng)探測(cè)設(shè)計(jì)
1.1WAF的表現(xiàn)形式
既然要探測(cè)WAF規(guī)則配置,就需要知道WAF的一般響應(yīng)形式。研究中人工收集了54個(gè)網(wǎng)站的WAF響應(yīng),大致可分為4類,對(duì)其內(nèi)容闡釋如下:
1)HTTP響應(yīng)碼不是200(19/54)。正常的HTTP請(qǐng)求響應(yīng)碼是200[3],通常引發(fā)了WAF禁止的請(qǐng)求響應(yīng)碼就會(huì)變成403 Forbidden、302跳轉(zhuǎn)、501服務(wù)器錯(cuò)誤、404 Not Found等等異常響應(yīng)碼,實(shí)例之一即如圖1所示。這在本次樣本中共占19個(gè)。
2)明顯的WAF提示(16/54)。 除了一些異常響應(yīng)碼,還會(huì)有很多網(wǎng)站會(huì)展現(xiàn)與正常響應(yīng)截然不同的響應(yīng)內(nèi)容,是比較明顯的WAF提示,示意則如圖2所示。這在本次樣本中共占16個(gè)。
3)停止響應(yīng)(14/54)。很多網(wǎng)站在認(rèn)為遭遇了攻擊時(shí)就會(huì)直接停止攻擊者的響應(yīng),以保護(hù)自身網(wǎng)站的安全,具體可如圖3所示。這樣的網(wǎng)站在本次樣本中共占14個(gè)。
4)自定義響應(yīng)(5/54)。還有少數(shù)網(wǎng)站也會(huì)給出一定的提示,或者給出一定的響應(yīng)特征表示此請(qǐng)求已被WAF禁止,但是響應(yīng)特征不明顯,因而很難提取。這樣的網(wǎng)站在本次樣本中共占5個(gè)。
綜合以上研究論述后,可得分析結(jié)論如下:
1)網(wǎng)站和網(wǎng)站之間的WAF響應(yīng)相對(duì)獨(dú)立,沒有確定的WAF特征等,所以需要對(duì)每一個(gè)網(wǎng)站單獨(dú)處理。
2)前3種WAF響應(yīng)通過相似度匹配可以較好地分離出來,準(zhǔn)確率較高,且在本次WAF樣本中占據(jù)了很大比例。
3)對(duì)于自定義WAF響應(yīng),表現(xiàn)形式并不突出,分離難度較高,這樣的響應(yīng)需要通過人工輸入正則匹配特征的方式來處理。
1.2整體架構(gòu)
本文設(shè)計(jì)的WAF規(guī)則自動(dòng)探測(cè)工具并不僅僅局限于狹義的WAF產(chǎn)品,也可以是代碼層級(jí)的網(wǎng)站防護(hù)。通過輸入一個(gè)url和目標(biāo)參數(shù),利用工具將可自動(dòng)探測(cè)目標(biāo)網(wǎng)址WAF的規(guī)則配置。
由圖4可知,輸入U(xiǎn)RL參數(shù)以及PARAM參數(shù)即可運(yùn)行工具,同時(shí)也有一些其他的輸入。其中,-h參數(shù)顯示幫助信息;-d參數(shù)表示使用POST方法進(jìn)行探測(cè);-cookie參數(shù)可以定制發(fā)送的cookie;-header參數(shù)可以定制請(qǐng)求頭;-test參數(shù)涉及的是測(cè)試使用;-t參數(shù)可以配置程序使用的線程數(shù);-r參數(shù)可以配置響應(yīng)結(jié)果的正則匹配。endprint
整個(gè)工具分為3個(gè)模塊:網(wǎng)站過濾檢測(cè)模塊、攻擊向量生成模塊、過濾規(guī)則生成模塊。程序運(yùn)行流程則如圖5所示。
參照?qǐng)D5,可得程序運(yùn)行的步驟推演論述如下:
1)解析用戶輸入。
2)發(fā)送兩次原始請(qǐng)求,以確定平均響應(yīng)時(shí)間以及相同請(qǐng)求的響應(yīng)相似度,作為最高相似度。
3)按照幾種不同類型的參數(shù)發(fā)送請(qǐng)求,得到響應(yīng)結(jié)果,并對(duì)響應(yīng)結(jié)果計(jì)算相似度,根據(jù)相似度對(duì)響應(yīng)結(jié)果進(jìn)行分類。
4)若僅有一個(gè)類別,則未探測(cè)到WAF的存在,程序退出;若有多種類別,則繼續(xù)進(jìn)行下一步。
5)對(duì)不同種類的惡意參數(shù)進(jìn)行大量的嘗試,并把響應(yīng)結(jié)果歸類。
6)根據(jù)歸類情況整理得到WAF禁止的字符串列表。
7)輸出WAF禁止的字符串列表,即為WAF規(guī)則,程序結(jié)束。
在程序運(yùn)行過程中,第1步屬于前期準(zhǔn)備階段;第2~4步屬于網(wǎng)站過濾檢測(cè)模塊;第5步屬于攻擊向量生成模塊;第6~7步屬于過濾規(guī)則生成模塊。下面將詳細(xì)介紹研究中各重點(diǎn)模塊的設(shè)計(jì)方法。
由圖6可見,響應(yīng)相似度的計(jì)算流程可對(duì)應(yīng)表述為:
響應(yīng)的相似度首先根據(jù)是否有響應(yīng)來計(jì)算,如果兩個(gè)響應(yīng)均沒有響應(yīng)或停止響應(yīng),則相似度為1;如果兩個(gè)響應(yīng)中一個(gè)有正常響應(yīng)、另一個(gè)沒有,則相似度為0;如果兩個(gè)響應(yīng)中均有正常響應(yīng),則繼續(xù)查看兩個(gè)響應(yīng)的響應(yīng)碼,如果兩個(gè)響應(yīng)的響應(yīng)碼均不為200且相同,則相似度為1;如果兩個(gè)響應(yīng)的響應(yīng)碼不同,則相似度為0;如果兩個(gè)響應(yīng)的響應(yīng)碼均為200,則計(jì)算響應(yīng)內(nèi)容的字符串相似度,作為響應(yīng)的相似度。
計(jì)算字符串相似度的時(shí)候調(diào)用的是python的difflib庫,當(dāng)字符串較長(zhǎng)時(shí),計(jì)算時(shí)間也趨于可觀,比如30 k數(shù)據(jù)的內(nèi)容在研究選用的PC機(jī)上需要計(jì)算3 min左右。另外,部分網(wǎng)站的響應(yīng)特征不明顯,雖然相似度較高,卻并非同一類型,比如圖7、圖8的網(wǎng)站。
可以看出,整個(gè)網(wǎng)頁觸發(fā)WAF規(guī)則的響應(yīng)結(jié)果與正常響應(yīng)結(jié)果僅僅是一句話的差別,因而在分類這兩種請(qǐng)求的時(shí)候帶來的困難也越發(fā)突顯。
為了解決上述兩個(gè)問題,工具增加了正則匹配的功能。在輸入中輸入-r參數(shù),輸入一個(gè)正則表達(dá)式,在計(jì)算字符串相似度的時(shí)候,首先會(huì)對(duì)字符串調(diào)用正則匹配,將匹配出來的結(jié)果再計(jì)算字符串相似度。如此,臻至完美地解決了上述問題。對(duì)其研究釋義可得內(nèi)容為:
首先,當(dāng)響應(yīng)結(jié)果內(nèi)容數(shù)據(jù)量較大時(shí),通過人工選擇關(guān)鍵部分進(jìn)行正則匹配,可以優(yōu)勢(shì)提升計(jì)算效率,不再被無效的字符串相似度計(jì)算時(shí)間而困擾;另外也可以通過人工選擇關(guān)鍵部分,將有效部分篩選出來,方便機(jī)器計(jì)算相似度并歸類,不再為海量數(shù)據(jù)中找不到關(guān)鍵點(diǎn)而困擾。
得到相似度之后,通過相似度大小的比較,得到兩個(gè)請(qǐng)求是否為同一類。工具設(shè)置了全局變量ACCEPTABLE_DIFF_RATIO,為0.05,如果兩個(gè)響應(yīng)的相似度差別小于0.05,則視為同類請(qǐng)求;否則不為一類。研究可得,相似度差別的數(shù)學(xué)公式為:相似度差別=STANDARD_RATIO – SIMILARITY[i][j],(1)其中,STANDARD_RATIO是在發(fā)送原始請(qǐng)求時(shí)確定的最高相似度,SIMILARITY[i][j]為第i個(gè)請(qǐng)求與第j個(gè)請(qǐng)求的相似度值。
將五種請(qǐng)求歸類后,同一類別的請(qǐng)求只留一個(gè)響應(yīng)結(jié)果保存在RESPONSES全局變量中。最后RESPONSES中保留了基礎(chǔ)類別響應(yīng)的標(biāo)準(zhǔn)。如果只有一種類別,說明該網(wǎng)站沒有探測(cè)到不同類型的響應(yīng),即沒有探測(cè)到WAF響應(yīng),輸出“Didnt find WAF Product”,程序停止。如果有多種類別,再繼續(xù)運(yùn)行程序進(jìn)入下一個(gè)模塊—攻擊向量生成模塊。
1.4攻擊向量生成模塊
攻擊向量生成模塊是本工具的關(guān)鍵模塊,需要設(shè)計(jì)出良好的攻擊向量,對(duì)目標(biāo)網(wǎng)站進(jìn)行大量的惡意請(qǐng)求嘗試,才能夠比較完整地觸發(fā)WAF響應(yīng),從而得到WAF規(guī)則。研究攻擊向量的時(shí)候可以通過兩種角度去設(shè)計(jì)實(shí)現(xiàn)[4],即攻擊者的角度和防御者的角度。所謂從攻擊者的角度是指在滲透測(cè)試的過程中可能會(huì)用到部分的惡意字符串以及攻擊向量[3],包括一些關(guān)鍵的滲透步驟探測(cè);從防御者的角度是指無論攻擊者使用什么手段,一些關(guān)鍵的系統(tǒng)功能函數(shù)以及關(guān)鍵字是禁止使用的。這兩種角度雖然立足于不同方向,但是卻有共同的部分,那就是滲透測(cè)試的手段。
為此,根據(jù)如上原則,設(shè)計(jì)了兩個(gè)攻擊向量集合,分別各自保存在special.xml和payload.xml文件中,之所以保存在xml文件中是為了程序能夠方便讀取,同時(shí)還可以不斷地?cái)U(kuò)充攻擊向量集合,使集合更加完備。其中,special.xml中是惡意單個(gè)字符集合,使用url編碼過的集合,在使用時(shí)需要先對(duì)其進(jìn)行url解碼再使用。而payload.xml是其他攻擊手段惡意關(guān)鍵字集合,包含的攻擊類型有COMMON、SQL、XSS、LFI和PHP。每一種攻擊類型包含不同的攻擊句子,句子中拆分出單個(gè)關(guān)鍵字,在一個(gè)攻擊句子中關(guān)鍵字類型相近且可以相互組合,比如SQL注入攻擊中語句為:
-- or union select if as between from where group by having limit into outfile procedure
對(duì)應(yīng)內(nèi)容中,關(guān)鍵字拆分為--、or、union、select、if、as、between、from、where、group、by、having、limit、into、outfile、procedure,針對(duì)這個(gè)攻擊level設(shè)計(jì)指數(shù)bound等于3,意思是在這個(gè)句子中最高的關(guān)鍵字組合數(shù)為3,表示可能由三個(gè)關(guān)鍵字才能觸發(fā)WAF響應(yīng),比如select from where就是很多WAF規(guī)則中的組合。優(yōu)化合理地設(shè)計(jì)bound指數(shù),可以對(duì)WAF規(guī)則進(jìn)行高效探測(cè),bound設(shè)計(jì)得過高,雖然檢測(cè)結(jié)果將更加精準(zhǔn),但是也會(huì)導(dǎo)致請(qǐng)求數(shù)目劇增,影響檢測(cè)效率;bound設(shè)計(jì)得過低,則檢測(cè)結(jié)果不準(zhǔn)確,無法找到真正觸發(fā)WAF的關(guān)鍵字組合。endprint
在攻擊向量的設(shè)計(jì)過程后,就可以通過最小元素優(yōu)先檢測(cè)法對(duì)目標(biāo)網(wǎng)址的WAF規(guī)則進(jìn)行探測(cè)了。遍歷每個(gè)攻擊類型的所有l(wèi)evel,針對(duì)每個(gè)level首先發(fā)送整個(gè)句子作為參數(shù),如果得到的響應(yīng)結(jié)果類型與原始請(qǐng)求并不相同,則視為其中存在WAF規(guī)則禁止的字符串;再組合關(guān)鍵字進(jìn)行探測(cè)。因?yàn)橐粋€(gè)level的句子中可能存在不同的WAF規(guī)則組合,比如上述SQL注入攻擊語句可能同時(shí)存在select from以及union select兩種組合,因此要盡可能地對(duì)每一種關(guān)鍵字組合都加以嘗試才能夠確定每一種WAF規(guī)則;但是如果全排列所有關(guān)鍵字請(qǐng)求,數(shù)量又太大,因此要按照bound參數(shù)進(jìn)行組合。從一個(gè)關(guān)鍵字組合到兩個(gè)關(guān)鍵字組合,一直到bound數(shù)目的關(guān)鍵字組合停止,這個(gè)順序稱之為最小元素優(yōu)先檢測(cè)法。因?yàn)槿绻冗M(jìn)行少數(shù)關(guān)鍵字組合且檢測(cè)成功,可以將這部分關(guān)鍵字剪枝,從而減少請(qǐng)求數(shù)。比如檢測(cè)到select關(guān)鍵字被WAF禁止,則將無需再檢測(cè)select from以及union select組合。
然而探測(cè)出的關(guān)鍵字未必是最精確的WAF規(guī)則配置,比如ord()、floor()關(guān)鍵字,可能其中真正有效部分是or。但是在一個(gè)最小元素關(guān)鍵字中,可以基本認(rèn)為其中只包含一個(gè)WAF規(guī)則,因?yàn)樵谠O(shè)計(jì)關(guān)鍵字的時(shí)候就是根據(jù)經(jīng)驗(yàn)按照一個(gè)WAF規(guī)則來操作處理的,故而仍然需要對(duì)關(guān)鍵字進(jìn)行更為精確的檢測(cè),在這里研究使用了二分法[5]。
二分法中,研究給定一個(gè)字符串A,并找出其中的WAF規(guī)則,且WAF規(guī)則可能不是連續(xù)的字符串,所以需要逐個(gè)探測(cè)字符串中的有效字符。算法不斷地確定有效字符中最右字符來運(yùn)行,如圖9所示,先對(duì)目標(biāo)字符串A二分為A1、A2,檢測(cè)A1是否會(huì)被WAF禁止:如果成功,則證明最右字符在A1中;如果失敗,則證明最右字符在A2中;對(duì)相應(yīng)部分字符串再次二分,在新產(chǎn)生的左部要與其左面的字符串A中的其他部分結(jié)合進(jìn)行探測(cè),比如A2分為A21和A22,A21需要結(jié)合A1為A1A21進(jìn)行探測(cè):如果成功,則最右字符在A21中;如果失敗,則最右字符在A22中;以此類推,直至精確到一個(gè)字符。然后將這個(gè)字符加入到結(jié)果集中,再遞歸探測(cè)其左面部分中的最右字符,請(qǐng)求時(shí)將結(jié)果集中的字符銜接到最右面即可。
該算法的復(fù)雜度為nlogn,n為關(guān)鍵字長(zhǎng)度。同時(shí)還有另一種可能需要用到二分法,當(dāng)句子遭到了WAF禁止后,說明句子中有部分字符串是在WAF規(guī)則中,然而若關(guān)鍵字設(shè)計(jì)不當(dāng)或者bound值過低,可能發(fā)生所有關(guān)鍵字組合都不會(huì)被WAF禁止的情況,這時(shí)就可以使用二分法直接探測(cè)句子中的有效部分,在其中精確地找到一種WAF規(guī)則即可。
一般情況下,工具需要發(fā)送幾千個(gè)請(qǐng)求。平均來說,網(wǎng)站的響應(yīng)時(shí)間大約在1~2 s左右,然而也可能會(huì)存在響應(yīng)較慢的網(wǎng)站,響應(yīng)時(shí)間在4 s以上;這樣計(jì)算,平均運(yùn)行一次程序需要1 h,如果響應(yīng)在4 s以上,更會(huì)使運(yùn)行時(shí)間達(dá)到數(shù)小時(shí)之久,效率極低。因此,這里采用了多線程技術(shù),極具實(shí)效地提升檢測(cè)效率[6]。
由于按照流程,需要先檢測(cè)句子,若句子被WAF禁止再組合關(guān)鍵字去請(qǐng)求,若組合關(guān)鍵字被WAF禁止再用二分法精確查找WAF規(guī)則,所以不同網(wǎng)站的請(qǐng)求內(nèi)容并不完全相同,需要根據(jù)情況智能判斷。因此本工具在組合關(guān)鍵字處加入了多線程處理,每次得到一個(gè)組合關(guān)鍵字列表后,由各個(gè)線程分別到列表中逐個(gè)提取關(guān)鍵字進(jìn)行查詢,所有線程共享一個(gè)偏移變量tmp_share_offset,每次根據(jù)變量值取關(guān)鍵字查詢并將偏移增加1,運(yùn)行了一個(gè)關(guān)鍵字查詢后將調(diào)用偏移變量再次讀取,直至偏移大于列表長(zhǎng)度線程退出。
多線程很容易發(fā)生的就是競(jìng)爭(zhēng)問題,如果線程A和線程B同時(shí)讀取tmp_share_offset,或者線程A讀取之后還未將tmp_share_offset增加便被線程B讀取了,導(dǎo)致大量線程讀取相同的關(guān)鍵字,還有可能造成關(guān)鍵字的遺漏,所以研究中即引用了互斥鎖技術(shù)[7]。每當(dāng)讀取或修改共享變量的時(shí)候就將變量鎖住,禁止其他線程讀取使用,其他線程若需要使用共享變量只能選擇等待,直到共享變量使用完畢、且互斥鎖釋放后才可以使用,如此,便真正地解決了競(jìng)爭(zhēng)問題。
綜上論述可知,攻擊向量生成模塊即是本次研究的目標(biāo)關(guān)鍵模塊,其中用到了滲透技術(shù)、最小元素優(yōu)先檢測(cè)法、二分法、多線程、互斥鎖等多種核心技術(shù)思想。
1.5過濾規(guī)則生成模塊
攻擊向量檢測(cè)完畢后,會(huì)將結(jié)果匯總至動(dòng)態(tài)列表ALL_BANNED_EFFECTIVE_VECTOR中,再將列表中的所有WAF規(guī)則輸出到文件中。研究至此,程序的主體便全面結(jié)束。
1.6SQLMAP的使用
目前針對(duì)WAF的研究并未充分展開,工具也較有限。本文在項(xiàng)目確立之前即研究發(fā)現(xiàn)了著名的滲透測(cè)試軟件SQLMAP也有WAF探測(cè)模塊[8],而且也是WAF研究中可堪稱效果優(yōu)良的一款工具。然而,SQLMAP是要找出WAF所對(duì)應(yīng)的產(chǎn)品名稱,找到的方法是根據(jù)WAF響應(yīng)特征和預(yù)備WAF產(chǎn)品知識(shí)庫進(jìn)行匹配得知,不過,由于不能夠探測(cè)出代碼級(jí)的WAF或是自定義WAF,卻只能找出生產(chǎn)WAF的廠商,因而相對(duì)而言其探測(cè)能力仍有所欠缺。
本文并沒有深入辨識(shí)及確認(rèn)WAF廠商,注重的是對(duì)WAF規(guī)則的探測(cè)發(fā)現(xiàn)研究。但是關(guān)于同一廠商的WAF產(chǎn)品規(guī)則是否會(huì)大致相同的問題討論,本工具則是將SQLMAP的WAF探測(cè)功能整合到最后一部分,得到WAF產(chǎn)品名稱后輸出到結(jié)果文件中,這樣就可以在探測(cè)大量網(wǎng)站之后得到同一廠商WAF產(chǎn)品規(guī)則配置概況,同時(shí)也豐富了本次研究針對(duì)WAF工具的實(shí)際應(yīng)用功能。
2測(cè)試結(jié)果
研究中使用本工具對(duì)10家網(wǎng)站進(jìn)行了WAF規(guī)則探測(cè),平均響應(yīng)時(shí)間為1.2 s;平均檢測(cè)網(wǎng)站規(guī)則數(shù)23個(gè),最高檢測(cè)規(guī)則68個(gè);平均請(qǐng)求數(shù)1 455個(gè),最大請(qǐng)求數(shù)3 370個(gè);平均運(yùn)行時(shí)間6 min 50 s,最長(zhǎng)運(yùn)行時(shí)間20 min 36 s。詳細(xì)數(shù)據(jù)如表1所示。endprint
由表1可知,部分網(wǎng)站的WAF規(guī)則探測(cè)效果較好,比如www.esri.com探測(cè)出68條WAF規(guī)則,但是部分網(wǎng)站的探測(cè)效果一般,例如,iask.sina.com.cn的最少,僅僅探測(cè)出九條WAF規(guī)則。從運(yùn)行時(shí)間角度來說,通常請(qǐng)求數(shù)越大運(yùn)行時(shí)間越長(zhǎng),但均沒有超過0.5 h,大部分規(guī)則較少的在5 min之內(nèi)就能夠結(jié)束運(yùn)行。
能夠看出其網(wǎng)站W(wǎng)AF規(guī)則涉及到多種攻擊手法,關(guān)鍵字包括SQL注入函數(shù)、SQL注入數(shù)據(jù)庫表名、XSS函數(shù)、XSS標(biāo)簽、PHP注入關(guān)鍵字、PHP注入函數(shù)等等。
3結(jié)束語
本文設(shè)計(jì)的WAF規(guī)則自動(dòng)探測(cè)工具可以較好地黑盒探測(cè)出任意網(wǎng)站的WAF規(guī)則,在其中做了較多的優(yōu)化和提升。使用正則匹配解決了難以從相似結(jié)果中提取不同種類響應(yīng)的問題,使用最小元素優(yōu)先檢測(cè)法和二分法提升了探測(cè)效率,使用多線程使探測(cè)速度更為可觀,也從多種攻擊手段設(shè)計(jì)了攻擊向量,同時(shí)工具仍支持繼續(xù)增加攻擊向量庫,使探測(cè)更加精準(zhǔn)高效。然而工具也存在部分不足,比如有時(shí)探測(cè)出的WAF規(guī)則較少,攻擊向量庫仍有待進(jìn)一步的拓展改進(jìn)。今后將繼續(xù)完善攻擊向量庫,同時(shí)增加攻擊向量的變種探測(cè)能力,使探測(cè)出的規(guī)則更加完整,貼近設(shè)計(jì)。
參考文獻(xiàn):
[1] 國(guó)家網(wǎng)信辦. 《中國(guó)互聯(lián)網(wǎng)站發(fā)展?fàn)顩r及其安全報(bào)告(2015)》發(fā)布[J]. 保密科學(xué)技術(shù),2015(3):73.
[2] PRANDL S, LAZARESCU M, PHAM D S. A study of Web application firewall solutions[C]//International Conference on Information Systems Security. Switzerland:Springer International Publishing, 2015: 501-510.
[3] FIELDING R, GETTYS J, MOGUL J, et al. Hypertext transfer protocol-HTTP/1.1[R]. California:HTTP Working Group,1999.
[4] RELAN K, SINGHAL V. Pentest Ninja: XSS and SQLi takeover tool[C]//Proceedings of the Second International Conference on Information and Communication Technology for Competitive Strategies. Udaipur, India: ACM, 2016: 1-2.
[5] 王海濤, 朱洪. 改進(jìn)的二分法查找[J]. 計(jì)算機(jī)工程, 2006, 32(10): 60-62,118.
[6] 駱斌, 費(fèi)翔林. 多線程技術(shù)的研究與應(yīng)用[J]. 計(jì)算機(jī)研究與發(fā)展, 2000, 37(4): 407-412.
[7] KLEIMAN S, SHAH D, SMAALDERS B. Programming with threads[M]. Calif :Sun Soft Press, 1996.
[8] Damele B, Stampar M. Sqlmap[EB/OL].[2012].http: //sqlmap. Org.endprint