殷 博 朱靜雯 劉 磊 許 靜
1(國(guó)網(wǎng)天津市電力公司 天津 300010)
2(南開大學(xué)軟件學(xué)院 天津 300350)
3(南開大學(xué)人工智能學(xué)院 天津 300350)
隨著電力信息系統(tǒng)接入互聯(lián)網(wǎng),電力信息網(wǎng)絡(luò)安全變得越來(lái)越重要。近年來(lái)我國(guó)電力行業(yè)信息系統(tǒng)發(fā)展迅速,與多種業(yè)務(wù)系統(tǒng)智能互聯(lián),如用戶用電業(yè)務(wù)系統(tǒng)、充電樁業(yè)務(wù)系統(tǒng)等。電力業(yè)務(wù)相關(guān)數(shù)據(jù)不斷積累,提高電網(wǎng)信息系統(tǒng)面對(duì)外界惡意攻擊時(shí)的防控能力對(duì)保證電網(wǎng)安全、穩(wěn)定、高效運(yùn)行非常重要。在Web應(yīng)用的所有安全問(wèn)題中,SQL注入是危害嚴(yán)重且影響范圍較廣的重要問(wèn)題之一,據(jù)OWASP[1]和CVE[2]統(tǒng)計(jì),近幾年SQL注入攻擊(SQL-Injection Attacks,SQLIA)在十大Web安全隱患中穩(wěn)居第一,而且SQL注入在所有被報(bào)告的安全漏洞中也是頻率增長(zhǎng)最快的類型。與傳統(tǒng)Web相比,電力信息Web系統(tǒng)具有規(guī)模大、業(yè)務(wù)邏輯實(shí)時(shí)多樣、專用性強(qiáng)等特點(diǎn),這也導(dǎo)致了針對(duì)電力信息Web系統(tǒng)SQL注入攻擊的檢測(cè)難度大。其實(shí)現(xiàn)過(guò)程中容易產(chǎn)生大量漏洞,并且對(duì)此進(jìn)行的攻擊事件越來(lái)越多且難以辨別,因而對(duì)于電力信息Web系統(tǒng)SQL注入攻擊檢測(cè)技術(shù)的研究十分必要?;赪eb信息系統(tǒng)訪問(wèn)日志挖掘用戶訪問(wèn)行為的研究日益增多,文獻(xiàn)[3-5]均是對(duì)用戶訪問(wèn)日志進(jìn)行分析,用于檢測(cè)分布式拒絕服務(wù)攻擊(DDOS)以及Web爬蟲行為。
本文提出一種面向電力信息系統(tǒng)日志數(shù)據(jù)的注入攻擊特征提取方法。首先,分析Web訪問(wèn)日志和SQL注入特征,提出一種從自定義Web訪問(wèn)日志中提取SQL注入語(yǔ)法特征和行為特征的方法;其次,對(duì)日志進(jìn)行預(yù)處理和特征提取操作,得到語(yǔ)法特征矩陣和行為特征矩陣;最后,在兩類特征數(shù)據(jù)集的基礎(chǔ)上使用4種算法模型進(jìn)行實(shí)驗(yàn)。結(jié)果表明,將SQL注入攻擊的檢測(cè)與語(yǔ)法特征和行為特征相結(jié)合的方式,可以有效檢測(cè)SQL注入攻擊。使用該方法,電力信息Web系統(tǒng)安全管理員能夠及時(shí)發(fā)現(xiàn)系統(tǒng)的惡意訪問(wèn)用戶,從而提前采取防范措施、避免損失。
針對(duì)Web系統(tǒng)的漏洞挖掘技術(shù),國(guó)內(nèi)高校、研究機(jī)構(gòu)和企業(yè)積極開展相關(guān)技術(shù)研究[6-7]。國(guó)內(nèi)外現(xiàn)有的漏洞利用工具,如綠盟推出的Web應(yīng)用漏洞掃描系統(tǒng)、開源滲透測(cè)試框架Metasploit Framework(MSF)等雖各有所長(zhǎng),但是并沒(méi)有與電力信息Web系統(tǒng)多場(chǎng)景的特點(diǎn)相結(jié)合。
目前對(duì)SQLIA的檢測(cè)主要有基于規(guī)則匹配[6]和基于查詢語(yǔ)法樹[7]的方法。韓宸望等[8]將基于SQL語(yǔ)法樹比較的安全策略引入用戶輸入過(guò)濾的設(shè)計(jì)中,提出了一種新的SQL注入過(guò)濾方法,該方法能夠有效防止SQLIA,并有較高的攔截率和較低的誤報(bào)率。王苗苗等[9]對(duì)大量SQL注入攻擊報(bào)文的攻擊特征進(jìn)行總結(jié)分析,提出了一種基于通用規(guī)則的SQL注入攻擊檢測(cè)與防御的方法,利用SQL注入檢測(cè)工具SQLMap進(jìn)行SQL注入攻擊模擬,捕捉攻擊流量,提取攻擊特征,總結(jié)通用規(guī)則。Kim等[10]提出一種基于內(nèi)部查詢樹和SVM的SQLIA檢測(cè)方法,該方法從數(shù)據(jù)庫(kù)級(jí)別的日志中收集SQL查詢樹信息,從復(fù)雜和多變的查詢樹中提取語(yǔ)法特征和語(yǔ)義特征,但是在實(shí)現(xiàn)和操作上比較復(fù)雜。張志超等[11]提出一種基于人工神經(jīng)元網(wǎng)絡(luò)的SQL注入漏洞的分析模型,在識(shí)別SQL關(guān)鍵字注入攻擊特點(diǎn)的基礎(chǔ)上,利用人工神經(jīng)元網(wǎng)絡(luò)算法對(duì)SQL注入語(yǔ)句進(jìn)行檢測(cè),能夠直接分析SQL語(yǔ)句,判斷用戶輸入的SQL語(yǔ)句是否為SQL注入的語(yǔ)句,該模型可提高SQL注入漏洞檢測(cè)的準(zhǔn)確率和執(zhí)行效率。Singh等[12]提出了一種算法,不僅可以檢測(cè)SQL注入攻擊,而且可以通過(guò)機(jī)器學(xué)習(xí)技術(shù),維護(hù)審計(jì)記錄檢測(cè)未授權(quán)用戶的訪問(wèn)。
基于規(guī)則匹配的方法能夠很好地檢測(cè)出規(guī)則庫(kù)中已知的SQLIA類型,準(zhǔn)確率高,誤報(bào)率小。但該方法過(guò)度依賴于規(guī)則知識(shí)庫(kù),不能檢測(cè)出未知攻擊,漏報(bào)率高,而當(dāng)前的SQLIA手段總是在不斷更新和變化?;诓樵冋Z(yǔ)法樹通過(guò)比對(duì)安全的查詢語(yǔ)句語(yǔ)法樹和待測(cè)語(yǔ)句的語(yǔ)法樹,若兩個(gè)語(yǔ)法樹不同,則該查詢語(yǔ)句為SQL注入攻擊。但該方法漏報(bào)率和誤報(bào)率都比較高,并且也不能檢測(cè)出未知SQL注入攻擊。
電力信息系統(tǒng)規(guī)模龐大,對(duì)安全性要求較高,目前面向電力信息Web系統(tǒng)特點(diǎn)的SQL注入攻擊檢測(cè)方法的研究較少。為了提高電力信息Web系統(tǒng)的安全性,防止用戶通過(guò)輸入提交惡意SQL語(yǔ)句制造SQL注入攻擊,本文提出一種面向電力信息系統(tǒng)日志數(shù)據(jù)的注入攻擊特征提取方法,提高對(duì)SQL注入攻擊檢測(cè)的準(zhǔn)確性。
首先對(duì)用戶訪問(wèn)Web系統(tǒng)產(chǎn)生的日志數(shù)據(jù)進(jìn)行解碼、分析等預(yù)處理操作。然后從日志文件中提取語(yǔ)法特征字段以及行為特征字段。由于SQL注入攻擊包含一系列Web訪問(wèn)動(dòng)作,因此提取行為特征字段之前還需要進(jìn)行用戶識(shí)別和會(huì)話識(shí)別,再對(duì)提取的特征字段進(jìn)行類別標(biāo)注,形成特征字段訓(xùn)練集以及測(cè)試集。最后使用分類/聚類算法進(jìn)行訓(xùn)練建模。本文提出的方法架構(gòu)如圖1所示。
圖1 本文方法架構(gòu)
服務(wù)器默認(rèn)的日志字段中記錄了用戶訪問(wèn)的URL,通過(guò)URL字段中的用戶輸入信息判斷是否為惡意輸入。然而只能記錄GET請(qǐng)求類型的參數(shù),無(wú)法記錄POST類型的參數(shù)以及HTTP HEADER的注入信息。因此若使用服務(wù)器默認(rèn)的日志分析SQL注入攻擊行為,則會(huì)導(dǎo)致大量攻擊無(wú)法檢測(cè),進(jìn)而導(dǎo)致漏報(bào)率高,無(wú)法達(dá)到防御攻擊的目的。由于Apache服務(wù)器日志中包含許多與研究目標(biāo)無(wú)關(guān)的記錄和字段,這些信息不需要記錄在內(nèi)。此外,為了提高日志處理效率,本文自定義了Web訪問(wèn)日志的格式,根據(jù)研究目標(biāo),確定6個(gè)日志字段信息,日志以文本文件的格式保存在服務(wù)器端。日志各字段及含義如表1所示。
表1 日志字段及含義
Time記錄服務(wù)器完成請(qǐng)求處理時(shí)的時(shí)間,IPAddr表示訪問(wèn)用戶的IP地址,RemoteHost記錄用戶訪問(wèn)的主機(jī)名,UserAgent記錄用戶操作系統(tǒng)和瀏覽器信息,以上4個(gè)字段用于確定SQL注入行為特征。IPAddr、RemoteHost和UserAgent字段可以進(jìn)行用戶識(shí)別,之后根據(jù)訪問(wèn)時(shí)間進(jìn)行會(huì)話識(shí)別。
ReqMethod字段表示用戶發(fā)送請(qǐng)求使用的方法,主要有g(shù)et、post、head和put方法,其中g(shù)et和post方法最為常用。
InputPara記錄用戶請(qǐng)求的輸入?yún)?shù)。SQL注入攻擊就是由于不安全的用戶輸入導(dǎo)致的。通過(guò)InputPara可初步判斷用戶輸入數(shù)據(jù)的安全性。SQL注入語(yǔ)法特征的提取主要是從InputPara字段獲得。
SQL注入攻擊發(fā)生時(shí)輸入的參數(shù)在語(yǔ)法方面具有共同特征,都是將輸入?yún)?shù)直接拼接到SQL語(yǔ)句中,從而改變SQL語(yǔ)句功能,竊取數(shù)據(jù)。根據(jù)SQL注入攻擊參數(shù)的一般形式和語(yǔ)法特征,可將SQL注入攻擊參數(shù)分為7部分,每個(gè)字段擁有相應(yīng)功能并完成相應(yīng)的注入目的。按照在SQL注入語(yǔ)句中出現(xiàn)的順序,7個(gè)字段分別為:(1) 前終結(jié)符,用PreTerm表示;(2) 注入前綴,用InjecPrefix表示;(3) 注入關(guān)鍵詞,用InjecKey表示;(4) 常量參數(shù),用ConstPar表示;(5) 大寫字母,用UpLet表示;(6) 其他特殊字符,用SpecLet表示;(7) 后終結(jié)符,用SufTerm表示。SQL注入語(yǔ)法特征字段含義及實(shí)例說(shuō)明如表2所示。
表2 SQL注入語(yǔ)法特征字段
圖2所示為生成語(yǔ)法特征矩陣的工作流程。圖2(a)為SQL注入語(yǔ)句的提取流程,其中日志文件為經(jīng)過(guò)解碼處理后得到的日志文件,這是由于服務(wù)器記錄的用戶訪問(wèn)日志的輸入?yún)?shù)字段是經(jīng)過(guò)編碼的字符串,所以首先需要對(duì)日志的輸入?yún)?shù)字段進(jìn)行解碼等預(yù)處理。經(jīng)過(guò)解碼處理后,對(duì)每條日志進(jìn)行分析,判斷其是否符合SQL注入特征。對(duì)于符合SQL注入特征的語(yǔ)句提取形成SQL注入語(yǔ)句文件,然后根據(jù)提取結(jié)果,在字段分析時(shí)采取分支結(jié)構(gòu)判斷SQL語(yǔ)句中是否有符合上述7個(gè)字段的字符,如圖2(b)所示。每個(gè)字段的值均為BOOL類型,0值表示該條日志記錄不包含此字段,1值表示該條日志記錄包含此字段。對(duì)所有的日志記錄處理之后,形成大小為n×7的矩陣,其中n為日志記錄個(gè)數(shù),7為每條日志記錄的特征字段個(gè)數(shù)。由此得到SQL注入語(yǔ)法特征矩陣。
(a) SQL注入語(yǔ)句提取流程 (b) 語(yǔ)法特征矩陣生成流程
SQL注入攻擊是逐步嘗試進(jìn)行完成,包含一系列Web訪問(wèn)動(dòng)作。若只考慮每條日志的SQL注入語(yǔ)法特征,在標(biāo)注標(biāo)準(zhǔn)嚴(yán)格的情況下,偶爾一次的輸入錯(cuò)誤當(dāng)作攻擊行為,會(huì)出現(xiàn)誤報(bào);反之,容易出現(xiàn)漏報(bào)。SQL注入攻擊步驟如圖3所示。
圖3 SQL注入攻擊步驟
(1) 尋找SQL注入點(diǎn)。在動(dòng)態(tài)網(wǎng)頁(yè)輸入?yún)?shù)的位置,通過(guò)不合法或邏輯錯(cuò)誤的輸入、推斷攻擊、重言式攻擊和SQL盲注入的方式判斷是否存在SQL注入。
(2) 確認(rèn)SQL注入點(diǎn)。在找到SQL注入點(diǎn)后,還需進(jìn)一步確認(rèn)SQL注入點(diǎn)的真實(shí)性和注入類型。一般需要多次嘗試,根據(jù)系統(tǒng)錯(cuò)誤信息和數(shù)據(jù)庫(kù)錯(cuò)誤信息來(lái)區(qū)分是字符、數(shù)字還是字符串類型的注入。
(3) 獲取系統(tǒng)和數(shù)據(jù)庫(kù)信息。由于不同數(shù)據(jù)庫(kù)具體的注入方式不同,所以還需要進(jìn)一步獲取系統(tǒng)和數(shù)據(jù)庫(kù)相關(guān)信息。該過(guò)程可以使用UNION聯(lián)合查詢、多語(yǔ)句命令執(zhí)行,利用內(nèi)置函數(shù)實(shí)現(xiàn),猜測(cè)數(shù)據(jù)庫(kù)的類型、表名、列名、判斷列的數(shù)據(jù)類型等。
(4) 實(shí)施注入攻擊。在確定數(shù)據(jù)庫(kù)信息之后,利用SQL注入漏洞進(jìn)行真正的攻擊,包括擴(kuò)張權(quán)限、竊取/篡改信息、惡意代碼執(zhí)行、腳本上傳等。
SQL注入攻擊特征不僅體現(xiàn)在SQL語(yǔ)句的語(yǔ)法特征上,在用戶訪問(wèn)行為上同樣具有異于正常訪問(wèn)行為的特征。例如用戶在同一個(gè)會(huì)話內(nèi)重復(fù)多次請(qǐng)求同一個(gè)網(wǎng)頁(yè)、在一定的時(shí)間內(nèi)發(fā)生大量的會(huì)話等。因此,分析SQL注入行為特征時(shí),也需要進(jìn)行用戶識(shí)別和會(huì)話識(shí)別。
本文根據(jù)Web訪問(wèn)日志的IPAddr、RemoteHost和UserAgent字段進(jìn)行用戶識(shí)別。如果兩條Web訪問(wèn)日志記錄的IPAddr、RemoteHost和UserAgent三個(gè)字段對(duì)應(yīng)相等,則認(rèn)為這兩條日志屬于同一用戶的操作記錄,否則屬于不同用戶。
設(shè)置會(huì)話持續(xù)時(shí)間閾值T,把T時(shí)間段內(nèi)的訪問(wèn)記錄作為一個(gè)會(huì)話,本文使用啟發(fā)式方法動(dòng)態(tài)確定閾值,以自適應(yīng)的閾值識(shí)別會(huì)話。設(shè)最大請(qǐng)求數(shù)Rmax,如果當(dāng)前會(huì)話的請(qǐng)求數(shù)小于Rmax,設(shè)置閾值為T1;如果請(qǐng)求數(shù)達(dá)到Rmax,設(shè)置閾值為T2,T2>T1。在實(shí)驗(yàn)中,Rmax取值為100,T1為30分鐘,T2為60分鐘。會(huì)話識(shí)別中,每個(gè)會(huì)話中有多個(gè)日志訪問(wèn)記錄,定義每個(gè)會(huì)話中含有的記錄數(shù)目稱為該會(huì)話的長(zhǎng)度,用len_session表示。SQL注入行為特征字段如圖4所示。
圖4 SQL注入行為特征字段
各字段含義如下:
(1) PPT(Percentage of PreTerm):含有前終結(jié)符的記錄數(shù)目與會(huì)話長(zhǎng)度的比例,即PPT=npt/len_session,npt為該會(huì)話中含有前終結(jié)符的記錄數(shù)目。
(2) PIP(Percentage of InjecPrefix):含有注入前綴的記錄數(shù)目與會(huì)話長(zhǎng)度的比例,即PIP=nip/len_session,nip為該會(huì)話中含有注入前綴的記錄數(shù)目。
(3) PIK(Percentage of InjecKey):含有注入關(guān)鍵詞的記錄數(shù)目與會(huì)話長(zhǎng)度的比例,即PIK=nik/len_session,nik為該會(huì)話中含有注入關(guān)鍵詞的記錄數(shù)目。
(4) PCP(Percentage of ConstPar):含有常量參數(shù)的記錄數(shù)目與會(huì)話長(zhǎng)度的比例,即PCP=ncp/len_session,ncp為該會(huì)話中含有常量參數(shù)的記錄數(shù)目。
(5) PUL(Percentage of UpLet):含有大寫字母的記錄數(shù)目與會(huì)話長(zhǎng)度的比例,即PUL=nul/len_session,nul為該會(huì)話中含有大寫字母的記錄數(shù)目。
(6) PSL(Percentage of SpecLet):含有其他特殊字符的記錄數(shù)目與會(huì)話長(zhǎng)度的比例,即PSL=nsl/len_session,nsl為該會(huì)話中含有其他特殊字符的記錄數(shù)目。
(7) PST(Percentage of SufTerm):含有后終結(jié)符的記錄數(shù)目與會(huì)話長(zhǎng)度的比例,即PSE=nst/len_session,nst為該會(huì)話中含有后終結(jié)符的記錄數(shù)目。
(8) PRT(Percentage of Max Request Times):請(qǐng)求次數(shù)最多的頁(yè)面被請(qǐng)求的次數(shù)與會(huì)話長(zhǎng)度的比例,即PRT=nrt/len_session,nrt為該會(huì)話中被請(qǐng)求次數(shù)最多的頁(yè)面被請(qǐng)求的次數(shù)。
(9) DT(Duration Time):會(huì)話的持續(xù)時(shí)間,即會(huì)話最后一條記錄的時(shí)間與第一條記錄的時(shí)間差。
日志預(yù)處理、用戶識(shí)別和會(huì)話識(shí)別后進(jìn)行行為特征字段提取,提取每個(gè)會(huì)話中的上述9個(gè)特征字段值,每個(gè)字段值的范圍是0~1。對(duì)所有會(huì)話記錄進(jìn)行SQL注入行為特征提取之后,形成大小為n×9的矩陣,其中n為會(huì)話記錄的個(gè)數(shù),9為每個(gè)會(huì)話的特征字段個(gè)數(shù)。由此得到SQL注入行為特征矩陣。
通過(guò)分析電力信息系統(tǒng)特點(diǎn),本文搭建相應(yīng)的Web應(yīng)用系統(tǒng),并將其部署于模擬電力信息系統(tǒng)的實(shí)驗(yàn)環(huán)境中。在系統(tǒng)源代碼中人工添加GET、POST、HTTP Cookie、HTTP Referer和HTTP Header “X-Forwarded-For”5大種類共計(jì)13個(gè)SQL注入漏洞,如表3所示。
表3 Web系統(tǒng)SQL注入漏洞列表
針對(duì)SQL注入攻擊的需求,本文在模擬實(shí)驗(yàn)環(huán)境中部署的Web系統(tǒng)上增加了相應(yīng)的SQL注入漏洞入口。采用多用戶以及SQL注入工具的方式進(jìn)行多次正常訪問(wèn)和嘗試攻擊,記錄下用戶訪問(wèn)日志,其中部分日志InputPara信息如下:
controller=site&action=pro_list&cat=57
controller=site&action=pro_list&cat=
57 and(select count(1) from sysobjects)>0 And 1=1
controller=site&action=pro_list&cat=
57 and len(@@version)>0 And 1=1
controller=site&action=pro_list&cat=
57 and(select count(table_name) from user_tables)>0 And 1=1
controller=site&action=pro_list&cat=
57 and 1=1-- And 1=1
controller=site&action=pro_list&cat=
57 and 1=1/* And 1=1
controller=site&action=pro_list&cat=
57 and 0<=(select count(*) from master..syslogins) And 1=1
對(duì)Web訪問(wèn)日志進(jìn)行去除無(wú)效訪問(wèn)日志、解碼等預(yù)處理操作步驟,然后進(jìn)行特征提取,形成語(yǔ)法特征(Syntactic Feature,SF)矩陣與行為特征(Behavioral Feature,BF)矩陣兩類實(shí)驗(yàn)數(shù)據(jù)集。SQL注入攻擊數(shù)與正常訪問(wèn)日志數(shù)比例如圖5所示,其中TrainSet為訓(xùn)練集,TestSet為測(cè)試集。
圖5 SQL注入攻擊數(shù)與正常訪問(wèn)日志數(shù)比例
在入侵、攻擊檢測(cè)等研究中,常用漏報(bào)率和誤報(bào)率評(píng)價(jià)檢測(cè)方法的有效性[10,13]。漏報(bào)率即沒(méi)有檢測(cè)出來(lái)的攻擊記錄數(shù)與總攻擊記錄數(shù)的比例,用FNR(False Negative Rate)表示;誤報(bào)率即被檢測(cè)出來(lái)是攻擊但實(shí)際上是正常的記錄數(shù)與總的正常記錄數(shù)的比例,用FPR(False Positive Rate)表示。本文使用FNR和FPR評(píng)估檢測(cè)算法的有效性,通常具有較低漏報(bào)率和誤報(bào)率的模型檢測(cè)效果較好。誤報(bào)率和漏報(bào)率的計(jì)算分別如下:
FPR=FP/(FP+TN)
(1)
FNR=FN/(TP+FN)
(2)
式中:FP表示實(shí)際是正常的日志記錄,但檢測(cè)結(jié)果是SQLIA的日志記錄個(gè)數(shù);TN表示實(shí)際與檢測(cè)結(jié)果均是正常的訪問(wèn)日志記錄;FN表示沒(méi)有檢測(cè)出來(lái)的SQLIA日志記錄個(gè)數(shù);TP表示實(shí)際與檢測(cè)結(jié)果均是SQLIA的訪問(wèn)日志記錄數(shù)目。
實(shí)驗(yàn)平臺(tái)為Windows 7,系統(tǒng)內(nèi)存4 GB,CPU為Core i3,使用Firefox瀏覽器,在模擬電力信息系統(tǒng)實(shí)驗(yàn)環(huán)境下運(yùn)行Web應(yīng)用。
使用K-means、樸素貝葉斯(Naive Bayes)、支持向量機(jī)(Support Vector Machine, SVM)和隨機(jī)森林(Random Forest,RF)算法分別對(duì)SQL注入語(yǔ)法特征矩陣和行為特征矩陣建模和預(yù)測(cè),計(jì)算FPR和FNR。使用這兩種特征矩陣目的是評(píng)估語(yǔ)法特征和行為特征在SQL注入攻擊檢測(cè)中的效果。
另外,對(duì)SQL注入語(yǔ)法特征的每個(gè)樣本類型進(jìn)行重新標(biāo)注設(shè)計(jì)一組對(duì)比實(shí)驗(yàn)。進(jìn)行重新標(biāo)注是因?yàn)檎Z(yǔ)法特征是以每個(gè)日志作為一個(gè)樣本,單獨(dú)從每個(gè)日志的語(yǔ)法特征分析該樣本是否是攻擊往往具有一定的偏差。標(biāo)注標(biāo)準(zhǔn)嚴(yán)格會(huì)導(dǎo)致誤報(bào),標(biāo)準(zhǔn)寬松則會(huì)導(dǎo)致漏報(bào)。而行為特征是以用戶的一次會(huì)話作為一個(gè)樣本,其標(biāo)注一般不存在此問(wèn)題。因此,為了增加實(shí)驗(yàn)結(jié)果的充分性,本文考慮對(duì)語(yǔ)法特征進(jìn)行重新標(biāo)注。
首先將兩類實(shí)驗(yàn)數(shù)據(jù)訓(xùn)練集TrainSet_SF(340條SQLIA記錄,25 040條正常訪問(wèn)記錄)和TrainSet_BF(260條SQLIA記錄,1 590條正常訪問(wèn)記錄)分別代入上述4種算法模型進(jìn)行訓(xùn)練,并不斷調(diào)整參數(shù)選出效果更優(yōu)的訓(xùn)練模型,采用十折交叉驗(yàn)證方法對(duì)模型進(jìn)行綜合驗(yàn)證評(píng)價(jià)。然后將TestSet1_SF(290條SQLIA記錄,1 470條正常訪問(wèn)記錄)、TestSet2_SF(130條SQLIA記錄,20 380條正常訪問(wèn)記錄)和TestSet1_BF(110條SQLIA記錄,120條正常訪問(wèn)記錄)、 TestSet2_BF(130條SQLIA記錄,990條正常訪問(wèn)記錄)代入4種訓(xùn)練模型進(jìn)行預(yù)測(cè)。上述模型對(duì)SQL注入攻擊檢測(cè)結(jié)果的漏報(bào)率和誤報(bào)率如表4所示。按照同樣的實(shí)驗(yàn)過(guò)程對(duì)重新標(biāo)注后的語(yǔ)法特征數(shù)據(jù)集SF進(jìn)行實(shí)驗(yàn),漏報(bào)率和誤報(bào)率結(jié)果如表5所示。其中TestSet1_SFR和TestSet2_SFR分別表示重新標(biāo)注后SF的兩個(gè)測(cè)試集。
表4 各模型在SQL注入語(yǔ)法特征和行為特征數(shù)據(jù)集的預(yù)測(cè)結(jié)果 %
表5 SQL注入語(yǔ)法特征數(shù)據(jù)集重新標(biāo)注前后預(yù)測(cè)結(jié)果對(duì)比 %
(1) SQL注入語(yǔ)法特征和行為特征對(duì)漏報(bào)率FNR的影響。圖6為各模型在語(yǔ)法特征測(cè)試集和行為特征測(cè)試集上檢測(cè)結(jié)果的漏報(bào)率??梢钥闯?,每個(gè)模型在語(yǔ)法特征數(shù)據(jù)集和行為特征數(shù)據(jù)集上的檢測(cè)結(jié)果的漏報(bào)率差距明顯,使用SQL注入行為特征數(shù)據(jù)集進(jìn)行SQL注入攻擊檢測(cè),可以有效降低漏報(bào)率。
圖6 各模型在SF和BF上的FNR結(jié)果
(2) SQL注入語(yǔ)法特征和行為特征對(duì)誤報(bào)率FPR的影響。圖7為各模型在語(yǔ)法特征測(cè)試集和行為特征測(cè)試集上檢測(cè)結(jié)果的誤報(bào)率。可以看出,每個(gè)模型在語(yǔ)法特征數(shù)據(jù)集和行為特征數(shù)據(jù)集上的檢測(cè)結(jié)果的誤報(bào)率差距不是特別明顯,多數(shù)模型在行為特征數(shù)據(jù)集上測(cè)試結(jié)果的誤報(bào)率略高于在語(yǔ)法特征數(shù)據(jù)集上的結(jié)果。這是由于語(yǔ)法特征數(shù)據(jù)集在標(biāo)注時(shí)標(biāo)準(zhǔn)不太嚴(yán)格,導(dǎo)致漏報(bào)率較高,但是誤報(bào)率低。
圖7 各模型在SF和BF上的FPR結(jié)果
綜合考慮FNR和FPR兩個(gè)因素,行為特征在SQL注入攻擊檢測(cè)中具有更好的效果。
(3) 各模型檢測(cè)效果分析。本文實(shí)驗(yàn)數(shù)據(jù)的特點(diǎn)是小數(shù)據(jù)量和低維度。通過(guò)比較各模型在數(shù)據(jù)集上的分類效果,K-means無(wú)監(jiān)督聚類相比其他分類算法,F(xiàn)NR和FPR偏高。Naive Bayes適合屬性相互獨(dú)立的數(shù)據(jù)集,在本實(shí)驗(yàn)中的結(jié)果比SVM、RF稍差。RF適合較高維度和大數(shù)據(jù)量的數(shù)據(jù)集,SVM適合小樣本和高維數(shù)據(jù),在本文實(shí)驗(yàn)中的檢測(cè)結(jié)果相差不大,均能得到可以接受的分類結(jié)果。
(4) 數(shù)據(jù)集規(guī)模以及攻擊樣本所占比例對(duì)實(shí)驗(yàn)結(jié)果的影響。實(shí)驗(yàn)中TestSet1和TestSet2在數(shù)據(jù)集規(guī)模和攻擊樣本所占比例上都有很大差異。TestSet1是攻擊樣本比例高的規(guī)模較小的數(shù)據(jù)集;TestSet2是攻擊樣本比例低的規(guī)模較大的數(shù)據(jù)集,更符合真實(shí)環(huán)境中用戶訪問(wèn)日志情況??梢钥闯?,在TestSet2數(shù)據(jù)集下的預(yù)測(cè)結(jié)果更為穩(wěn)定,預(yù)測(cè)結(jié)果更加準(zhǔn)確。
(5) 語(yǔ)法特征數(shù)據(jù)集的標(biāo)注與否對(duì)SQL注入攻擊檢測(cè)漏報(bào)率FNR和誤報(bào)率FPR的影響。圖8、圖9分別為各模型在語(yǔ)法特征數(shù)據(jù)集重新標(biāo)注前后FNR、FPR的實(shí)驗(yàn)結(jié)果??梢钥闯?,語(yǔ)法特征數(shù)據(jù)集樣本重新標(biāo)注后,各模型漏報(bào)率明顯降低,誤報(bào)率維持在可接受的較低范圍內(nèi)。由此可見,語(yǔ)法特征數(shù)據(jù)集的標(biāo)注標(biāo)準(zhǔn)對(duì)SQL注入攻擊檢測(cè)結(jié)果的影響較大。
圖8 SF重新標(biāo)注前后FNR對(duì)比
圖9 SF重新標(biāo)注前后FPR對(duì)比
通過(guò)上述結(jié)果分析可知,基于電力信息系統(tǒng)日志數(shù)據(jù)提取SQL注入攻擊語(yǔ)法特征和行為特征,用于注入攻擊檢測(cè),能夠有效檢測(cè)出注入攻擊,且檢測(cè)結(jié)果具有較低的漏報(bào)率和誤報(bào)率。本文實(shí)驗(yàn)結(jié)果雖然依賴于日志定義、攻擊特征提取以及攻擊行為的認(rèn)定,但在SQL注入攻擊檢測(cè)方面具有非常好的通用性和易用性,經(jīng)過(guò)簡(jiǎn)單的調(diào)整就可以對(duì)某類技術(shù)搭建的系統(tǒng)獲得很好的檢測(cè)效果。用于電力信息系統(tǒng)的SQL注入攻擊檢測(cè)中,可有效防止惡意用戶的SQL注入攻擊,保障電網(wǎng)信息系統(tǒng)的數(shù)據(jù)安全。
本文首先對(duì)Web應(yīng)用日志數(shù)據(jù)進(jìn)行分析,結(jié)合SQL注入攻擊特點(diǎn),從中提取注入攻擊語(yǔ)法特征與行為特征,得到語(yǔ)法特征矩陣SF和行為特征矩陣BF兩類實(shí)驗(yàn)數(shù)據(jù)集。然后使用K-means、Naive Bayes、SVM和RF算法進(jìn)行建模和預(yù)測(cè)。通過(guò)實(shí)際的電力信息系統(tǒng)訪問(wèn)日志數(shù)據(jù)分析各算法模型在SF和BF數(shù)據(jù)集下對(duì)注入攻擊檢測(cè)的誤報(bào)率和漏報(bào)率。實(shí)驗(yàn)結(jié)果表明,面向電力信息系統(tǒng)日志數(shù)據(jù)的注入攻擊檢測(cè)方法可有效檢測(cè)對(duì)系統(tǒng)的SQL注入攻擊。與語(yǔ)法特征相比,行為特征在注入攻擊檢測(cè)中具有更好的檢測(cè)效果。SVM和RF算法的檢測(cè)效果較好,具有較低的漏報(bào)率和誤報(bào)率。未來(lái)工作將會(huì)在增加數(shù)據(jù)規(guī)模和安全攻擊數(shù)據(jù)類型的基礎(chǔ)上,基于多種數(shù)據(jù)挖掘模型進(jìn)行綜合研究分析,以進(jìn)一步提高面向電力信息系統(tǒng)安全相關(guān)數(shù)據(jù)特征的挖掘與分析能力。