殷 博,劉 磊,朱靜雯,許 靜
(1.國(guó)網(wǎng)天津市電力公司,天津 300010;2.南開(kāi)大學(xué) 人工智能學(xué)院,天津 300350;3.南開(kāi)大學(xué) 軟件學(xué)院,天津 300350)
在能源互聯(lián)及智能電網(wǎng)信息化背景下,異構(gòu)化、智能化、互聯(lián)化的海量電力Web系統(tǒng)網(wǎng)絡(luò)環(huán)境愈加龐大復(fù)雜,電力數(shù)據(jù)的安全問(wèn)題隨著電力信息網(wǎng)與互聯(lián)網(wǎng)的接入變得尤為嚴(yán)峻,如何有效對(duì)安全漏洞及其特征進(jìn)行分析和檢測(cè)就成為一種至關(guān)重要的問(wèn)題[1,2]。其中SQL注入漏洞(structure query language injection vulnerability,SQLIV)是危害最為嚴(yán)重的漏洞之一[3,4],并呈現(xiàn)出越來(lái)越高的隱蔽性、邏輯性和時(shí)序性,傳統(tǒng)的漏洞檢測(cè)和特征分析方法已不能滿足其檢測(cè)要求。以提高智能電網(wǎng)Web信息系統(tǒng)安全檢測(cè)的準(zhǔn)確度為目標(biāo),大量研究從改進(jìn)測(cè)試響應(yīng)分析方法的角度入手以提高對(duì)漏洞特征的識(shí)別能力[5,6]。許多相關(guān)研究采用動(dòng)靜態(tài)相結(jié)合的方法提高響應(yīng)分析能力,但對(duì)源代碼的依賴限制了其應(yīng)用范圍[7-9]。而在傳統(tǒng)的電力信息系統(tǒng)黑盒滲透測(cè)試中,多采用基于經(jīng)驗(yàn)?zāi)J綆?kù)及特征信息抽取等方法進(jìn)行響應(yīng)分析,其通過(guò)枚舉的方式調(diào)用測(cè)試用例集合,且測(cè)試用例之間相互獨(dú)立,未考慮到相關(guān)測(cè)試用例及其響應(yīng)頁(yè)面之間的關(guān)聯(lián)性,因而難以對(duì)漏洞動(dòng)態(tài)特征進(jìn)行全面的分析,從而增加了引入漏報(bào)和誤報(bào)的可能性[9-11]。
對(duì)此,本文面向電力信息系統(tǒng)安全漏洞檢測(cè)提出了一種狀態(tài)驅(qū)動(dòng)的SQL注入安全漏洞特征分析檢測(cè)模型,通過(guò)對(duì)攻擊語(yǔ)句和測(cè)試用例進(jìn)行語(yǔ)義特征分析和狀態(tài)映射,建立其檢測(cè)過(guò)程的擴(kuò)展有限狀態(tài)機(jī)[12,13]模型,并通過(guò)狀態(tài)轉(zhuǎn)移矩陣分析測(cè)試響應(yīng)特征。該方法與傳統(tǒng)滲透測(cè)試手段相比,主要區(qū)別在于其通過(guò)對(duì)應(yīng)測(cè)試用例和響應(yīng)狀態(tài)之間的復(fù)雜狀態(tài)轉(zhuǎn)換關(guān)系進(jìn)行漏洞響應(yīng)特征分析,從而可檢測(cè)出電力信息網(wǎng)絡(luò)中愈加復(fù)雜的具有邏輯動(dòng)態(tài)特性的漏洞,降低其漏報(bào)和誤報(bào)?;诒疚姆椒ㄩ_(kāi)發(fā)了其原型系統(tǒng),并與當(dāng)前流行的SQLIV滲透測(cè)試工具進(jìn)行對(duì)比和實(shí)驗(yàn)分析,驗(yàn)證了該方法的有效性。
針對(duì)SQL注入漏洞滲透測(cè)試的研究主要從測(cè)試信息收集、測(cè)試用例生成以及響應(yīng)分析方法3個(gè)方面展開(kāi)[5-7],許多工作針對(duì)SQL注入漏洞滲透測(cè)試響應(yīng)分析階段進(jìn)行了大量的研究,以改進(jìn)其測(cè)試準(zhǔn)確性。其中大量研究工作采用了動(dòng)靜態(tài)相結(jié)合的方法進(jìn)行滲透測(cè)試,主要包括基于有限自動(dòng)機(jī)的污染分析方法,以及基于語(yǔ)法分析樹(shù)的動(dòng)態(tài)檢測(cè)模型等[6,7],這種方法在響應(yīng)分析方面具有分析深入和準(zhǔn)確的優(yōu)勢(shì),但由于其必須依賴源代碼或修改服務(wù)器程序,因而極大限制了其在單純黑盒滲透測(cè)試場(chǎng)景下的應(yīng)用。而傳統(tǒng)的黑盒滲透測(cè)試普遍采用基于經(jīng)驗(yàn)?zāi)J綆?kù)的錯(cuò)誤模式匹配[5,7],以及對(duì)漏洞特征信息進(jìn)行抽取并進(jìn)行對(duì)比分析的方式[10,11]來(lái)進(jìn)行測(cè)試響應(yīng)分析。但這些方法的測(cè)試用例之間彼此相互獨(dú)立,且普遍基于枚舉的方式調(diào)用其測(cè)試用例或模式庫(kù),并沒(méi)有考慮到前后關(guān)聯(lián)的測(cè)試用例及其響應(yīng)頁(yè)面之間的相關(guān)性。這種枚舉調(diào)用測(cè)試用例庫(kù)的方式易于實(shí)施和擴(kuò)充,但由于其單一性和缺乏對(duì)狀態(tài)變化的分析,容易造成較高的漏報(bào)或誤報(bào)。
擴(kuò)展有限狀態(tài)機(jī)EFSM是一種以有限狀態(tài)及其狀態(tài)間的遷移規(guī)律來(lái)表示對(duì)象的形式化模型,它是有限狀態(tài)機(jī)(finite state machine,F(xiàn)SM)模型的擴(kuò)展[12]。其通過(guò)狀態(tài)、狀態(tài)間的轉(zhuǎn)移、前置條件、上下文變量、操作、輸入和輸出描述對(duì)象,其可精確描述軟件系統(tǒng)的復(fù)雜動(dòng)態(tài)行為,從而可有效應(yīng)用于復(fù)雜系統(tǒng)的測(cè)試過(guò)程中。EFSM模型自誕生以來(lái)被應(yīng)用于測(cè)試的多個(gè)領(lǐng)域,主要包括測(cè)試的形式化建模、測(cè)試序列的生成及一致性測(cè)試驗(yàn)證等多個(gè)方面,并且主要集中于面向?qū)ο筌浖⑼ㄐ艆f(xié)議軟件以及嵌入式系統(tǒng)等領(lǐng)域的應(yīng)用和研究[13],而對(duì)其在Web漏洞安全測(cè)試方面的研究則相對(duì)較少。EFSM模型既保留了FSM模型對(duì)于控制流的表達(dá)能力,又通過(guò)上下文變量與謂詞判斷等擴(kuò)展了對(duì)數(shù)據(jù)流的表達(dá)能力,而黑盒SQLIV滲透測(cè)試過(guò)程中表現(xiàn)出的復(fù)雜動(dòng)態(tài)性,本質(zhì)上是一種測(cè)試響應(yīng)的狀態(tài)變遷,非常適合通過(guò)EFSM模型進(jìn)行描述。本文所述方法基于EFSM對(duì)SQLIV滲透測(cè)試過(guò)程進(jìn)行建模,以其測(cè)試用例作為狀態(tài),以頁(yè)面響應(yīng)作為觸發(fā)狀態(tài)轉(zhuǎn)移的條件,并通過(guò)其狀態(tài)轉(zhuǎn)移矩陣進(jìn)行SQLIV的滲透測(cè)試。
隨著能源互聯(lián)的不斷發(fā)展,以及智能電網(wǎng)信息化的大背景下,電力信息網(wǎng)絡(luò)變得愈加復(fù)雜,并且融合了大量基于動(dòng)態(tài)交互的Web信息系統(tǒng),其中包含的動(dòng)態(tài)交互式Web頁(yè)面及數(shù)據(jù)庫(kù)服務(wù)器也呈現(xiàn)出海量的趨勢(shì),HTTP訪問(wèn)數(shù)據(jù)也愈加的龐雜,其Web安全漏洞問(wèn)題變得越來(lái)越嚴(yán)峻,尤其是針對(duì)數(shù)據(jù)庫(kù)交互的SQL注入漏洞。本文首先通過(guò)一個(gè)典型的電力商城業(yè)務(wù)信息系統(tǒng)頁(yè)面交互中的SQL注入滲透測(cè)試場(chǎng)景進(jìn)行說(shuō)明:某個(gè)以MySQL為后臺(tái)數(shù)據(jù)庫(kù)的電力Web信息系統(tǒng),通過(guò)表單Customer保存用戶敏感信息,每個(gè)用戶只能登陸系統(tǒng)后以CoustomerID和SessionID作為憑證查看相關(guān)信息,其SQL語(yǔ)句為“SELECT*FROM Costomer WHERE CustomerID=001 AND SessionID=123”。假設(shè)該語(yǔ)句并未進(jìn)行過(guò)濾或防御,那么可對(duì)參數(shù)“SessionID=123”進(jìn)行基于枚舉的形如“abc”的錯(cuò)誤注入測(cè)試。假設(shè)該電力商城系統(tǒng)對(duì)錯(cuò)誤信息進(jìn)行了屏蔽,但仍可通過(guò)推斷進(jìn)行SQLIV判斷??蓪?duì)參數(shù)SessionID分別注入“AND 1=1--”與“AND 1=2--”,且有如下SQL語(yǔ)句A與語(yǔ)句B:
(A)SELECT*FROM Costomers WHERE CustomerID=001
AND SessionID=123 AND 1=1--;
(B)SELECT*FROM Costomers WHERE CustomerID=001
AND SessionID=123 AND 1=2--;
語(yǔ)句A在注入“AND 1=1--”后,其“1=1”的“真”值經(jīng)過(guò)“與”運(yùn)算后,整個(gè)語(yǔ)句的邏輯與原始語(yǔ)句的邏輯相同,返回的響應(yīng)頁(yè)面與原始的響應(yīng)頁(yè)面相似;而語(yǔ)句B的邏輯始終為“假”,響應(yīng)頁(yè)面與原始的頁(yè)面不相似。其成功測(cè)試流程可通過(guò)圖1中的路徑“A→B→E”描述,其中“Simi”(Similar)和“No Simi”(Not Similar)分別表示響應(yīng)與原始頁(yè)面“相似”及“不相似”,“SQLIV”和“No SQLIV”分別表示檢測(cè)和未檢測(cè)出SQL注入漏洞。而在原始SQL語(yǔ)句邏輯為“假”的情況下,該語(yǔ)句本應(yīng)無(wú)法讀取出數(shù)據(jù)庫(kù)信息,但依然可通過(guò)對(duì)參數(shù)“CustomerID=001”分別注入“AND 1=1--”和“AND 1=2--”檢測(cè)出SQLIV。由于注釋符“--”注釋掉了對(duì)“SessionID”的判斷,“1=1”經(jīng)過(guò)邏輯“與”運(yùn)算,使其可以讀出“CustomerID”為“001”的客戶信息,注入后的頁(yè)面響應(yīng)發(fā)生了變化;而注入“AND 1=2--”后,SQL語(yǔ)句邏輯依然為“假”,響應(yīng)頁(yè)面與原始頁(yè)面相似。其對(duì)應(yīng)測(cè)試流程可通過(guò)圖1的路徑“A→C→E”描述。
圖1 SQLIV滲透測(cè)試模型示例
由此可知,完全相同的測(cè)試用例在不同場(chǎng)景中的響應(yīng)依然可能具有不同的狀態(tài)變化規(guī)律。傳統(tǒng)基于測(cè)試用例枚舉的方式很難有效檢測(cè)出這種具有復(fù)雜狀態(tài)變化關(guān)系的SQL注入漏洞,并且由于Web應(yīng)用本身的多樣性和復(fù)雜性,單一的測(cè)試用例很容易得到具有虛假漏洞特征的頁(yè)面響應(yīng),如頁(yè)面中包含的其它原因?qū)е碌臄?shù)據(jù)庫(kù)錯(cuò)誤或頁(yè)面相似等,因而很容易出現(xiàn)漏報(bào)和誤報(bào)等現(xiàn)象。另外,枚舉測(cè)試為了提高覆蓋度而大量擴(kuò)充測(cè)試用例庫(kù),同時(shí)增加了獲得虛假漏洞響應(yīng)的概率,進(jìn)一步增加了誤判的可能性。對(duì)此,本文提出一種基于擴(kuò)展有限狀態(tài)機(jī)及安全數(shù)據(jù)特征分析的SQLIV滲透測(cè)試方法以提高測(cè)試準(zhǔn)確度。本文所述方法和實(shí)驗(yàn)是在已確定測(cè)試用例集合與測(cè)試規(guī)則[3-5]的基礎(chǔ)上展開(kāi)的,其主要針對(duì)滲透測(cè)試過(guò)程和響應(yīng)分析方法進(jìn)行建模。
本文通過(guò)對(duì)關(guān)聯(lián)測(cè)試用例響應(yīng)狀態(tài)之間的轉(zhuǎn)換關(guān)系進(jìn)行分析和研究,提出了一種狀態(tài)驅(qū)動(dòng)的利用擴(kuò)展有限狀態(tài)機(jī)進(jìn)行SQLIV檢測(cè)的模型及方法,通過(guò)對(duì)SQL注入測(cè)試用例的安全特征進(jìn)行分類和狀態(tài)映射,并根據(jù)滲透測(cè)試相關(guān)規(guī)則建立測(cè)試用例對(duì)應(yīng)的響應(yīng)安全數(shù)據(jù)特征的擴(kuò)展有限狀態(tài)機(jī)模型,通過(guò)對(duì)于不同測(cè)試用例響應(yīng)的注入點(diǎn)響應(yīng)狀態(tài)之間的狀態(tài)轉(zhuǎn)換規(guī)律進(jìn)行分析來(lái)檢測(cè)SQLIV。
通過(guò)對(duì)示例電力Web信息系統(tǒng)的討論可知,不同測(cè)試用例在相同SQL語(yǔ)句上下文可能出現(xiàn)不同的響應(yīng),即便是相同測(cè)試用例在不同上下文環(huán)境下也有可能表現(xiàn)出不同的響應(yīng)。究其原因,每一條測(cè)試用例都包含特定的邏輯語(yǔ)義,故當(dāng)其與被注入的原始SQL語(yǔ)句融合并同時(shí)參與運(yùn)算時(shí),其邏輯語(yǔ)義與原始SQL語(yǔ)句共同作用并運(yùn)算生成特定的邏輯語(yǔ)義結(jié)果。在這里表現(xiàn)為,相關(guān)數(shù)據(jù)表中某行數(shù)據(jù)是否滿足被注入后的SQL語(yǔ)句的邏輯語(yǔ)義,即最終運(yùn)算結(jié)果是“真”(T:True)還是“假”(F:False)。
根據(jù)SQL語(yǔ)句的邏輯語(yǔ)義特征,本文將最常用的SQL注入漏洞測(cè)試用例進(jìn)行了分類,見(jiàn)表1。錯(cuò)誤注入由“E”(Error)表示,其為可造成數(shù)據(jù)庫(kù)錯(cuò)誤的SQL注入測(cè)試語(yǔ)句,如“abc”等;“τ”表示排序注入測(cè)試,如“ORDER BY 2”等測(cè)試用例;“∪”符號(hào)表示聯(lián)合查詢注入測(cè)試,例如“UNION SELECT 1,2,3,…”;包含字母“T”(True)與“F”(False)的測(cè)試用例分類涉及到“真”和“假”運(yùn)算,“T”代表“1=1”或“‘a(chǎn)’=‘a(chǎn)’”這類重言式,“F”代表“1=2”或“‘a(chǎn)’=‘b’”這類永假式;符號(hào)“∧”表示邏輯為“與”的運(yùn)算,包括“AND”、“HAVING”、“IN”等關(guān)鍵詞,例如“AND 1=1”及“’HAVING ‘a(chǎn)’=’a”屬于分類“∧T”,而“AND 1=2”及“HAVING 1=2”屬于分類“∧F”,“∧T--”及“∧F--”中的“--”符號(hào)表示該類測(cè)試用例以注釋符結(jié)束,例如“AND 1=1--”與“AND 1=2--”,其中[--]表示此時(shí)注釋符“--”為可選的;符號(hào)“∨”表示邏輯為“或”的運(yùn)算,包括“‖”、“OR”等關(guān)鍵詞,例如“OR 1=1”包含于分類“∨T”,而“∨F”包括測(cè)試用例形如“’OR‘a(chǎn)’=’b’--”等;符號(hào)“IF()”表示“IF”注入測(cè)試語(yǔ)句,“IF(T)”表示與原始SQL語(yǔ)句邏輯相同的注入測(cè)試語(yǔ)句,如“IF(1=1,ORI,ERR)”,“IF(F)”表示與原始邏輯不同的測(cè)試語(yǔ)句,如“IF(1=2,ORI,ERR)”,“ORI”表示注入前的初始參數(shù)值,“ERR”表示錯(cuò)誤的一條查詢或語(yǔ)句;“TD(n)”則表示進(jìn)行時(shí)間間隔為n s的時(shí)間延遲(time delay,TD)注入測(cè)試,例如“SLEEP(n)--”。表1通過(guò)相應(yīng)的符號(hào)和邏輯語(yǔ)義列出了包括錯(cuò)誤推斷注入測(cè)試、相似度推斷測(cè)試、時(shí)間延遲注入測(cè)試等多種類別的SQLIV滲透測(cè)試用例及其對(duì)應(yīng)的變體[10,12]。由于測(cè)試用例僅需要發(fā)現(xiàn)漏洞存在的證據(jù),并且應(yīng)盡量減少對(duì)被測(cè)系統(tǒng)的破壞,因此本文未采用帶有“DELETE”、“ALTER”等攻擊性關(guān)鍵詞的SQL語(yǔ)句。
為描述SQLIV滲透測(cè)試過(guò)程中的狀態(tài)轉(zhuǎn)移,本文基于上節(jié)對(duì)于SQL注入測(cè)試用例的分類建立了基于安全數(shù)據(jù)特征的擴(kuò)展有限狀態(tài)機(jī)模型,其定義如下:
定義1 基于安全特征的擴(kuò)展有限狀態(tài)機(jī)模型(security features-extended finite state machine,SF-EFSM)是一個(gè)六元組SF-EFSM=,其中Q為非空的有限狀態(tài)集合,I為有窮的輸入事件集合,T為狀態(tài)轉(zhuǎn)移函數(shù),q0是初始狀態(tài),E是終止?fàn)顟B(tài)的集合,V為同步變量集合。
表1 測(cè)試用例特征及狀態(tài)分類
非空有限狀態(tài)集合Q={S0,…,S4,T0,…,T9},其具體說(shuō)明見(jiàn)表2。狀態(tài)S0至S4為通用的測(cè)試控制狀態(tài),狀態(tài)S0分析當(dāng)前測(cè)試用例所屬的狀態(tài)號(hào)t,狀態(tài)S1表明發(fā)現(xiàn)SQL注入漏洞的證據(jù)并將變量vul加1,狀態(tài)S2表示當(dāng)前測(cè)試用例未檢測(cè)出漏洞,狀態(tài)S3分析判斷測(cè)試用例集合是否為空(set=0),狀態(tài)S4為終止?fàn)顟B(tài);狀態(tài)T0至T9分別代表經(jīng)過(guò)邏輯語(yǔ)義分類的10種測(cè)試用例所對(duì)應(yīng)的測(cè)試響應(yīng)狀態(tài),該方法所使用的初始測(cè)試用例集合TCSet(test case set)中的測(cè)試用例即由上述分類中的用例組成。其中T0可單獨(dú)執(zhí)行;T1及T2則以遞增序列的形式成組進(jìn)行測(cè)試,如“ORDER BY 1”,…“ORDER BY n”;T3至T9則是以同樣的運(yùn)算符號(hào)“∧”、“∨”、“IF”分組,根據(jù)“T”與“F”值成對(duì)出現(xiàn)的。與枚舉測(cè)試用例模式庫(kù)的方法有所不同,該方法不是枚舉測(cè)試的,而是初始測(cè)試用例及其相應(yīng)的狀態(tài)轉(zhuǎn)移關(guān)系生成后續(xù)相關(guān)測(cè)試用例的,因此初始測(cè)試用例集合TCSet中僅需包含屬于狀態(tài)集合 {T0,T1,T2,T3,T6,T8} 的測(cè)試用例即可完成測(cè)試。初始狀態(tài)q0=S0,終結(jié)狀態(tài)集合E={S4}。
表2 測(cè)試用例狀態(tài)分類
同步變量集合V={t,r,vul,set},其中變量t表示本輪測(cè)試對(duì)應(yīng)的測(cè)試響應(yīng)狀態(tài),“t=2”表示安全數(shù)據(jù)特征擴(kuò)展FSM即將進(jìn)入T2狀態(tài)進(jìn)行測(cè)試;變量r表示某條測(cè)試用例的測(cè)試響應(yīng)頁(yè)面與原始響應(yīng)頁(yè)面相比是否發(fā)生變化或報(bào)錯(cuò);變量vul表示測(cè)試出的全部SQL注入漏洞數(shù)量,每發(fā)現(xiàn)一組可觸發(fā)漏洞特征的測(cè)試用例vul加1;變量set表示初始測(cè)試用例集合TCSet是否為空。輸入事件集合I={t=m(m為整數(shù),且0≤N≤10),r=0,r=1,set=0,set=1,ε},其中變量均與集合V中的變量相關(guān),“t=m”表示擴(kuò)展有限狀態(tài)機(jī)即將進(jìn)入Tm狀態(tài)進(jìn)行測(cè)試;“r=1”表示測(cè)試響應(yīng)頁(yè)面與原始頁(yè)面相似且頁(yè)面信息與響應(yīng)時(shí)間正常,“r=0”表示測(cè)試響應(yīng)頁(yè)面發(fā)生變化、頁(yè)面報(bào)錯(cuò)或響應(yīng)時(shí)間異常;“set=0”表示測(cè)試用例集合為空集合,而“set=1”表明依然存在待測(cè)的用例;“ε”為空輸入,表示不進(jìn)行任何輸入即可發(fā)生相應(yīng)的狀態(tài)轉(zhuǎn)移。狀態(tài)轉(zhuǎn)移函數(shù),它表示狀態(tài)集合Q中的某個(gè)狀態(tài),在接收集合I中的輸入后,轉(zhuǎn)移到集合Q中的某個(gè)狀態(tài)的映射函數(shù)。
狀態(tài)轉(zhuǎn)移函數(shù)包含了SQL注入漏洞滲透測(cè)試響應(yīng)狀態(tài)之間的轉(zhuǎn)移關(guān)系與規(guī)律,它決定了滲透測(cè)試的具體流程和漏洞判斷規(guī)則,因而其表示方式及算法是本文所述方法的關(guān)鍵內(nèi)容,這里通過(guò)狀態(tài)轉(zhuǎn)換矩陣來(lái)描述狀態(tài)轉(zhuǎn)移函數(shù)T的具體內(nèi)容,如圖2所示。圖中行與列均代表狀態(tài)集合Q中的狀態(tài),行與列的交點(diǎn)為輸入集合I中的元素,表示從行所表示狀態(tài)轉(zhuǎn)移至列所表示狀態(tài)的轉(zhuǎn)移條件。例如,行T3與列T4交點(diǎn)處有“r=1”,表示從狀態(tài)T3轉(zhuǎn)移至狀態(tài)T4的輸入條件為“r=1”。矩陣交點(diǎn)處的“ε”表示無(wú)需任何輸入即可發(fā)生狀態(tài)轉(zhuǎn)移,而無(wú)內(nèi)容的交點(diǎn)表示先后兩個(gè)狀態(tài)之間不存在狀態(tài)轉(zhuǎn)移。該狀態(tài)轉(zhuǎn)換矩陣中的內(nèi)容是通過(guò)對(duì)最常用和經(jīng)典的SQLIV滲透測(cè)試手段和規(guī)則進(jìn)行總結(jié)得出的[5,11],可被應(yīng)用于實(shí)際的SQL注入漏洞滲透測(cè)試過(guò)程中進(jìn)行SQL注入漏洞的檢測(cè)。
根據(jù)狀態(tài)轉(zhuǎn)換矩陣的結(jié)構(gòu)和以上分析,基于安全數(shù)據(jù)特征擴(kuò)展有限狀態(tài)機(jī)的SQL注入滲透測(cè)試方法的實(shí)現(xiàn)主要為兩部分:①對(duì)狀態(tài)轉(zhuǎn)移規(guī)則(status transfer rule,STR)的執(zhí)行;②每個(gè)狀態(tài)下所執(zhí)行的具體動(dòng)作(action)。據(jù)此,本文提出了SQL注入漏洞測(cè)試的狀態(tài)轉(zhuǎn)移算法(penetration testing status transfer algorithm,PTSTA)來(lái)實(shí)現(xiàn)對(duì)基于擴(kuò)展有限狀態(tài)機(jī)的SQL注入漏洞滲透測(cè)試方法的應(yīng)用,其偽代碼如算法1所示。
算法1: 滲透測(cè)試狀態(tài)轉(zhuǎn)移算法PTSTA
(1)變量:status,testcase,input,set,result,t,vul
(2)輸入: 狀態(tài)轉(zhuǎn)換規(guī)則STR(StatusTransferRule)
初始測(cè)試用例集合TCSet(TestCaseSet);
(3)輸出: 漏洞證據(jù)數(shù)量vul(Vulnerability);
(4)begin
(5) //初始化變量status和testcase,并重置TCSet
(6)status= S0;
(7)testcase=TCSet[0];
(8)TCSet=TCSet.RemoveFirst;
(9)while(status!= S4)
(10) //通過(guò)Action函數(shù)執(zhí)行每個(gè)狀態(tài)下的動(dòng)作
(11)ActionS(status,testcase);
(12) //通過(guò)StatusTransfer函數(shù)完成狀態(tài)轉(zhuǎn)移
(13)status=StatusTransfer(STR,status,Input);
(14)ActionT();
(15)returnvul;
(16)end
圖2 狀態(tài)轉(zhuǎn)換矩陣
函數(shù)1: Action函數(shù)的實(shí)現(xiàn)
(1)Action(Status,TestCase)
(2)begin
(3)//根據(jù)不同的status狀態(tài)值來(lái)執(zhí)行具體的動(dòng)作
(4)switch(status);
(5)//根據(jù)TestCase決定具體執(zhí)行的測(cè)試狀態(tài)號(hào)t
(6)caseS0:t=DecideStatus(TestCase);
(7)caseS1:vul++;
(8)caseS2:vul=vul;
(9) //檢查TCSet,重置status、testcase及TCSet
(10)caseS3:
(11)if(TCSet==NULL)
(12)set= 0;
(13)else
(14)set=1;status= S0;
(15)testcase=TCSet[0];
(16)TCSet=TCSet.RemoveFirst;
(17) //基于初始的TestCase生成當(dāng)前狀態(tài)
(18)caseT1:
(19)testcase=GenerateOrder(testcase);
(20)caseT2:
(21)testcase=GenerateUnion(testcase);
(22)caseT4, T5, T7, T9:
(23)testcase=testcase.Replace(T, F);
(24)if(Status∈{T0,…,T9})
(25)result=ResAnalyzing(testcase);
(26)input=SetInput(result);
(27)end
算法1首先對(duì)status初始化為S0,將TCSet集合中第一條初始測(cè)試用例賦值于testcase后移除。接下來(lái)執(zhí)行循環(huán),若非S4狀態(tài),則循環(huán)進(jìn)行狀態(tài)轉(zhuǎn)移相關(guān)操作,其分為兩步:①通過(guò)運(yùn)行Action(status,testcase) 函數(shù)執(zhí)行status相關(guān)動(dòng)作;②通過(guò)狀態(tài)轉(zhuǎn)移函數(shù)StatusTransfer(STR,status,input) 通過(guò)狀態(tài)轉(zhuǎn)移規(guī)則STR、當(dāng)前狀態(tài)status及輸入變量input確定轉(zhuǎn)移后的狀態(tài)值。在該算法中,函數(shù)Action(status,testcase) 的作用非常重要,它根據(jù)當(dāng)前狀態(tài)完成各種流程控制或測(cè)試任務(wù)。首先Action函數(shù)根據(jù)status選擇執(zhí)行對(duì)應(yīng)狀態(tài)下的動(dòng)作,狀態(tài)S0到狀態(tài)S4負(fù)責(zé)參數(shù)設(shè)置與流程控制,狀態(tài)T0至T9則具體的測(cè)試執(zhí)行狀態(tài)。狀態(tài)S0通過(guò)對(duì)變量t賦值而對(duì)下一步執(zhí)行的測(cè)試狀態(tài)進(jìn)行選擇;S1表示存在一個(gè)SQL注入漏洞的證據(jù),并將vul變量加1;S2表示無(wú)漏洞證據(jù),vul變量值不變;S3根據(jù)TCSet是否為空值決定是否終止循環(huán),并重置變量status、testcase及TCSet。狀態(tài)T1、T2、T4、T7、T9根據(jù)其前置狀態(tài)的testcase內(nèi)容對(duì)應(yīng)生成下次的測(cè)試用例值,而所有的測(cè)試用例狀態(tài)T0至T9均通過(guò)ResAnalyzing(testcase) 函數(shù)則執(zhí)行包括發(fā)送測(cè)試請(qǐng)求、接受測(cè)試響應(yīng)、分析測(cè)試結(jié)果在內(nèi)的多個(gè)動(dòng)作,并將分析結(jié)果賦值于變量r。函數(shù)最終利用SetInput函數(shù)對(duì)input變量進(jìn)行賦值以便后續(xù)的狀態(tài)轉(zhuǎn)移函數(shù)StatusTransfer可有效得到執(zhí)行。通過(guò)算法1、Action函數(shù)以及狀態(tài)轉(zhuǎn)移規(guī)則STR,本文實(shí)現(xiàn)了基于安全數(shù)據(jù)特征擴(kuò)展有限狀態(tài)機(jī)的滲透測(cè)試方法。
函數(shù)1實(shí)現(xiàn)了對(duì)狀態(tài)轉(zhuǎn)移函數(shù)及每個(gè)狀態(tài)下的動(dòng)作執(zhí)行,并循環(huán)處理初始測(cè)試用例集合TCSet中的初始測(cè)試用例,直到TCSet集合為空為止。其中,狀態(tài)變量status存儲(chǔ)當(dāng)前所處狀態(tài),變量testcase存儲(chǔ)當(dāng)前測(cè)試用例字符串,變量input則存儲(chǔ)了狀態(tài)轉(zhuǎn)移所需的輸入值,變量set用于標(biāo)記集合TCSet是否為空(set=0時(shí)),變量r用于標(biāo)記響應(yīng)頁(yè)面是否出現(xiàn)報(bào)錯(cuò)、頁(yè)面變化、時(shí)間延遲等異常(r=0時(shí)),t存儲(chǔ)的狀態(tài)號(hào)則是在S0狀態(tài)下選擇后續(xù)測(cè)試狀態(tài)的依據(jù),vul用于存儲(chǔ)檢測(cè)出的漏洞證據(jù)數(shù)量。算法輸入為狀態(tài)轉(zhuǎn)移規(guī)則STR(status transfer rule)與測(cè)試用例集合TCSet(test case set)。其中,STR以三元組列表的形式存儲(chǔ)狀態(tài)轉(zhuǎn)換矩陣中的狀態(tài)轉(zhuǎn)移規(guī)則
,Pre為轉(zhuǎn)移前狀態(tài),Input為輸入內(nèi)容,Aft為轉(zhuǎn)移后狀態(tài)。TCSet為存儲(chǔ)初始狀態(tài)的字符串?dāng)?shù)組。4 實(shí)驗(yàn)及結(jié)果分析
本研究主要是關(guān)注針對(duì)電力信息網(wǎng)絡(luò)的SQL注入滲透測(cè)試的動(dòng)態(tài)檢測(cè)過(guò)程,即通過(guò)對(duì)多個(gè)測(cè)試用例響應(yīng)狀態(tài)之間存在的狀態(tài)轉(zhuǎn)移規(guī)律的分析,以檢測(cè)基于推斷的動(dòng)態(tài)漏洞。對(duì)此我們建立了目標(biāo)漏洞實(shí)驗(yàn)測(cè)試平臺(tái)WavsepV和IWebShopV,以模擬在真實(shí)電力Web信息系統(tǒng)環(huán)境中存在的SQL注入漏洞場(chǎng)景,其利用“PHP 5+MySql 5”環(huán)境構(gòu)建。并基于本文所述方法開(kāi)發(fā)了SQL注入漏洞特征分析和漏洞檢測(cè)的原型系統(tǒng),以評(píng)測(cè)本文所述方法的有效性。
4.1 測(cè)試實(shí)驗(yàn)環(huán)境
本文針對(duì)電力信息網(wǎng)絡(luò)異構(gòu)化、智能化、互聯(lián)化的特點(diǎn),構(gòu)建了一套目標(biāo)漏洞模擬測(cè)試環(huán)境。電力信息網(wǎng)絡(luò)越來(lái)越多的融合了基于數(shù)據(jù)交互的動(dòng)態(tài)Web信息系統(tǒng),且其包含大量的動(dòng)態(tài)Web頁(yè)面及數(shù)據(jù)交互,因而我們?cè)诼吖ぞ咴u(píng)估系統(tǒng)Wavsep[14]的基礎(chǔ)上進(jìn)行了擴(kuò)展,人工植入了多種Web注入漏洞,并且融合了大量動(dòng)態(tài)頁(yè)面及數(shù)據(jù)交互請(qǐng)求構(gòu)建了模擬電力信息網(wǎng)絡(luò)環(huán)境的漏洞系統(tǒng)。其中,Wavsep(web application vulnerability scanner evaluation project)是由OWASP[3]提出的開(kāi)源Web應(yīng)用安全漏洞掃描程序評(píng)估項(xiàng)目,WavsepV在Wavsep的基礎(chǔ)上加入了約2000個(gè)動(dòng)態(tài)頁(yè)面或在線URL,以增加其對(duì)真實(shí)互聯(lián)網(wǎng)的動(dòng)態(tài)環(huán)境模擬;IWebShopV[15]則是為了模擬電力信息外網(wǎng)中的電子商城等業(yè)務(wù)系統(tǒng)環(huán)境,其在開(kāi)源電子商務(wù)網(wǎng)站項(xiàng)目iWebShop的基礎(chǔ)上人工植入了多種對(duì)電力信息網(wǎng)絡(luò)具有較高危害性的具有推斷特性及動(dòng)態(tài)特性的SQL注入漏洞,其詳細(xì)描述見(jiàn)表3。其中,人工植入的SQL注入漏洞是通過(guò)對(duì)SQL注入漏洞的分類特征進(jìn)行總結(jié)和分析的基礎(chǔ)上,由安全工程人員人工植入了多種類型的SQL注入漏洞,既包括基于錯(cuò)誤注入的數(shù)字型和字符型漏洞等常規(guī)的SQL注入漏洞,同時(shí)包括多種基于相似度與時(shí)間推斷的具有動(dòng)態(tài)特性的漏洞。為驗(yàn)證本方法在實(shí)際Web應(yīng)用環(huán)境下的有效性,我們?cè)赪avsepV和IWebShopV中均額外加入了模擬真實(shí)電力信息系統(tǒng)環(huán)境下的動(dòng)態(tài)Web頁(yè)面和URL鏈接。表3中的“—”符號(hào)表示不包含該類型的漏洞。
表3 植入漏洞類型
為了能夠驗(yàn)證基于擴(kuò)展有限狀態(tài)機(jī)進(jìn)行SQL注入漏洞滲透測(cè)試的方法及其應(yīng)用的有效性,根據(jù)本文所述模型和算法開(kāi)發(fā)了原型系統(tǒng)。由于本實(shí)驗(yàn)的目的是對(duì)本方法的漏洞檢測(cè)效果和正確性進(jìn)行驗(yàn)證和分析,并不涉及測(cè)試前的確定被測(cè)URL和相關(guān)信息的收集過(guò)程,因此我們?cè)谠囼?yàn)前已事先獲取了目標(biāo)系統(tǒng)WavsepV和IWebShopV中的被測(cè)URL及待測(cè)注入點(diǎn)等信息。
4.2 實(shí)驗(yàn)結(jié)果數(shù)據(jù)
在對(duì)本文所述模型的原型系統(tǒng)進(jìn)行相關(guān)測(cè)試的同時(shí),我們選擇了當(dāng)前較為知名且應(yīng)用較廣泛的滲透測(cè)試工具WVS Acunteix和IBM AppScan進(jìn)行了對(duì)比實(shí)驗(yàn)與分析[13],可更加全面的測(cè)試本文所述模型的有效性。Acunetix和AppScan均為當(dāng)前對(duì)于SQLIV滲透測(cè)試相關(guān)研究和應(yīng)用中具有代表性的基于枚舉測(cè)試用例模式庫(kù)的測(cè)試方式的代表,在本文中以Tool A和Tool B來(lái)對(duì)其進(jìn)行表示(無(wú)相應(yīng)順序)。
本文方法與Tool A和Tool B在實(shí)驗(yàn)測(cè)試環(huán)境中的對(duì)比測(cè)試數(shù)據(jù)見(jiàn)表4。其中,“漏洞總數(shù)量”(Nt)表示目標(biāo)系統(tǒng)中包含的SQLIV總數(shù)量;“發(fā)送請(qǐng)求數(shù)”(Nr)表示整個(gè)檢測(cè)過(guò)程中發(fā)送的HTTP請(qǐng)求數(shù);“檢出總數(shù)量”(Vt)表示當(dāng)前測(cè)試工具對(duì)當(dāng)前目標(biāo)被測(cè)Web應(yīng)用檢出的結(jié)果總數(shù)量,包括“正確召回?cái)?shù)”和“測(cè)試誤報(bào)數(shù)”。
表4 實(shí)驗(yàn)結(jié)果數(shù)據(jù)
“正確召回?cái)?shù)”(Vr)是檢測(cè)出的結(jié)果中確實(shí)為SQLIV的數(shù)量;“測(cè)試漏報(bào)數(shù)”(Fn)是未檢測(cè)出的漏洞數(shù)量;“測(cè)試誤報(bào)數(shù)”(Fp)為檢測(cè)過(guò)程中出現(xiàn)的誤報(bào)個(gè)數(shù)。通過(guò)表4數(shù)據(jù)可以看到,本文所述方法在兩個(gè)測(cè)試平臺(tái)中的“正確召回?cái)?shù)”均高于Tool A和Tool B的測(cè)試結(jié)果,且“測(cè)試漏報(bào)數(shù)”和“測(cè)試誤報(bào)數(shù)”低于另外兩種工具。
圖3為“漏報(bào)率對(duì)比”,其中“漏報(bào)率”表示為Pfn,且有 “Pfn=Fn/Nt”,其中 “Fn=Nt-Vr”;圖4為“誤報(bào)概率對(duì)比”,其中“誤報(bào)概率”為整個(gè)測(cè)試過(guò)程中以注入點(diǎn)數(shù)量(Nip)為基數(shù)出現(xiàn)誤報(bào)的概率,以Pfp表示,且有 “Pfp=Fp/Nip”。 圖3(漏報(bào)率對(duì)比)與圖4(誤報(bào)概率對(duì)比)與表4的數(shù)據(jù)表現(xiàn)出相同的趨勢(shì),本文方法的“漏報(bào)率”與“誤報(bào)概率”結(jié)果低于Tool A及Tool B的測(cè)試結(jié)果。圖5通過(guò)本方法與其它兩種工具在測(cè)試過(guò)程中在每個(gè)注入點(diǎn)平均發(fā)送的HTTP請(qǐng)求(Nra)數(shù)進(jìn)行對(duì)比來(lái)對(duì)本方法的測(cè)試效率進(jìn)行一定的分析,其中有 “Nra=Nr/Nip”。 圖5顯示出本文方法的平均HTTP請(qǐng)求數(shù)與其它兩種工具處于同一數(shù)量級(jí),略高于Tool A,并且低于Tool B的數(shù)值。
圖3 漏報(bào)率對(duì)比
圖5 平均HTTP請(qǐng)求數(shù)量對(duì)比
4.3 結(jié)果分析及討論
本文實(shí)驗(yàn)所采用的目標(biāo)測(cè)試平臺(tái)可以從兩個(gè)方面對(duì)滲透測(cè)試工具進(jìn)行評(píng)價(jià)。一方面,WavsepV和IWebShopV分別包含了多種不同類型的SQL注入漏洞,包括普通的錯(cuò)誤注入漏洞及基于相似度推斷的動(dòng)態(tài)特征的SQL注入漏洞,其實(shí)驗(yàn)數(shù)據(jù)可說(shuō)明本文所述方法較傳統(tǒng)基于枚舉測(cè)試用例模式庫(kù)的方法可以檢測(cè)出更多具有動(dòng)態(tài)特性及狀態(tài)的SQL注入漏洞,具有更好的檢測(cè)能力和測(cè)試覆蓋度。另一方面,目標(biāo)測(cè)試系統(tǒng)中不但包含多種類型的SQL注入漏洞,同時(shí)擁有大量具有隨機(jī)特征的交互頁(yè)面及真實(shí)的互聯(lián)網(wǎng)Web頁(yè)面,其具有很高的動(dòng)態(tài)性和隨機(jī)性,容易造成漏洞測(cè)試工具產(chǎn)生誤報(bào),可以對(duì)SQL注入滲透測(cè)試工具的誤報(bào)水平進(jìn)行有效評(píng)價(jià)。通過(guò)上節(jié)關(guān)于誤報(bào)概率的實(shí)驗(yàn)對(duì)比數(shù)據(jù)可說(shuō)明本文方法較以往的滲透測(cè)試方法相比具有更少的誤報(bào),可有效驗(yàn)證本方法對(duì)測(cè)試精確度的改進(jìn)效果。
通過(guò)以上分析可進(jìn)一步得出,本文方法具有更好的測(cè)試準(zhǔn)確度的原因在于:①本文方法通過(guò)捕捉和分析相關(guān)測(cè)試用例響應(yīng)之間的狀態(tài)轉(zhuǎn)移規(guī)律,可以檢測(cè)更多具有推斷和動(dòng)態(tài)特性的漏洞,因而具有更好的測(cè)試覆蓋度和更低的漏報(bào)率;②本文所述方法對(duì)同一個(gè)漏洞進(jìn)行基于狀態(tài)轉(zhuǎn)移的多個(gè)步驟的測(cè)試,相當(dāng)于對(duì)其正確性進(jìn)行了更加充分的驗(yàn)證和確認(rèn),從而降低了發(fā)生誤報(bào)的可能性;③同時(shí)本文所述方法在保證更高測(cè)試準(zhǔn)確度的前提下,在效率方面與目前流行的漏洞測(cè)試工具相當(dāng),且高于Tool B。其內(nèi)在原因是安全數(shù)據(jù)特征擴(kuò)展的有限狀態(tài)機(jī)可以對(duì)漏洞的特征進(jìn)行更為準(zhǔn)確而高效的分析和描述,從而保證了其測(cè)試效率。
5 結(jié)束語(yǔ)
本文提出了一種狀態(tài)驅(qū)動(dòng)的電力Web信息系統(tǒng)注入漏洞檢測(cè)模型,通過(guò)對(duì)SQL注入漏洞滲透測(cè)試的安全特征進(jìn)行抽象分類及狀態(tài)映射,建立相關(guān)測(cè)試流程的擴(kuò)展有限狀態(tài)機(jī)模型,并基于該模型構(gòu)建了SQL注入漏洞黑盒滲透測(cè)試流程的擴(kuò)展有限狀態(tài)機(jī)及其相關(guān)算法。本方法通過(guò)分析相關(guān)測(cè)試用例響應(yīng)之間的狀態(tài)轉(zhuǎn)移規(guī)律來(lái)檢測(cè)更多具有復(fù)雜動(dòng)態(tài)特性的漏洞,且其具有更為充分的漏洞驗(yàn)證機(jī)制,從而在保證測(cè)試效率的前提下,可有效提高電力信息系統(tǒng)安全防御過(guò)程中的注入漏洞的檢測(cè)覆蓋度,降低了漏報(bào)率和誤報(bào)的概率。通過(guò)對(duì)比實(shí)驗(yàn)及其結(jié)果分析,本方法可提高SQL注入漏洞測(cè)試響應(yīng)分析的準(zhǔn)確性,并可有效降低測(cè)試過(guò)程中“漏報(bào)”和“誤報(bào)”的競(jìng)爭(zhēng)問(wèn)題所帶來(lái)的影響,其相比于傳統(tǒng)通過(guò)枚舉測(cè)試用例庫(kù)進(jìn)行測(cè)試的方法具有更高的準(zhǔn)確度,驗(yàn)證了本文所述方法的有效性。
猜你喜歡大狗熊在睡覺(jué) 大灰狼畫報(bào)·益智版(2024年3期)2024-12-09 00:00:00刷新生活的頁(yè)面 保健醫(yī)苑(2022年1期)2022-08-30 08:39:14“不等式”檢測(cè)題 中學(xué)生數(shù)理化·七年級(jí)數(shù)學(xué)人教版(2021年6期)2021-11-22 07:50:58“一元一次不等式”檢測(cè)題 中學(xué)生數(shù)理化·七年級(jí)數(shù)學(xué)人教版(2021年6期)2021-11-22 07:50:58“一元一次不等式組”檢測(cè)題 中學(xué)生數(shù)理化·七年級(jí)數(shù)學(xué)人教版(2021年6期)2021-11-22 07:50:58可能是方法不對(duì) 意林原創(chuàng)版(2016年10期)2016-11-25 10:28:30小波變換在PCB缺陷檢測(cè)中的應(yīng)用 海峽科技與產(chǎn)業(yè)(2016年3期)2016-05-17 04:32:12用對(duì)方法才能瘦 Coco薇(2016年2期)2016-03-22 02:42:52四大方法 教你不再“坐以待病”! Coco薇(2015年1期)2015-08-13 02:47:34捕魚 小雪花·成長(zhǎng)指南(2015年4期)2015-05-19 14:47:56