状态驱动的电力信息系统注入漏洞检测模型
2021-03-23朱静雯
殷 博,刘 磊,朱静雯,许 静
(1.国网天津市电力公司,天津 300010;2.南开大学 人工智能学院,天津 300350;3.南开大学 软件学院,天津 300350)
0 引 言
在能源互联及智能电网信息化背景下,异构化、智能化、互联化的海量电力Web系统网络环境愈加庞大复杂,电力数据的安全问题随着电力信息网与互联网的接入变得尤为严峻,如何有效对安全漏洞及其特征进行分析和检测就成为一种至关重要的问题[1,2]。其中SQL注入漏洞(structure query language injection vulnerability,SQLIV)是危害最为严重的漏洞之一[3,4],并呈现出越来越高的隐蔽性、逻辑性和时序性,传统的漏洞检测和特征分析方法已不能满足其检测要求。以提高智能电网Web信息系统安全检测的准确度为目标,大量研究从改进测试响应分析方法的角度入手以提高对漏洞特征的识别能力[5,6]。许多相关研究采用动静态相结合的方法提高响应分析能力,但对源代码的依赖限制了其应用范围[7-9]。而在传统的电力信息系统黑盒渗透测试中,多采用基于经验模式库及特征信息抽取等方法进行响应分析,其通过枚举的方式调用测试用例集合,且测试用例之间相互独立,未考虑到相关测试用例及其响应页面之间的关联性,因而难以对漏洞动态特征进行全面的分析,从而增加了引入漏报和误报的可能性[9-11]。
对此,本文面向电力信息系统安全漏洞检测提出了一种状态驱动的SQL注入安全漏洞特征分析检测模型,通过对攻击语句和测试用例进行语义特征分析和状态映射,建立其检测过程的扩展有限状态机[12,13]模型,并通过状态转移矩阵分析测试响应特征。该方法与传统渗透测试手段相比,主要区别在于其通过对应测试用例和响应状态之间的复杂状态转换关系进行漏洞响应特征分析,从而可检测出电力信息网络中愈加复杂的具有逻辑动态特性的漏洞,降低其漏报和误报。基于本文方法开发了其原型系统,并与当前流行的SQLIV渗透测试工具进行对比和实验分析,验证了该方法的有效性。
1 相关工作
1.1 SQL注入漏洞渗透测试
针对SQL注入漏洞渗透测试的研究主要从测试信息收集、测试用例生成以及响应分析方法3个方面展开[5-7],许多工作针对SQL注入漏洞渗透测试响应分析阶段进行了大量的研究,以改进其测试准确性。其中大量研究工作采用了动静态相结合的方法进行渗透测试,主要包括基于有限自动机的污染分析方法,以及基于语法分析树的动态检测模型等[6,7],这种方法在响应分析方面具有分析深入和准确的优势,但由于其必须依赖源代码或修改服务器程序,因而极大限制了其在单纯黑盒渗透测试场景下的应用。而传统的黑盒渗透测试普遍采用基于经验模式库的错误模式匹配[5,7],以及对漏洞特征信息进行抽取并进行对比分析的方式[10,11]来进行测试响应分析。但这些方法的测试用例之间彼此相互独立,且普遍基于枚举的方式调用其测试用例或模式库,并没有考虑到前后关联的测试用例及其响应页面之间的相关性。这种枚举调用测试用例库的方式易于实施和扩充,但由于其单一性和缺乏对状态变化的分析,容易造成较高的漏报或误报。
1.2 扩展有限状态机EFSM
扩展有限状态机EFSM是一种以有限状态及其状态间的迁移规律来表示对象的形式化模型,它是有限状态机(finite state machine,FSM)模型的扩展[12]。其通过状态、状态间的转移、前置条件、上下文变量、操作、输入和输出描述对象,其可精确描述软件系统的复杂动态行为,从而可有效应用于复杂系统的测试过程中。EFSM模型自诞生以来被应用于测试的多个领域,主要包括测试的形式化建模、测试序列的生成及一致性测试验证等多个方面,并且主要集中于面向对象软件、通信协议软件以及嵌入式系统等领域的应用和研究[13],而对其在Web漏洞安全测试方面的研究则相对较少。EFSM模型既保留了FSM模型对于控制流的表达能力,又通过上下文变量与谓词判断等扩展了对数据流的表达能力,而黑盒SQLIV渗透测试过程中表现出的复杂动态性,本质上是一种测试响应的状态变迁,非常适合通过EFSM模型进行描述。本文所述方法基于EFSM对SQLIV渗透测试过程进行建模,以其测试用例作为状态,以页面响应作为触发状态转移的条件,并通过其状态转移矩阵进行SQLIV的渗透测试。
2 研究动机
随着能源互联的不断发展,以及智能电网信息化的大背景下,电力信息网络变得愈加复杂,并且融合了大量基于动态交互的Web信息系统,其中包含的动态交互式Web页面及数据库服务器也呈现出海量的趋势,HTTP访问数据也愈加的庞杂,其Web安全漏洞问题变得越来越严峻,尤其是针对数据库交互的SQL注入漏洞。本文首先通过一个典型的电力商城业务信息系统页面交互中的SQL注入渗透测试场景进行说明:某个以MySQL为后台数据库的电力Web信息系统,通过表单Customer保存用户敏感信息,每个用户只能登陆系统后以CoustomerID和SessionID作为凭证查看相关信息,其SQL语句为“SELECT*FROM Costomer WHERE CustomerID=001 AND SessionID=123”。假设该语句并未进行过滤或防御,那么可对参数“SessionID=123”进行基于枚举的形如“abc”的错误注入测试。假设该电力商城系统对错误信息进行了屏蔽,但仍可通过推断进行SQLIV判断。可对参数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”的“真”值经过“与”运算后,整个语句的逻辑与原始语句的逻辑相同,返回的响应页面与原始的响应页面相似;而语句B的逻辑始终为“假”,响应页面与原始的页面不相似。其成功测试流程可通过图1中的路径“A→B→E”描述,其中“Simi”(Similar)和“No Simi”(Not Similar)分别表示响应与原始页面“相似”及“不相似”,“SQLIV”和“No SQLIV”分别表示检测和未检测出SQL注入漏洞。而在原始SQL语句逻辑为“假”的情况下,该语句本应无法读取出数据库信息,但依然可通过对参数“CustomerID=001”分别注入“AND 1=1--”和“AND 1=2--”检测出SQLIV。由于注释符“--”注释掉了对“SessionID”的判断,“1=1”经过逻辑“与”运算,使其可以读出“CustomerID”为“001”的客户信息,注入后的页面响应发生了变化;而注入“AND 1=2--”后,SQL语句逻辑依然为“假”,响应页面与原始页面相似。其对应测试流程可通过图1的路径“A→C→E”描述。
图1 SQLIV渗透测试模型示例
由此可知,完全相同的测试用例在不同场景中的响应依然可能具有不同的状态变化规律。传统基于测试用例枚举的方式很难有效检测出这种具有复杂状态变化关系的SQL注入漏洞,并且由于Web应用本身的多样性和复杂性,单一的测试用例很容易得到具有虚假漏洞特征的页面响应,如页面中包含的其它原因导致的数据库错误或页面相似等,因而很容易出现漏报和误报等现象。另外,枚举测试为了提高覆盖度而大量扩充测试用例库,同时增加了获得虚假漏洞响应的概率,进一步增加了误判的可能性。对此,本文提出一种基于扩展有限状态机及安全数据特征分析的SQLIV渗透测试方法以提高测试准确度。本文所述方法和实验是在已确定测试用例集合与测试规则[3-5]的基础上展开的,其主要针对渗透测试过程和响应分析方法进行建模。
3 基于EFSM的漏洞检测模型
本文通过对关联测试用例响应状态之间的转换关系进行分析和研究,提出了一种状态驱动的利用扩展有限状态机进行SQLIV检测的模型及方法,通过对SQL注入测试用例的安全特征进行分类和状态映射,并根据渗透测试相关规则建立测试用例对应的响应安全数据特征的扩展有限状态机模型,通过对于不同测试用例响应的注入点响应状态之间的状态转换规律进行分析来检测SQLIV。
3.1 测试用例的特征状态映射
通过对示例电力Web信息系统的讨论可知,不同测试用例在相同SQL语句上下文可能出现不同的响应,即便是相同测试用例在不同上下文环境下也有可能表现出不同的响应。究其原因,每一条测试用例都包含特定的逻辑语义,故当其与被注入的原始SQL语句融合并同时参与运算时,其逻辑语义与原始SQL语句共同作用并运算生成特定的逻辑语义结果。在这里表现为,相关数据表中某行数据是否满足被注入后的SQL语句的逻辑语义,即最终运算结果是“真”(T:True)还是“假”(F:False)。
根据SQL语句的逻辑语义特征,本文将最常用的SQL注入漏洞测试用例进行了分类,见表1。错误注入由“E”(Error)表示,其为可造成数据库错误的SQL注入测试语句,如“abc”等;“τ”表示排序注入测试,如“ORDER BY 2”等测试用例;“∪”符号表示联合查询注入测试,例如“UNION SELECT 1,2,3,…”;包含字母“T”(True)与“F”(False)的测试用例分类涉及到“真”和“假”运算,“T”代表“1=1”或“‘a’=‘a’”这类重言式,“F”代表“1=2”或“‘a’=‘b’”这类永假式;符号“∧”表示逻辑为“与”的运算,包括“AND”、“HAVING”、“IN”等关键词,例如“AND 1=1”及“’HAVING ‘a’=’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’=’b’--”等;符号“IF()”表示“IF”注入测试语句,“IF(T)”表示与原始SQL语句逻辑相同的注入测试语句,如“IF(1=1,ORI,ERR)”,“IF(F)”表示与原始逻辑不同的测试语句,如“IF(1=2,ORI,ERR)”,“ORI”表示注入前的初始参数值,“ERR”表示错误的一条查询或语句;“TD(n)”则表示进行时间间隔为n s的时间延迟(time delay,TD)注入测试,例如“SLEEP(n)--”。表1通过相应的符号和逻辑语义列出了包括错误推断注入测试、相似度推断测试、时间延迟注入测试等多种类别的SQLIV渗透测试用例及其对应的变体[10,12]。由于测试用例仅需要发现漏洞存在的证据,并且应尽量减少对被测系统的破坏,因此本文未采用带有“DELETE”、“ALTER”等攻击性关键词的SQL语句。
3.2 基于安全数据特征的扩展有限状态机模型
为描述SQLIV渗透测试过程中的状态转移,本文基于上节对于SQL注入测试用例的分类建立了基于安全数据特征的扩展有限状态机模型,其定义如下:
定义1 基于安全特征的扩展有限状态机模型(security features-extended finite state machine,SF-EFSM)是一个六元组SF-EFSM=,其中Q为非空的有限状态集合,I为有穷的输入事件集合,T为状态转移函数,q0是初始状态,E是终止状态的集合,V为同步变量集合。
表1 测试用例特征及状态分类
非空有限状态集合Q={S0,…,S4,T0,…,T9},其具体说明见表2。状态S0至S4为通用的测试控制状态,状态S0分析当前测试用例所属的状态号t,状态S1表明发现SQL注入漏洞的证据并将变量vul加1,状态S2表示当前测试用例未检测出漏洞,状态S3分析判断测试用例集合是否为空(set=0),状态S4为终止状态;状态T0至T9分别代表经过逻辑语义分类的10种测试用例所对应的测试响应状态,该方法所使用的初始测试用例集合TCSet(test case set)中的测试用例即由上述分类中的用例组成。其中T0可单独执行;T1及T2则以递增序列的形式成组进行测试,如“ORDER BY 1”,…“ORDER BY n”;T3至T9则是以同样的运算符号“∧”、“∨”、“IF”分组,根据“T”与“F”值成对出现的。与枚举测试用例模式库的方法有所不同,该方法不是枚举测试的,而是初始测试用例及其相应的状态转移关系生成后续相关测试用例的,因此初始测试用例集合TCSet中仅需包含属于状态集合 {T0,T1,T2,T3,T6,T8} 的测试用例即可完成测试。初始状态q0=S0,终结状态集合E={S4}。
表2 测试用例状态分类
同步变量集合V={t,r,vul,set},其中变量t表示本轮测试对应的测试响应状态,“t=2”表示安全数据特征扩展FSM即将进入T2状态进行测试;变量r表示某条测试用例的测试响应页面与原始响应页面相比是否发生变化或报错;变量vul表示测试出的全部SQL注入漏洞数量,每发现一组可触发漏洞特征的测试用例vul加1;变量set表示初始测试用例集合TCSet是否为空。输入事件集合I={t=m(m为整数,且0≤N≤10),r=0,r=1,set=0,set=1,ε},其中变量均与集合V中的变量相关,“t=m”表示扩展有限状态机即将进入Tm状态进行测试;“r=1”表示测试响应页面与原始页面相似且页面信息与响应时间正常,“r=0”表示测试响应页面发生变化、页面报错或响应时间异常;“set=0”表示测试用例集合为空集合,而“set=1”表明依然存在待测的用例;“ε”为空输入,表示不进行任何输入即可发生相应的状态转移。状态转移函数,它表示状态集合Q中的某个状态,在接收集合I中的输入后,转移到集合Q中的某个状态的映射函数。
3.3 状态转换矩阵及相关算法
状态转移函数包含了SQL注入漏洞渗透测试响应状态之间的转移关系与规律,它决定了渗透测试的具体流程和漏洞判断规则,因而其表示方式及算法是本文所述方法的关键内容,这里通过状态转换矩阵来描述状态转移函数T的具体内容,如图2所示。图中行与列均代表状态集合Q中的状态,行与列的交点为输入集合I中的元素,表示从行所表示状态转移至列所表示状态的转移条件。例如,行T3与列T4交点处有“r=1”,表示从状态T3转移至状态T4的输入条件为“r=1”。矩阵交点处的“ε”表示无需任何输入即可发生状态转移,而无内容的交点表示先后两个状态之间不存在状态转移。该状态转换矩阵中的内容是通过对最常用和经典的SQLIV渗透测试手段和规则进行总结得出的[5,11],可被应用于实际的SQL注入漏洞渗透测试过程中进行SQL注入漏洞的检测。
根据状态转换矩阵的结构和以上分析,基于安全数据特征扩展有限状态机的SQL注入渗透测试方法的实现主要为两部分:①对状态转移规则(status transfer rule,STR)的执行;②每个状态下所执行的具体动作(action)。据此,本文提出了SQL注入漏洞测试的状态转移算法(penetration testing status transfer algorithm,PTSTA)来实现对基于扩展有限状态机的SQL注入漏洞渗透测试方法的应用,其伪代码如算法1所示。
算法1: 渗透测试状态转移算法PTSTA
(1)变量:status,testcase,input,set,result,t,vul
(2)输入: 状态转换规则STR(StatusTransferRule)
初始测试用例集合TCSet(TestCaseSet);
(3)输出: 漏洞证据数量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函数执行每个状态下的动作
(11)ActionS(status,testcase);
(12) //通过StatusTransfer函数完成状态转移
(13)status=StatusTransfer(STR,status,Input);
(14)ActionT();
(15)returnvul;
(16)end
图2 状态转换矩阵
函数1: Action函数的实现
(1)Action(Status,TestCase)
(2)begin
(3)//根据不同的status状态值来执行具体的动作
(4)switch(status);
(5)//根据TestCase决定具体执行的测试状态号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生成当前状态
(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后移除。接下来执行循环,若非S4状态,则循环进行状态转移相关操作,其分为两步:①通过运行Action(status,testcase) 函数执行status相关动作;②通过状态转移函数StatusTransfer(STR,status,input) 通过状态转移规则STR、当前状态status及输入变量input确定转移后的状态值。在该算法中,函数Action(status,testcase) 的作用非常重要,它根据当前状态完成各种流程控制或测试任务。首先Action函数根据status选择执行对应状态下的动作,状态S0到状态S4负责参数设置与流程控制,状态T0至T9则具体的测试执行状态。状态S0通过对变量t赋值而对下一步执行的测试状态进行选择;S1表示存在一个SQL注入漏洞的证据,并将vul变量加1;S2表示无漏洞证据,vul变量值不变;S3根据TCSet是否为空值决定是否终止循环,并重置变量status、testcase及TCSet。状态T1、T2、T4、T7、T9根据其前置状态的testcase内容对应生成下次的测试用例值,而所有的测试用例状态T0至T9均通过ResAnalyzing(testcase) 函数则执行包括发送测试请求、接受测试响应、分析测试结果在内的多个动作,并将分析结果赋值于变量r。函数最终利用SetInput函数对input变量进行赋值以便后续的状态转移函数StatusTransfer可有效得到执行。通过算法1、Action函数以及状态转移规则STR,本文实现了基于安全数据特征扩展有限状态机的渗透测试方法。
函数1实现了对状态转移函数及每个状态下的动作执行,并循环处理初始测试用例集合TCSet中的初始测试用例,直到TCSet集合为空为止。其中,状态变量status存储当前所处状态,变量testcase存储当前测试用例字符串,变量input则存储了状态转移所需的输入值,变量set用于标记集合TCSet是否为空(set=0时),变量r用于标记响应页面是否出现报错、页面变化、时间延迟等异常(r=0时),t存储的状态号则是在S0状态下选择后续测试状态的依据,vul用于存储检测出的漏洞证据数量。算法输入为状态转移规则STR(status transfer rule)与测试用例集合TCSet(test case set)。其中,STR以三元组列表的形式存储状态转换矩阵中的状态转移规则
,Pre为转移前状态,Input为输入内容,Aft为转移后状态。TCSet为存储初始状态的字符串数组。4 实验及结果分析
本研究主要是关注针对电力信息网络的SQL注入渗透测试的动态检测过程,即通过对多个测试用例响应状态之间存在的状态转移规律的分析,以检测基于推断的动态漏洞。对此我们建立了目标漏洞实验测试平台WavsepV和IWebShopV,以模拟在真实电力Web信息系统环境中存在的SQL注入漏洞场景,其利用“PHP 5+MySql 5”环境构建。并基于本文所述方法开发了SQL注入漏洞特征分析和漏洞检测的原型系统,以评测本文所述方法的有效性。
4.1 测试实验环境
本文针对电力信息网络异构化、智能化、互联化的特点,构建了一套目标漏洞模拟测试环境。电力信息网络越来越多的融合了基于数据交互的动态Web信息系统,且其包含大量的动态Web页面及数据交互,因而我们在漏扫工具评估系统Wavsep[14]的基础上进行了扩展,人工植入了多种Web注入漏洞,并且融合了大量动态页面及数据交互请求构建了模拟电力信息网络环境的漏洞系统。其中,Wavsep(web application vulnerability scanner evaluation project)是由OWASP[3]提出的开源Web应用安全漏洞扫描程序评估项目,WavsepV在Wavsep的基础上加入了约2000个动态页面或在线URL,以增加其对真实互联网的动态环境模拟;IWebShopV[15]则是为了模拟电力信息外网中的电子商城等业务系统环境,其在开源电子商务网站项目iWebShop的基础上人工植入了多种对电力信息网络具有较高危害性的具有推断特性及动态特性的SQL注入漏洞,其详细描述见表3。其中,人工植入的SQL注入漏洞是通过对SQL注入漏洞的分类特征进行总结和分析的基础上,由安全工程人员人工植入了多种类型的SQL注入漏洞,既包括基于错误注入的数字型和字符型漏洞等常规的SQL注入漏洞,同时包括多种基于相似度与时间推断的具有动态特性的漏洞。为验证本方法在实际Web应用环境下的有效性,我们在WavsepV和IWebShopV中均额外加入了模拟真实电力信息系统环境下的动态Web页面和URL链接。表3中的“—”符号表示不包含该类型的漏洞。
表3 植入漏洞类型
为了能够验证基于扩展有限状态机进行SQL注入漏洞渗透测试的方法及其应用的有效性,根据本文所述模型和算法开发了原型系统。由于本实验的目的是对本方法的漏洞检测效果和正确性进行验证和分析,并不涉及测试前的确定被测URL和相关信息的收集过程,因此我们在试验前已事先获取了目标系统WavsepV和IWebShopV中的被测URL及待测注入点等信息。
4.2 实验结果数据
在对本文所述模型的原型系统进行相关测试的同时,我们选择了当前较为知名且应用较广泛的渗透测试工具WVS Acunteix和IBM AppScan进行了对比实验与分析[13],可更加全面的测试本文所述模型的有效性。Acunetix和AppScan均为当前对于SQLIV渗透测试相关研究和应用中具有代表性的基于枚举测试用例模式库的测试方式的代表,在本文中以Tool A和Tool B来对其进行表示(无相应顺序)。
本文方法与Tool A和Tool B在实验测试环境中的对比测试数据见表4。其中,“漏洞总数量”(Nt)表示目标系统中包含的SQLIV总数量;“发送请求数”(Nr)表示整个检测过程中发送的HTTP请求数;“检出总数量”(Vt)表示当前测试工具对当前目标被测Web应用检出的结果总数量,包括“正确召回数”和“测试误报数”。
表4 实验结果数据
“正确召回数”(Vr)是检测出的结果中确实为SQLIV的数量;“测试漏报数”(Fn)是未检测出的漏洞数量;“测试误报数”(Fp)为检测过程中出现的误报个数。通过表4数据可以看到,本文所述方法在两个测试平台中的“正确召回数”均高于Tool A和Tool B的测试结果,且“测试漏报数”和“测试误报数”低于另外两种工具。
图3为“漏报率对比”,其中“漏报率”表示为Pfn,且有 “Pfn=Fn/Nt”,其中 “Fn=Nt-Vr”;图4为“误报概率对比”,其中“误报概率”为整个测试过程中以注入点数量(Nip)为基数出现误报的概率,以Pfp表示,且有 “Pfp=Fp/Nip”。 图3(漏报率对比)与图4(误报概率对比)与表4的数据表现出相同的趋势,本文方法的“漏报率”与“误报概率”结果低于Tool A及Tool B的测试结果。图5通过本方法与其它两种工具在测试过程中在每个注入点平均发送的HTTP请求(Nra)数进行对比来对本方法的测试效率进行一定的分析,其中有 “Nra=Nr/Nip”。 图5显示出本文方法的平均HTTP请求数与其它两种工具处于同一数量级,略高于Tool A,并且低于Tool B的数值。
图3 漏报率对比
图5 平均HTTP请求数量对比
4.3 结果分析及讨论
本文实验所采用的目标测试平台可以从两个方面对渗透测试工具进行评价。一方面,WavsepV和IWebShopV分别包含了多种不同类型的SQL注入漏洞,包括普通的错误注入漏洞及基于相似度推断的动态特征的SQL注入漏洞,其实验数据可说明本文所述方法较传统基于枚举测试用例模式库的方法可以检测出更多具有动态特性及状态的SQL注入漏洞,具有更好的检测能力和测试覆盖度。另一方面,目标测试系统中不但包含多种类型的SQL注入漏洞,同时拥有大量具有随机特征的交互页面及真实的互联网Web页面,其具有很高的动态性和随机性,容易造成漏洞测试工具产生误报,可以对SQL注入渗透测试工具的误报水平进行有效评价。通过上节关于误报概率的实验对比数据可说明本文方法较以往的渗透测试方法相比具有更少的误报,可有效验证本方法对测试精确度的改进效果。
通过以上分析可进一步得出,本文方法具有更好的测试准确度的原因在于:①本文方法通过捕捉和分析相关测试用例响应之间的状态转移规律,可以检测更多具有推断和动态特性的漏洞,因而具有更好的测试覆盖度和更低的漏报率;②本文所述方法对同一个漏洞进行基于状态转移的多个步骤的测试,相当于对其正确性进行了更加充分的验证和确认,从而降低了发生误报的可能性;③同时本文所述方法在保证更高测试准确度的前提下,在效率方面与目前流行的漏洞测试工具相当,且高于Tool B。其内在原因是安全数据特征扩展的有限状态机可以对漏洞的特征进行更为准确而高效的分析和描述,从而保证了其测试效率。
5 结束语
本文提出了一种状态驱动的电力Web信息系统注入漏洞检测模型,通过对SQL注入漏洞渗透测试的安全特征进行抽象分类及状态映射,建立相关测试流程的扩展有限状态机模型,并基于该模型构建了SQL注入漏洞黑盒渗透测试流程的扩展有限状态机及其相关算法。本方法通过分析相关测试用例响应之间的状态转移规律来检测更多具有复杂动态特性的漏洞,且其具有更为充分的漏洞验证机制,从而在保证测试效率的前提下,可有效提高电力信息系统安全防御过程中的注入漏洞的检测覆盖度,降低了漏报率和误报的概率。通过对比实验及其结果分析,本方法可提高SQL注入漏洞测试响应分析的准确性,并可有效降低测试过程中“漏报”和“误报”的竞争问题所带来的影响,其相比于传统通过枚举测试用例库进行测试的方法具有更高的准确度,验证了本文所述方法的有效性。