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