張生財+周淑惠
摘 要:SQL注入是一種Web應(yīng)用程序安全漏洞,攻擊者能夠提交由Web應(yīng)用程序執(zhí)行的數(shù)據(jù)庫SQL命令,從而暴露后端數(shù)據(jù)庫。在網(wǎng)絡(luò)安全中模式匹配被用于檢測惡意數(shù)據(jù)包,大多數(shù)模式匹配采用靜態(tài)分析技術(shù),而在現(xiàn)有系統(tǒng)中使用的算法內(nèi)存占用率較高。文章提出了使用改進的Aho-Corasick模式匹配算法的SQL注入攻擊的檢測和防范技術(shù),使用SQLMAP工具和AIIDA-SQL技術(shù)檢查用戶生成的SQL查詢是否存在SQL注入。然后通過采用靜態(tài)模式匹配算法檢查用戶生成的SQL查詢,如果出現(xiàn)任何形式的新異常,則會將新的異常模式更新為現(xiàn)有的靜態(tài)模式列表,重復(fù)的關(guān)鍵字只存儲一次,整體內(nèi)存消耗降低。
關(guān)鍵詞:SQL注入攻擊;模式匹配算法;檢測與防范
中圖分類號:TN915.08 文獻標(biāo)志碼:A 文章編號:2095-2945(2017)35-0068-02
1 概述
SQL注入攻擊是應(yīng)用層的安全漏洞之一,是攻擊者從網(wǎng)站竊取身份和其他敏感信息最常用的攻擊方法之一,在開放Web應(yīng)用程序安全項目(OWASP)十大漏洞列表中排名第一[1],并在過去幾年中對多個網(wǎng)站造成大規(guī)模攻擊。Web應(yīng)用程序可以根據(jù)所部署應(yīng)用程序環(huán)境以多種方式讀取用戶輸入,SQL注入攻擊通過將攻擊代碼添加到Web輸入框或域名的查詢字符串中,運行惡意的SQL命令以達到獲取訪問或更改數(shù)據(jù)的最終目的。然而,由于Web應(yīng)用的廣泛性、漏洞的易發(fā)性,尤其是各種新動態(tài)Web技術(shù)的不斷出現(xiàn),對該SQL注入攻擊的檢測和防范技術(shù)研究提出了很大挑戰(zhàn)[2]。
2 SQL注入攻擊防范技術(shù)
研究人員提出了不同的工具和方法來檢測和防范SQL注入攻擊。在基于Web應(yīng)用的安全性問題中,SQL注入攻擊具有最高的優(yōu)先級。檢測和防范技術(shù)可以分為兩大類。一類是通過使用字符串匹配,模式匹配和查詢處理檢查異常SQL查詢結(jié)構(gòu)語句來檢測SQL注入攻擊。許多研究人員提出了集成數(shù)據(jù)挖掘和入侵檢測系統(tǒng)的不同方法,這種方法減少了誤報,最大限度地減少人為干預(yù),能更好地發(fā)現(xiàn)攻擊。另一類是基于模型的技術(shù),結(jié)合了靜態(tài)分析和運行時監(jiān)控的方法。在靜態(tài)階段,它使用靜態(tài)分析來構(gòu)建應(yīng)用程序在訪問數(shù)據(jù)庫的每個點合法生成的SQL查詢的模型。在運行時監(jiān)控或動態(tài)階段,它攔截所有的SQL查詢,然后發(fā)送到數(shù)據(jù)庫,每個查詢將針對靜態(tài)構(gòu)建模型進行檢查,違反模型的查詢被標(biāo)識為SQL注入攻擊[3]。
Bertino等[4]提出了使用數(shù)據(jù)挖掘檢測惡意數(shù)據(jù)庫事務(wù)模式的一般框架,以挖掘數(shù)據(jù)庫日志,形成可以對正常行為進行建模的用戶配置文件,并通過基于角色的訪問控制機制識別數(shù)據(jù)庫中的異常事務(wù)。Kamra等[5]提出了一種能夠識別入侵者的增強模型,其中沒有與每個用戶相關(guān)聯(lián)的角色。Bertino等[6]提出了一種基于異常檢測技術(shù)和關(guān)聯(lián)規(guī)則挖掘的框架來識別偏離正常數(shù)據(jù)庫應(yīng)用行為的查詢。范軒苗等[7]提出了一種高效的多模式匹配算法,通過構(gòu)建比較樹來提高比較效率。劉強等[8]對SQL注入攻擊建模采用攻擊樹建模的方法。而本文提出了一種使用Aho-Corasick模式匹配算法的靜態(tài)異常檢測技術(shù)。靜態(tài)檢測異常SQL查詢,如果任何查詢被識別為異常查詢,則將從SQL查詢創(chuàng)建新模式,并將其添加到靜態(tài)模式列表。Aho-Corasick算法的主要缺點是消耗大量內(nèi)存。
3 改進的Aho-Corasick模式匹配算法
本文提出了一種使用改進的Aho-Corasick模式匹配算法來檢測和防范SQL注入攻擊的有效算法,其基本架構(gòu)如圖1所示。在圖1中,首先給出輸入查詢,然后通過SQLMAP工具和AIIDA-SQL(Adaptive Intelligent Intrusion Detector Agent)技術(shù)檢查該查詢是否被注入。SQLMAP工具一種開源的滲透測試工具[9],可以發(fā)現(xiàn)和檢測出五種不同的SQL注入類型。
(1)基于布爾的盲查詢:用戶將想要檢索的基于布爾的盲查詢替換或附加在HTTP請求中受影響的參數(shù)中,包括含有SELECT子句的有效SQL語句,或其他任何SQL語句查詢。該工具能對于每個HTTP響應(yīng)的頭部或主體與原始請求進行比較,并且根據(jù)特征給出注入語句的輸出。用戶還可以提供一個字符串或正則表達式來匹配True頁面。為了SQLMAP工具能夠以最多七個HTTP請求獲取輸出的每個字符,就必須采用二分法算法。
(2)基于時間的盲查詢:這些查詢被替換或附加到HTTP請求中受影響的參數(shù)中,含有查詢的有效SQL語句中,該語句保留在DBMS后端并在幾秒數(shù)后返回結(jié)果。對于每個HTTP響應(yīng),比較HTTP響應(yīng)時間和原始請求,并且該工具能輸出注入語句特征字符,對于其他程序采用二分法算法。
(3)基于錯誤的查詢:這些查詢被替換或附加到特定于數(shù)據(jù)庫的錯誤消息、解析HTTP響應(yīng)頭和搜索DBMS錯誤消息中。這些錯誤消息包含注入的預(yù)定義字符串和子查詢語句輸出。在Web應(yīng)用程序中,可以用這種對已被配置為泄露后端數(shù)據(jù)庫管理系統(tǒng)錯誤消息的技術(shù)。
(4)基于UNION的查詢:這些查詢附加到受影響的參數(shù)中,包括以UNION ALL SELECT開頭的有效SQL語句中。當(dāng)網(wǎng)頁直接在for循環(huán)中傳遞時,將會應(yīng)用此技術(shù),以便將查詢輸出的每一行都打印在頁面內(nèi)容上。SQLMAP還可以利用部分的UNION查詢SQL注入漏洞,這些漏洞語句的輸出沒有在一個for結(jié)構(gòu)中循環(huán)時出現(xiàn),而只顯示在查詢輸出的第一個條目中。
(5)堆查詢:SQLMAP首先測試Web應(yīng)用程序是否支持堆查詢,如果支持堆查詢,那么它將被附加到HTTP請求中的受影響的參數(shù),分號(;)后面跟著要執(zhí)行的SQL語句。這種技術(shù)對于運行除SELECT之外的SQL語句(如數(shù)據(jù)定義或數(shù)據(jù)操作語句)非常有用。
SQLMAP工具的主要缺點是評估一個查詢大約需要15到20分鐘,這不能滿足WEB應(yīng)用的實時性要求。為了克服這個缺點,本文使用改進的Aho-Corasick模式匹配算法,以靜態(tài)模式列表檢查查詢。下面給出了相應(yīng)算法,為靜態(tài)模式列表創(chuàng)建了一個樹。endprint
搜索算法:
步驟1:將起始節(jié)點作為輸入?yún)?shù),要分析的元素號。
步驟2:如果元素號為-1,則起始元素數(shù)為等于輸入元素數(shù)。
步驟3:如果字符數(shù)組中的元素數(shù)量小于或等于輸入元素數(shù),則根據(jù)數(shù)組中的總元素和起始元素索引的差異計算匹配百分比,并返回null。
步驟4:驗證初始條件后移動到下一個元素,增加計數(shù)器,獲取開始節(jié)點的所有子節(jié)點,迭代所有子節(jié)點,以查找它是否與已有的模式匹配。
步驟5:如果提供的數(shù)組中元素匹配就遞歸調(diào)用具有子元素和索引的搜索方法。
步驟6:如果根據(jù)數(shù)組和起始元素索引中總元素的差異計算匹配百分比,則不再匹配。
步驟7:返回起始節(jié)點元素,使用靜態(tài)模式列表檢查查詢,如果查詢在列表中,則將被拒絕并給出匹配百分比。如果查詢不在列表中,但仍然被感染,然后管理員將在靜態(tài)模式列表中添加該查詢。
4 結(jié)果分析
在本節(jié)中,將基于內(nèi)存效率和準確率討論兩種SQL注入攻擊檢測技術(shù)的比較分析結(jié)果。在本系統(tǒng)中,以靜態(tài)結(jié)構(gòu)的形式存儲了數(shù)據(jù)庫中的靜態(tài)模式列表,并且在三維結(jié)構(gòu)中使用1次密鑰,所有重復(fù)的關(guān)鍵字只存儲一次,和現(xiàn)有系統(tǒng)內(nèi)存使用率相比較,顯而易見整體內(nèi)存消耗比較低。
對于SQLMAP工具和AIIDA-SQL技術(shù)的準確率,如圖2所示。無論AIIDA-SQL技術(shù)的準確率是多少,SQLMAP工具準確率均為100%的,因為在AIIDA-SQL中,考慮到一個情況不能確定為三個輸出,有時可能會給出不準確的結(jié)果。在圖中,X軸表示作為兩種技術(shù)輸入的查詢,Y軸表示兩種技術(shù)的精度百分比計算,直線顯示了SQLMAP工具的準確率,虛線顯示了AIIDA-SQL技術(shù)的準確率。
5 結(jié)束語
SQL注入是一種惡意用戶更改SQL語句以達到不同于原始目的的技術(shù),是Web應(yīng)用程序中最嚴重的安全威脅之一。本文提出了一種使用改進的Aho-Corasick模式匹配算法的靜態(tài)異常檢測技術(shù),相比AIIDA-SQL技術(shù)SQLMAP工具對于SQL注入攻擊檢測準確率為100%,檢測后,應(yīng)用改進算法來檢查查詢是否在列表中,與現(xiàn)有系統(tǒng)相比,整體內(nèi)存消耗較少。
參考文獻:
[1]2017年OWASP Top 10項目[EB/OL].http://www.owasp.org.cn/owasp-project/OWASPTop102017RC1V1.0.pdf.
[2]王丹,趙文兵,丁治明.Web應(yīng)用常見注入式安全漏洞檢測關(guān)鍵技術(shù)綜述[J].北京工業(yè)大學(xué)學(xué)報,2016,42(12):1822-1832.
[3]Halfond, W. G. and Orso. AMNESIA: Analysis and Monitoring for Neutralizing SQL-Injection Attacks[C].in Proceedings of the 20th IEEE/ACM international Conference on Automated Software Engineering, 2005.
[4]Bertino, E., Kamra, A, Terzi, E., and Vakali, A. Intrusion detection in RBAC-administered databases[C].in the Proceedings of the 21st Annual Computer Security Applications Conference, 2005.
[5]Kamra A, Bertino, E., and Lebanon. Mechanisms for Database Intrusion Detection and Response[C].In the Proceedings of the 2nd SIGMOD Ph. D Workshop on Innovative Database Research, 2008.
[6]Bertino,E.,Kamra,A,and Early,J.Profiling Database Application to Detect SQL Injection Attacks[C].In the Proceedings of 2007 IEEE International Performance, Computing, and Communications Conference,2007.
[7]范軒苗,鄭寧,范淵.Web入侵檢測系統(tǒng)高效多模式匹配算法[J].計算機應(yīng)用研究,2009,26(4):1528-1531.
[8]劉強,殷建平,蔡志平,等.基于不確定圖的網(wǎng)絡(luò)漏洞分析方法[J].軟件學(xué)報,2011,22(6):1398-1412.
[9]SQLMAP user's manual[EB/OL].http://sqlmap.org/.endprint