張澤亞 翟健宏



摘要:SQL注入是網絡上使用非常廣泛的攻擊手段,也是防御難度極大的網絡攻擊方式。在信息安全領域中,SQL注入因其適用范圍廣,操作門檻低 ,可造成的損失大而被視為對網絡安全威脅極大的一類攻擊方式。本論文的目的在于測試不同的機器學習算法對于SQL注入攻擊的區分能力。研究搜集了大量的SQL注入攻擊語句,選擇4種不同的機器學習模型建立了分類器,并使用上面收集的數據對其進行了訓練。最后,對4種算法所建立的分類器進行了測試,得出了最適合檢測SQLMAP的機器學習算法是卷積神經網絡(CNN)算法。
關鍵詞: ?SQL注入攻擊; 決策樹; 機器學習; 分類器算法; SQLMAP
【Abstract】?In the field of information security, SQL injection is regarded as a kind of attack mode which threatens the network security greatly because of its wide application range, low operation threshold and great loss. The purpose of this paper is to test different machine learning algorithms for distinguishing SQL injection attacks. The paper collects a large number of SQL injection attack statements, selects four different machine learning models to build classifiers, and uses the data collected above to train them. Finally, the paper tests the classifiers built by the four algorithms and concludes that the most suitable machine learning algorithm for detecting SQLMAP is convolutional neural network (CNN) algorithm.
【Key words】 ?SQL injection attack; decision-making tree; machine learning; classifier algorithm; SQLMAP
0 引 言
SQL注入是一種針對Web中數據庫漏洞的注入技術。其工作原理是,把想要執行的命令添加到Web流量、域名或者查詢的字符串中來達到惡意欺騙的目的。攻擊者可以基于用戶發送的信息而得到的回復和反應,把攻擊性的代碼發送到Web數據庫服務器,其結果會導致系統崩潰、數據被破壞以及非公開的信息被偷竊。
在國際上享有高度權威性的非營利性組織開放式Web應用安全項目Open Web Application Security Project(OWASP)發布的十大攻擊行為中,SQL注入因其危害高,攻擊成本小,入門門檻低,適用范圍廣而多年來一直排名第一位。在可預見的數年內,SQL注入上升趨勢明顯,將會是一段時間內互聯網安全的重大威脅。
SQL注入的破壞性極大。由于Web語言自身的缺陷,編程開發人員的疏忽和安全意識不足,大多數的Web應用系統都有被SQL注入攻擊的可能性。而一旦攻擊成功,那么攻擊者就可以在被攻擊的數據庫中隨意地修改、竊取、刪除數據,甚至可以讓系統陷于癱瘓。SQL注入攻擊可以對人們財產、公司信譽、國家安全造成不可挽回的損失。
綜上所述,SQL注入的防御技術是一個極具研究價值的課題方向。在目前情況下,仍有很多問題亟待解決:檢測率不夠高,誤報率過大,檢測效率不高,以及靜態防御條件下,數據庫更新慢,更新頻率快等。
本文研究旨在建立一個SQL注入攻擊的分類器。方法是使用機器學習的算法創建針對SQL注入攻擊的分類器,再將收集的樣本作為訓練樣本對分類器進行訓練,最終得到檢測SQL注入的分類器。之后,研究將通過實驗驗證檢測比較不同機器學習算法在檢測SQL注入時的有效性。
1 相關工作
1.1 數據集的收集
原始數據的收集,是研究的基礎,也是重要的組成部分。本實驗選擇的數據是帶有SQL注入攻擊性的語句,但是這種數據在網上很少,根本無法滿足實驗的需要。而且,網上的數據還可能存在不全面,及未能包含所有種類的SQL注入攻擊等缺點。為了使本文的數據集數量充足、種類全面、實用性強、具有說服力,收集數據的方法和使用如圖1所示。由圖1可見,對此可做闡釋分述如下。
(1)利用SQLMAP掃描特定的網站,再利用wireshark進行捕獲;研究選擇的是http://www.shiyanbar.com實驗吧網站。文中掃描使用過的命令詳見表1。
此外,仍需考慮一個問題,即攻擊的語句是無窮無盡的,每種攻擊方式也有許多重復和相似的表達方式。例如,重言式攻擊,只要條件中有永真的等式就可以了。但是“1=1”和“999=999”,雖是2個等式,但顯而易見的是將這兩者都列舉出來是沒有意義的,研究中只需選取其中之一就可以代表這一類。至此,研究得到的攻擊載荷的判斷依據見表5。
綜上論述可知,測試用例的生成由表達式和分類依據共同決定,表達式決定測試用例由哪些攻擊載荷根據何種規則生成,分類依據決定實際使用的攻擊載荷。例如,對表達式S(LG) * S(IE) && S(LG) * S(NE)的實例化可具體表述為:S(LG)中任選一個關鍵字,如“and”,S(IE)中任選一類攻擊載荷,如“1=1”,S(NE)中任選一類攻擊載荷,如“2<1”,則生成的攻擊輸入為“and 1=1 and 2<1”,該攻擊輸入即可作為檢測基于布爾盲注的測試用例。以此類推,不斷循環S(LG)、S(IE)和S(NE)中的載荷并根據表達式生成測試用例,最終生成全部的用于檢測基于布爾盲注的測試用例。
通過上述化簡操作過程,研究中實例化生成了共7 000條SQL注入的命令語句。
(3)在網上收集了一些現有的SQL注入語句。主要是在Github上和國外漏洞提交平臺exploit-db上收集SQL注入的攻擊語句。但是數量有限,大約有2 000條。
1.2 分類器的建立
分類器是本系統的核心部分,并將直接決定最后分類器的效果。本文將分別嘗試LSTM、CNN、SVM和KNN四種算法,比較其性能效果。文中將針對這4種模型,研究推得剖析概論如下。
(1)長短時記憶算法(LSTM)模型。這是一種特殊的神經網絡模型,最早由Hochreiter 和Schmidhuber 提出的[2],并經多次演變改進而得以完善。已在各研究領域得到了廣泛使用。
LSTM的特點是可以將前面的所有單個樣本都作為一份“經驗”,用于處理下一個樣本。但又不會將其完全繼承,而是有選擇性地“遺忘”掉其中一部分。
(2)卷積神經網絡(CNN)模型。這是一種多層的神經網絡,由卷積層、池化層、全連接層、輸出層四個部分組成。一般情況下,卷積神經網絡可以被視作是一種使用重復神經元的許多相同拷貝的運算網絡結構。其特點是允許網絡擁有大量神經元并表達計算大型模型,同時保持實際參數的數量來描述神經元行為方式的值 ,而且只需要相當小的學習。這種具有相同神經元的多個拷貝技巧大致類似于數學和計算機科學中的函數的抽象。類似地,卷積神經網絡學習過一次的神經元會在其它結構中多次重復地得到使用,這也使得模型的準確率和學習效率會更高。
(3) Support Vector Machine(SVM)模型,即支持向量機。這是一種有監督的模式分類方法。SVM的研究論題可以用一個經典的二分類問題加以描述。一個二分類問題示意如圖3所示。在圖3中,兩類的圓點顯然是可以被一條直線分開的,是模式識別領域中的線性可分問題。但是也有許多條直線可以將2類數據分開。圖3(b)和圖3(c)分別給出了2種不同的分類方案,其中黑色實線為分界線,研究將其稱為決策面。每個決策面對應了一個線性分類器。雖然2種分類方法的結果相同,但如果考慮潛在的其它數據,則兩者性能卻是有差別的。
經由SVM算法的評判可知,圖3中的分類器(b)在性能上要優于分類器(c),判別依據是圖3(b)的分類間隔比圖3(c)要大。這里就要用到第一個SVM中的一個概念:分類間隔。在保證決策面方向不變、且分類正確的情況下移動決策面,圖中2條虛線之間的實線與兩條虛線的距離相等,在決策面不改變的條件下,這條實線就是求解該問題的最優決策面。2條虛線到實線的距離就稱為分類間隔。一般來說,分類間隔越大,得到的分類效果越好,故而最大間隔就是SVM的最優解。從圖3中可以看到,有一些樣本點是正好穿過虛線的,可以說,這些樣本點決定了虛線、及實線的位置。這樣的樣本點就是支持向量。通過前文的例子可以看出,支持向量最后決定了最優決策面的位置。
簡單地說,SVM方法就是提升樣本的維度,使得原先在低維線性不可分的數據通過升維的方法,在高維變得線性可分,其分類的最優解就是最優超平面。升維就是把樣本投向高維的映射。如果在低維度時,由于分類樣本過于復雜而無法分類,那么支持向量機的做法就是提高其維度,使不同的樣本具有更多的特征提取因素,從而在高維空間進行分類。高維空間中的分類間隔不再是一條線,而是一個超平面。核函數可以提升樣本的維度,但同時盡量維持不增加樣本的計算難度。SVM方法中核函數的加入還可以避免維數災難。本文使用的是sigmoid核函數。
(4)鄰近算法(KNN)。或者說K最近鄰分類算法,這是一種經典的機器學習算法。所謂K最近鄰,就是當要對某一樣本個體進行歸類時,研究判斷其屬于哪一類的依據是,選擇k個與其最接近的若干個樣本,再依據這些樣本歸屬的類別,來判斷此研究個體屬于哪一類。
這里,舉出一個K鄰近的實例如圖4所示。當要判斷樣本個體Xu屬于哪一類時,判斷的方法可表述為:先選擇5個距離Xu最近的樣本(這里的“5”就是研究中的K值),然后觀察到這5個樣本中,4個屬于w1,1個屬于w3,因此判定Xu屬于w1類。再經分析可知在距離Xu最近的5個樣本中,屬于w1的最多,故而判斷Xu屬于w1的概率最大。
通過上面的例子可以看出,KNN算法在判斷某一未知分類的樣本屬于哪一類時,其方法就是選擇距離此樣本最近的k個已知類別的樣本,這里的k由研究者本人決定。k值不同,分類結果也有可能不同。統計這k個已知樣本的分類結果,即可判斷該未知樣本歸屬為k個樣本中個數最多的那一類。
2 實驗測試
2.1 評估的標準
研究中,要對測試樣本進行標記。樣本分為2類。一類標記為0,即普通數據;另一類標記為1,即具有SQL注入攻擊性質的數據。如圖5所示。
由圖6可以發現,使用相同的10 000條數據對4個分類器進行訓練,訓練時間最短的是CNN。這說明,在同樣的條件下,如果使用CNN作為分類器的算法,則分類的效率是最高的。
2.4 模型的測試
在模型訓練結束后,接著對其分類效果進行了測試。測試方法是使用wireshark捕獲5 000條正常的數據,與原始樣本中剩下的SQL注入攻擊語句樣本混合在一起,使3個分類器分別進行分類,觀察其分類效果。研究后得到的4種模型的測試結果如圖7所示。4種模型的錯報率和誤報率的結果數值見表6。4種模型的準確率如圖8所示。
由圖7、圖8、表6分析可知,無論是從漏報率、誤報率,還是從準確率上看CNN模型是針對SQL注入檢測的最好模型,;SVM的分類效果次之,LSTM相比于傳統的機器學習算法(SVM與KNN)并沒有明顯的優勢,KNN的分類效果較差。
研究中,還將各個模型分類錯誤的SQL語句(包括漏報和錯報的)進行了梳理和分類,分類結果如圖9所示。
由圖9可以看出,4種模型在聯合式注入、基于時間盲注和基于布爾的盲注入檢測時效果非常好,對于顯錯式注入的判斷效果是最差的。
3 結束語
研究中,設計提出了一個模型來實例化生成SQL注入攻擊語句,在收集到足夠多的語句后,研究比較了4種不同機器學習算法在SQL注入攻擊的檢測上的性能。通過實驗發現,CNN算法的訓練時間最短,分類的效果最好。而LSTM在SQL注入分類的效果上,卻并未顯現出明顯優勢。
參考文獻
[1] ? WANG Jie, PHAN R C W, WHITLEY J N, et al. Augmented attack tree modeling of SQL injection attacks[C]//2010 2nd IEEE International Conference on Information Management and Engineering. Chengdu, China: IEEE,2010, 437: 1009.
[2]HOCHREITER S, SCHMIDHUBER J. Long short-term memory[J]. Neural Computation, 1997, 9(8):1735.
[3]MCWHIRTER P R,KIFAYAT K, SHI Qi, 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.
[4] 張志超,王丹,趙文兵,等. 一種基于神經網絡的SQL 注入漏洞的檢測模型[J]. 計算機與現代化, 2016(10):67.
[5]張燕. 數據挖掘提取查詢樹特征的SQL 注入攻擊檢測[J]. 電子技術應用, 2016,42(3):90.
[6]王苗苗,錢步仁,許瑩瑩,等. 基于通用規則的SQL 注入攻擊檢測與防御系統的研究[J]. 電子設計工程, 2017,25(5):24.
[7]韓宸望,林暉, 饒緒黎, 等. 基于代理模式的SQL注入過濾方法[J]. 計算機系統應用,2018,27(1):98.
[8]張慧琳,丁羽,張利華,等. 基于敏感字符的SQL注入攻擊防御方法[J]. 計算機研究與發展,2016,53(10):2262.
[9]韓濤. 基于解析樹的SQL 注入檢測方法研究[J]. 哈爾濱:哈爾濱工業大學,2013.
[10]LIU Pengfei, QIU Xipeng, CHEN Xinchi, et al. Multi-timescale long short-term memory neural network for modelling sentences and documents[C]// Conference on Empirical Methods in Natural Language Processing. Lisbon, Portugal: IEEE,2015:2326.