蘇林萍 劉小倩 陳 飛 李 為 崔文超
(華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院 北京 102206)
隨著互聯(lián)網(wǎng)服務(wù)的廣泛使用,Web應(yīng)用也日漸復(fù)雜,而且Web的安全問題也因其易用性和開放性日益顯著[1~2]。根據(jù)開發(fā)式Web應(yīng)用程序安全項(xiàng)目(OWASP)的發(fā)布數(shù)據(jù)顯示,SQL注入漏洞是網(wǎng)絡(luò)信息安全的主要漏洞[3]。在過去的一些年里,許多專家學(xué)者對SQL注入問題做了大量研究,提出了許多防御方法和檢測技術(shù)。但是隨著攻擊者攻擊手段的不斷變化,現(xiàn)有的SQL注入防御與檢測方法依然存在一些不足。因此,如何防御與檢測SQL注入一直是安全領(lǐng)域的熱點(diǎn)研究問題。
國內(nèi)外學(xué)者已經(jīng)針對SQL注入攻擊做了大量研究。文獻(xiàn)[4~5]使用事先定義好的特征向量對SQL語句進(jìn)行文本向量化及類別檢測,準(zhǔn)確率有所提高,但是忽略了詞與詞之間的聯(lián)系;文獻(xiàn)[6]從惡意代碼中提取有效的N-gram特征的方法,并利用支持向量機(jī)(SVM)作為機(jī)器學(xué)習(xí)分類器,將可執(zhí)行代碼分類為惡意代碼或良性代碼。但是該方法存在一些不足之處,使用SVM進(jìn)行分類時(shí)不能夠?yàn)椴煌奶卣髯有蛄匈x予不同的權(quán)重;A.Joshi和V.Geetha結(jié)合樸素貝葉斯機(jī)器學(xué)習(xí)算法和基于角色的訪問控制機(jī)制對SQL語句進(jìn)行檢測,但此方法的測試用例具有局限性[7];文獻(xiàn)[8]提出一種基于Simhash算法的SQL注入檢測方法,首先通過自學(xué)習(xí)過程生成初始的Simhash指紋庫構(gòu)建具有索引結(jié)構(gòu)的指紋庫,再結(jié)合強(qiáng)白名單策略來判斷每條SQL語句的合法性,具有抵御未知SQL注入攻擊的能力。
針對目前存在的一些缺陷,本文結(jié)合N-gram和TFIDF進(jìn)行文本向量化,利用N-gram提取關(guān)鍵字,然后在所提取的關(guān)鍵字的基礎(chǔ)上計(jì)算TFIDF矩陣,使用SVM算法進(jìn)行模型訓(xùn)練。然后與現(xiàn)有研究結(jié)果進(jìn)行對比,以驗(yàn)證此方法所存在的優(yōu)勢之處。
結(jié)構(gòu)化查詢語言(structured query language SQL)是一種用于存取數(shù)據(jù)以及管理、查詢和更新關(guān)系數(shù)據(jù)庫系統(tǒng)的語言[9]。SQL注入是一種代碼注入攻擊,其原理為通過將特殊字符或是SQL語句插入到在數(shù)據(jù)庫中正常運(yùn)行的語句中,構(gòu)造精巧的畸形輸入,生成惡意SQL語句進(jìn)入數(shù)據(jù)庫執(zhí)行,使得攻擊者獲取到網(wǎng)站中存在安全漏洞的數(shù)據(jù)庫的查訪權(quán)限,從而對數(shù)據(jù)庫進(jìn)行破壞、侵入、竊取等等[10~11]。SQL注入攻擊可以細(xì)分為九種類型[12~13]:重言式、基于Union查詢、基于報(bào)錯(cuò)、布爾盲注、時(shí)間盲注、帶外攻擊、piggy-backed、基于存儲過程、編碼攻擊。
N-Gram是一種基于統(tǒng)計(jì)語言模型的算法,又被稱為一階馬爾科夫鏈。每一個(gè)字節(jié)片段稱為gram,將文本里面的內(nèi)容按照字節(jié)大小為N的滑動窗口操作,就形成了長度為N的字節(jié)片段序列。針對于SQL文本,取滑動窗口的長度為N個(gè)詞,從SQL語句的第一個(gè)詞開始從左向右每次滑動一個(gè)詞進(jìn)行取詞。如SQL語句“select name from users where uerId=1”針對N的不同取值,其提取的特征如表1所示。
表1 特征提取示例
TF-IDF是一種統(tǒng)計(jì)方法,它的建立過程是這樣的:對文檔分類有用的詞語,應(yīng)該是文檔集合中那些在某一文件中出現(xiàn)頻率高,而在其他文件中出現(xiàn)頻率少的詞語,所以想要呈現(xiàn)同類文本的特點(diǎn)所在,特征空間坐標(biāo)系就可以去TF作為測度。但是要體現(xiàn)不同類別文本的特點(diǎn),光靠TF是不可能實(shí)現(xiàn)的,所以引入了IDF逆文本頻率的概念,IDF認(rèn)為一個(gè)單詞對區(qū)別不同類別文本的意義越大,則它出現(xiàn)的文本頻數(shù)就越小。因此,TF-IDF在特征空間坐標(biāo)系中就是以TF和IDF的乘積作為其取值測度,并且以此來完成對權(quán)值TF的調(diào)整,目的在于抑制次要單詞,突出重要單詞[14]。
1)TF是詞頻(term frequency),可以用式(1)計(jì)算:
式中ni,j是ti在文件dj中出現(xiàn)的次數(shù),∑knk,j是文件dj中所有詞出現(xiàn)的次數(shù)之和。
2)IDF是逆文本頻率(Inverse Document Fre?quency),其表示此項(xiàng)在文檔集合中的重要性,此項(xiàng)所在的文檔數(shù)越多,則區(qū)別能力就越差,重要性就越低。IDF是文件總數(shù)與出現(xiàn)此詞的文件數(shù)商的對數(shù)值,如式(2)所示:
|D|:文本集合中的文件的總數(shù),在本文中即SQL語句的總數(shù);包含詞語ti的文件數(shù)目。
3)TF-IDF的計(jì)算公式如式(3)所示:
TFIDF算法雖然能夠很好地應(yīng)用于特征權(quán)重計(jì)算,但其仍然存在一些不足之處。傳統(tǒng)TFIDF算法的缺點(diǎn)如下:沒有考慮特征詞在不同條件下的信息分布、IDF沒有考慮類內(nèi)信息分布問題、沒有考慮單詞不完全分類的情況[15~16]。因此避免采用固定關(guān)鍵詞本文在N-Gram特征提取的基礎(chǔ)上應(yīng)用TFIDF算法進(jìn)行SQL語句文本向量化。
本實(shí)驗(yàn)數(shù)據(jù)集采集于GitHub倉庫和電力運(yùn)維審計(jì)系統(tǒng)人員的日常操作,由非法SQL語句和正常SQL語句數(shù)據(jù)集組成,共計(jì)1490條,其中基本涵蓋了常見的SQL注入類型和其變形語句,數(shù)據(jù)使用情況如表2所示。
表2 實(shí)驗(yàn)樣本
實(shí)驗(yàn)流程如圖1所示。
圖1 實(shí)驗(yàn)流程
在處理階段應(yīng)用N-Gram技術(shù)進(jìn)行初步特征提取,實(shí)驗(yàn)分別取N值為1、2、3,將N-Gram特征提取之后的子序列做去重匯總處理,得到具有一定數(shù)量的詞匯表,對應(yīng)不同窗口所得到的詞語匯總?cè)绫?所示。
表3 詞語匯總
基于上述得到的詞匯表計(jì)算詞頻和TF-IDF,對計(jì)算出的TFIDF進(jìn)行排序,選取每篇文檔前30個(gè)關(guān)鍵詞,選取完成之后將每篇文檔的關(guān)鍵詞合并成一個(gè)集合,將集合去重之后的詞匯表作為最終特征,再基于TFIDF算法對文本集合進(jìn)行向量化。然后使用SVM分類器進(jìn)行模型訓(xùn)練,并對測試數(shù)據(jù)進(jìn)行驗(yàn)證模型預(yù)測,最后對實(shí)驗(yàn)結(jié)果進(jìn)行評估分析。
為了評估提出的入侵檢測模型的效果,本文使用精確率、召回率來評價(jià)檢測效果。其中精確率和召回率可根據(jù)混淆矩陣計(jì)算得出。
1)混淆矩陣(Confusion Matrix):又稱為可能性表格。它是一種特定的能夠?qū)⑺惴梢暬木仃嚕ǔS脕肀O(jiān)督學(xué)習(xí)。在表格中它用列來表示預(yù)測值,用行來表示真實(shí)值?;煜仃囉兴膫€(gè)基礎(chǔ)指標(biāo):
(1)TP(True Positive):真陽性將正類預(yù)測為正整數(shù),真實(shí)為0,預(yù)測也為0;
(2)FN(False Negative):假陰性將正類預(yù)測為負(fù)類數(shù),真實(shí)為0,預(yù)測為1;
(3)FP(False Positive):假陽性將負(fù)類預(yù)測為正類數(shù),真實(shí)為1,預(yù)測為0;
(4)TN(True Negative):真陰性將負(fù)類預(yù)測為負(fù)類數(shù),真實(shí)為1,預(yù)測為1。
將以上四個(gè)指標(biāo)呈現(xiàn)在表格中,就得到了如表4所示混淆矩陣。
表4 混淆矩陣
2)準(zhǔn)確率(Precision):對預(yù)測結(jié)果而言被預(yù)測為正類的樣本中真正的正樣本所占的比例,其側(cè)重于將負(fù)樣本錯(cuò)分為正樣本的情況,如式(4)所示:
3)召回率(Recall):對原來的樣本而言樣本中被預(yù)測正確的比例,其側(cè)重于將正樣本分為負(fù)樣本的情況,如式(5)所示:
在文本預(yù)處理階段,使用N-Gram與TFIDF進(jìn)行關(guān)鍵詞的選取及文本向量化。向量化結(jié)果表明使用此方法相對于文獻(xiàn)[4]中使用固定關(guān)鍵詞進(jìn)行文本向量化具有更高的準(zhǔn)確率,具體效果如圖2所示。
圖2 效果圖
本實(shí)驗(yàn)分別選取第一輪TFIDF之后每篇文檔的前30個(gè)關(guān)鍵詞進(jìn)行最終關(guān)鍵詞的確定。并針對不同N-Gram窗口進(jìn)行SVM模型訓(xùn)練,結(jié)果如表5所示。
表5 實(shí)驗(yàn)結(jié)果
由表可知,3-gram的檢測效果比1-gram和2-gram檢測效果好,因此,本文中的特征向量由3-gram選取出的關(guān)鍵詞為特征詞。
表6是本實(shí)驗(yàn)與文獻(xiàn)[4]的實(shí)驗(yàn)結(jié)果,與TFIDF相比,N-Gram+TFIDF在較大程度上提高了準(zhǔn)確率的同時(shí)提高了召回率。
表6 TFIDF和N-Gram+TFIDF實(shí)驗(yàn)效果對比
由表6可知N-Gram方法的準(zhǔn)確率較TFIDF方法有所提升,與此同時(shí)其召回率比TFIDF方法更高。
為了增強(qiáng)文本向量化過程中詞與詞之間的聯(lián)系,本文使用N-Gram和TFIDF算法結(jié)合動態(tài)選取關(guān)鍵詞,并且使用TFIDF進(jìn)行文本向量化賦予SQL語句的權(quán)重。實(shí)驗(yàn)結(jié)果表明,在所述準(zhǔn)備工作的基礎(chǔ)上訓(xùn)練的SVM不僅確保了結(jié)果的召回率,并且與現(xiàn)有研究工作相比,還在一定程度上提高了樣本類別的準(zhǔn)確率。