蘇林萍 劉小倩 陳 飛 李 為 崔文超
(華北電力大學控制與計算機工程學院 北京 102206)
隨著互聯(lián)網(wǎng)服務的廣泛使用,Web應用也日漸復雜,而且Web的安全問題也因其易用性和開放性日益顯著[1~2]。根據(jù)開發(fā)式Web應用程序安全項目(OWASP)的發(fā)布數(shù)據(jù)顯示,SQL注入漏洞是網(wǎng)絡信息安全的主要漏洞[3]。在過去的一些年里,許多專家學者對SQL注入問題做了大量研究,提出了許多防御方法和檢測技術。但是隨著攻擊者攻擊手段的不斷變化,現(xiàn)有的SQL注入防御與檢測方法依然存在一些不足。因此,如何防御與檢測SQL注入一直是安全領域的熱點研究問題。
國內外學者已經(jīng)針對SQL注入攻擊做了大量研究。文獻[4~5]使用事先定義好的特征向量對SQL語句進行文本向量化及類別檢測,準確率有所提高,但是忽略了詞與詞之間的聯(lián)系;文獻[6]從惡意代碼中提取有效的N-gram特征的方法,并利用支持向量機(SVM)作為機器學習分類器,將可執(zhí)行代碼分類為惡意代碼或良性代碼。但是該方法存在一些不足之處,使用SVM進行分類時不能夠為不同的特征子序列賦予不同的權重;A.Joshi和V.Geetha結合樸素貝葉斯機器學習算法和基于角色的訪問控制機制對SQL語句進行檢測,但此方法的測試用例具有局限性[7];文獻[8]提出一種基于Simhash算法的SQL注入檢測方法,首先通過自學習過程生成初始的Simhash指紋庫構建具有索引結構的指紋庫,再結合強白名單策略來判斷每條SQL語句的合法性,具有抵御未知SQL注入攻擊的能力。
針對目前存在的一些缺陷,本文結合N-gram和TFIDF進行文本向量化,利用N-gram提取關鍵字,然后在所提取的關鍵字的基礎上計算TFIDF矩陣,使用SVM算法進行模型訓練。然后與現(xiàn)有研究結果進行對比,以驗證此方法所存在的優(yōu)勢之處。
結構化查詢語言(structured query language SQL)是一種用于存取數(shù)據(jù)以及管理、查詢和更新關系數(shù)據(jù)庫系統(tǒng)的語言[9]。SQL注入是一種代碼注入攻擊,其原理為通過將特殊字符或是SQL語句插入到在數(shù)據(jù)庫中正常運行的語句中,構造精巧的畸形輸入,生成惡意SQL語句進入數(shù)據(jù)庫執(zhí)行,使得攻擊者獲取到網(wǎng)站中存在安全漏洞的數(shù)據(jù)庫的查訪權限,從而對數(shù)據(jù)庫進行破壞、侵入、竊取等等[10~11]。SQL注入攻擊可以細分為九種類型[12~13]:重言式、基于Union查詢、基于報錯、布爾盲注、時間盲注、帶外攻擊、piggy-backed、基于存儲過程、編碼攻擊。
N-Gram是一種基于統(tǒng)計語言模型的算法,又被稱為一階馬爾科夫鏈。每一個字節(jié)片段稱為gram,將文本里面的內容按照字節(jié)大小為N的滑動窗口操作,就形成了長度為N的字節(jié)片段序列。針對于SQL文本,取滑動窗口的長度為N個詞,從SQL語句的第一個詞開始從左向右每次滑動一個詞進行取詞。如SQL語句“select name from users where uerId=1”針對N的不同取值,其提取的特征如表1所示。

表1 特征提取示例
TF-IDF是一種統(tǒng)計方法,它的建立過程是這樣的:對文檔分類有用的詞語,應該是文檔集合中那些在某一文件中出現(xiàn)頻率高,而在其他文件中出現(xiàn)頻率少的詞語,所以想要呈現(xiàn)同類文本的特點所在,特征空間坐標系就可以去TF作為測度。但是要體現(xiàn)不同類別文本的特點,光靠TF是不可能實現(xiàn)的,所以引入了IDF逆文本頻率的概念,IDF認為一個單詞對區(qū)別不同類別文本的意義越大,則它出現(xiàn)的文本頻數(shù)就越小。因此,TF-IDF在特征空間坐標系中就是以TF和IDF的乘積作為其取值測度,并且以此來完成對權值TF的調整,目的在于抑制次要單詞,突出重要單詞[14]。
1)TF是詞頻(term frequency),可以用式(1)計算:

式中ni,j是ti在文件dj中出現(xiàn)的次數(shù),∑knk,j是文件dj中所有詞出現(xiàn)的次數(shù)之和。
2)IDF是逆文本頻率(Inverse Document Fre?quency),其表示此項在文檔集合中的重要性,此項所在的文檔數(shù)越多,則區(qū)別能力就越差,重要性就越低。IDF是文件總數(shù)與出現(xiàn)此詞的文件數(shù)商的對數(shù)值,如式(2)所示:

|D|:文本集合中的文件的總數(shù),在本文中即SQL語句的總數(shù);包含詞語ti的文件數(shù)目。
3)TF-IDF的計算公式如式(3)所示:

TFIDF算法雖然能夠很好地應用于特征權重計算,但其仍然存在一些不足之處。傳統(tǒng)TFIDF算法的缺點如下:沒有考慮特征詞在不同條件下的信息分布、IDF沒有考慮類內信息分布問題、沒有考慮單詞不完全分類的情況[15~16]。因此避免采用固定關鍵詞本文在N-Gram特征提取的基礎上應用TFIDF算法進行SQL語句文本向量化。
本實驗數(shù)據(jù)集采集于GitHub倉庫和電力運維審計系統(tǒng)人員的日常操作,由非法SQL語句和正常SQL語句數(shù)據(jù)集組成,共計1490條,其中基本涵蓋了常見的SQL注入類型和其變形語句,數(shù)據(jù)使用情況如表2所示。

表2 實驗樣本
實驗流程如圖1所示。

圖1 實驗流程
在處理階段應用N-Gram技術進行初步特征提取,實驗分別取N值為1、2、3,將N-Gram特征提取之后的子序列做去重匯總處理,得到具有一定數(shù)量的詞匯表,對應不同窗口所得到的詞語匯總如表3所示。

表3 詞語匯總
基于上述得到的詞匯表計算詞頻和TF-IDF,對計算出的TFIDF進行排序,選取每篇文檔前30個關鍵詞,選取完成之后將每篇文檔的關鍵詞合并成一個集合,將集合去重之后的詞匯表作為最終特征,再基于TFIDF算法對文本集合進行向量化。然后使用SVM分類器進行模型訓練,并對測試數(shù)據(jù)進行驗證模型預測,最后對實驗結果進行評估分析。
為了評估提出的入侵檢測模型的效果,本文使用精確率、召回率來評價檢測效果。其中精確率和召回率可根據(jù)混淆矩陣計算得出。
1)混淆矩陣(Confusion Matrix):又稱為可能性表格。它是一種特定的能夠將算法可視化的矩陣,通常用來監(jiān)督學習。在表格中它用列來表示預測值,用行來表示真實值。混淆矩陣有四個基礎指標:
(1)TP(True Positive):真陽性將正類預測為正整數(shù),真實為0,預測也為0;
(2)FN(False Negative):假陰性將正類預測為負類數(shù),真實為0,預測為1;
(3)FP(False Positive):假陽性將負類預測為正類數(shù),真實為1,預測為0;
(4)TN(True Negative):真陰性將負類預測為負類數(shù),真實為1,預測為1。
將以上四個指標呈現(xiàn)在表格中,就得到了如表4所示混淆矩陣。

表4 混淆矩陣
2)準確率(Precision):對預測結果而言被預測為正類的樣本中真正的正樣本所占的比例,其側重于將負樣本錯分為正樣本的情況,如式(4)所示:

3)召回率(Recall):對原來的樣本而言樣本中被預測正確的比例,其側重于將正樣本分為負樣本的情況,如式(5)所示:

在文本預處理階段,使用N-Gram與TFIDF進行關鍵詞的選取及文本向量化。向量化結果表明使用此方法相對于文獻[4]中使用固定關鍵詞進行文本向量化具有更高的準確率,具體效果如圖2所示。

圖2 效果圖
本實驗分別選取第一輪TFIDF之后每篇文檔的前30個關鍵詞進行最終關鍵詞的確定。并針對不同N-Gram窗口進行SVM模型訓練,結果如表5所示。

表5 實驗結果
由表可知,3-gram的檢測效果比1-gram和2-gram檢測效果好,因此,本文中的特征向量由3-gram選取出的關鍵詞為特征詞。
表6是本實驗與文獻[4]的實驗結果,與TFIDF相比,N-Gram+TFIDF在較大程度上提高了準確率的同時提高了召回率。

表6 TFIDF和N-Gram+TFIDF實驗效果對比
由表6可知N-Gram方法的準確率較TFIDF方法有所提升,與此同時其召回率比TFIDF方法更高。
為了增強文本向量化過程中詞與詞之間的聯(lián)系,本文使用N-Gram和TFIDF算法結合動態(tài)選取關鍵詞,并且使用TFIDF進行文本向量化賦予SQL語句的權重。實驗結果表明,在所述準備工作的基礎上訓練的SVM不僅確保了結果的召回率,并且與現(xiàn)有研究工作相比,還在一定程度上提高了樣本類別的準確率。