• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      WAF規(guī)則的自動探測與發(fā)現(xiàn)技術研究

      2018-01-15 10:00張琦翟健宏
      智能計算機與應用 2017年6期
      關鍵詞:字符串二分法關鍵字

      張琦+翟健宏

      摘要: 關鍵詞: 中圖分類號: 文獻標志碼: A文章編號: 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技術的不斷發(fā)展和進步,互聯(lián)網(wǎng)已經走進了千家萬戶,成為人們生活中必不可少的一部分。截至2015年12月底,國內網(wǎng)站數(shù)量已達426.7萬個[1]。在網(wǎng)站數(shù)量不斷增長的同時,網(wǎng)絡安全態(tài)勢也逐漸變得十分嚴峻。根據(jù)360互聯(lián)網(wǎng)安全中心與2017年2月12日發(fā)布的《2016年中國互聯(lián)網(wǎng)安全報告》,國內掃描出的存在漏洞的網(wǎng)站已達91.7萬個,占網(wǎng)站數(shù)量的21.4%,其中存在高危漏洞的網(wǎng)站有14.0萬個,占網(wǎng)站數(shù)量的3.3%。保護網(wǎng)站應用的安全,是每一家互聯(lián)網(wǎng)企業(yè)和其他網(wǎng)站建設機構不可推卸的首要任務與基礎職責。

      一般的網(wǎng)絡防火墻能夠對服務器進行一定的防護,但是卻并不擅長應用層面的安全防護。由此,網(wǎng)站應用防火墻(WAF,Web Application Firewall),則應運而生。WAF的主要功能是保護Web應用不受到惡意攻擊,并通過對網(wǎng)站的請求和響應開展高效的分析和統(tǒng)計,能夠對網(wǎng)站攻擊事件提供及時的報警、甚至停止響應,以保護網(wǎng)站服務器的安全。

      大部分的WAF通過對請求或者響應內容進行特征匹配[2],如果在請求中匹配到惡意字符串或者在響應中匹配到敏感信息,則視此次請求為非法請求,可以停止響應,實現(xiàn)服務器的保護功能。優(yōu)秀的WAF產品能夠設計出良好的特征庫,檢測出大部分的惡意攻擊;同時也能夠擁有較低的誤報率,保證網(wǎng)站的正常功能需求。

      因此,本文研究設計了一款WAF規(guī)則自動發(fā)現(xiàn)的腳本應用,能夠探測出網(wǎng)站配置的WAF規(guī)則以及沒有配置的規(guī)則,從而可以有針對性地優(yōu)化網(wǎng)站W(wǎng)AF的配置,提升自我安全防護。

      1WAF規(guī)則的自動探測設計

      1.1WAF的表現(xiàn)形式

      既然要探測WAF規(guī)則配置,就需要知道WAF的一般響應形式。研究中人工收集了54個網(wǎng)站的WAF響應,大致可分為4類,對其內容闡釋如下:

      1)HTTP響應碼不是200(19/54)。正常的HTTP請求響應碼是200[3],通常引發(fā)了WAF禁止的請求響應碼就會變成403 Forbidden、302跳轉、501服務器錯誤、404 Not Found等等異常響應碼,實例之一即如圖1所示。這在本次樣本中共占19個。

      2)明顯的WAF提示(16/54)。 除了一些異常響應碼,還會有很多網(wǎng)站會展現(xiàn)與正常響應截然不同的響應內容,是比較明顯的WAF提示,示意則如圖2所示。這在本次樣本中共占16個。

      3)停止響應(14/54)。很多網(wǎng)站在認為遭遇了攻擊時就會直接停止攻擊者的響應,以保護自身網(wǎng)站的安全,具體可如圖3所示。這樣的網(wǎng)站在本次樣本中共占14個。

      4)自定義響應(5/54)。還有少數(shù)網(wǎng)站也會給出一定的提示,或者給出一定的響應特征表示此請求已被WAF禁止,但是響應特征不明顯,因而很難提取。這樣的網(wǎng)站在本次樣本中共占5個。

      綜合以上研究論述后,可得分析結論如下:

      1)網(wǎng)站和網(wǎng)站之間的WAF響應相對獨立,沒有確定的WAF特征等,所以需要對每一個網(wǎng)站單獨處理。

      2)前3種WAF響應通過相似度匹配可以較好地分離出來,準確率較高,且在本次WAF樣本中占據(jù)了很大比例。

      3)對于自定義WAF響應,表現(xiàn)形式并不突出,分離難度較高,這樣的響應需要通過人工輸入正則匹配特征的方式來處理。

      1.2整體架構

      本文設計的WAF規(guī)則自動探測工具并不僅僅局限于狹義的WAF產品,也可以是代碼層級的網(wǎng)站防護。通過輸入一個url和目標參數(shù),利用工具將可自動探測目標網(wǎng)址WAF的規(guī)則配置。

      由圖4可知,輸入URL參數(shù)以及PARAM參數(shù)即可運行工具,同時也有一些其他的輸入。其中,-h參數(shù)顯示幫助信息;-d參數(shù)表示使用POST方法進行探測;-cookie參數(shù)可以定制發(fā)送的cookie;-header參數(shù)可以定制請求頭;-test參數(shù)涉及的是測試使用;-t參數(shù)可以配置程序使用的線程數(shù);-r參數(shù)可以配置響應結果的正則匹配。endprint

      整個工具分為3個模塊:網(wǎng)站過濾檢測模塊、攻擊向量生成模塊、過濾規(guī)則生成模塊。程序運行流程則如圖5所示。

      參照圖5,可得程序運行的步驟推演論述如下:

      1)解析用戶輸入。

      2)發(fā)送兩次原始請求,以確定平均響應時間以及相同請求的響應相似度,作為最高相似度。

      3)按照幾種不同類型的參數(shù)發(fā)送請求,得到響應結果,并對響應結果計算相似度,根據(jù)相似度對響應結果進行分類。

      4)若僅有一個類別,則未探測到WAF的存在,程序退出;若有多種類別,則繼續(xù)進行下一步。

      5)對不同種類的惡意參數(shù)進行大量的嘗試,并把響應結果歸類。

      6)根據(jù)歸類情況整理得到WAF禁止的字符串列表。

      7)輸出WAF禁止的字符串列表,即為WAF規(guī)則,程序結束。

      在程序運行過程中,第1步屬于前期準備階段;第2~4步屬于網(wǎng)站過濾檢測模塊;第5步屬于攻擊向量生成模塊;第6~7步屬于過濾規(guī)則生成模塊。下面將詳細介紹研究中各重點模塊的設計方法。

      由圖6可見,響應相似度的計算流程可對應表述為:

      響應的相似度首先根據(jù)是否有響應來計算,如果兩個響應均沒有響應或停止響應,則相似度為1;如果兩個響應中一個有正常響應、另一個沒有,則相似度為0;如果兩個響應中均有正常響應,則繼續(xù)查看兩個響應的響應碼,如果兩個響應的響應碼均不為200且相同,則相似度為1;如果兩個響應的響應碼不同,則相似度為0;如果兩個響應的響應碼均為200,則計算響應內容的字符串相似度,作為響應的相似度。

      計算字符串相似度的時候調用的是python的difflib庫,當字符串較長時,計算時間也趨于可觀,比如30 k數(shù)據(jù)的內容在研究選用的PC機上需要計算3 min左右。另外,部分網(wǎng)站的響應特征不明顯,雖然相似度較高,卻并非同一類型,比如圖7、圖8的網(wǎng)站。

      可以看出,整個網(wǎng)頁觸發(fā)WAF規(guī)則的響應結果與正常響應結果僅僅是一句話的差別,因而在分類這兩種請求的時候帶來的困難也越發(fā)突顯。

      為了解決上述兩個問題,工具增加了正則匹配的功能。在輸入中輸入-r參數(shù),輸入一個正則表達式,在計算字符串相似度的時候,首先會對字符串調用正則匹配,將匹配出來的結果再計算字符串相似度。如此,臻至完美地解決了上述問題。對其研究釋義可得內容為:

      首先,當響應結果內容數(shù)據(jù)量較大時,通過人工選擇關鍵部分進行正則匹配,可以優(yōu)勢提升計算效率,不再被無效的字符串相似度計算時間而困擾;另外也可以通過人工選擇關鍵部分,將有效部分篩選出來,方便機器計算相似度并歸類,不再為海量數(shù)據(jù)中找不到關鍵點而困擾。

      得到相似度之后,通過相似度大小的比較,得到兩個請求是否為同一類。工具設置了全局變量ACCEPTABLE_DIFF_RATIO,為0.05,如果兩個響應的相似度差別小于0.05,則視為同類請求;否則不為一類。研究可得,相似度差別的數(shù)學公式為:相似度差別=STANDARD_RATIO – SIMILARITY[i][j],(1)其中,STANDARD_RATIO是在發(fā)送原始請求時確定的最高相似度,SIMILARITY[i][j]為第i個請求與第j個請求的相似度值。

      將五種請求歸類后,同一類別的請求只留一個響應結果保存在RESPONSES全局變量中。最后RESPONSES中保留了基礎類別響應的標準。如果只有一種類別,說明該網(wǎng)站沒有探測到不同類型的響應,即沒有探測到WAF響應,輸出“Didnt find WAF Product”,程序停止。如果有多種類別,再繼續(xù)運行程序進入下一個模塊—攻擊向量生成模塊。

      1.4攻擊向量生成模塊

      攻擊向量生成模塊是本工具的關鍵模塊,需要設計出良好的攻擊向量,對目標網(wǎng)站進行大量的惡意請求嘗試,才能夠比較完整地觸發(fā)WAF響應,從而得到WAF規(guī)則。研究攻擊向量的時候可以通過兩種角度去設計實現(xiàn)[4],即攻擊者的角度和防御者的角度。所謂從攻擊者的角度是指在滲透測試的過程中可能會用到部分的惡意字符串以及攻擊向量[3],包括一些關鍵的滲透步驟探測;從防御者的角度是指無論攻擊者使用什么手段,一些關鍵的系統(tǒng)功能函數(shù)以及關鍵字是禁止使用的。這兩種角度雖然立足于不同方向,但是卻有共同的部分,那就是滲透測試的手段。

      為此,根據(jù)如上原則,設計了兩個攻擊向量集合,分別各自保存在special.xml和payload.xml文件中,之所以保存在xml文件中是為了程序能夠方便讀取,同時還可以不斷地擴充攻擊向量集合,使集合更加完備。其中,special.xml中是惡意單個字符集合,使用url編碼過的集合,在使用時需要先對其進行url解碼再使用。而payload.xml是其他攻擊手段惡意關鍵字集合,包含的攻擊類型有COMMON、SQL、XSS、LFI和PHP。每一種攻擊類型包含不同的攻擊句子,句子中拆分出單個關鍵字,在一個攻擊句子中關鍵字類型相近且可以相互組合,比如SQL注入攻擊中語句為:

      -- or union select if as between from where group by having limit into outfile procedure

      對應內容中,關鍵字拆分為--、or、union、select、if、as、between、from、where、group、by、having、limit、into、outfile、procedure,針對這個攻擊level設計指數(shù)bound等于3,意思是在這個句子中最高的關鍵字組合數(shù)為3,表示可能由三個關鍵字才能觸發(fā)WAF響應,比如select from where就是很多WAF規(guī)則中的組合。優(yōu)化合理地設計bound指數(shù),可以對WAF規(guī)則進行高效探測,bound設計得過高,雖然檢測結果將更加精準,但是也會導致請求數(shù)目劇增,影響檢測效率;bound設計得過低,則檢測結果不準確,無法找到真正觸發(fā)WAF的關鍵字組合。endprint

      在攻擊向量的設計過程后,就可以通過最小元素優(yōu)先檢測法對目標網(wǎng)址的WAF規(guī)則進行探測了。遍歷每個攻擊類型的所有l(wèi)evel,針對每個level首先發(fā)送整個句子作為參數(shù),如果得到的響應結果類型與原始請求并不相同,則視為其中存在WAF規(guī)則禁止的字符串;再組合關鍵字進行探測。因為一個level的句子中可能存在不同的WAF規(guī)則組合,比如上述SQL注入攻擊語句可能同時存在select from以及union select兩種組合,因此要盡可能地對每一種關鍵字組合都加以嘗試才能夠確定每一種WAF規(guī)則;但是如果全排列所有關鍵字請求,數(shù)量又太大,因此要按照bound參數(shù)進行組合。從一個關鍵字組合到兩個關鍵字組合,一直到bound數(shù)目的關鍵字組合停止,這個順序稱之為最小元素優(yōu)先檢測法。因為如果先進行少數(shù)關鍵字組合且檢測成功,可以將這部分關鍵字剪枝,從而減少請求數(shù)。比如檢測到select關鍵字被WAF禁止,則將無需再檢測select from以及union select組合。

      然而探測出的關鍵字未必是最精確的WAF規(guī)則配置,比如ord()、floor()關鍵字,可能其中真正有效部分是or。但是在一個最小元素關鍵字中,可以基本認為其中只包含一個WAF規(guī)則,因為在設計關鍵字的時候就是根據(jù)經驗按照一個WAF規(guī)則來操作處理的,故而仍然需要對關鍵字進行更為精確的檢測,在這里研究使用了二分法[5]。

      二分法中,研究給定一個字符串A,并找出其中的WAF規(guī)則,且WAF規(guī)則可能不是連續(xù)的字符串,所以需要逐個探測字符串中的有效字符。算法不斷地確定有效字符中最右字符來運行,如圖9所示,先對目標字符串A二分為A1、A2,檢測A1是否會被WAF禁止:如果成功,則證明最右字符在A1中;如果失敗,則證明最右字符在A2中;對相應部分字符串再次二分,在新產生的左部要與其左面的字符串A中的其他部分結合進行探測,比如A2分為A21和A22,A21需要結合A1為A1A21進行探測:如果成功,則最右字符在A21中;如果失敗,則最右字符在A22中;以此類推,直至精確到一個字符。然后將這個字符加入到結果集中,再遞歸探測其左面部分中的最右字符,請求時將結果集中的字符銜接到最右面即可。

      該算法的復雜度為nlogn,n為關鍵字長度。同時還有另一種可能需要用到二分法,當句子遭到了WAF禁止后,說明句子中有部分字符串是在WAF規(guī)則中,然而若關鍵字設計不當或者bound值過低,可能發(fā)生所有關鍵字組合都不會被WAF禁止的情況,這時就可以使用二分法直接探測句子中的有效部分,在其中精確地找到一種WAF規(guī)則即可。

      一般情況下,工具需要發(fā)送幾千個請求。平均來說,網(wǎng)站的響應時間大約在1~2 s左右,然而也可能會存在響應較慢的網(wǎng)站,響應時間在4 s以上;這樣計算,平均運行一次程序需要1 h,如果響應在4 s以上,更會使運行時間達到數(shù)小時之久,效率極低。因此,這里采用了多線程技術,極具實效地提升檢測效率[6]。

      由于按照流程,需要先檢測句子,若句子被WAF禁止再組合關鍵字去請求,若組合關鍵字被WAF禁止再用二分法精確查找WAF規(guī)則,所以不同網(wǎng)站的請求內容并不完全相同,需要根據(jù)情況智能判斷。因此本工具在組合關鍵字處加入了多線程處理,每次得到一個組合關鍵字列表后,由各個線程分別到列表中逐個提取關鍵字進行查詢,所有線程共享一個偏移變量tmp_share_offset,每次根據(jù)變量值取關鍵字查詢并將偏移增加1,運行了一個關鍵字查詢后將調用偏移變量再次讀取,直至偏移大于列表長度線程退出。

      多線程很容易發(fā)生的就是競爭問題,如果線程A和線程B同時讀取tmp_share_offset,或者線程A讀取之后還未將tmp_share_offset增加便被線程B讀取了,導致大量線程讀取相同的關鍵字,還有可能造成關鍵字的遺漏,所以研究中即引用了互斥鎖技術[7]。每當讀取或修改共享變量的時候就將變量鎖住,禁止其他線程讀取使用,其他線程若需要使用共享變量只能選擇等待,直到共享變量使用完畢、且互斥鎖釋放后才可以使用,如此,便真正地解決了競爭問題。

      綜上論述可知,攻擊向量生成模塊即是本次研究的目標關鍵模塊,其中用到了滲透技術、最小元素優(yōu)先檢測法、二分法、多線程、互斥鎖等多種核心技術思想。

      1.5過濾規(guī)則生成模塊

      攻擊向量檢測完畢后,會將結果匯總至動態(tài)列表ALL_BANNED_EFFECTIVE_VECTOR中,再將列表中的所有WAF規(guī)則輸出到文件中。研究至此,程序的主體便全面結束。

      1.6SQLMAP的使用

      目前針對WAF的研究并未充分展開,工具也較有限。本文在項目確立之前即研究發(fā)現(xiàn)了著名的滲透測試軟件SQLMAP也有WAF探測模塊[8],而且也是WAF研究中可堪稱效果優(yōu)良的一款工具。然而,SQLMAP是要找出WAF所對應的產品名稱,找到的方法是根據(jù)WAF響應特征和預備WAF產品知識庫進行匹配得知,不過,由于不能夠探測出代碼級的WAF或是自定義WAF,卻只能找出生產WAF的廠商,因而相對而言其探測能力仍有所欠缺。

      本文并沒有深入辨識及確認WAF廠商,注重的是對WAF規(guī)則的探測發(fā)現(xiàn)研究。但是關于同一廠商的WAF產品規(guī)則是否會大致相同的問題討論,本工具則是將SQLMAP的WAF探測功能整合到最后一部分,得到WAF產品名稱后輸出到結果文件中,這樣就可以在探測大量網(wǎng)站之后得到同一廠商WAF產品規(guī)則配置概況,同時也豐富了本次研究針對WAF工具的實際應用功能。

      2測試結果

      研究中使用本工具對10家網(wǎng)站進行了WAF規(guī)則探測,平均響應時間為1.2 s;平均檢測網(wǎng)站規(guī)則數(shù)23個,最高檢測規(guī)則68個;平均請求數(shù)1 455個,最大請求數(shù)3 370個;平均運行時間6 min 50 s,最長運行時間20 min 36 s。詳細數(shù)據(jù)如表1所示。endprint

      由表1可知,部分網(wǎng)站的WAF規(guī)則探測效果較好,比如www.esri.com探測出68條WAF規(guī)則,但是部分網(wǎng)站的探測效果一般,例如,iask.sina.com.cn的最少,僅僅探測出九條WAF規(guī)則。從運行時間角度來說,通常請求數(shù)越大運行時間越長,但均沒有超過0.5 h,大部分規(guī)則較少的在5 min之內就能夠結束運行。

      能夠看出其網(wǎng)站W(wǎng)AF規(guī)則涉及到多種攻擊手法,關鍵字包括SQL注入函數(shù)、SQL注入數(shù)據(jù)庫表名、XSS函數(shù)、XSS標簽、PHP注入關鍵字、PHP注入函數(shù)等等。

      3結束語

      本文設計的WAF規(guī)則自動探測工具可以較好地黑盒探測出任意網(wǎng)站的WAF規(guī)則,在其中做了較多的優(yōu)化和提升。使用正則匹配解決了難以從相似結果中提取不同種類響應的問題,使用最小元素優(yōu)先檢測法和二分法提升了探測效率,使用多線程使探測速度更為可觀,也從多種攻擊手段設計了攻擊向量,同時工具仍支持繼續(xù)增加攻擊向量庫,使探測更加精準高效。然而工具也存在部分不足,比如有時探測出的WAF規(guī)則較少,攻擊向量庫仍有待進一步的拓展改進。今后將繼續(xù)完善攻擊向量庫,同時增加攻擊向量的變種探測能力,使探測出的規(guī)則更加完整,貼近設計。

      參考文獻:

      [1] 國家網(wǎng)信辦. 《中國互聯(lián)網(wǎng)站發(fā)展狀況及其安全報告(2015)》發(fā)布[J]. 保密科學技術,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]. 計算機工程, 2006, 32(10): 60-62,118.

      [6] 駱斌, 費翔林. 多線程技術的研究與應用[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

      猜你喜歡
      字符串二分法關鍵字
      用“二分法”看七年級學生數(shù)學應用題的審題
      成功避開“關鍵字”
      一種基于PowerBuilder環(huán)境字符串相似度算法
      SQL server 2008中的常見的字符串處理函數(shù)
      倍增法之后綴數(shù)組解決重復子串的問題
      最簡單的排序算法(續(xù))
      “二分法”教學中的幾個問題
      用二分法的原理巧解題
      智能垃圾箱
      例析二分法的應用
      嘉禾县| 随州市| 永顺县| 云龙县| 岗巴县| 彰化县| 衡东县| 吉首市| 西林县| 巴东县| 夏津县| 孝感市| 江山市| 乡宁县| 虎林市| 麦盖提县| 大竹县| 邓州市| 石林| 柯坪县| 宜昌市| 文山县| 本溪市| 扶绥县| 斗六市| 长垣县| 嘉义市| 上杭县| 正安县| 承德县| 新田县| 枣庄市| 临武县| 壶关县| 如东县| 修武县| 桐庐县| 区。| 张家口市| 农安县| 乐安县|