999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Chopping的Web應用SQL注入漏洞檢測方法①

2018-02-07 02:41:25馬金慧張雅峰
計算機系統應用 2018年1期
關鍵詞:程序數據庫檢測

尤 楓,馬金慧,張雅峰

(北京化工大學 信息科學與技術學院,北京 100029)

1 概述

隨著互聯網的普及與發展,Web技術以其廣泛性、交互性、快捷性和易用性等特點迅速風靡全球,已滲透到社會生活的各個領域.與此同時,Web應用的安全也越來越受到人們的關注,SQL注入、XSS等Web 安全問題層出不窮[1].作為 OWASP (Open Web Application Security Project)Top 10 Project[2]中排名靠前的Web應用安全隱患,SQL注入漏洞一直困擾著廣大的Web應用用戶.目前,針對SQL注入漏洞檢測的研究可以為兩類:一類是通過靜態分析程序源代碼,匹配漏洞的編碼規則查找漏洞[3,4];另一類是通過動態爬蟲爬取所有的網頁鏈接,逐個網頁查找注入點,提交攻擊,使用黑盒的方法進行檢測[5,6].目前,大多數相關研究主要是針對一階SQL注入,二階SQL注入由于其原理的復雜性及發作的潛伏性,較難發現和檢測,因此,針對二階SQL注入的研究較少,且效果不理想.

Dahse和Holz[7]提出了一個較完整的針對PHP語言應用程序的二階SQL注入檢測方法.該方法將數據庫、session以及文件等數據持久存儲介質作為污點信息的輸入源,能夠檢測存儲型XSS、SQL注入等幾種二階漏洞.但由于PHP是解釋執行的服務器腳本語言,采用面向過程的開發方法,所以該文提出的檢測方法對Java等其他語言開發的應用程序并不完全適用.Yan L等人[8]提出先查找源代碼中的SQL語句,然后為SQL語句的每個操作字段建立數據項,通過對比數據項將二階SQL注入的存入和觸發過程查找出來,以達到檢測二階SQL注入的目的.但是該方法的靜態分析階段未實現自動化,檢測效果也并不理想.W.G.Halfond和A.Orso[9]提出通過對正常和異常查詢代碼建模,與運行時查詢動態建模進行對比,以檢測當前查詢是否異常.該方法檢測的準確性取決于建模的準確性,且運行時系統消耗太大.

本文針對Java Web應用程序,提出了基于chopping技術、綜合利用靜態分析和動態檢測技術的二階SQL注入漏洞檢測方法,以提高檢測的自動化程度和檢測效果.

2 相關背景介紹

2.1 污點分析

污點分析是一種針對源程序文件進行的分析方法,廣泛應用于軟件測試等領域.污點分析的過程是將所有外部輸入程序的數據標記為污點數據,識別污點數據在程序中的傳播路徑,即在數據進入source點(污點數據接收點)時進行標記,利用特定的規則跟蹤分析污點數據在程序中的傳播過程,當數據傳播到sink點(對污點數據進行分析的點)時檢查關鍵操作是否會受到污點數據的影響.

污點分析有靜態和動態之分,靜態污點分析是指不考慮特定輸入,所有污點傳播過程中可能涉及到的語句都進行查找,優點是能夠快速定位污點在程序中的所有出現情況.動態污點分析是在程序有特定輸入的情況下,對運行過程涉及到的數據流或控制流進行監控,從而實現對數據傳播、使用進行跟蹤和檢測.

2.2 SQL注入漏洞

SQL注入就是通過把故意設計的SQL語句插入到表單提交或頁面請求的查詢字符串中,欺騙服務器執行惡意的SQL命令,而不是按照合法用戶的原本意圖去執行SQL命令.

SQL注入漏洞包括一階SQL注入漏洞和二階SQL注入漏洞.

對于一階的SQL注入來說,污點數據的傳播路徑為數據從source點輸入,經過路徑傳播到達sink點并執行SQL語句,從而引發SQL注入攻擊.

二階SQL注入的傳播路徑為數據從source點輸入,經過路徑傳播到達sink點并存入數據庫,但不會立即執行,而是等待下一個調用該數據的SQL語句執行,數據再次從sink點流出并引發SQL注入攻擊.

2.3 程序切片

程序切片最早是由Mark W.提出的[10],經過多年的不斷研究,程序切片技術從后向切片發展到前向切片,也從一開始的面向過程的程序切片發展到面向對象的程序切片技術[11],還衍生出程序削片(dicing)[12]、程序砍片(chopping)[13]等新型程序切片技術.

后向程序切片就是查找影響到某條語句的所有語句的程序切片的過程.前向程序切片就是查找被某條語句所影響到的所有語句的程序切片的過程.

Chopping 是由 D.Jackson 等[14]提出的,chopping準則由變量定義集和變量引用集兩個變量集合組成,對一個程序進行砍片的過程就是識別程序中所有說明在定義集中的變量影響引用集中變量值的語句子集的過程,即查找定義集中的點的前向切片與引用集中的點的后向切片的交集的過程.當與污點分析結合使用時,定義集即是source點集,引用集即是sink點集.

程序切片過程分為程序內切片和程序間切片過程.程序內切片是指針對一個程序進行的切片,程序間切片是指針對不同程序進行的切片.

3 Web 應用 SQL 注入漏洞檢測

本文所提出方法的具體流程如圖1所示,主要分為四個部分.首先進行程序預處理,將Java代碼進行詞法和語法分析,并轉化為含有數據依賴邊和控制依賴邊的系統依賴圖;然后通過chopping規則獲取含有疑似一階SQL注入數據傳播路徑的chop;再后通過對一階疑似路徑分析匹配,獲取二階SQL注入疑似路徑;最后針對疑似路徑,自動生成攻擊向量并提交運行,驗證二階疑似路徑是否為二階SQL注入漏洞.

圖1 系統總體框圖

3.1 預處理

JavaCC (Java Compiler Compiler)[15]是一個用 Java開發的詞法和語法分析生成器.通過使用由JavaCC生成的詞法分析和語法分析器對Java Web應用程序的后端代碼進行分析,根據得到的抽象語法樹進行數據依賴分析、控制依賴分析以及函數調用關系分析生成系統依賴圖 (SDG,System Dependence Graph)[16].一個系統依賴圖由程序中的所有程序依賴圖(PDG,Program Dependence Graph)組成,其反映的是系統內程序之間的調用關系.程序依賴圖是有向圖G=(N,E),其中N是表示給定程序的語句的節點集合,E是控制依賴邊和數據依賴邊的集合.

3.2 一階SQL注入疑似路徑獲取

針對Java語言的特點,本文對所有接收外部輸入和操作數據庫的函數進行了詳細分析,歸納形成與漏洞相關的source點集和sink點集,作為后續分析的基礎.

根據chopping規則對系統依賴圖進行chopping,獲取source點和sink點之間的污點數據傳播路徑,經過chopping之后獲得的程序片段(chop)即為一階SQL注入疑似路徑,也就是符合一階SQL注入污點數據傳播方式的路徑,數據在這些路徑上傳播時,有可能會觸發一階SQL注入.一階SQL注入疑似路徑獲取算法如算法1所示.

算法1.一階SQL注入疑似路徑獲取算法輸入:SDG =(V,E)輸出:一階SQL注入疑似路徑(chop)1.S、T為給定的chopping準則,S是source點,T為sink點,SV,TV 2.t∈T,s∈S 3.while T不為空5. 從T刪除一個元素t 6. for each j→t∈E 7. if j尚未標記8. then將j添加到到t后向切片集,為j添加后向訪問階段標記,繼續添加該路徑的后向訪問邊節點9. 查找所有的后向切片集10.end 11.while S不為空12. 從S刪除一個元素s 13 for each s→j∈E 14. if j未被標記前向階段標志15. then將j添加到到s前向切片集,j添加前向階段標記,繼續添加該路徑上的前向訪問邊節點16.查找所有的前向切片集17.end 18.求交集19.return chop(s,t)

Chopping過程采用由source點進行前向切片和sink點進行后向切片求交集的方法來獲取.區別于單純基于sink點進行后向切片,或者基于source點進行前向切片,程序chop是后向切片集合和前向切片集合的交集,能夠過濾掉一部分從source出發不能到達sink點以及從sink點回溯不能到達source點的無效路徑,在接下來的檢測中,能夠減少相當一部分的審計工作,對于程序分析和漏洞查找提供更精確的結果,降低分析成本.由于SDG中包含了同一項目不同文件之間的函數調用關系,在分析過程中會涉及到程序內切片和程序間切片.

3.3 二階SQL注入疑似路徑查找

對一階SQL注入疑似路徑進行分析,根據路徑中SQL語句所操作的數據庫表對語句進行歸類,將有相同操作對象的SQL語句進行匹配分析,從而查找出對相同數據庫表進行存、取操作的路徑.

定義1.二階注入操作對:由一個將攻擊代碼存入數據庫的SQL操作和一個從數據庫中將攻擊代碼取出使用的SQL操作組成的SQL操作對.

數據寫入:攻擊者將攻擊性代碼寫入數據庫的過程.

此時的數據傳播路徑是:source→sink→數據庫.惡意數據寫入數據庫之后不會被立刻使用.

數據取出再使用:將數據寫入階段已存儲在數據庫中的攻擊代碼取出來,拼接到新的SQL語句中,隨后運行,導致執行結果出現異常.

此時的數據傳播路徑是:數據庫→sink→數據使用,攻擊“發作”,造成數據庫惡意訪問.

查找二階SQL注入漏洞的關鍵就是查找二階注入操作對.

通過分析一階SQL注入疑似路徑,分別查找數據寫入部分和數據取出再使用部分,通過對一階SQL注入疑似路徑中構造的SQL語句進行分析,若兩條一階疑似路徑中的SQL語句所操作的數據庫表相同,且兩條語句分別為存操作和取操作,則將這兩個SQL語句匹配為二階注入操作對,這兩條一階的疑似路徑匹配為一條二階SQL注入疑似路徑.具體實施步驟如下:

步驟1.將一階疑似路徑中所包含的SQL語句根據所操作對象及數據庫表進行匯總.

步驟2.確定每個SQL語句的操作類型,若有嵌套查詢,則以外層為基準.通過判斷SQL語句中的是否有from子句以及where子句判斷SQL語句是屬于數據寫入還是取出再使用,分別標記操作類型為存或取.

步驟3.將操作對象相同且操作類型不同的SQL語句結合為二階SQL注入操作對,SQL語句所在的兩條一階的疑似路徑匹配為一條二階SQL注入疑似路徑.

通過一階SQL注入疑似路徑獲取二階SQL注入疑似路徑的算法如算法2所示.

算法2.二階SQL注入疑似路徑獲取算法輸入:一階SQL注入疑似路徑FP輸出:二階SQL注入疑似路徑SP 1.分析FP中所有fp的數據庫操作對象表db(fp)2.while FP不為空3. if db(fp1)=db(fp2)4. then分析fp1和fp2的數據庫操作類型m(fp1)和m(fp2)5. if fp中含有from子句6. if fp中含有where子句7.fp標記為存8. else fp標記為取9. if (m(fp1)=存AND m(fp2)=取)OR(m(fp1)=取AND m(fp2)=存)10.fp1和fp2匹配為一個二階SQL注入疑似路徑sp(fp1,fp2)11. SP=SP∪sp(fp1,fp2)12.end 13.return SP

3.4 二階SQL注入漏洞的驗證

對于查找到的二階SQL注入疑似路徑,需要進行實際驗證,確認是否是真正的二階SQL注入漏洞.

3.4.1 攻擊向量的設計與執行

攻擊向量是指包含異常攻擊字段的SQL語句.攻擊字段的設計方法有七類[17],分別是:大小寫混合、替換關鍵字、使用編碼、使用注釋、等價函數與命令、特殊符號、整合繞過,這些攻擊向量同樣適用于二階SQL注入漏洞.

對收集到的攻擊向量進行整理分類,并在其基礎上按照規則進行變異處理.

變異遵循以下規則:在保證邏輯關系合理的情況下,分別進行字母大小寫替換、編碼處理、數字和字符串值隨機化、添加多個重復的標簽、添加“+”“–”或“.”等用于連接字符的符號.經過組合及變異后的攻擊向量的多樣性會得到很大提升.

BurpProxy是瀏覽器代理工具BurpSuite的核心部分,是一個攔截HTTP/HTTPS請求的代理服務器,作為一個在瀏覽器和目標應用程序之間的中間代理,允許攔截、查看和修改兩個方向上的原始數據流.

通過使用BurpProxy運行異常的SQL代碼;截獲瀏覽器的http請求,修改參數,將攻擊代碼嵌入到請求參數中,最終提交到數據庫.

3.4.2 攻擊向量的執行結果分析

運行異常攻擊向量,查看數據庫日志中的SQL語句執行記錄,然后提交正常的SQL命令,再次查看數據庫日志,將兩次運行結果進行對比,若兩條數據庫結果不同,則說明提交的異常請求發生了篡改,確認程序存在漏洞.

4 實驗結果及分析

4.1 實驗設計

本實驗的硬件配置為 2.20 GHz,2.20 G RAM 筆記本計算機;系統環境是 Windows7,使用 JDK 1.8.0_91_、MySQL 5.6.28、Java語言在 Eclipse下完成.

根據本文提出的方法,開發了一個二階SQL注入漏洞檢測程序,實現對應用程序后臺代碼進行chopping以查找一階SQL注入疑似路徑以及進一步匹配查找二階SQL注入疑似的路徑.最后通過生成大量的攻擊向量并利用瀏覽器代理工具運行,從而驗證所查找到的二階SQL注入疑似路徑,確定二階SQL注入漏洞的存在.

下面針對4個Java Web應用程序進行實驗.

4.2 實驗結果及分析

本文實驗基于4個Java Web應用程序,基本信息如表1所示.

表1 應用程序基本信息表

4.2.1 一階 SQL 注入疑似路徑查找

程序首先以四個應用程序后臺代碼作為輸入,進行預處理并針對source點和sink點進行chopping,四個應用程序查找到的一階SQL注入疑似路徑數如表2所示.

表2 一階疑似路徑數列表

4.2.2 確定有效的二階 SQL 注入操作對

接下來,程序將會對前一步所獲取的四個應用程序中的一階SQL注入疑似路徑進行分析.按照存、取操作的劃分原則,通過字符匹配,對每個切片所操縱的數據庫表進行歸類,確定每個切片操作的類型,即存操作還是取操作,操作對象相同且操作類型不同的匹配為二階SQL注入操作對.最終得到結果如表3所示.

表3中數據表示在一應用程序中,操作對所在的文件名及操作針對的數據庫以及操作類型.

由表3中數據可見,四個應用程序中的二階注入操作對個數分別為1個、3個、4個、5個,即四個應用程序中分別匹配出1個、3個、4個和5個二階SQL注入疑似路徑.

4.2.3 攻擊向量驗證實驗

針對二階注入操作對進行模擬攻擊,通過與數據庫日志中的SQL語句記錄進行對比,驗證攻擊向量是否觸發了二階SQL注入.

表3 二階注入操作對分析結果

如下為針對程序Dormitory Manager自動生成的異常攻擊向量的示例:

(1)http://localhost/sushe/StudentDel.action?Student_ID=6 uNIoNsELecT 1,2,3,4

(2)http://localhost/sushe/StudentDel.action?Student_ID=6UNIunionONSELselectECT 1,2,3,4

(3)http://localhost/sushe/StudentDel.action?Student_ID=6/*!u%6eion*//*!se%6cect*/ 1,2,3,4…

(4)http://localhost/sushe/StudentDel.action?Student_ID=6%55nION/**/%53ElecT 1,2,3,4

(5)select+id-1+1.from users.

經過運行攻擊向量驗證,確認的二階SQL注入漏洞個數如表4所示.

表4 檢測出的二階 SQL 注入漏洞個數

由表4中數據可知,通過攻擊實驗驗證,一些二階SQL注入疑似漏洞被證實為二階SQL注入漏洞.在實際中,二階SQL注入的檢測難度較大,完全檢測出來或完全確認是很困難的.本文的方法在相應的觸發概率下,能夠有效地檢測出二階SQL注入漏洞.

5 結語

本文提出了一種基于chopping技術的靜態分析Web應用程序源代碼與設計攻擊向量動態驗證相結合的二階SQL注入漏洞檢測方法,該算法將程序切片技術的變種形式程序chopping應用到靜態分析過程,通過獲取污點傳播路徑并設計攻擊向量運行的方式驗證漏洞,實現了二階SQL注入漏洞的檢測.

當應用程序規模較大時,構造的系統依賴圖規模龐大而且結構復雜,不利于獲取切片.因此,在今后的工作中可針對系統依賴圖設計約減算法,對本文方法進行優化.

1 王青國.淺析Web應用軟件開發安全.計算機系統應用,2013,22(2):5–9.

2 OWASP Top10 object. https://www.owasp.org/index.php/Top_10_2013-Top_10,2013.

3 Kim MY,Lee DH.Data-mining based SQL injection attack detection using internal query trees.Expert Systems with Applications,2014,41(11):5416 –5430.[doi:10.1016/j.eswa.2014.02.041]

4 Jang YS,Choi JY.Detecting SQL injection attacks using query result size.Computers &Security,2014,44:104–118.

5 Lounis O,Guermeche SEB,Saoudi L,et al.A new algorithm for detecting SQL injection attack in Web application.Proceedings of 2014 Science and Information Conference(SAI).London,UK.2014.589–594.

6 Thomé J,Shar LK,Briand L.Security slicing for auditing XML,XPath,and SQL injection vulnerabilities.2015 IEEE 26th International Symposium on Software Reliability Engineering (ISSRE). Gaithersbury,MD,USA. 2015.553–564.

7 Dahse J,Holz T. Static detection of second-order vulnerabilities in web applications.Proceedings of the 23rd USENIX Security Symposium.San Diego,CA,USA.2014.989–1003.

8 Yan L,Li XH,Feng RT,et al.Detection method of the second-order SQL injection in web applications.International Workshop on Structured Object-Oriented Formal Language and Method.Queenstown,New Zealand.2013.154–165.

9 Halfond WGJ,Orso A.AMNESIA:Analysis and monitoring for NEutralizing SQL-injection attacks.Proceedings of the 20th IEEE/ACM International Conference on Automated Software Engineering.New York,NY,USA.2005.174–183.

10 Weiser MD. Program slices:Formal,psychological,and practical investigations of an automatic program abstraction method[Doctoral Dissertation]. Michigan:University of Michigan,1979.

11 CodeSurfer .http//www.grammatech.com/products/codesurfer.

12 Chen TY,Cheung YY. Dynamic program dicing.Proceedings of 1993 Conference on Software Maintenance.Montreal,Quebec,Canada.1993.378–385.

13 Krinke J.Barrier slicing and chopping.Proceedings 3rd IEEE International Workshop on Source Code Analysis and Manipulation.Amsterdam,Netherlands.2003.81–87.

14 Jackson D,Rollins EJ.A new model of progrm dependences for reverse engineering. ACM SIGSOFT Software Engineering Notes,1994,19(5):2–10.[doi:10.1145/195274]

15 Download JavaCC.http://javacc.org.

16 Horwitz S,Reps T,Binkley D.Interprocedural slicing using dependence graphs. ACM Transactions on Programming Languages and Systems (TOPLAS),1990,12(1):26 –60.[doi:10.1145/77606.77608]

17 Halfond WGJ,Viegas J,Orso A.A classification of SQL-injection attacks and countermeasures.Proceedings of the IEEE International Symposium on Secure Software Engineering.Arlington,VA,USA.2006,1.13–15.

猜你喜歡
程序數據庫檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
小波變換在PCB缺陷檢測中的應用
數據庫
財經(2016年3期)2016-03-07 07:44:46
主站蜘蛛池模板: 亚洲资源在线视频| 久久香蕉国产线看观| 永久免费无码日韩视频| 91视频青青草| 中文毛片无遮挡播放免费| 青青草a国产免费观看| 毛片网站在线播放| 精品在线免费播放| 久久久久免费看成人影片| 97青草最新免费精品视频| 国产成人调教在线视频| 久久中文无码精品| 91精品亚洲| 色噜噜在线观看| 五月天久久婷婷| 日韩二区三区无| 亚洲精品少妇熟女| 东京热高清无码精品| av天堂最新版在线| 日本欧美成人免费| 精品久久香蕉国产线看观看gif| 国产黄网永久免费| 久久国产高清视频| 亚洲日韩精品伊甸| 91久久国产综合精品| 国产福利免费观看| 亚洲欧美另类中文字幕| 丁香婷婷激情综合激情| 亚洲欧美日韩色图| 福利在线一区| 香蕉精品在线| 99久久精彩视频| 成人欧美日韩| 久久综合亚洲色一区二区三区| 免费无码网站| 国产女同自拍视频| 日韩人妻无码制服丝袜视频| 波多野结衣久久精品| 色婷婷综合在线| 久久黄色视频影| 97视频在线精品国自产拍| 成人小视频网| 无码精品一区二区久久久| 久久久久国产精品熟女影院| 午夜福利亚洲精品| 亚洲一区二区三区国产精品 | 亚洲国产精品久久久久秋霞影院| 天堂成人av| 特级aaaaaaaaa毛片免费视频 | 日韩精品毛片| 欧美狠狠干| 日本影院一区| 精品国产黑色丝袜高跟鞋| 91无码网站| 国产欧美日韩综合一区在线播放| 精品福利一区二区免费视频| 999在线免费视频| 精品一区二区三区水蜜桃| 青青青国产精品国产精品美女| 91人人妻人人做人人爽男同| 又爽又大又黄a级毛片在线视频| 91免费在线看| 国产精品手机视频一区二区| 狼友av永久网站免费观看| 久久这里只精品国产99热8| 婷婷六月激情综合一区| 欧美另类精品一区二区三区 | 亚洲精品片911| 日本高清在线看免费观看| 91 九色视频丝袜| 97视频在线精品国自产拍| 91美女视频在线| 日韩精品专区免费无码aⅴ | 国产亚洲精品自在久久不卡 | 免费国产好深啊好涨好硬视频| 久久青青草原亚洲av无码| 色吊丝av中文字幕| 久久久久久久蜜桃| 无码精品国产VA在线观看DVD | 国产美女91呻吟求| 在线另类稀缺国产呦| 波多野结衣亚洲一区|