摘 要:決策樹分類器是一種簡單、準確性高、高性能的算法,而SQL注入攻擊分析是一項工作量巨大、復雜的工作。通過使用決策樹分類器分析SQL注入攻擊能大大提高分析效率和結果的準確性。
關鍵詞:機器學習;決策樹;分類器
1 概述
當今世界網(wǎng)絡應用急速增長,并逐步改造著人類的文化和商業(yè)模式。網(wǎng)絡在給我們帶來各種便利的同時也帶來了一定的安全隱患,據(jù)統(tǒng)計2015年全年電子商務總額已經(jīng)達到了22萬億,通過攻擊WEB安全漏洞,黑客可以盜取公司機密,直接或者間接給個人或組織帶來巨大的經(jīng)濟利益損失。
據(jù)統(tǒng)計2015年就發(fā)現(xiàn)有72.5萬個高危SQL注入漏洞,通過攻擊SQL注入漏洞,入侵者可以在繞過管理權限的情況下直接訪問、刪除、插入或者修改WEB應用存儲在數(shù)據(jù)庫中的內容,嚴重威脅組織的數(shù)據(jù)安全。
2 SQL注入攻擊介紹
2.1 SQL注入攻擊原理
注入攻擊漏洞包括多種類型,例如SQL、OS以及LDAP注入。注入攻擊是不可信的數(shù)據(jù)作為命令或者查詢語句的一部分被發(fā)送給解釋器時產(chǎn)生。攻擊者發(fā)送的惡意數(shù)據(jù)可以欺騙解釋器,以執(zhí)行計劃外的命令或者訪問未被授權的數(shù)據(jù)。
信息安全工作開展一個核心的內容就是分析攻擊模型,注入攻擊的模型非常簡單。注入攻擊的威脅源可以是任何能夠向系統(tǒng)發(fā)送不信任數(shù)據(jù)的人,包括外部用戶、內部用戶和系統(tǒng)管理員。注入攻擊的攻擊向量很明確,就是攻擊者可以基于解釋器語法發(fā)送簡單的、基于文本的攻擊,幾乎任何數(shù)據(jù)源都可以成為注入攻擊載體。注入攻擊漏洞十分普遍,能在SQL查詢語句、LDAP查詢語句、Xpath查詢語句、OS命令、程序參數(shù)等中找到。注入攻擊的影響很嚴重,能導致數(shù)據(jù)丟失或被破壞,甚至系統(tǒng)完全被控制。
在信息安全領域SQL注入攻擊大名如雷貫耳,導致的安全事件數(shù)不勝數(shù),如國內最大的程序員社區(qū)CSDN網(wǎng)站的用戶數(shù)據(jù)庫被黑客公開發(fā)布,600萬用戶的登錄名及密碼被公開泄露。SQL注入漏洞是Web系統(tǒng)特有的一類漏洞,源于Java、PHP、ASP等語言對用戶數(shù)據(jù)和解析的缺陷。文章以Java為例介紹SQL注入攻擊原理,下面是一個SQL注入的經(jīng)典例子。
void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userid =request.getParameter(\"userid\").toString();
String sql = \"select * from usertable where userid ='\" + userid + \"'\";
}
doPost是java Servlet處理http協(xié)議post方法的函數(shù),局部變量userid的值由用戶提交,按照系統(tǒng)正常邏輯,假如用戶提交數(shù)據(jù)test,那么變量sql組合后的值是:
select * from usertable where userid='test'
這對系統(tǒng)是一個正常的SQL查詢語句,系統(tǒng)會查詢userid值是test的表行。
但是,如果用戶提交test';delete from usertable;-- ,那么變量sql組合后的值是:
select * from usertable where userid='test';delete from usertabel;--
這對系統(tǒng)是異常的SQL查詢語句,因為,系統(tǒng)首先會查詢userid值是test的表行,然后刪除usertable表里面的全部數(shù)據(jù),這是系統(tǒng)不期望執(zhí)行的惡意結果。上面的例子的精髓在于攻擊者巧妙的利用字符串的拼接,在提交數(shù)據(jù)里面插入了SQL命令串,欺騙服務器執(zhí)行惡意的刪除命令。
2.2 SQL注入攻擊過程
SQL注入攻擊類型多種多樣,分盲注、旁注、get注入、post注入等,針對不同類型數(shù)據(jù)庫攻擊腳本千差萬別。但是SQL注入攻擊原理很簡單,攻擊過程也有統(tǒng)一的模式。SQL注入要先進行信息收集發(fā)現(xiàn)注入點,信息收集需要大量的測試,會提交大量測試數(shù)據(jù),可能會導致系統(tǒng)異常信息大量增加,例如,要發(fā)現(xiàn)注入點可能需要在參數(shù)值包含測試字符串:
or 1=1
and 1=1
or '1'='1\"
其原理是組合成sql語句來判斷是否存在注入點,如果組合成非法語句系統(tǒng)會報異常。注入點發(fā)現(xiàn)后要深入挖掘數(shù)據(jù)庫、數(shù)據(jù)表、字段名稱、字段值等信息,會大量重復提交包含數(shù)據(jù)庫指令的數(shù)據(jù),例如,盲注Mysql數(shù)據(jù)庫,為發(fā)現(xiàn)數(shù)據(jù)表的字段數(shù),會重復提交數(shù)據(jù),數(shù)據(jù)中包含字符串:
order by [整數(shù)值]
“[]”內是精心選取的整數(shù)值。為發(fā)現(xiàn)數(shù)據(jù)庫用戶名,會重復提交數(shù)據(jù),數(shù)據(jù)中包含字符串:
union(select ascii(left(user(),1))> [整數(shù)值])
挖掘完成后會進行非授權的攻擊操作,獲取數(shù)據(jù)、植入惡意代碼等。
2.3 SQL注入攻擊特征
注入安全分析最自然和簡單的方式是查找指定的關鍵詞,通過關鍵詞的查找到可能的攻擊。而SQL注入攻擊,一般攻擊代碼會包含“select”、“or”、“and”、“union”等SQL語言的保留字。因此,在攻擊防御檢測中,可以簡單的搜索數(shù)據(jù)中存在的保留字,來發(fā)現(xiàn)攻擊行為。另外在攻擊的各個階段會導致系統(tǒng)異常出現(xiàn),系統(tǒng)會產(chǎn)生大量的異常日志,這也是攻擊行為發(fā)現(xiàn)的特征。還有從技術層面獲取的重要特征,數(shù)據(jù)庫系統(tǒng)基礎功能是對SQL語句進行解析,解析過程先是通過詞法分析獲取語法符號,其次進行語法分析,構建語法樹,然后進行語義分析,最后執(zhí)行SQL語句。一般應用系統(tǒng)所構建的語法樹是比較固定,語義明確,比如語法樹的從句、表達式不會隨意增加,所以穩(wěn)定的語法樹是一個重要特征。
SQL注入攻擊是一個整體性很強的過程,攻擊的每一階段都有明確的特征,但是要把個特征關聯(lián)卻不易,要準確分析攻擊,則要花費大量的精力和時間,是現(xiàn)在面臨的主要難題。
要解決上面提出來的問題,或許我們可以從人認識事物的過程中汲取些方法。人認識事物的方式是以經(jīng)驗為依據(jù)做出初始判斷。人的經(jīng)驗獲取的主要渠道是學習與實踐,比如向有經(jīng)驗的人學習、向老師學習、從書本中學習,學而后實踐,通過探索、發(fā)現(xiàn)現(xiàn)實事物來增加自身經(jīng)驗,也是學習的驗證。獲取經(jīng)驗后,人便建立起認識當前事物的“腦回路”,而后通過內在的思維模式做出判斷,認識事物。我們可以為認識過程建立一個簡單模型,首先學習過程是獲取事物的特征,然后,通過特征去認識事物。模型里認為認識事物,辨識事物的關鍵是對特征的識別,機器學習就是采用這個思路。
SQL注入攻擊是通過客戶端提交的數(shù)據(jù)中載有可執(zhí)行的SQL腳本實現(xiàn)攻擊的。可以看到要實現(xiàn)SQL攻擊,數(shù)據(jù)中必須有SQL腳本,而且這些腳本是重復的,可能會導致系統(tǒng)異常,這些是SQL攻擊的特征,通過這些特征我們可以辨別是否SQL攻擊。當然,實際情況要復雜的很多,難度要大。如果借用數(shù)學思維,可以把事物定義為一個多維空間,事物特征可以代表不同維度,每個具體事物作為一個特征向量,識別則是判斷特征相量是否在事物所代表的區(qū)域內。目前,常用的機器學習算法就是這個判斷的方法。而在下文將介紹的決策樹分類法屬于經(jīng)典的機器學習算法。
3 決策樹分類
3.1 分類
分類是機器學習一個重要的概念,前文我們也提到過機器學習。機器學習是研究通過計算的手段,利用經(jīng)驗來改善系統(tǒng)自身的性能,在計算機系統(tǒng)中,”經(jīng)驗”通常以“數(shù)據(jù)”形式存在,因此,機器學習所研究的主要內容,是關于在計算機上從數(shù)據(jù)中產(chǎn)生”模型”的算法,即“學習算法”,有了學習算法,我們把經(jīng)驗數(shù)據(jù)提供給它,就能基于這些數(shù)據(jù)產(chǎn)生模型,在面對新情況時,模型會給我們提供相應的判斷。文章我們把數(shù)據(jù)集合稱為一個分類項集合,其中每條分類項是關于一個事件或對象的描述,或稱為一個樣本。從數(shù)據(jù)集合中學得模型的過程稱為學習,這個過程通過執(zhí)行某個學習算法來完成。訓練過程使用的數(shù)據(jù)稱為訓練數(shù)據(jù)。學得模型對應了關于數(shù)據(jù)的某種潛在的規(guī)律,因此稱為假設,這種潛在規(guī)律自身,則稱為真實,學習過程就是為了找出或逼近真實。根據(jù)訓練數(shù)據(jù)是否有標記信息,學習任務劃分為”監(jiān)督學習”和“無監(jiān)督學習”,學習模型適用于新樣本的能力,稱為”泛化”能力。
分類是把一個事物分到某個類別中。分類有明確的數(shù)學定義,就是一個事物具有很多屬性,把它的眾多屬性看作一個向量,用這個向量來代表這個事物。假設已知集合C={y1,y2,…,yn}和I={x1,x2,…,xn},確定映射規(guī)則y=f(x),使得任意xi∈I有且僅有yj∈C使得yj=f(xi)成立。C是類別集合,C中每一個元素是一個類別,而I是項集合,I中每一個元素是一個待分類項x={a1,a2,…,an},每個ak為x的一個特征屬性,f(x)叫做分類器。分類算法的任務就是構造分類器f(y)。
3.2 決策樹分類
決策樹分類是常見的分類方法,是基于樹結構來進行決策的,也是人在面臨決策問題時一種很自然的處理方式。通常在進行問題決策時,會進行一系列的判斷或子決策,最后得出最終決策,也就是分類的結果。決策樹分類算法主要的特性是思想簡單、分類準確性高、計算速度快,所以在數(shù)據(jù)分析領域應用非常廣泛。
3.3 決策樹
決策樹包含一個根節(jié)點、若干內部節(jié)點和若干葉子節(jié)點,葉節(jié)點是分類結果。實際中通過把樣本特征從根節(jié)點到某個葉子結點的路徑進行對應來實現(xiàn)分類,葉子結點即為樣本所屬的分類。因此,決策樹上的每一個結點指定了樣本的某個特征的測試,并且該結點的每一個后繼分支對應于該特征的一個可能值。決策樹分類方法是從這棵樹的根節(jié)點開始,測試這個結點的特征值,然后按照給定樣本的特征值對應的分支向下移動。然后這個過程在分支子樹上重復。
決策樹分類算法重要的一個內容是決策樹生成,泛化能力強的決策數(shù),關鍵是選取最優(yōu)特征,就是選取每個節(jié)點的方法,因此,下面會介紹信息增益和ID3算法。
3.4 信息增益
一般情況下,隨著分類過程不斷進行,需要決策樹的分支節(jié)點包含樣本盡可能屬于同一類,即節(jié)點的純度越來越高。信息論里的信息熵是度量樣本集合純度常用的一種指標。假設樣本集合D中k類樣本所占比例為pk(k=1,2,…,|y|),則D的信息熵定義為:
Ent(D)的值越小,則D的純度越高。
假設樣本特征a有V個可能取值,如用a對D進行分類,則會有V個分支節(jié)點,其中第v分支節(jié)點包含了D中所有在特征a取值av的樣本,記Dv,則樣本特征a對樣本集D進行劃分獲得的信息增益:
信息增益越大,則樣本特征a進行分類所獲得的純度提升越大。因此,可以用信息增益來進行決策樹的分類特征選擇。
3.5 ID3算法
ID3算法使用貪心策略,根據(jù)信息熵來構造決策樹。構造過程是從樹的根結點開始。一般使用信息增益來確定每一個樣本特征單獨分類的能力,信息增益大分類能力就好。分類能力最好的特征被選作決策樹的根結點。然后為根節(jié)點特征的每個可能值產(chǎn)生一個分支,并把訓練樣本排列到適當?shù)姆种е?。然后重復整個過程,為每個分支結點選取最佳特征,生成決策樹。
4 SQL注入攻擊檢測方法
前文中已經(jīng)對決策樹分類算法進行了詳細的闡述。而分類器的實現(xiàn)特征選擇是一個重要的數(shù)據(jù)預處理過程。分類器要根據(jù)已有的數(shù)據(jù)記錄進行特征選擇,然后再訓練分類器。一般選擇特征不應過多,而且選擇的特征應與分類項強相關。需要注意,特征選擇過程必須保證重要特征不丟失,否則后續(xù)學習過程會因為重要信息丟失而無法獲得好的性能。還有根據(jù)學習任務的不同,相關特征可能也不同,因此,特征的選擇是艱難的任務。
特征選擇有多種方法比如過濾式選擇、包裹選擇等。過濾式選擇設計一個相關統(tǒng)計量來度量特征的重要性。該統(tǒng)計量是向量,其每個分量分別對應一個初始特征,而特征子集的重要性由子集中每個特征所對應的相關統(tǒng)計量分量之和來決定。文章的特征選擇將簡化為以實際日志分析經(jīng)驗進行特征選取。
前文中已經(jīng)對SQL注入攻擊過程和原理進行了分析,因此,SQL注入特征可以選取字符串關鍵字、異常日志、語法樹變化三個關鍵特征。其中,關鍵字特征取值為有、無,異常日志取值為有、無。語法樹變化取值為從句變化、從句未變化、表達式變化、表達式未變化。特征選取后按照ID3算法構建決策樹,樹構建完成后就可以對測試樣本進行分類,選取對應分類項的特征進行計算,獲得分類。
5 結束語
文章主要以理論方式對決策樹分類器用于SQL注入攻擊檢測進行了闡明,分類器在實際應用中能有效的提高檢測效率和準確度。
參考文獻
[1]周志華.機器學習[M].清華大學出版社,2016.
[2]Peter Harrington.機器學習實戰(zhàn)[M].人民郵電出版社,2013.
[3]Adam shostack.威脅建模[M].機械工業(yè)出版社,2015.