亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種SQL注入漏洞定位檢測方法

        2016-03-17 03:51:47張瑩瑩
        計算機應用與軟件 2016年2期
        關鍵詞:程序污染分析

        張瑩瑩 凌 捷

        (廣東工業(yè)大學計算機學院 廣東 廣州 510006)

        ?

        一種SQL注入漏洞定位檢測方法

        張瑩瑩凌捷

        (廣東工業(yè)大學計算機學院廣東 廣州 510006)

        摘要SQL注入是攻擊Web程序的常見手段。傳統(tǒng)的SQL注入漏洞檢測工具在定位效率、檢測廣度很難滿足目前日益增長的程序代碼量。針對這種情況,分析SQL注入漏洞的特征,提出一種滲透測試與程序分析技術相結合的方法來定位程序中存在的SQL注入漏洞。其中滲透測試部分通過模擬攻擊找出可能的SQL注入點,程序分析部分對源程序代碼進行分析,通過對污染變量的標記跟蹤來實現(xiàn)SQL注入點的定位。實驗結果表明,所提出的方法在定位時間、漏洞檢測效果有較好表現(xiàn)。

        關鍵詞SQL注入滲透測試程序分析漏洞定位

        A POSITIONING AND DETECTION TECHNOLOGY FOR SQL INJECTION VULNERABILITY

        Zhang YingyingLing Jie

        (Faculty of Computer,Guangdong University of Technology,Guangzhou 510006,Guangdong,China)

        AbstractSQL injection is a common means of attacking Web programs. Traditional detection tools for SQL injection vulnerability are difficult to meet the growing amount of program code in terms of positioning efficiency and detection range. In response to this situation, we proposed a method to locate the SQL injection vulnerabilities existed in programs, which combines the techniques of penetration testing and program analysis, after analysing the characteristics of SQL injection vulnerabilities. In the method, the penetration testing identifies the possible SQL injection points by simulating the attacks, and the program analysis parses the source codes. This method achieves the localisation of SQL injection points by marking and tracking the polluted variables. Experimental results showed that the proposed method had better performance in positioning time and vulnerability detection effect.

        KeywordsSQL injectionPenetration testingProgram analysisVulnerability positioning

        0引言

        隨著互聯(lián)網(wǎng)迅猛發(fā)展,越來越多的Web應用都采取了三級架構:數(shù)據(jù)庫服務器、應用服務器和客戶端。用戶在客戶端輸入數(shù)據(jù),應用服務器根據(jù)其輸入構建SQL語句,并將SQL語句送至數(shù)據(jù)庫中執(zhí)行操作,最終將結果返回給用戶。由于數(shù)據(jù)庫中存儲著大量敏感信息,導致其頻繁遭到攻擊,其中最嚴重的就是SQL注入攻擊[1]。SQL注入攻擊是指攻擊者在合法SQL語句中插入SQL關鍵字或操作符從而改變SQL語句的語義、語法結構,將這些惡意的SQL語句提交給數(shù)據(jù)庫,獲取用戶名密碼等敏感信息,進而獲取主機控制權限等[2]。OWASP于2013年發(fā)布的十大Web應用安全漏洞中,SQL注入攻擊排名第一。

        針對SQL注入漏洞的檢測定位,很多學者進行了研究。文獻[3]提出了一種基于證明樹反演的漏洞定位方法。從數(shù)據(jù)庫查詢語句開始,反向跟蹤組成查詢語句的變量,檢查其是否接受外界輸入,來進行漏洞定位。該方法要分析所有的SQL語句并回溯其變量來源,時間復雜度較高。文獻[4]提出的方法是從語句的結構分析SQL注入攻擊行為,通過比較模式字符串和目標字符串的結構和類型來判斷是否發(fā)生SQL注入攻擊。該方法需要對每一個SQL語句調用驗證函數(shù),對源程序修改較大。文獻[5]提出一種在運行時檢測SQL注入漏洞的方法,運用基本路徑法和數(shù)據(jù)流測試技術來找到用戶輸入變量的所有合法執(zhí)行路徑,運行時檢測用戶輸入變量的執(zhí)行路徑,比較它們是否與之前獲得的合法路徑相符。若不相符,說明用戶輸入變量包含有惡意輸入,但該方法只能檢測基于關聯(lián)查詢的SQL注入漏洞。

        本文提出一種利用滲透測試與程序分析技術相結合的方法來實現(xiàn)對SQL注入漏洞的定位。滲透測試階段輸入網(wǎng)站地址,通過模擬攻擊確定引起SQL注入的用戶輸入點,程序分析階段根據(jù)滲透測試階段的結果,在Web應用系統(tǒng)源代碼中通過數(shù)據(jù)流跟蹤技術對漏洞產(chǎn)生過程進行跟蹤和分析。經(jīng)過實驗驗證,該方法效率較高,誤報率較低。

        1SQL注入漏洞特征及檢測工具分析

        1.1SQL注入漏洞特征分析

        SQL注入漏洞[6]之所以產(chǎn)生是因為程序接收到用戶輸入時沒有對其進行驗證處理,某些用戶輸入會引發(fā)安全問題,被定義為“污染值”。若污染值由注入點經(jīng)污染傳播到達陷入點,則會引發(fā)SQL注入攻擊。以Java應用程序為例,注入點、傳播過程和陷入點描述如下:

        (1) 注入點:Java程序中處理數(shù)據(jù)輸入的操作,常見的有get Parameter()、get Parameter Values()、get Query String()等。

        (2) 傳播過程:Java程序中的變量賦值、引用賦值等操作,例如String.to String()、String.concat(String)、String Buffer.to String()等。

        (3) 陷入點:在Java程序中,陷入點主要是向數(shù)據(jù)庫提交SQL查詢語句的函數(shù)。常見的陷入點有Statement.execute Query(String)、Statement.add Batch(String)、Statement.execute(String,…)等。

        1.2SQL注入漏洞的檢測方法及工具

        滲透測試[7]是指為了發(fā)現(xiàn)應用程序中潛在的漏洞,從一個攻擊者的角度對應用程序進行安全審核。滲透測試可以簡單快速地檢測出應用程序中存在的SQL注入漏洞。但無法得到漏洞產(chǎn)生的具體原因。目前大多數(shù)漏洞掃描工具都基于此策略,如WebInspect、AppScan、Paros Proxy等。程序分析[8,9]即對源代碼進行分析,尋找可能出現(xiàn)漏洞的檢測點并進行驗證。源代碼分析工具有YASCA、LAPSE+、Pixy、AppCodeScan、Fortify等,可在源代碼中找出漏洞產(chǎn)生的過程,但耗時較長。針對滲透測試和程序分析技術的優(yōu)缺點的互補性,提出了一種聚合滲透測試和程序分析技術的SQL注入漏洞定位方法。

        2SQL注入漏洞定位檢測方法

        本文提出的SQL注入漏洞定位檢測方法主要包括模擬攻擊、標識模塊、代碼插樁、數(shù)據(jù)流跟蹤等部分,如圖1所示。

        圖1 SQL注入漏洞定位檢測方法示意圖

        2.1滲透測試過程

        滲透測試過程主要由信息獲取模塊、攻擊字符串庫和模擬攻擊模塊組成。信息獲取模塊檢測URL可訪性并獲取網(wǎng)頁源代碼。在網(wǎng)頁中尋找如用戶登陸等方面的可能注入點,依次從攻擊字符串庫調用攻擊字符串對網(wǎng)站實施模擬攻擊,根據(jù)服務器端返回頁面檢測結果判斷是否攻擊成功,若成功則表示存在SQL注入漏洞,將網(wǎng)站位置及可能注入點保存,以便程序分析階段時使用。

        2.2程序分析過程

        程序分析過程主要由源代碼載入器、標識模塊、代碼插樁器等組成。源代碼載入器根據(jù)滲透測試的結果載入存在SQL注入漏洞的頁面源代碼,為后來的漏洞定位做準備;標識模塊標識污染變量,運用數(shù)據(jù)流跟蹤技術跟蹤污染變量在程序中的傳播,若最終組成SQL查詢語句的變量中有來自用戶輸入的數(shù)據(jù),則斷定該變量為SQL注入點,給出該變量輸入點的位置及其傳播路徑。代碼插樁器在程序中插入信息以監(jiān)測程序的動態(tài)運行,本文中的插樁用于得到污染變量的傳播路徑。

        3本文方法的實現(xiàn)

        3.1攻擊字符串庫設計

        攻擊字符串庫是滲透測試的關鍵部分,用庫中的測試字符串來構造畸形URL或表單,向目標Web應用程序發(fā)送HTTP請求,查看服務器的響應是否與漏洞的響應特點一致,來判斷SQL注入漏洞是否存在。結合SQL語句原型和語法結構,針對數(shù)字和字符串類型的注入漏洞,本文設計了表1所示的測試字符串,其中前5個是基本的測試字符串,這些字符串可以經(jīng)過大小寫混寫法、Unicode法、ASCII碼、重言式等得出變種。在此僅列出測試字符串4對應的變種,即測試字符串6到9??梢愿采w典型的SQL注入攻擊。

        表1 測試字符串

        3.2標識模塊

        Web應用程序中有許多數(shù)據(jù)庫查詢語句,只有包含了用戶輸入數(shù)據(jù)的查詢語句才會引發(fā)SQL注入漏洞,所以僅需要標記用戶輸入變量。本文提出的方法中,只需標記滲透測試階段檢測出的引發(fā)SQL注入漏洞的用戶輸入變量,縮減了標識的工作量,然后通過數(shù)據(jù)流跟蹤查看該輸入是否是SQL語句的組成部分。

        3.3數(shù)據(jù)流跟蹤

        變量污染格[10]描述變量是否可能攜帶具有惡意或攻擊性的值,它有兩個值:污染和非污染。運用數(shù)據(jù)流跟蹤技術[11]跟蹤這種屬性在程序中的傳播過程。

        在本文提出的方法中,將污染數(shù)據(jù)存儲在鏈表中。定義兩個鏈表, TaintedLink和CurrentTaint定義如下:

        TaintedLink:=(Node | Node:= );

        CurrentTaint:= (Object | Object:= );

        這兩個鏈表在程序運行中動態(tài)生成。其中TaintedLink記錄污染數(shù)據(jù)成為污染變量的位置(TaintedAddress),變量值(Value),污染字段(Tainted),傳播污染屬性給它的污染變量(ParentTaint),成為污染變量的操作語句(Operation);而CurrentTaint是程序中當前的污染數(shù)據(jù)的集合,該集合隨程序的運行而變化。如果其中的污染數(shù)據(jù)被正常數(shù)據(jù)取代,立即將它們從該鏈表結構中移除。通過遍歷TaintedLink鏈表,可以得到污染變量從注入點到達陷入點的傳播路徑。

        數(shù)據(jù)流跟蹤的過程如下:首先將滲透測試階段得到的結果,即可能引起SQL注入的污染變量放入TaintedLink的頭結點,然后對整個程序源代碼進行掃描,根據(jù)污染傳播算法,識別每個語句是否會造成污染屬性的傳播,并提取操作數(shù),污染傳播算法偽代碼描述如下:

        Input:JavaCode{

        if (JavaCode==0)

        exit;

        foreach (Ci in JavaCode){

        //遍歷每條源碼

        switch typeof(Ci);

        case: =

        //等號賦值語句

        E1=LeftOperand(Ci);

        E2=RightOperand(Ci);

        Taint(E2→E1);

        //污染傳播

        case: String/Array/Object

        //強制類型轉換

        E1=LeftOperand(Ci);

        E2=RightOperand(Ci);

        Taint(E2→E1);

        case: +/|/&/^

        //字符串連接、邏輯運算

        E1=LeftOperand(Ci);

        E2=RightOperand1(Ci);

        E3=RightOperand2(Ci);

        Taint(E2‖E3)→Taint(E1);

        //E2,E3有一個為污染,則E1為污染

        }

        }

        3.4程序插樁

        程序插樁[12]是為了收集程序的運行時特征數(shù)據(jù),在被測程序的特定部位插入一段檢測程序(探針),但不破壞被測程序的原有邏輯完整性。本文中插入的探針是為了記錄變量傳播的路徑,在檢測到變量為引發(fā)SQL注入漏洞的注入點時,拋出其最先接受輸入的位置以及其在程序中的傳播路徑,方便日后對漏洞的修復。如果對于一個語句,既是污染傳播語句,操作數(shù)中又有污染變量,則在該語句之后插入語句,調用函數(shù)AddTaintedLink()。該函數(shù)實現(xiàn)了添加TaintedLink的功能,其污染鏈表生成算法偽代碼描述如下:

        Input:E2→E1

        {

        if ((E1==0)‖(E2==0))

        exit;

        if (E2 in TaintedObject){

        //E2是污染對象

        E1.ParentTaint = E2;

        //E1與E2相連

        TaintedLink.add(E1);

        //添加E1到污染鏈表

        TaintedObject = TaintedObject∪E1;

        }

        //添加E1到當前污染對象集合

        else if (E1 in TaintedObject) {

        //E2是非污染對象

        E1.TaintedType = 0;

        //E1被清洗,變?yōu)榉俏廴?/p>

        TaintedObject = TaintedObject-E1;

        }

        //將E1從當前污染對象集合中清除

        }

        污染傳播分析:根據(jù)生成的TaintedLink 和CurrentTaint鏈表來進行分析。若一個SQL語句中的參數(shù)有屬于CurrentTaint鏈表中的,則確定該SQL語句為SQL注入漏洞陷入點。算法的偽代碼描述如下:

        Check SQL_Query_Statement(arg1…argn);

        if (arg1 in CurrentTaint ∪…∪ argn in CurrentTaint)

        SQL_Query_Statement is sink;

        通過遍歷TaintedLink鏈表,可得到該污染參數(shù)的來源及在程序中的傳播路徑,便于后續(xù)的修復。

        4實驗結果及分析

        為驗證本文提出方法的可行性,采用Eclipse集成開發(fā)環(huán)境對該方法進行Java編程實現(xiàn)SQLPOS工具,硬件平臺采用主流的IBM-PC兼容機,使用Apache Tomcat 6搭建Web服務器,數(shù)據(jù)庫為MySQL 5.1。下面從時間復雜度和定位效果兩方面評估SQLPOS,通過10個不同規(guī)模的應用程序測試SQLPOS,表2列出各個應用程序的名稱、代碼行數(shù)及注入點個數(shù)信息。

        表2 測試應用程序參數(shù)表

        4.1時間復雜度

        漏洞定位工具,以基于規(guī)則匹配的Fortify和FindBugs為代表,分別用Fortify、FindBugs和SQLPOS三種工具掃描表2的應用程序,用每種工具對每個應用程序獨立掃描20次,算出平均掃描時間,得到三者的漏洞定位時間對比,如圖2所示。觀察圖2可得對于規(guī)模較小的應用程序,SQLPOS的時間優(yōu)勢并不明顯,隨著程序代碼行數(shù)的增多,SQLPOS所用的定位時間明顯少于其他兩個。原因是SQLPOS需要對程序進行模擬攻擊,需耗費時間,但其在程序分析部分只需標記跟蹤滲透測試階段得出的可能存在漏洞的注入點,而另外兩個工具要分析所有的注入點,所以源程序代碼行數(shù)越多,存在的注入點越多,SQLPOS時間優(yōu)勢越明顯。

        圖2 應用程序漏洞定位時間對比

        4.2定位效果

        定位效果主要從誤報率和漏報率兩個指標評價SQLPOS。分析用Fortify、FindBugs及SQLPOS對表2中應用程序進行掃描的結果報告,通過人工驗證確定各個工具的誤報率及漏報率,結果如表3、表4所示。

        表3 各個工具誤報率分析表

        表4 各個工具漏報率分析表

        由表3可以看出,對于同一個應用程序,SQLPOS的誤報率要遠低于Fortify和FindBugs,這是因為SQLPOS在滲透測試階段對程序進行模擬攻擊得出可能存在漏洞的注入點,程序分析階段對該注入點進行跟蹤分析,查看其是否到達陷入點,這既是定位的過程,又是驗證的過程。

        由表4可以看出,對于同一個應用程序,SQLPOS的漏報率和Fortify、FindBugs基本持平。

        運用滲透測試和程序分析技術相結合的方式,可以較好地對SQL注入漏洞進行定位。但是由于在程序分析階段對程序語義的理解、對別名信息的判斷,會無法對污染數(shù)據(jù)在動態(tài)執(zhí)行時所指向的對象做精準的判斷,從而會產(chǎn)生一定的誤報。同時,攻擊字符串庫也要隨著攻擊技術的發(fā)展而不斷完善,才能減少漏報。

        5結語

        本文提出一種SQL注入漏洞定位方法,先通過滲透測試運用模擬攻擊的方式來檢測Web程序中是否有SQL注入漏洞,再運用程序分析技術對源代碼進行分析,運用數(shù)據(jù)流跟蹤技術、插樁技術對污染變量的傳播進行跟蹤,最終給出污染變量在程序中的傳播路徑,便于開發(fā)維護人員進行漏洞的修補。對該方法進行了實驗驗證。本文的創(chuàng)新點在于提出了滲透測試與程序分析技術相結合的方法,解決了滲透測試無法分析源程序及純粹程序分析浪費時間的缺點,為SQL注入漏洞的定位檢測提供了一種新的思路。

        參考文獻

        [1] Kumar P,Pateriya R K.A survey on SQL injection attacks,detection and prevention techniques[C]//Computing Communication & Networking Technologies (ICCCNT),2012 Third International Conference on.IEEE,2012:1-5.

        [2] 吳翰清.白帽子講Web安全[M].北京:電子工業(yè)出版社,2013:152-178.

        [3] 王清,鄭慶華,管曉宏,等.一種基于證明樹反演的安全漏洞定位方法[J].西安交通大學學報,2007,41(4):439-443.

        [4] 孫義,胡雨霽,黃皓.基于序列比對的SQL注入攻擊檢測方法[J].計算機應用研究,2010,27(9):3525-3528.

        [5] Dharam R,Shiva S G.Runtime Monitors to Detect and Prevent Union Query Based SQL Injection Attacks[C]//Information Technology:New Generations (ITNG),2013 Tenth International Conference on.IEEE,2013:357-362.

        [6] Justin Clarke.SQL注入攻擊與防御[M].2版.清華大學出版社,2013:21-69.

        [7] Antunes N,Vieira M.Penetration Testing in Web Services[J].IEEE Computer Society,2014,47(2):30-36.

        [8] Shar L K,Tan H B K,Briand L C.Mining SQL injection and cross site scripting vulnerabilities using hybrid program analysis[C]//Proceedings of the 2013 International Conference on Software Engineering.IEEE Press,2013:642-651.

        [9] 李小花,孫建華,陳浩.程序分析技術在SQL注入防御中的應用研究[J].小型微型計算機系統(tǒng),2011,32(6):1089-1093.

        [10] 林姍,鄭朝霞.基于格的數(shù)據(jù)流分析研究與應用[J].武漢理工大學學報:信息與管理工程版,2012,33(6):932-935.

        [11] 魏浩.基于Web數(shù)據(jù)流分析的用戶訪問行為核查技術研究[D].鄭州:解放軍信息工程大學密碼工程學院,2013.

        [12] Halfond W G J,Orso A,Manolios P.WASP:Protecting Web applications using positive tainting and syntax-aware evaluation[J].Software Engineering,IEEE Transactions on,2008,34(1):65-81.

        中圖分類號TP393.08

        文獻標識碼A

        DOI:10.3969/j.issn.1000-386x.2016.02.073

        收稿日期:2014-05-15。廣東省自然科學基金重點項目(S201202 0011071);廣東省教育部產(chǎn)學研合作項目(2012B091000037)。張瑩瑩,碩士生,主研領域:網(wǎng)絡與信息安全技術。凌捷,教授。

        猜你喜歡
        程序污染分析
        隱蔽失效適航要求符合性驗證分析
        試論我國未決羈押程序的立法完善
        人大建設(2019年12期)2019-05-21 02:55:44
        堅決打好污染防治攻堅戰(zhàn)
        當代陜西(2019年7期)2019-04-25 00:22:18
        電力系統(tǒng)不平衡分析
        電子制作(2018年18期)2018-11-14 01:48:24
        堅決打好污染防治攻堅戰(zhàn)
        “程序猿”的生活什么樣
        英國與歐盟正式啟動“離婚”程序程序
        電力系統(tǒng)及其自動化發(fā)展趨勢分析
        創(chuàng)衛(wèi)暗訪程序有待改進
        對抗塵污染,遠離“霾”伏
        都市麗人(2015年5期)2015-03-20 13:33:49
        国产av一区二区三区传媒| 亚洲中文字幕一区av| 国产一区二区长腿丝袜高跟鞋| 国产偷国产偷精品高清尤物| 免费a级毛片无码a| 亚洲乱在线播放| 精品婷婷国产综合久久| 一本一道vs无码中文字幕| 欧美性猛交内射兽交老熟妇| 男人的天堂av网站一区二区| 蜜桃av在线播放视频| 精品国产天堂综合一区在线| 性色av无码一区二区三区人妻| 国产精品白浆视频免费观看| 一区二区三区中文字幕在线观看| 国产又猛又黄又爽| 成人免费视频在线观看| 午夜av内射一区二区三区红桃视| 日韩精品中文字幕一区二区| 男女啪动最猛动态图| 国产在线丝袜精品一区免费| 亚洲成av在线免费不卡 | 日本精品一区二区三区二人码| 亚洲av无码专区在线播放中文| 亚洲AV激情一区二区二三区| 国产精品二区三区在线观看| 日韩在线永久免费播放| 色猫咪免费人成网站在线观看| 亚洲色无码中文字幕| 亚洲最新精品一区二区| 少妇私密会所按摩到高潮呻吟| 亚洲AⅤ永久无码精品AA| 日韩国产一区二区三区在线观看| 亚洲αv在线精品糸列| 97免费人妻在线视频| 亚洲一区二区高清在线| av在线播放男人天堂| 女人被爽到呻吟gif动态图视看 | 亚洲老熟妇愉情magnet| 在线观看国产白浆一区三区| 国产高清av首播原创麻豆|