劉紹廷 楊孟英 朱廣全 袁媛
摘 要:本文以結(jié)構(gòu)化查詢語言(SQL)為研究對象,利用詞袋(BoW)模型和詞頻-逆文檔頻率(TF-IDF)算法兩種方法進行SQL語句向量化。文本向量化后,特征矩陣維數(shù)大大增加,很難在后面數(shù)據(jù)訓練和預測中使用。為解決這個問題,對大量SQL注入攻擊語句與用戶正常輸入的SQL語句進行研究分析,概括出28個特征關鍵詞。同時,使用決策樹、XGBoost和隨機森林三個分類模型,對數(shù)據(jù)集進行模型訓練及預測。實驗結(jié)果表明:與詞袋(BoW)模型相比,詞頻-逆文檔頻率(TF-IDF)算法的準確率、召回率、F分數(shù)、精確率均提高了10%左右。此外,ROC曲線也說明了該方法的有效性。
關鍵詞:TF-IDF;SQL注入攻擊;文本向量化;機器學習
中圖分類號:TP393.08文獻標識碼: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
隨著計算機互聯(lián)網(wǎng)技術的廣泛應用,各種互聯(lián)網(wǎng)服務水平不斷提升。但由于設計人員和程序員的疏忽、水平和經(jīng)驗參差不齊等,部分應用程序存在大量的安全漏洞。依據(jù)2017年打開Web應用程序安全項目(Open Web Application Security Project,OWASP)互聯(lián)網(wǎng)應用安全風險評估的結(jié)果,注入類攻擊在排名前十的互聯(lián)網(wǎng)攻擊行為中名列第一位。其中,結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)注入攻擊作為一種常見的應用層注入攻擊,備受學術界和工業(yè)界的關注[1]。SQL注入是網(wǎng)絡上經(jīng)常使用的攻擊手段,具有變種極多、攻擊簡單、危害極大的特點。利用機器學習檢測SQL注入攻擊已成為一種趨勢。
1 基本知識原理及分類
1.1 SQL注入攻擊原理及分類
SQL注入攻擊是黑客對數(shù)據(jù)庫進行攻擊的常用手段之一。SQL注入的根本原因是代碼沒有對用戶輸入數(shù)據(jù)的合法性進行驗證,直接拼接到查詢語句中。利用SQL注入漏洞,攻擊者可以在應用的查詢語句中輸入自己的SQL代碼,并傳遞給后臺SQL服務器加以解析執(zhí)行,根據(jù)程序返回的結(jié)果,獲得某些其想得知的數(shù)據(jù),結(jié)果是導致系統(tǒng)崩潰、數(shù)據(jù)被破壞以及非公開的信息被偷竊,危害網(wǎng)站安全[2]。
SQL注入攻擊可以細分為多種類型,常見的有聯(lián)合注入、報錯注入、布爾注入、時間注入、堆疊注入、寬字節(jié)注入、二次注入、cookie注入等[3]。
聯(lián)合注入:用于將多個select語句的結(jié)果組合起來;每條select語句必須擁有相同的列、相同數(shù)量的列表達式、相同的數(shù)據(jù)類型;出現(xiàn)的次序要一致,長度不一定相同。
報錯注入:原理是利用數(shù)據(jù)庫的某些機制,通過人為制造錯誤條件,將查詢結(jié)果通過錯誤信息顯示出來;MySQL中通常用到updatexml、floor和exp三個函數(shù)。
布爾注入:指代碼存在SQL注入漏洞,然而頁面既不會回顯數(shù)據(jù),也不會回顯錯誤信息,只返回“真”和“假”;通過構(gòu)造語句,來判斷數(shù)據(jù)庫信息的正確性,通過頁面返回的“真”和“假”來識別判斷是否正確。
時間注入:代碼存在SQL注入漏洞,然而頁面既不會回顯數(shù)據(jù),也不會回顯錯誤信息,語句執(zhí)行之后不提示真假,不能通過頁面來進行判斷;通過構(gòu)造語句、頁面響應的時長來判斷信息。
堆疊注入:在SQL語句中,語句的結(jié)束都是以“;”結(jié)尾的,但是如果我們在“;”后面再加上一條SQL語句,兩條語句會一起執(zhí)行,這就造成了堆疊注入。
寬字節(jié)注入:GB2312、GBK、GB18030、BIG5、Shift_JIS等這些都是常說的寬字節(jié),實際上只有兩字節(jié);寬字節(jié)帶來的安全問題主要是吃ASCII字符(一字節(jié));寬字節(jié)注入發(fā)生就是PHP發(fā)送請求到MYSQL時字符集使用character_set_client設置值進行了一次編碼。
二次注入:二次注入是通過與數(shù)據(jù)庫服務器進行交互的過程再次進行注入。
cookie注入:cookie注入的原理是更改本地的cookie,從而利用cookie來提交非法語句。
1.2 機器學習分類算法
隨著大數(shù)據(jù)技術的飛速發(fā)展和機器學習在各個領域的應用不斷成熟,基于機器學習檢測與防御SQL注入攻擊問題,已經(jīng)成為網(wǎng)絡安全領域一個非常重要的發(fā)展趨勢。近年來,多數(shù)研究者采用機器學習[4]、深度學習[5]、神經(jīng)網(wǎng)絡[6]等解決SQL注入攻擊檢測問題。本文采用的機器學習算法為決策樹、隨機森林、XGBoost[7]。
1.2.1 決策樹。決策樹是機器學習中一種基本的分類和回歸算法,是依托策略抉擇而建立起來的樹。用于分類的算法主要是借助每一個葉子節(jié)點對應一種屬性判定,通過不斷判定導出最終的決策;用于回歸的算法則是用均值函數(shù)進行多次二分,用子樹中數(shù)據(jù)的均值進行回歸。決策樹的主要優(yōu)點是模型具有可讀性,分類速度快,易于理解。
1.2.2 隨機森林。隨機森林是用隨機的方式建立一個森林,森林由諸多決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯(lián)的。通過多棵樹的集中決策來對分類問題或者回歸問題進行建模,是一種集成學習算法。為了保證樹與樹之間的差異性,對每棵樹從訓練集和劃分屬性上引入了隨機性。
1.2.3 XGBoost。極端梯度提升(Xtreme Gradient Boosting,XGBoost)經(jīng)常被用在一些比賽中,效果顯著。XGBoost是大規(guī)模并行Boosted Tree的工具,是目前最快最好的開源Boosted Tree工具包,比常見的工具包快10倍以上。XGBoost應用的算法是梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)的改進,既可以用于分類,也可以用于回歸問題中。
1.3 數(shù)據(jù)預處理:文本特征提取和向量化
1.3.1 詞袋模型。詞袋(Bag of Words,BoW)模型假定對于一個文檔,忽略它的單詞順序和語法、句法等要素,將其僅僅看作是若干個詞匯的集合,文檔中每個單詞的出現(xiàn)都是獨立的,不依賴于其他單詞是否出現(xiàn)。詞袋模型首先會進行分詞,在分詞之后,通過統(tǒng)計每個詞在文本中出現(xiàn)的次數(shù),就可以得到該文本基于詞的特征,如果將各個文本樣本的這些詞與對應的詞頻放在一起,就是常說的向量化。
1.3.2 TF-IDF算法。詞頻-逆文檔頻率(Term Frequency-Inverse Document Frequency,TF-IDF)算法通過分配權重來反映每個詞的重要程度,根據(jù)權重對一篇文章中的所有詞語從高到低進行排序,權重越高,說明重要性越高。算法分為兩部分:詞頻(TF)和逆文檔頻率(IDF)。[TF]、[IDF]、[TF-IDF]的相關計算公式為:
[TF=某個詞在文章中的出現(xiàn)次數(shù)文章總詞數(shù)]? (1)
[IDF=log文章總數(shù)包含該詞的文章數(shù)+1]? ? ? ? ? ? ? ?(2)
[TF-IDF=TF×IDF]? ? ? ? ? ? ? ? ? ? ? ? ? (3)
由式(1)、式(2)、式(3)可知,當一個詞的文檔頻率越高并且新鮮度較高(即普遍度低)時,其詞頻-逆文檔頻率的值越高。詞頻-逆文檔頻率兼顧詞頻與新鮮度,過濾一些常見詞,保留能提供更多信息的重要詞。
2 實驗過程與結(jié)果分析
2.1 實驗平臺
實驗在同一臺計算機上進行,操作系統(tǒng)為Windows 10。需要配置的軟件是Anaconda3,實驗通過Python 3.7實現(xiàn)。
2.2 數(shù)據(jù)收集
本文主要利用公開的數(shù)據(jù)集進行相關驗證實驗,主要利用的是GitHub上的開源項目數(shù)據(jù)集,由SQL注入攻擊數(shù)據(jù)集和正常用戶輸入的SQL語句數(shù)據(jù)集組成。本次實驗所需的訓練集為從SQL注入攻擊數(shù)據(jù)集選取的37 093條,從正常用戶輸入的SQL語句中選取32 411條,共計69 504條。本次實驗的驗證集合為從SQL注入攻擊數(shù)據(jù)集選取30 154條,從正常用戶輸入的SQL語句中選取35 330條,共計65 484條。
2.3 文本向量化
第一種方式:分別利用BoW模型和TF-IDF算法[8],將所有的SQL語句分詞后,提取出所有不同的詞,不同詞的個數(shù)即是特征的維數(shù),而每個SQL語句中如果存在某個詞,就將特征中相應的位置設置為該詞出現(xiàn)的次數(shù)或詞頻-逆文檔頻率,否則設置為0,這種方式可以確保特征向量的分布完全覆蓋數(shù)據(jù)集中的信息。但是,如果SQL數(shù)據(jù)集的數(shù)據(jù)量較大,就會造成特征維數(shù)激增。在SQL注入攻擊訓練數(shù)據(jù)集向量化過程中,特征維數(shù)是12 599,對應的向量矩陣是32 411×12 599;正常用戶SQL語句訓練集,產(chǎn)生的特征維數(shù)是63 395維,對應的向量矩陣是32 411×63 395。第二種方式是指定關鍵詞集,系統(tǒng)利用關鍵詞集中的詞將SQL語句轉(zhuǎn)為特征向量。選用SQL注入中常用的28個關鍵詞作為特征向量:'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'。從前面生成的向量矩陣中選擇關鍵詞特征向量組成新的特征矩陣作為訓練集和測試集。經(jīng)過處理后,對應特征矩陣維數(shù)如表1所示。經(jīng)過處理后的數(shù)據(jù)特征維數(shù)大大減少,并且維數(shù)相同,便于后面數(shù)據(jù)的訓練。
2.4 訓練數(shù)據(jù)與預測數(shù)據(jù)
利用BoW模型和TF-IDF算法后,使用指定關鍵詞法進行降維,得到的數(shù)據(jù)分別使用決策樹、隨機森林、XGBoost三種分類器進行模型訓練,并對測試數(shù)據(jù)進行驗證模型預測,最后對實驗結(jié)果進行評估分析。
2.5 評價指標
文本分類領域一般采用精準率(Precision)、召回率(Recall)、準確率(Accuracy)和F分數(shù)(F-Score)、受試者工作特征(Receiver Operating Characteristic,ROC)曲線等衡量機器學習分類的效果。準確率和召回率是廣泛用于信息檢索和文本分類領域的兩個度量值,用來評價結(jié)果的質(zhì)量[9]。
精準率(Precision)又叫查準率,是針對預測結(jié)果而言的,其含義是在所有被預測為正的樣本中實際為正的樣本的概率,意思就是在預測為正樣本的結(jié)果中,有多少把握可以預測正確。精準率公式為:
[Pr=TPTP+FP]? ? ? ? ? ? ? ? ? ? ? ? ? ? (4)
式中:[Pr]指精準率;[TP]指被判定為正樣本,事實上也是正樣本;[FP]指被判定為正樣本,但事實上是負樣本。
召回率(Recall)又叫查全率,是針對原樣本而言的,其含義是在實際為正的樣本中被預測為正樣本的概率,計算公式為:
[R=TP(TP+FN)]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (5)
式中:[R]指召回率;[FN]指被判定為負樣本,但事實上是正樣本。
準確率(Accuracy)是預測正確的結(jié)果占總樣本的百分比,計算公式為:
[Acc=(TP+TN)(TP+TN+FP+FN)]? ? ? ? ? ? ? ? ? (6)
式中:[Acc]指準確率;[TN]指被判定為負樣本,事實上也是負樣本;[FP]指被判定為正樣本,但事實上是負樣本。
[F]分數(shù)是模型的準確率和召回率的調(diào)和平均數(shù)。[F]分數(shù)計算公式如式(7)所示。
[F=Pr×R×2Pr+R]? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(7)
此外,接受者操作特性曲線被用于機器學習領域,用來評判分類、檢測結(jié)果的好壞,其是非常重要和常見的統(tǒng)計分析方法。ROC曲線根據(jù)學習器的預測結(jié)果對樣例進行排序,按此順序逐個把樣本作為正例進行預測,每次計算出兩個重要量的值,即TPR(True Positive Rate)和FPR(False Positive Rate)。其中,TPR可以理解為所有正類中,有多少被預測成正類(正類預測正確);FPR可以理解為所有反類中,有多少被預測成正類(正類預測錯誤)。分別以它們?yōu)闄M、縱坐標作圖。
AUC(Area Under Curve)為ROC曲線下的面積,介于0.1和1之間,可以直觀地評價分類器的好壞,數(shù)值越大,分類器效果越好。
2.6 實驗結(jié)果
將經(jīng)過向量化處理的數(shù)據(jù)集分別使用決策樹、隨機森林、XGBoost三種分類器進行模型訓練及預測。利用上面評價指標進行評價,結(jié)果如表2和表3所示。
利用BoW模型向量后得到三種機器學習分類方法的ROC曲線,如圖1至圖3所示,利用TF-IDF模型向量化后得到三種機器學習分類方法的ROC曲線,如圖4至圖6所示。
對表1、表2及圖1至圖6進行分析發(fā)現(xiàn),使用TF-IDF向量化方法比BoW向量法預測的結(jié)果有較大提升,這是因為BoW只創(chuàng)建了一組向量,其中包含文檔中單詞出現(xiàn)的次數(shù),而TF-IDF模型還包含關于更重要的單詞和不重要的單詞信息。BoW模型向量很容易解釋,然而,在機器學習模型中,TF-IDF通常表現(xiàn)得更好,通過本次試驗也得到了很好地驗證。
此外,隨機森林算法略優(yōu)于決策樹和XGBoost。從精準率、召回率、準確率和F分數(shù)(F-Score)4個指標來看,隨機森林四項指標均優(yōu)于決策樹和XCBoost。從ROC曲線可以看出,隨機森林算法AUC為0.99,決策樹和XGBoost的AUC為0.98。
3 結(jié)語
本文利用常見機器學習分類方法進行SQL注入攻擊檢測,首先將SQL注入攻擊語句中的文本向量化,分別采用BoW模型和TF-IDF兩種文本向量化方法,然后根據(jù)SQL注入常用的28個關鍵詞進行特征向量提取,組成訓練集和測試集。利用決策樹、隨機森林、XGBoost三個模型對數(shù)據(jù)集進行模型訓練及預測。總體來看,本文設計的SQL注入攻擊檢測方法的關鍵步驟在于將原SQL語句文本向量化后進行降維處理,提取SQL注入關鍵詞作為特征點,保證訓練集和測試集特征維數(shù)的一致。同時,通過兩種文本向量化方法對比,TF-IDF較BoW模型在文本向量化過程中發(fā)揮的效果更好。
參考文獻:
[1]蔣磊.基于機器學習的SQL注入檢測技術研究[D].南京:南京郵電大學,2017:12-20.
[2]李小花.基于程序分析的SQL注入防御系統(tǒng)的設計與實現(xiàn)[D].長沙:湖南大學,2010:18-30.
[3]吳少華,程書寶,胡勇.基于SVM的Web攻擊檢測技術[J].計算機科學,2015(1):362-364.
[4]張澤亞,翟健宏.基于機器學習的SQL攻擊檢測技術研究[J].智能計算機與應用,2020(3):356-361.
[5]曹曉斌.基于深度學習的SQL注入檢測研究[D].南寧:廣西大學,2020:22-37.
[6]張志超,王丹,趙文兵,等.一種基于神經(jīng)網(wǎng)絡的SQL注入漏洞的檢測模型[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].廣西大學學報(自然科學版),2018(5):1818-1826.
[9]胡建偉,趙偉,閆崢,等.基于機器學習的SQL注入漏洞挖掘技術的分析與實現(xiàn)[J].信息網(wǎng)絡安全,2019(11):36-42.