張澤亞 翟健宏
摘要:SQL注入是網(wǎng)絡(luò)上使用非常廣泛的攻擊手段,也是防御難度極大的網(wǎng)絡(luò)攻擊方式。在信息安全領(lǐng)域中,SQL注入因其適用范圍廣,操作門檻低 ,可造成的損失大而被視為對(duì)網(wǎng)絡(luò)安全威脅極大的一類攻擊方式。本論文的目的在于測(cè)試不同的機(jī)器學(xué)習(xí)算法對(duì)于SQL注入攻擊的區(qū)分能力。研究搜集了大量的SQL注入攻擊語(yǔ)句,選擇4種不同的機(jī)器學(xué)習(xí)模型建立了分類器,并使用上面收集的數(shù)據(jù)對(duì)其進(jìn)行了訓(xùn)練。最后,對(duì)4種算法所建立的分類器進(jìn)行了測(cè)試,得出了最適合檢測(cè)SQLMAP的機(jī)器學(xué)習(xí)算法是卷積神經(jīng)網(wǎng)絡(luò)(CNN)算法。
關(guān)鍵詞: ?SQL注入攻擊; 決策樹(shù); 機(jī)器學(xué)習(xí); 分類器算法; SQLMAP
【Abstract】?In the field of information security, SQL injection is regarded as a kind of attack mode which threatens the network security greatly because of its wide application range, low operation threshold and great loss. The purpose of this paper is to test different machine learning algorithms for distinguishing SQL injection attacks. The paper collects a large number of SQL injection attack statements, selects four different machine learning models to build classifiers, and uses the data collected above to train them. Finally, the paper tests the classifiers built by the four algorithms and concludes that the most suitable machine learning algorithm for detecting SQLMAP is convolutional neural network (CNN) algorithm.
【Key words】 ?SQL injection attack; decision-making tree; machine learning; classifier algorithm; SQLMAP
0 引 言
SQL注入是一種針對(duì)Web中數(shù)據(jù)庫(kù)漏洞的注入技術(shù)。其工作原理是,把想要執(zhí)行的命令添加到Web流量、域名或者查詢的字符串中來(lái)達(dá)到惡意欺騙的目的。攻擊者可以基于用戶發(fā)送的信息而得到的回復(fù)和反應(yīng),把攻擊性的代碼發(fā)送到Web數(shù)據(jù)庫(kù)服務(wù)器,其結(jié)果會(huì)導(dǎo)致系統(tǒng)崩潰、數(shù)據(jù)被破壞以及非公開(kāi)的信息被偷竊。
在國(guó)際上享有高度權(quán)威性的非營(yíng)利性組織開(kāi)放式Web應(yīng)用安全項(xiàng)目Open Web Application Security Project(OWASP)發(fā)布的十大攻擊行為中,SQL注入因其危害高,攻擊成本小,入門門檻低,適用范圍廣而多年來(lái)一直排名第一位。在可預(yù)見(jiàn)的數(shù)年內(nèi),SQL注入上升趨勢(shì)明顯,將會(huì)是一段時(shí)間內(nèi)互聯(lián)網(wǎng)安全的重大威脅。
SQL注入的破壞性極大。由于Web語(yǔ)言自身的缺陷,編程開(kāi)發(fā)人員的疏忽和安全意識(shí)不足,大多數(shù)的Web應(yīng)用系統(tǒng)都有被SQL注入攻擊的可能性。而一旦攻擊成功,那么攻擊者就可以在被攻擊的數(shù)據(jù)庫(kù)中隨意地修改、竊取、刪除數(shù)據(jù),甚至可以讓系統(tǒng)陷于癱瘓。SQL注入攻擊可以對(duì)人們財(cái)產(chǎn)、公司信譽(yù)、國(guó)家安全造成不可挽回的損失。
綜上所述,SQL注入的防御技術(shù)是一個(gè)極具研究?jī)r(jià)值的課題方向。在目前情況下,仍有很多問(wèn)題亟待解決:檢測(cè)率不夠高,誤報(bào)率過(guò)大,檢測(cè)效率不高,以及靜態(tài)防御條件下,數(shù)據(jù)庫(kù)更新慢,更新頻率快等。
本文研究旨在建立一個(gè)SQL注入攻擊的分類器。方法是使用機(jī)器學(xué)習(xí)的算法創(chuàng)建針對(duì)SQL注入攻擊的分類器,再將收集的樣本作為訓(xùn)練樣本對(duì)分類器進(jìn)行訓(xùn)練,最終得到檢測(cè)SQL注入的分類器。之后,研究將通過(guò)實(shí)驗(yàn)驗(yàn)證檢測(cè)比較不同機(jī)器學(xué)習(xí)算法在檢測(cè)SQL注入時(shí)的有效性。
1 相關(guān)工作
1.1 數(shù)據(jù)集的收集
原始數(shù)據(jù)的收集,是研究的基礎(chǔ),也是重要的組成部分。本實(shí)驗(yàn)選擇的數(shù)據(jù)是帶有SQL注入攻擊性的語(yǔ)句,但是這種數(shù)據(jù)在網(wǎng)上很少,根本無(wú)法滿足實(shí)驗(yàn)的需要。而且,網(wǎng)上的數(shù)據(jù)還可能存在不全面,及未能包含所有種類的SQL注入攻擊等缺點(diǎn)。為了使本文的數(shù)據(jù)集數(shù)量充足、種類全面、實(shí)用性強(qiáng)、具有說(shuō)服力,收集數(shù)據(jù)的方法和使用如圖1所示。由圖1可見(jiàn),對(duì)此可做闡釋分述如下。
(1)利用SQLMAP掃描特定的網(wǎng)站,再利用wireshark進(jìn)行捕獲;研究選擇的是http://www.shiyanbar.com實(shí)驗(yàn)吧網(wǎng)站。文中掃描使用過(guò)的命令詳見(jiàn)表1。
此外,仍需考慮一個(gè)問(wèn)題,即攻擊的語(yǔ)句是無(wú)窮無(wú)盡的,每種攻擊方式也有許多重復(fù)和相似的表達(dá)方式。例如,重言式攻擊,只要條件中有永真的等式就可以了。但是“1=1”和“999=999”,雖是2個(gè)等式,但顯而易見(jiàn)的是將這兩者都列舉出來(lái)是沒(méi)有意義的,研究中只需選取其中之一就可以代表這一類。至此,研究得到的攻擊載荷的判斷依據(jù)見(jiàn)表5。
綜上論述可知,測(cè)試用例的生成由表達(dá)式和分類依據(jù)共同決定,表達(dá)式?jīng)Q定測(cè)試用例由哪些攻擊載荷根據(jù)何種規(guī)則生成,分類依據(jù)決定實(shí)際使用的攻擊載荷。例如,對(duì)表達(dá)式S(LG) * S(IE) && S(LG) * S(NE)的實(shí)例化可具體表述為:S(LG)中任選一個(gè)關(guān)鍵字,如“and”,S(IE)中任選一類攻擊載荷,如“1=1”,S(NE)中任選一類攻擊載荷,如“2<1”,則生成的攻擊輸入為“and 1=1 and 2<1”,該攻擊輸入即可作為檢測(cè)基于布爾盲注的測(cè)試用例。以此類推,不斷循環(huán)S(LG)、S(IE)和S(NE)中的載荷并根據(jù)表達(dá)式生成測(cè)試用例,最終生成全部的用于檢測(cè)基于布爾盲注的測(cè)試用例。
通過(guò)上述化簡(jiǎn)操作過(guò)程,研究中實(shí)例化生成了共7 000條SQL注入的命令語(yǔ)句。
(3)在網(wǎng)上收集了一些現(xiàn)有的SQL注入語(yǔ)句。主要是在Github上和國(guó)外漏洞提交平臺(tái)exploit-db上收集SQL注入的攻擊語(yǔ)句。但是數(shù)量有限,大約有2 000條。
1.2 分類器的建立
分類器是本系統(tǒng)的核心部分,并將直接決定最后分類器的效果。本文將分別嘗試LSTM、CNN、SVM和KNN四種算法,比較其性能效果。文中將針對(duì)這4種模型,研究推得剖析概論如下。
(1)長(zhǎng)短時(shí)記憶算法(LSTM)模型。這是一種特殊的神經(jīng)網(wǎng)絡(luò)模型,最早由Hochreiter 和Schmidhuber 提出的[2],并經(jīng)多次演變改進(jìn)而得以完善。已在各研究領(lǐng)域得到了廣泛使用。
LSTM的特點(diǎn)是可以將前面的所有單個(gè)樣本都作為一份“經(jīng)驗(yàn)”,用于處理下一個(gè)樣本。但又不會(huì)將其完全繼承,而是有選擇性地“遺忘”掉其中一部分。
(2)卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型。這是一種多層的神經(jīng)網(wǎng)絡(luò),由卷積層、池化層、全連接層、輸出層四個(gè)部分組成。一般情況下,卷積神經(jīng)網(wǎng)絡(luò)可以被視作是一種使用重復(fù)神經(jīng)元的許多相同拷貝的運(yùn)算網(wǎng)絡(luò)結(jié)構(gòu)。其特點(diǎn)是允許網(wǎng)絡(luò)擁有大量神經(jīng)元并表達(dá)計(jì)算大型模型,同時(shí)保持實(shí)際參數(shù)的數(shù)量來(lái)描述神經(jīng)元行為方式的值 ,而且只需要相當(dāng)小的學(xué)習(xí)。這種具有相同神經(jīng)元的多個(gè)拷貝技巧大致類似于數(shù)學(xué)和計(jì)算機(jī)科學(xué)中的函數(shù)的抽象。類似地,卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過(guò)一次的神經(jīng)元會(huì)在其它結(jié)構(gòu)中多次重復(fù)地得到使用,這也使得模型的準(zhǔn)確率和學(xué)習(xí)效率會(huì)更高。
(3) Support Vector Machine(SVM)模型,即支持向量機(jī)。這是一種有監(jiān)督的模式分類方法。SVM的研究論題可以用一個(gè)經(jīng)典的二分類問(wèn)題加以描述。一個(gè)二分類問(wèn)題示意如圖3所示。在圖3中,兩類的圓點(diǎn)顯然是可以被一條直線分開(kāi)的,是模式識(shí)別領(lǐng)域中的線性可分問(wèn)題。但是也有許多條直線可以將2類數(shù)據(jù)分開(kāi)。圖3(b)和圖3(c)分別給出了2種不同的分類方案,其中黑色實(shí)線為分界線,研究將其稱為決策面。每個(gè)決策面對(duì)應(yīng)了一個(gè)線性分類器。雖然2種分類方法的結(jié)果相同,但如果考慮潛在的其它數(shù)據(jù),則兩者性能卻是有差別的。
經(jīng)由SVM算法的評(píng)判可知,圖3中的分類器(b)在性能上要優(yōu)于分類器(c),判別依據(jù)是圖3(b)的分類間隔比圖3(c)要大。這里就要用到第一個(gè)SVM中的一個(gè)概念:分類間隔。在保證決策面方向不變、且分類正確的情況下移動(dòng)決策面,圖中2條虛線之間的實(shí)線與兩條虛線的距離相等,在決策面不改變的條件下,這條實(shí)線就是求解該問(wèn)題的最優(yōu)決策面。2條虛線到實(shí)線的距離就稱為分類間隔。一般來(lái)說(shuō),分類間隔越大,得到的分類效果越好,故而最大間隔就是SVM的最優(yōu)解。從圖3中可以看到,有一些樣本點(diǎn)是正好穿過(guò)虛線的,可以說(shuō),這些樣本點(diǎn)決定了虛線、及實(shí)線的位置。這樣的樣本點(diǎn)就是支持向量。通過(guò)前文的例子可以看出,支持向量最后決定了最優(yōu)決策面的位置。
簡(jiǎn)單地說(shuō),SVM方法就是提升樣本的維度,使得原先在低維線性不可分的數(shù)據(jù)通過(guò)升維的方法,在高維變得線性可分,其分類的最優(yōu)解就是最優(yōu)超平面。升維就是把樣本投向高維的映射。如果在低維度時(shí),由于分類樣本過(guò)于復(fù)雜而無(wú)法分類,那么支持向量機(jī)的做法就是提高其維度,使不同的樣本具有更多的特征提取因素,從而在高維空間進(jìn)行分類。高維空間中的分類間隔不再是一條線,而是一個(gè)超平面。核函數(shù)可以提升樣本的維度,但同時(shí)盡量維持不增加樣本的計(jì)算難度。SVM方法中核函數(shù)的加入還可以避免維數(shù)災(zāi)難。本文使用的是sigmoid核函數(shù)。
(4)鄰近算法(KNN)?;蛘哒f(shuō)K最近鄰分類算法,這是一種經(jīng)典的機(jī)器學(xué)習(xí)算法。所謂K最近鄰,就是當(dāng)要對(duì)某一樣本個(gè)體進(jìn)行歸類時(shí),研究判斷其屬于哪一類的依據(jù)是,選擇k個(gè)與其最接近的若干個(gè)樣本,再依據(jù)這些樣本歸屬的類別,來(lái)判斷此研究個(gè)體屬于哪一類。
這里,舉出一個(gè)K鄰近的實(shí)例如圖4所示。當(dāng)要判斷樣本個(gè)體Xu屬于哪一類時(shí),判斷的方法可表述為:先選擇5個(gè)距離Xu最近的樣本(這里的“5”就是研究中的K值),然后觀察到這5個(gè)樣本中,4個(gè)屬于w1,1個(gè)屬于w3,因此判定Xu屬于w1類。再經(jīng)分析可知在距離Xu最近的5個(gè)樣本中,屬于w1的最多,故而判斷Xu屬于w1的概率最大。
通過(guò)上面的例子可以看出,KNN算法在判斷某一未知分類的樣本屬于哪一類時(shí),其方法就是選擇距離此樣本最近的k個(gè)已知類別的樣本,這里的k由研究者本人決定。k值不同,分類結(jié)果也有可能不同。統(tǒng)計(jì)這k個(gè)已知樣本的分類結(jié)果,即可判斷該未知樣本歸屬為k個(gè)樣本中個(gè)數(shù)最多的那一類。
2 實(shí)驗(yàn)測(cè)試
2.1 評(píng)估的標(biāo)準(zhǔn)
研究中,要對(duì)測(cè)試樣本進(jìn)行標(biāo)記。樣本分為2類。一類標(biāo)記為0,即普通數(shù)據(jù);另一類標(biāo)記為1,即具有SQL注入攻擊性質(zhì)的數(shù)據(jù)。如圖5所示。
由圖6可以發(fā)現(xiàn),使用相同的10 000條數(shù)據(jù)對(duì)4個(gè)分類器進(jìn)行訓(xùn)練,訓(xùn)練時(shí)間最短的是CNN。這說(shuō)明,在同樣的條件下,如果使用CNN作為分類器的算法,則分類的效率是最高的。
2.4 模型的測(cè)試
在模型訓(xùn)練結(jié)束后,接著對(duì)其分類效果進(jìn)行了測(cè)試。測(cè)試方法是使用wireshark捕獲5 000條正常的數(shù)據(jù),與原始樣本中剩下的SQL注入攻擊語(yǔ)句樣本混合在一起,使3個(gè)分類器分別進(jìn)行分類,觀察其分類效果。研究后得到的4種模型的測(cè)試結(jié)果如圖7所示。4種模型的錯(cuò)報(bào)率和誤報(bào)率的結(jié)果數(shù)值見(jiàn)表6。4種模型的準(zhǔn)確率如圖8所示。
由圖7、圖8、表6分析可知,無(wú)論是從漏報(bào)率、誤報(bào)率,還是從準(zhǔn)確率上看CNN模型是針對(duì)SQL注入檢測(cè)的最好模型,;SVM的分類效果次之,LSTM相比于傳統(tǒng)的機(jī)器學(xué)習(xí)算法(SVM與KNN)并沒(méi)有明顯的優(yōu)勢(shì),KNN的分類效果較差。
研究中,還將各個(gè)模型分類錯(cuò)誤的SQL語(yǔ)句(包括漏報(bào)和錯(cuò)報(bào)的)進(jìn)行了梳理和分類,分類結(jié)果如圖9所示。
由圖9可以看出,4種模型在聯(lián)合式注入、基于時(shí)間盲注和基于布爾的盲注入檢測(cè)時(shí)效果非常好,對(duì)于顯錯(cuò)式注入的判斷效果是最差的。
3 結(jié)束語(yǔ)
研究中,設(shè)計(jì)提出了一個(gè)模型來(lái)實(shí)例化生成SQL注入攻擊語(yǔ)句,在收集到足夠多的語(yǔ)句后,研究比較了4種不同機(jī)器學(xué)習(xí)算法在SQL注入攻擊的檢測(cè)上的性能。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),CNN算法的訓(xùn)練時(shí)間最短,分類的效果最好。而LSTM在SQL注入分類的效果上,卻并未顯現(xiàn)出明顯優(yōu)勢(shì)。
參考文獻(xiàn)
[1] ? WANG Jie, PHAN R C W, WHITLEY J N, et al. Augmented attack tree modeling of SQL injection attacks[C]//2010 2nd IEEE International Conference on Information Management and Engineering. Chengdu, China: IEEE,2010, 437: 1009.
[2]HOCHREITER S, SCHMIDHUBER J. Long short-term memory[J]. Neural Computation, 1997, 9(8):1735.
[3]MCWHIRTER P R,KIFAYAT K, SHI Qi, et al. SQL injection attack classification through the feature extraction of SQL query strings using a Gap-Weighted String.Subsequence Kernel[J]. Journal of Information Security and Applications, 2018,40:199.
[4] 張志超,王丹,趙文兵,等. 一種基于神經(jīng)網(wǎng)絡(luò)的SQL 注入漏洞的檢測(cè)模型[J]. 計(jì)算機(jī)與現(xiàn)代化, 2016(10):67.
[5]張燕. 數(shù)據(jù)挖掘提取查詢樹(shù)特征的SQL 注入攻擊檢測(cè)[J]. 電子技術(shù)應(yīng)用, 2016,42(3):90.
[6]王苗苗,錢步仁,許瑩瑩,等. 基于通用規(guī)則的SQL 注入攻擊檢測(cè)與防御系統(tǒng)的研究[J]. 電子設(shè)計(jì)工程, 2017,25(5):24.
[7]韓宸望,林暉, 饒緒黎, 等. 基于代理模式的SQL注入過(guò)濾方法[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2018,27(1):98.
[8]張慧琳,丁羽,張利華,等. 基于敏感字符的SQL注入攻擊防御方法[J]. 計(jì)算機(jī)研究與發(fā)展,2016,53(10):2262.
[9]韓濤. 基于解析樹(shù)的SQL 注入檢測(cè)方法研究[J]. 哈爾濱:哈爾濱工業(yè)大學(xué),2013.
[10]LIU Pengfei, QIU Xipeng, CHEN Xinchi, et al. Multi-timescale long short-term memory neural network for modelling sentences and documents[C]// Conference on Empirical Methods in Natural Language Processing. Lisbon, Portugal: IEEE,2015:2326.