陳 亮,李永剛,劉 磊,許 靜,李 潔
(1.國(guó)網(wǎng)天津市電力公司 電力科學(xué)研究院,天津 300384; 2.國(guó)網(wǎng)信息通信產(chǎn)業(yè)集團(tuán)有限公司,北京 102211;3.南開(kāi)大學(xué) 人工智能學(xué)院,天津 300350)
在能源互聯(lián)的背景下,電力Web信息網(wǎng)絡(luò)得到了高速的發(fā)展,然而其安全性問(wèn)題日趨嚴(yán)峻[1,2],其中SQL注入漏洞(SQL injection vulnerability,SQLIV)在電力業(yè)務(wù)信息系統(tǒng)中的危害愈加凸顯[3,4]。攻擊者可通過(guò)偽造發(fā)送給Web應(yīng)用后臺(tái)數(shù)據(jù)庫(kù)的SQL查詢(xún),導(dǎo)致其被解析為非預(yù)期的查詢(xún)[2,5]。因而,針對(duì)電力業(yè)務(wù)信息系統(tǒng)中SQL注入漏洞檢測(cè)方法的研究具有重要的理論和現(xiàn)實(shí)意義[6,7]。
滲透測(cè)試是最為主要的電力Web應(yīng)用漏洞動(dòng)態(tài)檢測(cè)技術(shù)[8,9]之一,但其在龐大復(fù)雜的電力信息系統(tǒng)應(yīng)用中依然存在檢測(cè)覆蓋度和準(zhǔn)確度不足的問(wèn)題[10-12]。一個(gè)主要的原因是測(cè)試用例集和驗(yàn)證措施的不充分,以及難以在大規(guī)模測(cè)試的環(huán)境下滿(mǎn)足效率需求[6,11]。以往許多方法集中于對(duì)信息收集和響應(yīng)分析方面的研究,而對(duì)測(cè)試用例集和驗(yàn)證措施充分性方面的研究相對(duì)較少[6,7]。其大都將測(cè)試用例集作為外部因素,通過(guò)經(jīng)驗(yàn)枚舉獲取測(cè)試用例[11-13]。面對(duì)如何提高測(cè)試覆蓋度的問(wèn)題,相繼有研究提出基于模板組合和攻擊變異的測(cè)試用例生成方法[12,13],以及基于攻擊模型的攻擊生成方法[14],但其大多僅從測(cè)試輸入層面展開(kāi),缺乏對(duì)于測(cè)試整體各階段要素和特征的研究,尤其是缺少對(duì)包括目標(biāo)程序控制層面和后臺(tái)數(shù)據(jù)庫(kù)語(yǔ)法邏輯層面在內(nèi)的整體特征和規(guī)律的探討。
針對(duì)上述問(wèn)題,本文提出了一種基于特征的電力業(yè)務(wù)信息系統(tǒng)的SQL注入漏洞自動(dòng)化滲透測(cè)試方法。首先對(duì)電力業(yè)務(wù)信息系統(tǒng)內(nèi)部和外部多個(gè)層面的注入漏洞特征進(jìn)行抽象分析建模,并建立其特征矩陣模型FMM(feature matrix model),并基于FM特征組合的等價(jià)類(lèi)劃分和剪枝技術(shù),提出了一種啟發(fā)式的特征篩選算法HFS(heuristic feature selection),以提高整體測(cè)試的覆蓋度和效率。最后,本文將所述方法在多個(gè)測(cè)試數(shù)據(jù)集上與兩個(gè)滲透測(cè)試工具進(jìn)行對(duì)比實(shí)驗(yàn)分析,驗(yàn)證了該方法的有效性。
針對(duì)滲透測(cè)試用例的覆蓋度問(wèn)題,需要考慮到目標(biāo)Web應(yīng)用的狀態(tài)和后臺(tái)邏輯等內(nèi)在的因素,才能在生成有限測(cè)試用例集的情況下,對(duì)電力Web信息系統(tǒng)內(nèi)部復(fù)雜多變的系統(tǒng)環(huán)境進(jìn)行有效的覆蓋。然而更為充分的測(cè)試用例集和驗(yàn)證措施所產(chǎn)生的冗余和大量HTTP請(qǐng)求會(huì)造成整體檢測(cè)效率的大幅度下降,從而嚴(yán)重影響了其在電力業(yè)務(wù)信息系統(tǒng)中的應(yīng)用[14]。電力Web信息系統(tǒng)在技術(shù)架構(gòu)上和規(guī)模上具有層次多和復(fù)雜性高的特點(diǎn),同時(shí)其包含了大量的動(dòng)態(tài)交互頁(yè)面。如何有效地結(jié)合測(cè)試輸入特征、應(yīng)用控制特征和語(yǔ)法邏輯特征來(lái)指導(dǎo)測(cè)試,在保證測(cè)試全面性和充分性的條件下提高其整體效率,便成為提高電力信息網(wǎng)絡(luò)SQL注入漏洞滲透測(cè)試能力的關(guān)鍵。因此,本文基于對(duì)電力Web信息程序內(nèi)部和外部多種因素進(jìn)行全面分析,結(jié)合電力業(yè)務(wù)信息系統(tǒng)特征,從灰盒測(cè)試的角度更為深入分析漏洞的內(nèi)在規(guī)律,構(gòu)建了針對(duì)電力業(yè)務(wù)信息系統(tǒng)滲透測(cè)試的特征矩陣模型,這里首先給出其基本定義和形式化的描述。
為了能夠?qū)﹄娏I(yè)務(wù)信息系統(tǒng)實(shí)現(xiàn)全面的SQL注入漏洞滲透測(cè)試,并通過(guò)充分的驗(yàn)證機(jī)制保證其準(zhǔn)確性,需要獲得全面而有效的測(cè)試用例集,并保證該測(cè)試用例集適當(dāng)?shù)娜哂嘈?,即包含?duì)于同一目標(biāo)注入點(diǎn)產(chǎn)生的效果相同但表現(xiàn)形式不同的測(cè)試用例。這樣便能夠?qū)崿F(xiàn)對(duì)電力信息系統(tǒng)滲透測(cè)試的高覆蓋度,并利用冗余驗(yàn)證保證測(cè)試的準(zhǔn)確度。為了獲得充分而全面的測(cè)試用例集,我們從電力業(yè)務(wù)信息系統(tǒng)注入的內(nèi)外部特征入手進(jìn)行全面的分析,不僅要考慮到異常驗(yàn)證等因素,還需要在電力信息系統(tǒng)正常功能的范圍內(nèi)對(duì)漏洞特有的安全行為特征進(jìn)行分析和檢測(cè)。因而,我們將影響其滲透測(cè)試的相關(guān)因素歸納為3類(lèi),并將其整體定義為特征矩陣模型FMM。在本文所述模型中,特征(Feature)表示能夠體現(xiàn)SQL注入測(cè)試語(yǔ)句、語(yǔ)法和控制相關(guān)特有規(guī)律和特點(diǎn)的標(biāo)志。下面給出電力業(yè)務(wù)信息系統(tǒng)SQL注入特征矩陣的形式化定義。
定義1特征矩陣FM(feature matrix)為一個(gè)三元組FM={IF,GF,CF}。其中IF,GF和CF均為多元組,其中IF表示語(yǔ)句特征,GF表示語(yǔ)法特征,CF表示控制特征。
FM由3個(gè)多元組構(gòu)成,實(shí)際表示了3種類(lèi)型的子特征矩陣,包括電力業(yè)務(wù)信息系統(tǒng)的外部注入特征矩陣IF(injection feature)、其系統(tǒng)內(nèi)部語(yǔ)法特征矩陣GF(grammar feature)、測(cè)試過(guò)程中的控制特征矩陣CF(controlling feature),在電力信息系統(tǒng)滲透測(cè)試過(guò)程中,通過(guò)對(duì)這些特征進(jìn)行解析和操作,可以動(dòng)態(tài)生成對(duì)當(dāng)前電力業(yè)務(wù)信息系統(tǒng)具有針對(duì)性的測(cè)試用例、過(guò)程控制與結(jié)果分析。其3類(lèi)子特征矩陣的形式化定義分別如下。
定義2注入特征IF為五元組,IF={KW,IM,PF,SF,SE};其中KW表示注入關(guān)鍵詞 (KeyWord),且為IF的主特征元素;IM為注入模式(Injection Mode);PF為注入前綴(PreFix);SF為注入后綴(SufFix);SE表示注入終結(jié)符(SufEnd)。其矩陣表示如下
定義3語(yǔ)法特征GF為三元組,GF={IP,OL,IL};IP(injection point)表示目標(biāo)查詢(xún)子句中注入點(diǎn)位置的語(yǔ)法,且為GF的主特征;OL(original logic)表示原始查詢(xún)子句的邏輯語(yǔ)義;IL(injection logic)表示注入后查詢(xún)子句的邏輯語(yǔ)義。其矩陣表示如下
GF描述了電力業(yè)務(wù)信息系統(tǒng)中通用的SQL查詢(xún)語(yǔ)句的語(yǔ)法特征信息。目標(biāo)查詢(xún)子句的注入點(diǎn)語(yǔ)法IP為主特征,對(duì)注入的語(yǔ)法起到?jīng)Q定性作用,決定了測(cè)試語(yǔ)句特征IF中對(duì)應(yīng)的關(guān)鍵詞KW的范圍,如圖1所示。OL則為原始查詢(xún)子句的邏輯語(yǔ)義,包括真T、假F、響應(yīng)時(shí)間正常TIME_OK和響應(yīng)數(shù)據(jù)正常RESP_OK。IL為注入后查詢(xún)子句的邏輯語(yǔ)義,包括真T(similarity-based injection)、假F(similarity-based injection)、響應(yīng)時(shí)間延遲TIME_DL(time-based injection)和響應(yīng)數(shù)據(jù)出錯(cuò)RESP_ERR(error-based injection)。
圖1 SQL語(yǔ)法樹(shù)與特征編碼對(duì)應(yīng)關(guān)系
定義4控制特征CF為四元組,CF={RP,VT,RT,KN};其中RP(response process)為響應(yīng)處理方式,且為CF的主特征;VT(value type)為注入點(diǎn)參數(shù)類(lèi)型;KN(keyword number)為是否包含關(guān)鍵詞;RT(replace type)為注入?yún)?shù)替換方式。其矩陣表示為
CF描述了電力業(yè)務(wù)信息系統(tǒng)SQL注入漏洞滲透測(cè)試流程中參數(shù)和控制的抽象特征描述。其中響應(yīng)處理方式RP為CF的主特征,SQL注入檢測(cè)時(shí)的響應(yīng)處理的方式?jīng)Q定測(cè)試用例語(yǔ)句特征IF中關(guān)于響應(yīng)處理的具體內(nèi)容,并且決定了響應(yīng)分析時(shí)采用的具體方法。VT表示注入點(diǎn)的參數(shù)類(lèi)型,包括數(shù)字類(lèi)型NUM、字符串類(lèi)型STR和無(wú)類(lèi)型NULL。KN為判斷是否包含關(guān)鍵詞的參數(shù),不包含關(guān)鍵詞為F和包含關(guān)鍵詞為T(mén)。RT為是否對(duì)注入點(diǎn)原始參數(shù)進(jìn)行替換,包括兩種參數(shù)值,進(jìn)行替換REPLACE(replace)和不進(jìn)行替換NOREPL(no replace)。
為了能夠?qū)﹄娏I(yè)務(wù)信息系統(tǒng)繁多復(fù)雜的動(dòng)態(tài)頁(yè)面環(huán)境進(jìn)行全面有效的SQL注入漏洞測(cè)試,我們將電力信息系統(tǒng)注入特征、語(yǔ)法特征和控制特征進(jìn)行組合,進(jìn)而得到全局的特征模型FM。通過(guò)FM可進(jìn)一步提取出測(cè)試用例規(guī)則TCR(test case rule),通過(guò)TCR可在對(duì)電力信息系統(tǒng)進(jìn)行測(cè)試過(guò)程中實(shí)時(shí)生成針對(duì)當(dāng)前業(yè)務(wù)系統(tǒng)的SQL注入測(cè)試用例,并對(duì)檢測(cè)語(yǔ)法、判定規(guī)則和測(cè)試流程進(jìn)行動(dòng)態(tài)控制。對(duì)于給定子矩陣IF、GF和CF的FM模型,有FM={IF,GF,CF}=IF×GF×CF,其中符號(hào)×表示對(duì)矩陣進(jìn)行笛卡爾積運(yùn)算。初始的FM實(shí)際上是3個(gè)子矩陣所有行的組合,根據(jù)FM的矩陣表示,我們可以得到測(cè)試用例規(guī)則TCR,見(jiàn)定義5。
定義5測(cè)試用例規(guī)則TCR為十一元組,TCR=(KW,PF,IM,SF,IF,OL,IL,RP,VT,RT,KN),即特征矩陣FM的每一行(Row)即為一個(gè)測(cè)試用例規(guī)則TCR,TCR可簡(jiǎn)化記為T(mén)CR=(IF,GF,CF)。
基于TCR的外部注入語(yǔ)句特征IF,我們可以根據(jù)其進(jìn)行動(dòng)態(tài)的測(cè)試用例語(yǔ)句TCS(test case statement)拼接生成,例如TCS=R.PF+R.KW+R.SF+R.SE。通過(guò)動(dòng)態(tài)拼接注入特征元素,并對(duì)其進(jìn)行一定的編碼轉(zhuǎn)換便可實(shí)時(shí)生成該TCR所對(duì)應(yīng)的測(cè)試語(yǔ)句。利用其內(nèi)部語(yǔ)法特征GF的特征值可對(duì)檢測(cè)結(jié)果進(jìn)行對(duì)應(yīng)的結(jié)果分析,如圖1所所示。同時(shí),在檢測(cè)的過(guò)程中通過(guò)控制特征CF可對(duì)測(cè)試用例和注入方式進(jìn)行相應(yīng)的控制和調(diào)整,例如當(dāng)響應(yīng)處理方式特征RP為C103時(shí),是基于時(shí)間(Time-Based)的響應(yīng)處理方式,此時(shí)將測(cè)試用例語(yǔ)動(dòng)態(tài)調(diào)整為T(mén)CS=TCS.Replace(″V2″,″SLEEP(30)″),也就是將測(cè)試語(yǔ)句加入時(shí)間延遲命令“SLEEP(30)”。
通過(guò)特征矩陣FM可以組合生成大量的TCR,進(jìn)而生成大量的測(cè)試用例,從而提高滲透測(cè)試的覆蓋度。然而在通過(guò)大量測(cè)試用例提高測(cè)試覆蓋度的基礎(chǔ)上,同時(shí)大量增加了測(cè)試規(guī)模,進(jìn)而影響了滲透測(cè)試效率和在電力業(yè)務(wù)信息系統(tǒng)中的可用性。因而,為了在提高準(zhǔn)確度的基礎(chǔ)上,提升在電力業(yè)務(wù)信息系統(tǒng)中SQL注入漏洞滲透測(cè)試的效率,本文進(jìn)一步提出了一種啟發(fā)式特征篩選HFS(heuristic feature selection)算法。
通過(guò)大量實(shí)驗(yàn)發(fā)現(xiàn),在具有決定作用的電力業(yè)務(wù)信息系統(tǒng)SQL注入滲透測(cè)試特征中,CF的子特征RP、VT、KN、RT均可在檢測(cè)過(guò)程中通過(guò)檢測(cè)的注入響應(yīng)信息的收集和分析過(guò)程中,被逐步直接或間接地獲取到,并應(yīng)用于對(duì)TCR的有效性和語(yǔ)句形態(tài)進(jìn)行判斷和調(diào)整,同時(shí)CF可應(yīng)用于滲透測(cè)試流程的控制。根據(jù)這些特點(diǎn),我們可以確定矩陣特征的范圍,從而篩選出最優(yōu)的TCR進(jìn)行測(cè)試。由于目前僅能根據(jù)CF特征確定特征值范圍,因而最終所確定的是FM的子集。故我們根據(jù)CF子特征值的不同組合情況,將特征矩陣FM劃分為數(shù)個(gè)子矩陣(Sub Matrix),這些子矩陣實(shí)際上可以理解為關(guān)于TCR的等價(jià)類(lèi)。對(duì)FM子矩陣的劃分依據(jù)是控制特征矩陣。
CF子矩陣的每一行即對(duì)應(yīng)一個(gè)基本的FM子矩陣,這些子矩陣具有相同的CF特征值。即對(duì)于FM中所有CF四元組(RP,VT,KN,RT)的值相同的行即屬于同一個(gè)子特征矩陣。例如,對(duì)于(RP,VT,KN,RT) =(C101,C202,C301,C402)的TCR組成了其CF子特征RP、VT、KN、RT值分別為“SIMI”、“STR”、“NONE”和“NOREPLACE”的子特征矩陣,而矩陣中TCR的IF和GF特征值則是由他們之間子特征的笛卡爾積運(yùn)算的結(jié)果組成,如圖2中所示。由此可知,F(xiàn)M子矩陣的數(shù)量與控制特征CF矩陣的行數(shù)相同,為T(mén)=|RP|×|VT|×|KN|×|RT|,則TCR集合也被劃分為T(mén)個(gè)等價(jià)類(lèi)。在實(shí)際應(yīng)用過(guò)程中,我們用CF每行的值來(lái)分別代表一個(gè)TCR集合。例如,編碼(C102,C202,C301,C402)表示在FM矩陣中與該值相對(duì)應(yīng)的子矩陣,其所對(duì)應(yīng)的TCR集合為{(IF,GF,CF)|CF(RP)=C102∧CF(VT)=C202∧CF(KN)=C301∧CF(RL)=C402}。該編碼表示有效的TCR應(yīng)符合以下條件:結(jié)果處理方式RP為“相似度比較方式SIMI”;注入點(diǎn)參數(shù)類(lèi)型VT為“字符串類(lèi)型STR”;測(cè)試用例包含關(guān)鍵詞“Keyword”;并且注入?yún)?shù)替換方式RT為“不替換原始參數(shù)NOREPL”。
為能夠在保障測(cè)試覆蓋度的基礎(chǔ)上,有效提高電力業(yè)務(wù)信息系統(tǒng)SQL注入漏洞滲透測(cè)試效率,提出一種啟發(fā)式特征篩選HFS算法。HFS利用檢測(cè)中收集到的信息動(dòng)態(tài)劃分和篩選符合檢測(cè)條件的子特征矩陣,從而逐漸縮小用于檢測(cè)的測(cè)試用例集合,并且對(duì)于當(dāng)前的電力業(yè)務(wù)信息系統(tǒng)更具有針對(duì)性。首先,HFS隨著檢測(cè)的進(jìn)行逐漸收集和分析之前的反饋信息,并分別獲取CF子特征的目標(biāo)值(Target Value),目標(biāo)值描述了實(shí)際被測(cè)環(huán)境和TCR應(yīng)該遵守的條件值。一旦HFS發(fā)現(xiàn)某個(gè)新的CF子特征目標(biāo)值,它會(huì)根據(jù)該特征目標(biāo)值重新篩選出與其對(duì)應(yīng)的數(shù)個(gè)子矩陣,這些子矩陣共同構(gòu)成了用于后續(xù)檢測(cè)的當(dāng)前矩陣Current Matrix。HFS通過(guò)多叉樹(shù)實(shí)現(xiàn)對(duì)于有效子矩陣的篩選FST(feature selection tree),其每一個(gè)分支代表同一子特征一種值的可能性,每一個(gè)葉子節(jié)點(diǎn)代表了滿(mǎn)足其相應(yīng)條件的子矩陣集合,如圖2所示。篩選出的子矩陣構(gòu)成的當(dāng)前矩陣被用于后續(xù)檢測(cè)的TCR集合,每當(dāng)檢測(cè)過(guò)程中探測(cè)到新的CF子特征目標(biāo)值,則程序會(huì)重新進(jìn)行子矩陣篩選,并獲得新的當(dāng)前矩陣Current Matrix進(jìn)行更加有針對(duì)性的檢測(cè)。HFS可以在保證對(duì)于同一注入點(diǎn)較高的檢測(cè)覆蓋度和用于驗(yàn)證的必要冗余的情況下,過(guò)濾掉不必要的和不符合本次檢測(cè)條件的測(cè)試用例,進(jìn)而可以提高整體的檢測(cè)效率。
圖2 啟發(fā)式特征篩選(HFS)方法實(shí)例
算法1與算法2描述的是算法及其在電力業(yè)務(wù)信息系統(tǒng)中的應(yīng)用方法。算法1是關(guān)于調(diào)用HFS進(jìn)行動(dòng)態(tài)篩選的主函數(shù),在當(dāng)前特征集合Current FM不為空的前提下,循環(huán)調(diào)用矩陣中的測(cè)試規(guī)則GTR,并利用其進(jìn)行SQL注入滲透測(cè)試;對(duì)測(cè)試的響應(yīng)結(jié)果進(jìn)行分析,一旦發(fā)現(xiàn)新的Status信息,就調(diào)用算法2對(duì)Current FM進(jìn)行一輪重新的篩選;將每一條處理過(guò)的GTR從Current FM中刪除避免重復(fù)測(cè)試;當(dāng)Current FM變?yōu)榭?,即其中所有GTR被處理完畢后,算法1停止。算法2則是描述的每一輪HFS篩選的過(guò)程,循環(huán)對(duì)Current FM中的每一條GTR進(jìn)行判斷,當(dāng)其符合Status的條件時(shí)將其加入新的Current FM,否則將其丟棄;循環(huán)結(jié)束后所剩下的Current FM即為之后檢測(cè)時(shí)用于檢測(cè)的GTR集合。
算法1:SQL注入漏洞滲透測(cè)試主函數(shù)
Input:LegalFM(Legal Feature Matrix)
IPI(Injection Point Information)
Status(GTR Status variable)
Output:Result(Testing Result)
(1)Initialisation:CurrentFM=LegalFM,Status=NULL;
(2)WHILE(CurrentFM≠NULL) {
(3)gtr=CurrentFM.FIRSTROW; /* 選擇 Current FM的第一行并賦值給變量gtr*/
(4)Response= SQLIV Testing according toIPIandgtr;
(5) IF(Collect new Target F-V Pair from Response) {
(6)Status=Status.ADDNEW_TFVP (Response)
/*將檢測(cè)過(guò)程中收集到的新鍵值對(duì)更新至Status狀態(tài)變量*/
(7)CurrentFM= HFS (CurrentFM,Status);
(8) }
(9)Result= Result analysis according toIPIandgtr;
(10)CurrentFM.REMOVE_ROW(gtr); /* 從CurrentFM中移除與gtr值相等的一行*/
(11) }
(12) RETURNResult;
算法2:?jiǎn)l(fā)式特征篩選算法HFS
Input:CurrentFM(Current Feature Matrix)
Status(GTR Status variable)
Output:NCFM(New Current Feature Matrix)
(1)>Initialisation:CFM=CurrentFM,NCFM=NULL;
(2)WHILE(CFM≠NULL) {
(3)gtr=CFM.FIRSTROW;
(4) IF(gtr∈{GTR> | >Comply withStatus}) {
/* 如果gtr屬于GTR集合*/
(5)NCFM.ADD_ROW(gtr);
(6) }
(7)CFM.REMOVE_ROW(gtr);
(8) }
(9)RETURNNCFM;
圖2中描述了電力業(yè)務(wù)信息系統(tǒng)進(jìn)行特征篩選的過(guò)程,在進(jìn)行HFS之初,當(dāng)前矩陣Current Matrix為整個(gè)原始的FM矩陣;在①檢測(cè)階段,HFS分析出結(jié)果分析模式RP值為“ERR”,對(duì)應(yīng)的矩陣編碼為“C101”,則通過(guò)FM Selection Tree的第一層篩選出了與其對(duì)應(yīng)的子矩陣為滿(mǎn)足{TCR|CF(RP)=C101}的子矩陣集合,圖中4個(gè)子矩陣A、B、C、D均屬于新的當(dāng)前矩陣所包含的子矩陣;第②和第③階段,子矩陣A和D被過(guò)濾掉;第④階段結(jié)束后,HFS得到最終的當(dāng)前矩陣,原來(lái)的4個(gè)子矩陣中僅有C保留下來(lái)進(jìn)行后續(xù)的SQL注入滲透測(cè)試。通過(guò)上述方法進(jìn)行多層特征篩選可獲得精簡(jiǎn)優(yōu)化過(guò)的測(cè)試用例集合,假設(shè)平均每個(gè)特征包含n個(gè)特征值,那么在效率方面的提升近似為nm倍,而m則是在動(dòng)態(tài)測(cè)試過(guò)程中獲取到有效信息并進(jìn)行特征過(guò)濾的特征數(shù)量。
為了能夠驗(yàn)證本文所述方法在電力業(yè)務(wù)信息系統(tǒng)場(chǎng)景下的有效性,我們基于啟發(fā)式的特征篩選算法HFS開(kāi)發(fā)了自動(dòng)化的SQL注入漏洞滲透測(cè)試工具SQLFinder,其開(kāi)發(fā)環(huán)境為“Visual Studio 2010+.net 3.5+C#”,圖3為SQLFinder的流程。
圖3 SQLFinder流程
首先通過(guò)信息收集模塊收集輸入信息,包括FM信息文件、用戶(hù)設(shè)置信息和注入點(diǎn)URL信息等;然后隨著檢測(cè)的進(jìn)行,利用啟發(fā)式特征篩選HFS獲得CurrentMatrix,并逐行遍歷獲得TCR以生成測(cè)試用例和進(jìn)行檢測(cè)控制;之后發(fā)送測(cè)試請(qǐng)求并分析保存其響應(yīng)結(jié)果。此時(shí),若完成所有TCR的檢測(cè),則分析最終結(jié)果并結(jié)束檢測(cè);若是有未完成的TCR,則返回CurrentMatrix并對(duì)下一條TCR繼續(xù)進(jìn)行檢測(cè),從而形成總體循環(huán)A,使得程序可以自動(dòng)化完成SQL注入滲透測(cè)試。另外,在選擇下一條TCR之前,程序會(huì)對(duì)收集的信息進(jìn)行判斷。一旦發(fā)現(xiàn)新的目標(biāo)特征值,程序會(huì)返回到信息收集和特征篩選階段,根據(jù)當(dāng)前測(cè)試的實(shí)時(shí)反饋信息動(dòng)態(tài)更新TCR的特征值,并通過(guò)特征篩選算法重新篩選有效子矩陣,并替換當(dāng)前測(cè)試矩陣CurrentMatrix,該矩陣會(huì)被用于后續(xù)的SQL注入漏洞檢測(cè),從而構(gòu)成了循環(huán)B。循環(huán)B使HFS通過(guò)逐步縮小測(cè)試用例規(guī)則集合的范圍來(lái)降低不必要的冗余,提高測(cè)試的針對(duì)性,從而提高對(duì)電力業(yè)務(wù)信息系統(tǒng)的SQL注入漏洞滲透測(cè)試的準(zhǔn)確性和檢測(cè)效率。
在本文中,我們選擇兩個(gè)著名的SQL注入滲透測(cè)試工具進(jìn)行對(duì)比,SQLMap[15]和WVS Acunetix[16]。其中SQLMap是一款知名的開(kāi)源SQL注入測(cè)試工具,它也被譽(yù)為目前世界上最優(yōu)秀的免費(fèi)SQL注入工具。WVS Acunetix是一款著名的商用Web應(yīng)用安全測(cè)試工具,它也是目前使用率較高的一款商用工具。這兩款工具是自動(dòng)化SQL注入滲透測(cè)試工具的代表。本文將這兩款測(cè)試工具表示為工具A和工具B(沒(méi)有特定的順序),并且設(shè)置為最高級(jí)檢測(cè)模式進(jìn)行測(cè)試。
本文選取的測(cè)試數(shù)據(jù)集包括3個(gè)部分,如表1所示,其包括知名開(kāi)源漏洞評(píng)估系統(tǒng)Wavsep[17]、模擬電力業(yè)務(wù)信息系統(tǒng)環(huán)境的漏洞評(píng)估系統(tǒng)VulWeb和共計(jì)約30 000條真實(shí)的動(dòng)態(tài)頁(yè)面URL(real internet websites,IW-R)。
表1 測(cè)試數(shù)據(jù)集信息
Wavsep(the web application vulnerability scanner eva-luation project)是在“PHP 5+MySQL 5”環(huán)境下開(kāi)發(fā)的知名公開(kāi)數(shù)據(jù)集,其包含1067條URL、1080個(gè)注入點(diǎn),以及人工植入的135個(gè)不同的SQL注入漏洞頁(yè)面,其可被用于評(píng)價(jià)Web應(yīng)用漏洞檢測(cè)工具的綜合檢測(cè)能力。VulWeb是模擬電力業(yè)務(wù)信息系統(tǒng)環(huán)境搭建的漏洞掃描工具評(píng)估系統(tǒng),其中包含了電力業(yè)務(wù)信息系統(tǒng)中常見(jiàn)的多種用不同類(lèi)型的SQL注入漏洞。IW-R分為兩部分IW-R1和IW-R2,其中IW-R1是由10個(gè)存在安全漏洞風(fēng)險(xiǎn)的Web系統(tǒng)抓取出的1992條URL,而IW-R2是由10個(gè)經(jīng)過(guò)嚴(yán)格的安全措施加固過(guò)的業(yè)務(wù)信息系統(tǒng)抓取出的28 513條URL,共有7983個(gè)注入點(diǎn),IW-R可評(píng)測(cè)出掃描工具在真實(shí)環(huán)境下的掃描能力。
為了能夠?qū)Ρ疚乃龇椒ㄟM(jìn)行評(píng)估,我們從以下兩個(gè)方面對(duì)其進(jìn)行實(shí)驗(yàn):準(zhǔn)確度(Accuracy)和效率(Efficiency)。檢測(cè)的準(zhǔn)確度可從覆蓋度(Coverage)和誤報(bào)FP(False-Positive)來(lái)進(jìn)行評(píng)估;關(guān)于檢測(cè)效率,在SQL注入滲透測(cè)試應(yīng)用過(guò)程中,由于網(wǎng)絡(luò)延遲的存在和Web應(yīng)用負(fù)載能力的限制等方面原因,對(duì)整體檢測(cè)效率和時(shí)間影響最大的是發(fā)送的HTTP請(qǐng)求數(shù)量,因而通過(guò)平均HTTP請(qǐng)求數(shù)量#AveRqst(average HTTP requests number)進(jìn)行效率評(píng)估。本實(shí)驗(yàn)的最終結(jié)果數(shù)據(jù)見(jiàn)表2。
表2 實(shí)驗(yàn)數(shù)據(jù)詳細(xì)信息
覆蓋度(Coverage)描述了檢測(cè)工具檢出漏洞的能力,其可通過(guò)召回率RCR(re-call rate)表示,如式(1)所示
(1)
其中,#VDV是發(fā)現(xiàn)的有效漏洞數(shù)量(valid discovered vulnerabilities number),#REV是實(shí)際存在的漏洞數(shù)量(real existing vulnerabilities number)。誤報(bào)(FP)則表述的是檢測(cè)工具掃描出的虛假漏洞,即錯(cuò)誤的掃描結(jié)果,誤報(bào)可通過(guò)誤報(bào)率FPR(false-positive rate)來(lái)描述,如式(2)所示
(2)
其中,#TDV為發(fā)現(xiàn)的漏洞總數(shù)(number of total disco-vered vulnerabilities),#TIP為注入點(diǎn)總數(shù)量(number of total injection point)。從表2我們可以看出,SQLFinder檢測(cè)出的有效漏洞數(shù)量#VDV為187,高于工具A和工具B的157和153個(gè)。從圖4可以看到SQLFinder在植入漏洞的數(shù)據(jù)集中具有更高的召回率RCR,并且具有更低的誤報(bào)率FPR。
圖4 召回率和誤報(bào)率對(duì)比
對(duì)于檢測(cè)工具的檢測(cè)效率,可以通過(guò)平均請(qǐng)求數(shù)進(jìn)行評(píng)價(jià),SQLFinder的總體平均請(qǐng)求數(shù)分別為工具A和工具B的7/10和3/10。并且SQLFinder的平均請(qǐng)求數(shù)隨著數(shù)據(jù)集變化逐漸變小并趨于平緩,其中VulWeb所包含的漏洞比例為100%,而SQLFinder對(duì)其檢測(cè)的平均請(qǐng)求數(shù)高達(dá)203,而隨著數(shù)據(jù)集中漏洞比例減小,正常頁(yè)面比例的增加,其平均請(qǐng)求數(shù)逐漸平穩(wěn)至86。由此可知,SQLFinder的檢測(cè)效率隨著正常頁(yè)面的比例增加而提高,這更為符合電力業(yè)務(wù)信息系統(tǒng)的實(shí)際情況。其它兩種工具的平均發(fā)送請(qǐng)求數(shù)比較平穩(wěn),保持在平均110和280左右浮動(dòng)。SQLFinder的檢測(cè)效率在整體上要優(yōu)于工具A和工具B,并且更加適用于在電力信息系統(tǒng)中存在大量數(shù)據(jù)及頁(yè)面的情況下進(jìn)行SQL注入漏洞滲透測(cè)試。
本文提出了一種基于特征的電力業(yè)務(wù)信息系統(tǒng)SQL注入漏洞自動(dòng)化檢測(cè)方法,首先基于電力信息系統(tǒng)的特點(diǎn)建立了其注入漏洞安全特征矩陣模型FM,由FM可得到覆蓋度更高的測(cè)試用例規(guī)則TCR集合,通過(guò)啟發(fā)式的特征篩選HFS算法將TCR中相匹配的特征進(jìn)行動(dòng)態(tài)篩選,獲得精簡(jiǎn)和優(yōu)化的TCR集合,實(shí)現(xiàn)了一種基于特征的電力信息系統(tǒng)啟發(fā)式滲透測(cè)試方法。最后為實(shí)驗(yàn)部分,闡述了基于本文所述方法所設(shè)計(jì)的原型系統(tǒng)SQLFinder,給出了其在包括模擬電力業(yè)務(wù)信息系統(tǒng)環(huán)境的多個(gè)安全漏洞測(cè)試數(shù)據(jù)集上的測(cè)試數(shù)據(jù),并與其它知名滲透測(cè)試工具進(jìn)行了比較和分析。實(shí)驗(yàn)結(jié)果表明,本文所述方法可在保證整體檢測(cè)效率的前提下,有效提高對(duì)電力信息系統(tǒng)中SQL注入漏洞滲透測(cè)試的覆蓋度和準(zhǔn)確度。