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