謝鑫 任春輝 陳新宇
摘要:數據是一個企業最重要的資產之一,關乎企業的生存發展。SQL注入攻擊被開放式Web應用程序安全項目(OWASP)列為十大網絡應用程序風險榜的榜首,危害性、普遍性及嚴峻形勢不言而喻。提出了一種基于卷積神經網絡(CNN)的SQL注入檢測方法并與傳統的檢測方法進行對比,可以將SQL注入語句轉化為二維矩陣,該方法可以針對Web應用的SQL注入行為進行有效檢測,基于無規則匹配的特點使其可以識別新的攻擊且更難以繞過。
關鍵詞:深度學習;神經網絡;卷積神經網絡;網絡安全;SQL注入
中圖分類號:TP391.4文獻標志碼:A文章編號:1008-1739(2020)03-69-3

0引言
數據作為企業的重要資產,其價值也逐年提高,幾乎每個企業的數據都會保存在數據庫里面,以方便內部員工或者用戶查詢使用。對企業來說,正常的使用查詢是沒有問題的,但是互聯網世界繽紛復雜,背后總存在很多別有用心的人用各種工具掃描網站,試圖找出漏洞。所以任何網站都不要抱僥幸心理,任何一點疏忽都有可能成為黑客竊取數據的大門。當企業數據被泄露時,損失的不僅僅是經濟利益,也包括公眾聲望,用戶大量流失,有的甚至面臨法律訴訟,引發高層震蕩等。隨著互聯網的發展,出現了越來越多的Web應用,很多Web應用會收集用戶個人信息,由于數據庫里存放大量的寶貴數據,就自然而然成為了被攻擊的目標,因此出現越來越多的SQL注入攻擊。
1 SQL
SQL注入攻擊是指構造特殊的字符串作為參數,通過Web表單遞交或者輸入域名或者頁面請求的查詢字符串而傳入Web應用,這些特殊的字符串往往包含SQL語法里的一些可執行的語句,讓Web應用錯把數據當成了代碼執行,最終達到欺騙服務器執行惡意的SQL命令,其主要原因是Web應用沒有精確地過濾用戶的輸入數據,導致數據庫被入侵。SQL注入是Web開發中最常見的一種安全漏洞,犯罪分子可能會利用它來非法訪問用戶的敏感數據,如客戶信息、個人數據、商業機密及知識產權等。
SQL注入攻擊被開放式Web應用程序安全項目(OWASP)作為十大網絡應用程序風險榜的榜首,一直以來都是網絡安全研究的重點。近年來,相關研究者通過研究SQL注入的威脅、攻擊類型以及攻擊方式等提出了各種各樣的方法用于SQL注入的檢測,將SQL查詢語句進行規范化是常用的一種預處理方式。
根據查詢語句按照一定方式進行分割,統計每個詞出現的頻率[1]也是一種數據預處理的方式,在此基礎上更好的特征篩選是統計特殊字符和特殊語句。將提取的特征向量化之后,使用傳統機器學習方法進行分類識別,常用的有樸素貝葉斯[1-2]、決策樹[1,3]和支持向量機(SVM)[4-5]。
CNN[6]仿造生物體視覺認知的形成過程機制搭建,是一種深度前饋神經網絡。近年來,CNN被廣泛應用于計算機視覺和自然語言處理效果方面。本文提出了一種基于CNN和海量Web日志的SQL注入檢測方法,將CNN應用于Web應用的SQL注入檢測。實踐結果表明,此方法具有很好的效果,其識別準確率很高。
2 CNN模型
SQL注入形式多樣,不可避免地出現新的攻擊方法繞過傳統檢測。針對這種普遍存在的問題,提出了一種基于CNN的SQL注入檢測方法,此方法主要解決識別無法用傳統方法識別的SQL注入攻擊,其可作為傳統SQL檢測方法的一種輔助方法。
2.1整體模型
CNN的模型結構如圖1所示。

對輸入的預處理數據進行2次卷積,卷積核尺寸為3×3。然后依次輸入池化層、卷積層和池化層,池化層之后進行dropout正則化處理,然后將輸出降維成一維向量再輸入全連接層,再進行正則化處理,最后進行分類。
2.2數據預處理
數據預處理步驟如下:
①統計每條樣本的平均長度,即字符數量,以確定矩陣行數近似等于平均長度,比如長度即為3。
②使用Word2vec方法將樣本進行詞向量化訓練,得到一個詞向量化模型,此模型保存了每個字符對應的向量。向量化維度值不宜大于樣本平均長度,并且以2的次方為宜,比如16,32,64等。以單個字符作為一個向量單位,無需對其進行url解碼,解碼后會大大增加字符數量。
③將樣本按照由步驟②的方法得到模型進行向量化,若模型中沒有樣本中出現的字符,則用1向量填充,即行向量每個元素值都取1;每條樣本均可轉化為一個二維矩陣,列數即為每個字符確定的向量維度,行數即為樣本字符數量。

④將由步驟③獲得的二維矩陣轉為矩陣,若行數小于指定值,則在最下方一直補0向量至其為指定大小矩陣;若行數大于指定值,則去掉最后若干行使其變為指定大小矩陣。
3實驗仿真
3.1數據集
共約448萬條無重復的生產環境中的Web日志,其中約128萬條SQL注入攻擊日志,300萬條正常日志,均為Web日志中已標記好的具有查詢語句的url訪問記錄。包括正常和SQL注入的,如http://www.example.com/path1/path2/? query#fragment,具有query參數的url,即“?”后面、“#”前面的字符串(一般情況下格式為key1=value1&key2=value2…)。隨機選取20萬條作為訓練集(正負樣本各約10萬條),剩下的作為測試集,測試集和訓練集之間沒有交集。
實驗設備是筆記本電腦,編程語言使用Python3,使用基于Tensorflow-Gpu的keras框架,GPU為NVIDIAGTX1050Ti。
3.2實驗結果
損失函數值曲線如圖2所示,損失函數值隨著訓練次數的增加逐漸趨于穩定,收斂在0.01左右。

混淆矩陣如表1所示,從表1中可以看出,TP和TN值均遠遠高于FP和FN。

如表2和圖3所示,正確率、精確率、召回率、1和AUC均高于0.999,這些數據表明模型的分類性能非常出色,ROC曲線近似矩形。

作為對比,使用了傳統的機器學習方法進行分類,比較其正確率和1值,包括SVM[4-5],樸素貝葉斯[1-2],決策樹[1-3]和隨機森林。從表3可以看出,CNN的正確率和1值均高于其他方法。

4結束語
現有的SQL注入檢測主要采用正則匹配進行識別,采用正則技術識別準確率高,速度快,但是不能識別新的攻擊,不可避免地出現新的繞過方法以避開正則。基于CNN的SQL注入識別自動提取SQL注入的隱藏共有特征,識別出繞過正則的SQL注入攻擊流量,且速度快。傳統的機器學習方法需要人為篩選特征,而好的特征不易得到,特征的好壞直接影響到識別準確率。基于CNN的SQL注入識別基于單個字符進行向量化,詞量較少,但可保留query語句所有信息,詞量少則可以降低訓練難度和訓練成本。一個好的模型完全可以替代原有的正則識別方法,還可以實時更新模型。下一步將研究攻擊類型的細分,實現多分類模型,而不僅僅局限于SQL注入攻擊識別。
參考文獻
[1] LODEIRO-SANTIAGO M, CABALLERO-GIL C, CABALLERO-GIL P. Collaborative SQL-injections Detection System with Machine Learning[C]//Proceedings of the 1st International Conference on Internet of Things and Machine Learning,ACM, 2017:45.
[2] SANTOSO J,YUNIARNO E M,HARIADI M. Large Scale Text Classification Using Map Reduce and Naive Bayes Algorithm for Domain Specified Ontology Building[C]//2015 7th International Conference on Intelligent Human-Machine Systems and Cybernetics,IEEE,2015:428-432.
[3] HANMANTHU B, RAM B R,NIRANJAN P. SQL Injection Attack Prevention based on Decision Tree Classification[C]// 2015 IEEE 9th International Conference on Intelligent Systems and Control (ISCO), IEEE,2015:1-5.
[4] MCWHIRTER P R,KIFAYAT K,SHI Q,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-216.
[5] UWAGBOLE S O,BUCHANAN W J,FAN L.Applied Machine Learning Predictive Analytics to SQL Injection Attack Detection and Prevention[C]//2017 IFIP/IEEE Symposium on Integrated Network and Service Management(IM).IEEE,2017:1087-1090.
[6] KHAN A,SOHAIL A, ZAHOORA U,et al.A Survey of the Recent Architectures of Deep Convolutional Neural Networks[J].arXiv preprint arXiv:1901.06032, 2019.