劉紹廷 楊孟英 朱廣全 袁媛
摘 要:本文以結(jié)構(gòu)化查詢語言(SQL)為研究對象,利用詞袋(BoW)模型和詞頻-逆文檔頻率(TF-IDF)算法兩種方法進(jìn)行SQL語句向量化。文本向量化后,特征矩陣維數(shù)大大增加,很難在后面數(shù)據(jù)訓(xùn)練和預(yù)測中使用。為解決這個(gè)問題,對大量SQL注入攻擊語句與用戶正常輸入的SQL語句進(jìn)行研究分析,概括出28個(gè)特征關(guān)鍵詞。同時(shí),使用決策樹、XGBoost和隨機(jī)森林三個(gè)分類模型,對數(shù)據(jù)集進(jìn)行模型訓(xùn)練及預(yù)測。實(shí)驗(yàn)結(jié)果表明:與詞袋(BoW)模型相比,詞頻-逆文檔頻率(TF-IDF)算法的準(zhǔn)確率、召回率、F分?jǐn)?shù)、精確率均提高了10%左右。此外,ROC曲線也說明了該方法的有效性。
關(guān)鍵詞:TF-IDF;SQL注入攻擊;文本向量化;機(jī)器學(xué)習(xí)
中圖分類號:TP393.08文獻(xiàn)標(biāo)識(shí)碼:A文章編號:1003-5168(2021)08-0023-05
Application of Machine Learning in SQL Injection Attack Detection
LIU Shaoting YANG Mengying ZHU Guangquan YUAN Yuan
(Hebei Institute of Mechanical and Electrical Technology,Xingtai Hebei 054000)
Abstract: This paper took structured query language (SQL) as the research object, and used BoW model and TF-IDF algorithm to vectorize SQL statements. After the text is quantized, the dimension of feature matrix is greatly increased, which is difficult to use in the data training and prediction. To solve this problem, a large number of SQL injection attack statements and normal SQL statements were analyzed, and 28 key words were summarized. At the same time, the data set was trained and predicted by using three classification models: decision tree, XGBoost and random forest. The experimental results show that the accuracy, recall rate, f score and accuracy rate of TF-IDF algorithm are improved by about 10% compared with the BoW model. In addition, ROC curve also shows the effectiveness of the method.
Keywords: TF-IDF;SQL injection attacks;text vectorization;machine leaning
隨著計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù)的廣泛應(yīng)用,各種互聯(lián)網(wǎng)服務(wù)水平不斷提升。但由于設(shè)計(jì)人員和程序員的疏忽、水平和經(jīng)驗(yàn)參差不齊等,部分應(yīng)用程序存在大量的安全漏洞。依據(jù)2017年打開Web應(yīng)用程序安全項(xiàng)目(Open Web Application Security Project,OWASP)互聯(lián)網(wǎng)應(yīng)用安全風(fēng)險(xiǎn)評估的結(jié)果,注入類攻擊在排名前十的互聯(lián)網(wǎng)攻擊行為中名列第一位。其中,結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)注入攻擊作為一種常見的應(yīng)用層注入攻擊,備受學(xué)術(shù)界和工業(yè)界的關(guān)注[1]。SQL注入是網(wǎng)絡(luò)上經(jīng)常使用的攻擊手段,具有變種極多、攻擊簡單、危害極大的特點(diǎn)。利用機(jī)器學(xué)習(xí)檢測SQL注入攻擊已成為一種趨勢。
1 基本知識(shí)原理及分類
1.1 SQL注入攻擊原理及分類
SQL注入攻擊是黑客對數(shù)據(jù)庫進(jìn)行攻擊的常用手段之一。SQL注入的根本原因是代碼沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行驗(yàn)證,直接拼接到查詢語句中。利用SQL注入漏洞,攻擊者可以在應(yīng)用的查詢語句中輸入自己的SQL代碼,并傳遞給后臺(tái)SQL服務(wù)器加以解析執(zhí)行,根據(jù)程序返回的結(jié)果,獲得某些其想得知的數(shù)據(jù),結(jié)果是導(dǎo)致系統(tǒng)崩潰、數(shù)據(jù)被破壞以及非公開的信息被偷竊,危害網(wǎng)站安全[2]。
SQL注入攻擊可以細(xì)分為多種類型,常見的有聯(lián)合注入、報(bào)錯(cuò)注入、布爾注入、時(shí)間注入、堆疊注入、寬字節(jié)注入、二次注入、cookie注入等[3]。
聯(lián)合注入:用于將多個(gè)select語句的結(jié)果組合起來;每條select語句必須擁有相同的列、相同數(shù)量的列表達(dá)式、相同的數(shù)據(jù)類型;出現(xiàn)的次序要一致,長度不一定相同。
報(bào)錯(cuò)注入:原理是利用數(shù)據(jù)庫的某些機(jī)制,通過人為制造錯(cuò)誤條件,將查詢結(jié)果通過錯(cuò)誤信息顯示出來;MySQL中通常用到updatexml、floor和exp三個(gè)函數(shù)。
布爾注入:指代碼存在SQL注入漏洞,然而頁面既不會(huì)回顯數(shù)據(jù),也不會(huì)回顯錯(cuò)誤信息,只返回“真”和“假”;通過構(gòu)造語句,來判斷數(shù)據(jù)庫信息的正確性,通過頁面返回的“真”和“假”來識(shí)別判斷是否正確。
時(shí)間注入:代碼存在SQL注入漏洞,然而頁面既不會(huì)回顯數(shù)據(jù),也不會(huì)回顯錯(cuò)誤信息,語句執(zhí)行之后不提示真假,不能通過頁面來進(jìn)行判斷;通過構(gòu)造語句、頁面響應(yīng)的時(shí)長來判斷信息。
堆疊注入:在SQL語句中,語句的結(jié)束都是以“;”結(jié)尾的,但是如果我們在“;”后面再加上一條SQL語句,兩條語句會(huì)一起執(zhí)行,這就造成了堆疊注入。
寬字節(jié)注入:GB2312、GBK、GB18030、BIG5、Shift_JIS等這些都是常說的寬字節(jié),實(shí)際上只有兩字節(jié);寬字節(jié)帶來的安全問題主要是吃ASCII字符(一字節(jié));寬字節(jié)注入發(fā)生就是PHP發(fā)送請求到MYSQL時(shí)字符集使用character_set_client設(shè)置值進(jìn)行了一次編碼。
二次注入:二次注入是通過與數(shù)據(jù)庫服務(wù)器進(jìn)行交互的過程再次進(jìn)行注入。
cookie注入:cookie注入的原理是更改本地的cookie,從而利用cookie來提交非法語句。
1.2 機(jī)器學(xué)習(xí)分類算法
隨著大數(shù)據(jù)技術(shù)的飛速發(fā)展和機(jī)器學(xué)習(xí)在各個(gè)領(lǐng)域的應(yīng)用不斷成熟,基于機(jī)器學(xué)習(xí)檢測與防御SQL注入攻擊問題,已經(jīng)成為網(wǎng)絡(luò)安全領(lǐng)域一個(gè)非常重要的發(fā)展趨勢。近年來,多數(shù)研究者采用機(jī)器學(xué)習(xí)[4]、深度學(xué)習(xí)[5]、神經(jīng)網(wǎng)絡(luò)[6]等解決SQL注入攻擊檢測問題。本文采用的機(jī)器學(xué)習(xí)算法為決策樹、隨機(jī)森林、XGBoost[7]。
1.2.1 決策樹。決策樹是機(jī)器學(xué)習(xí)中一種基本的分類和回歸算法,是依托策略抉擇而建立起來的樹。用于分類的算法主要是借助每一個(gè)葉子節(jié)點(diǎn)對應(yīng)一種屬性判定,通過不斷判定導(dǎo)出最終的決策;用于回歸的算法則是用均值函數(shù)進(jìn)行多次二分,用子樹中數(shù)據(jù)的均值進(jìn)行回歸。決策樹的主要優(yōu)點(diǎn)是模型具有可讀性,分類速度快,易于理解。
1.2.2 隨機(jī)森林。隨機(jī)森林是用隨機(jī)的方式建立一個(gè)森林,森林由諸多決策樹組成,隨機(jī)森林的每一棵決策樹之間是沒有關(guān)聯(lián)的。通過多棵樹的集中決策來對分類問題或者回歸問題進(jìn)行建模,是一種集成學(xué)習(xí)算法。為了保證樹與樹之間的差異性,對每棵樹從訓(xùn)練集和劃分屬性上引入了隨機(jī)性。
1.2.3 XGBoost。極端梯度提升(Xtreme Gradient Boosting,XGBoost)經(jīng)常被用在一些比賽中,效果顯著。XGBoost是大規(guī)模并行Boosted Tree的工具,是目前最快最好的開源Boosted Tree工具包,比常見的工具包快10倍以上。XGBoost應(yīng)用的算法是梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)的改進(jìn),既可以用于分類,也可以用于回歸問題中。
1.3 數(shù)據(jù)預(yù)處理:文本特征提取和向量化
1.3.1 詞袋模型。詞袋(Bag of Words,BoW)模型假定對于一個(gè)文檔,忽略它的單詞順序和語法、句法等要素,將其僅僅看作是若干個(gè)詞匯的集合,文檔中每個(gè)單詞的出現(xiàn)都是獨(dú)立的,不依賴于其他單詞是否出現(xiàn)。詞袋模型首先會(huì)進(jìn)行分詞,在分詞之后,通過統(tǒng)計(jì)每個(gè)詞在文本中出現(xiàn)的次數(shù),就可以得到該文本基于詞的特征,如果將各個(gè)文本樣本的這些詞與對應(yīng)的詞頻放在一起,就是常說的向量化。
1.3.2 TF-IDF算法。詞頻-逆文檔頻率(Term Frequency-Inverse Document Frequency,TF-IDF)算法通過分配權(quán)重來反映每個(gè)詞的重要程度,根據(jù)權(quán)重對一篇文章中的所有詞語從高到低進(jìn)行排序,權(quán)重越高,說明重要性越高。算法分為兩部分:詞頻(TF)和逆文檔頻率(IDF)。[TF]、[IDF]、[TF-IDF]的相關(guān)計(jì)算公式為:
[TF=某個(gè)詞在文章中的出現(xiàn)次數(shù)文章總詞數(shù)]? (1)
[IDF=log文章總數(shù)包含該詞的文章數(shù)+1]? ? ? ? ? ? ? ?(2)
[TF-IDF=TF×IDF]? ? ? ? ? ? ? ? ? ? ? ? ? (3)
由式(1)、式(2)、式(3)可知,當(dāng)一個(gè)詞的文檔頻率越高并且新鮮度較高(即普遍度低)時(shí),其詞頻-逆文檔頻率的值越高。詞頻-逆文檔頻率兼顧詞頻與新鮮度,過濾一些常見詞,保留能提供更多信息的重要詞。
2 實(shí)驗(yàn)過程與結(jié)果分析
2.1 實(shí)驗(yàn)平臺(tái)
實(shí)驗(yàn)在同一臺(tái)計(jì)算機(jī)上進(jìn)行,操作系統(tǒng)為Windows 10。需要配置的軟件是Anaconda3,實(shí)驗(yàn)通過Python 3.7實(shí)現(xiàn)。
2.2 數(shù)據(jù)收集
本文主要利用公開的數(shù)據(jù)集進(jìn)行相關(guān)驗(yàn)證實(shí)驗(yàn),主要利用的是GitHub上的開源項(xiàng)目數(shù)據(jù)集,由SQL注入攻擊數(shù)據(jù)集和正常用戶輸入的SQL語句數(shù)據(jù)集組成。本次實(shí)驗(yàn)所需的訓(xùn)練集為從SQL注入攻擊數(shù)據(jù)集選取的37 093條,從正常用戶輸入的SQL語句中選取32 411條,共計(jì)69 504條。本次實(shí)驗(yàn)的驗(yàn)證集合為從SQL注入攻擊數(shù)據(jù)集選取30 154條,從正常用戶輸入的SQL語句中選取35 330條,共計(jì)65 484條。
2.3 文本向量化
第一種方式:分別利用BoW模型和TF-IDF算法[8],將所有的SQL語句分詞后,提取出所有不同的詞,不同詞的個(gè)數(shù)即是特征的維數(shù),而每個(gè)SQL語句中如果存在某個(gè)詞,就將特征中相應(yīng)的位置設(shè)置為該詞出現(xiàn)的次數(shù)或詞頻-逆文檔頻率,否則設(shè)置為0,這種方式可以確保特征向量的分布完全覆蓋數(shù)據(jù)集中的信息。但是,如果SQL數(shù)據(jù)集的數(shù)據(jù)量較大,就會(huì)造成特征維數(shù)激增。在SQL注入攻擊訓(xùn)練數(shù)據(jù)集向量化過程中,特征維數(shù)是12 599,對應(yīng)的向量矩陣是32 411×12 599;正常用戶SQL語句訓(xùn)練集,產(chǎn)生的特征維數(shù)是63 395維,對應(yīng)的向量矩陣是32 411×63 395。第二種方式是指定關(guān)鍵詞集,系統(tǒng)利用關(guān)鍵詞集中的詞將SQL語句轉(zhuǎn)為特征向量。選用SQL注入中常用的28個(gè)關(guān)鍵詞作為特征向量:'and';'id';'union';'sleep';'concat';'delay';'information_schema';'or';‘from;'where';'order';'like';'substring';'char';'load_file';'by';'group';'delete';'chr';'delete';'version';'limit';'insert';'update';'exec';'in';'if';'ascii'。從前面生成的向量矩陣中選擇關(guān)鍵詞特征向量組成新的特征矩陣作為訓(xùn)練集和測試集。經(jīng)過處理后,對應(yīng)特征矩陣維數(shù)如表1所示。經(jīng)過處理后的數(shù)據(jù)特征維數(shù)大大減少,并且維數(shù)相同,便于后面數(shù)據(jù)的訓(xùn)練。
2.4 訓(xùn)練數(shù)據(jù)與預(yù)測數(shù)據(jù)
利用BoW模型和TF-IDF算法后,使用指定關(guān)鍵詞法進(jìn)行降維,得到的數(shù)據(jù)分別使用決策樹、隨機(jī)森林、XGBoost三種分類器進(jìn)行模型訓(xùn)練,并對測試數(shù)據(jù)進(jìn)行驗(yàn)證模型預(yù)測,最后對實(shí)驗(yàn)結(jié)果進(jìn)行評估分析。
2.5 評價(jià)指標(biāo)
文本分類領(lǐng)域一般采用精準(zhǔn)率(Precision)、召回率(Recall)、準(zhǔn)確率(Accuracy)和F分?jǐn)?shù)(F-Score)、受試者工作特征(Receiver Operating Characteristic,ROC)曲線等衡量機(jī)器學(xué)習(xí)分類的效果。準(zhǔn)確率和召回率是廣泛用于信息檢索和文本分類領(lǐng)域的兩個(gè)度量值,用來評價(jià)結(jié)果的質(zhì)量[9]。
精準(zhǔn)率(Precision)又叫查準(zhǔn)率,是針對預(yù)測結(jié)果而言的,其含義是在所有被預(yù)測為正的樣本中實(shí)際為正的樣本的概率,意思就是在預(yù)測為正樣本的結(jié)果中,有多少把握可以預(yù)測正確。精準(zhǔn)率公式為:
[Pr=TPTP+FP]? ? ? ? ? ? ? ? ? ? ? ? ? ? (4)
式中:[Pr]指精準(zhǔn)率;[TP]指被判定為正樣本,事實(shí)上也是正樣本;[FP]指被判定為正樣本,但事實(shí)上是負(fù)樣本。
召回率(Recall)又叫查全率,是針對原樣本而言的,其含義是在實(shí)際為正的樣本中被預(yù)測為正樣本的概率,計(jì)算公式為:
[R=TP(TP+FN)]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (5)
式中:[R]指召回率;[FN]指被判定為負(fù)樣本,但事實(shí)上是正樣本。
準(zhǔn)確率(Accuracy)是預(yù)測正確的結(jié)果占總樣本的百分比,計(jì)算公式為:
[Acc=(TP+TN)(TP+TN+FP+FN)]? ? ? ? ? ? ? ? ? (6)
式中:[Acc]指準(zhǔn)確率;[TN]指被判定為負(fù)樣本,事實(shí)上也是負(fù)樣本;[FP]指被判定為正樣本,但事實(shí)上是負(fù)樣本。
[F]分?jǐn)?shù)是模型的準(zhǔn)確率和召回率的調(diào)和平均數(shù)。[F]分?jǐn)?shù)計(jì)算公式如式(7)所示。
[F=Pr×R×2Pr+R]? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(7)
此外,接受者操作特性曲線被用于機(jī)器學(xué)習(xí)領(lǐng)域,用來評判分類、檢測結(jié)果的好壞,其是非常重要和常見的統(tǒng)計(jì)分析方法。ROC曲線根據(jù)學(xué)習(xí)器的預(yù)測結(jié)果對樣例進(jìn)行排序,按此順序逐個(gè)把樣本作為正例進(jìn)行預(yù)測,每次計(jì)算出兩個(gè)重要量的值,即TPR(True Positive Rate)和FPR(False Positive Rate)。其中,TPR可以理解為所有正類中,有多少被預(yù)測成正類(正類預(yù)測正確);FPR可以理解為所有反類中,有多少被預(yù)測成正類(正類預(yù)測錯(cuò)誤)。分別以它們?yōu)闄M、縱坐標(biāo)作圖。
AUC(Area Under Curve)為ROC曲線下的面積,介于0.1和1之間,可以直觀地評價(jià)分類器的好壞,數(shù)值越大,分類器效果越好。
2.6 實(shí)驗(yàn)結(jié)果
將經(jīng)過向量化處理的數(shù)據(jù)集分別使用決策樹、隨機(jī)森林、XGBoost三種分類器進(jìn)行模型訓(xùn)練及預(yù)測。利用上面評價(jià)指標(biāo)進(jìn)行評價(jià),結(jié)果如表2和表3所示。
利用BoW模型向量后得到三種機(jī)器學(xué)習(xí)分類方法的ROC曲線,如圖1至圖3所示,利用TF-IDF模型向量化后得到三種機(jī)器學(xué)習(xí)分類方法的ROC曲線,如圖4至圖6所示。
對表1、表2及圖1至圖6進(jìn)行分析發(fā)現(xiàn),使用TF-IDF向量化方法比BoW向量法預(yù)測的結(jié)果有較大提升,這是因?yàn)锽oW只創(chuàng)建了一組向量,其中包含文檔中單詞出現(xiàn)的次數(shù),而TF-IDF模型還包含關(guān)于更重要的單詞和不重要的單詞信息。BoW模型向量很容易解釋,然而,在機(jī)器學(xué)習(xí)模型中,TF-IDF通常表現(xiàn)得更好,通過本次試驗(yàn)也得到了很好地驗(yàn)證。
此外,隨機(jī)森林算法略優(yōu)于決策樹和XGBoost。從精準(zhǔn)率、召回率、準(zhǔn)確率和F分?jǐn)?shù)(F-Score)4個(gè)指標(biāo)來看,隨機(jī)森林四項(xiàng)指標(biāo)均優(yōu)于決策樹和XCBoost。從ROC曲線可以看出,隨機(jī)森林算法AUC為0.99,決策樹和XGBoost的AUC為0.98。
3 結(jié)語
本文利用常見機(jī)器學(xué)習(xí)分類方法進(jìn)行SQL注入攻擊檢測,首先將SQL注入攻擊語句中的文本向量化,分別采用BoW模型和TF-IDF兩種文本向量化方法,然后根據(jù)SQL注入常用的28個(gè)關(guān)鍵詞進(jìn)行特征向量提取,組成訓(xùn)練集和測試集。利用決策樹、隨機(jī)森林、XGBoost三個(gè)模型對數(shù)據(jù)集進(jìn)行模型訓(xùn)練及預(yù)測??傮w來看,本文設(shè)計(jì)的SQL注入攻擊檢測方法的關(guān)鍵步驟在于將原SQL語句文本向量化后進(jìn)行降維處理,提取SQL注入關(guān)鍵詞作為特征點(diǎn),保證訓(xùn)練集和測試集特征維數(shù)的一致。同時(shí),通過兩種文本向量化方法對比,TF-IDF較BoW模型在文本向量化過程中發(fā)揮的效果更好。
參考文獻(xiàn):
[1]蔣磊.基于機(jī)器學(xué)習(xí)的SQL注入檢測技術(shù)研究[D].南京:南京郵電大學(xué),2017:12-20.
[2]李小花.基于程序分析的SQL注入防御系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長沙:湖南大學(xué),2010:18-30.
[3]吳少華,程書寶,胡勇.基于SVM的Web攻擊檢測技術(shù)[J].計(jì)算機(jī)科學(xué),2015(1):362-364.
[4]張澤亞,翟健宏.基于機(jī)器學(xué)習(xí)的SQL攻擊檢測技術(shù)研究[J].智能計(jì)算機(jī)與應(yīng)用,2020(3):356-361.
[5]曹曉斌.基于深度學(xué)習(xí)的SQL注入檢測研究[D].南寧:廣西大學(xué),2020:22-37.
[6]張志超,王丹,趙文兵,等.一種基于神經(jīng)網(wǎng)絡(luò)的SQL注入漏洞的檢測模型[J]計(jì)算機(jī)與現(xiàn)代化,2016(10):67-71.
[7]UWAGBOLE S O,BUCHANAN W J,LU F. Applied Machine Learning predictive analytics to SQL Injection Attack detection and prevention[C]//IEEE Symposium on Integrated Network and Service Management.2017.
[8]徐冬冬,謝統(tǒng)義,萬卓昊,等.基于TF-IDF文本向量化的SQL注入攻擊檢[J].廣西大學(xué)學(xué)報(bào)(自然科學(xué)版),2018(5):1818-1826.
[9]胡建偉,趙偉,閆崢,等.基于機(jī)器學(xué)習(xí)的SQL注入漏洞挖掘技術(shù)的分析與實(shí)現(xiàn)[J].信息網(wǎng)絡(luò)安全,2019(11):36-42.