【发明内容】
本发明的目的是提高当前web应用安全漏洞渗透测试准确度,提出一种应用SGM-SQL注入攻击模型驱动web应用安全漏洞渗透测试的方法。
该方法通过定义模型驱动的测试框架,以框架中的SGM-SQL注入模型表达的信息为指导,定义SQL注入安全漏洞形式化定义和渗透测试用例的形式化表述体系,为渗透测试提供漏洞存在性准确判定准则和有序完备的测试用例,从而提高渗透测试准确度,弥补当前渗透测试准确度不高的缺点。
本发明提供的应用SGM-SQL注入模型驱动web应用渗透测试的方法包括:
步骤1、定义SGM-SQL注入攻击安全漏洞渗透测试框架;
步骤2、根据对SQL注入攻击行为进行抽象,定义本发明所述SGM-SQL注入攻击模型;
步骤3、根据步骤2定义的SGM-SQL注入攻击模型,定义SQL注入安全漏洞的形式化定义集合;
步骤4、根据步骤2定义的SGM-SQL注入攻击模型,定义生成SQL注入攻击参数或称测试用例的形式化表达体系集合;
步骤5、定义生成步骤3和步骤4所述集合的实例化方法和结果;
步骤6、定义SGM-SQL注入安全漏洞渗透测试算法,应用步骤5的实例化结果进行web应用SQL注入安全漏洞渗透测试。
本发明步骤1定义了攻击模型驱动的web应用安全漏洞渗透测试框架(图1),框架通过SGM-SQL注入攻击模型所表述的SQL注入攻击规律信息,对SQL注入的攻击位置、安全漏洞判定准则、注入参数或称测试用例规则三大测试要素进行指导,包括:框架中的SGM-SQL注入攻击模型“探查WEB输入点”子任务节点表述信息指导查找web应用的SQL注入攻击位置A;SGM-SQL注入攻击模型中“窃取系统信息”、“绕过认证”、“运行恶意命令”子目标节点表述信息指导产生较准确的安全漏洞判定准则D;SGM-SQL注入攻击模型中构造注入内容的诸子节点所表述信息指导生成条理化注入参数或称测试用例规则I。SGM-SQL注入攻击模型通过对此三项要素的指导,实现对最底端的实际测试活动在识别攻击位置、测试用例和判定安全漏洞存在三方面的支持。
本发明步骤2应用安全目标模型(SGM),基于对当前SQL注入攻击手段的全面考察,对其攻击行为进行抽象,定义SGM-SQL注入攻击模型(图2)。此攻击模型是:根据SGM的建模理论方法,将对web应用的SQL注入攻击实际手段进行抽象表达:将SQL注入攻击分为窃取系统信息、绕过认证、运行恶意命令三大子类,分别以SGM的子目标节点表述。其中窃取系统信息子类又分为盲注入和注入获得可利用错误信息两个子类,各自由SGM子目标节点表述;运行恶意命令子类又分为注入运行SQL命令和注入运行注入运行存储过程两个子类,分别以SGM的子目标节点表述。盲注入子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:时间推断命令和条件式,及探查web输入点的子任务。注入获得可利用错误信息子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:异常字符和不可执行命令,及探查web输入点的子任务。绕过认证子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:条件式和异常字符,及探查web输入点的子任务。注入运行SQL命令子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:条件式和可执行命令,及探查web输入点的子任务。注入运行存储过程子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:可执行命令,及探查web输入点的子任务。根据SGM的建模规则,子目标节点之间以单向箭头及AND、OR操作符表述子目标间上述的分类依赖关系。
本发明步骤3所述的定义SQL注入安全漏洞的形式化定义集合,是用形式化语言准确定义SQL注入攻击漏洞的行为特征,定义web应用对攻击注入有怎样的反应、动作以判定是否有SQL注入安全漏洞,具体内容包括:
设:攻击者为attacker;受测web应用记为WA;根据SGM-SQL注入攻击模型的描述:
定义1:某WA存在SQL注入安全漏洞,记作SQLI(WA),则:
SQLI(WA)
I(WA)∨R(WA)∨L(WA) (1)
定义2:SQL注入窃取系统信息,记作:I(WA):
I(WA)
deformSInject(WA)∨blindInject(WA) (2)
定义3:SQL注入诱发错误信息,表示攻击者可通过注入异常字符或无法执行的命令来诱发web应用错误信息,从中获得有价值的信息,记作:deformSInject(WA);
deformSInject(WA)
(attacker.input∈Deformed characters∨attacker.input∈Deformedcommands)∧information∈WA.response(attacker.input).error∧attacker.GET_knowledge(information); (3)
attacker.input表示攻击者向WA提交的输入;Deformed characters表示异常字符集合、Deformed commands表示可诱发错误信息的异常命令语句,两者的主要目的在于诱发干扰web应用产生错误信息;
attacker.GET_knowledge()表示攻击者可获得有利于攻击的信息;WA.response()表示WA对输入的反应;WA.response.error表示WA产生出错信息。
定义4:SQL注入盲注入,记作:blindInject(WA)。如模型所示,其包括时间推断timing_inference()和条件猜解condition_inference()两种方式:
blindInject(WA)
timing_inference(WA)∨condition_inference(WA); (4)
timing_inference(WA)attacker.input i,j∈IN_conditional∧true(attacker.inputi)≠true(attacker.input j)→information∈WA.response(attacker.input i).time≠WA.response(attacker.input j).time∧attacker.GET_knowledge(information)∧(true(attacker.inputi)=true(attacker.input j)→WA.response(attacker.input i).time=WA.response(attacker.inputj).time); (5)
condition_inference(WA)
attacker.input i,j∈IFC_conditional∧true(attacker.inputi)≠true(attacker.input j)→information∈WA.response(attacker.input i).state≠WA.response(attacker.input j).state∧attacker.GET_knowledge(information)∧(true(attacker.inputi)=true(attacker.input j)→WA.response(attacker.input i).state=WA.response(attacker.inputj).state); (6)
定义IN_conditional为时间推断命令的条件式;IFC_conditional为用于条件猜解的条件式;定义true(conditional)为条件式conditional成立与否状态,即可确定的其真或假(成立/不成立)两种状态;WA.response().time为WA对输入的时间反应;WA.response().state为WA的反应状态。
定义conditional为符合SQL语法规范的条件式集合;TRUE conditional表示恒为真的条件表达式集合;FALSE conditional为恒不成立(为假)的条件式;且TRUE conditional,FALSE conditional,IN_conditional,IFC_conditional∈conditional.
定义5:SQL注入运行恶意命令攻击,表示攻击者可向WA注入SQL语法允许的、符合攻击者目的的命令并运行。记作:R(WA);
R(WA)
SQLRuning(WA)∨SPRuning(WA); (7)
SQLRuning(WA)表示web应用可被注入SQL语句或条件进行运行;SPRuning(WA)表示攻击者可向web应用注入命令语句,运行已有的系统存储过程或自定义过程。即:
SQLRuning(WA)
(attacker.input∈SQL commands∨attacker.input∈AD_conditional∨attacker.input∈TRUE conditional)∧WA.response(attacker.input).run==true;(8)
SPRuning(WA)
attacker.input∈stored procedures∧WA.response(attacker.input).run==true; (9)
SQL commands表示可执行的SQL语法语句集合;AD_conditional表示攻击者在原SQL命令末尾额外注入的条件,其目的是改变原命令所涉及的记录范围,实现更多查询、删除等记录范围,AD_conditional∈conditional;stored procedures表示可执行的web应用存储过程集合;WA.response().run表示web应用对攻击者注入的命令是否予以执行。
定义6:SQL注入绕过认证,表示攻击者可以通过SQL注入攻击实现绕过web应用WA的合法用户认证。记作:L(WA)。
L(WA)
(attacker.input∈LG_Deformed characters∨attacker.input∈TRUE conditional)∧usr,pwd∈attacker.input∧WA.response(usr,pwd).authenticated==true (10)
其中authenticated表示是否通过web应用的身份认证;usr,pwd表示输入web应用的用户名和密码信息。LG_Deformed characters表示可用于干扰web应用登录认证机制的异常字符。LG_Deformed characters∈Deformed characters。
上述在步骤2所定义的SGM-SQL注入模型的基础上,形式化定义了相对较为普适的SQL注入安全漏洞的形式化定义集合(1-10式),为判定SQL注入漏洞提供较为较广泛适用的准则。
本发明步骤4所述定义生成SQL注入攻击参数或称测试用例的形式化表达体系集合,是指提出对SQL注入攻击参数的形式化描述方法体系,以提出的形式化符号描述体系,实现对SQL注入安全漏洞渗透测试用例的有序规则表达和100%覆盖完备描述,具体包括:
定义安全测试的注入攻击参数算子
代表对于某种web应用的注入型安全漏洞i,可使用的对其攻击的注入参数集合;所定义的攻击参数算子着眼于从攻击目的表述注入参数,而非描述参数具体形式或格式;算子代表的是用于某种攻击目的的注入参数集合;
上述定义的注入攻击参数算子具体定义内容如下表:
在上述定义的攻击注入参数算子的基础上,将参数算子结合起来以形成算子表达式,为此进一步定义算子运算符,包括:||为算子的或操作,&&为算子的与操作;定义算子的复合运算为·:定义『』为参数格式适应操作,意为对攻击参数具体格式进行处理,以适应具体web应用注入点格式要求;
定义上述算子运算符的优先级:其中复合运算符·的运算顺序为从右至左,&&操作符优先级高于||操作符,复合运算符·的优先级高于&&和||操作符,括号的优先级最高;
定义算子表达式的运算规则如下:
定义:Φ为空算子符号,表示对算子
不进行任何操作、本身不含任何元素,即用来指代算子
自身;在规则式中Φ可理解为“不进行任何操作”;
本发明定义:
为实际攻击参数的模拟攻击参数算子,即,
表示攻击参数算子
代表的实际攻击参数的模拟攻击参数形式,换言之
是
所代表的实际攻击参数的无害化参数部分;基于实际攻击的代表形式,本发明定义渗透测试SQL注入安全漏洞的模拟攻击参数算子规则式或称测试用例规则如下表所示:
对SQL注入一类的注入式安全漏洞渗透测试,应考虑注入参数和web应用注入点之间的对应关系,根据SQL注入攻击的特点,一般的注入点为带参数URL和各种表单,注入点与攻击参数算子规则式的对应关系如下表所示:
实际的渗透测试可根据web应用的具体状况和测试的实际条件进行变通调整,可以增加对于cookies注入方式的考虑或根据测试规模增减注入点使用用例种类。
本发明步骤5所述的定义生成步骤3和步骤4所述形式化集合的实例化方法和结果,是将步骤3和步骤4定义的形式化测试用例判定标准规则式和规则式,根据受测web应用的具体情况,转化为测试中的实际测试输入语句和可操作的判定标准,提供给实际的测试活动,完成完整的测试过程。
本发明步骤6所述的定义SGM-SQL注入安全漏洞渗透测试算法,算法是采用当前web应用安全漏洞渗透测试通行的“爬行-模拟攻击-分析反应”的步骤,在算法的模拟攻击阶段采用本发明步骤5所述对步骤4定义的测试用例形式化规则的实例化结果、作为模拟攻击输入,使测试具有有序完备的用例输入;在算法的分析反应阶段使用本发明步骤5所述的对步骤3定义的安全漏洞形式化定义集合的实例化结果、作为分析漏洞存在性的依据,使测试具有准确的安全漏洞判定标准。算法最终返回受测web应用SQL注入安全漏洞的注入点集合作为测试结果,完成测试。
算法1.SGM-SQL注入安全漏洞渗透测试算法
输入:受测web系统;
根据SGM-SQL注入攻击模型M所定义的测试用例的形式化表达体系集合I、SQL注入安全漏洞的形式化定义集合D;I与D的对应关系S;根据模型M的表述知识,定义I、D与P的对应关系T
输出:受测web系统中存在SQL注入安全漏洞的注入点集合VIP.
算法步骤:
①VIP=Φ;
②自动爬行或人工分析受测web系统,查找其SQL注入攻击的可注入点或称攻击位置集合P、同时根据T将P中各注入点与I及D建立联系备用,并获取关于可注入点及受测web系统的相关信息W;
③根据W实例化I和D,生成实例化的测试用例I’和D’(I’与D’的对应关系亦为S,I’、D’与P的对应关系亦为T);;
④Foreach测试目的di∈D:
⑤{根据S确定di相对应的用例注入参数集合F’i∈I’:
⑥根据T确定di相对应的可注入点集合Pi∈P;
⑦Foreach实例化可注入参数f’j∈F’i
⑧{if(Pi!=Φ):
⑨{Foreach可注入点pk∈Pi
⑩{将f’j注入pk;
以d
i的实例化形式D’
i∈D’作为判定准则集合,判断p
k是否存在SQL注入漏洞;
}//end of Foreach实例化可注入参数f’j
本发明的优点和积极效果:
本发明提出一种应用SGM-SQL注入攻击模型驱动web应用安全漏洞渗透测试的方法,该方法定义新的SGM-SQL注入模型,并以此模型驱动生成SQL注入安全漏洞准确定义和对其渗透测试用例形式化表达。本发明创立了SQL注入安全漏洞形式化定义集合和SQL注入攻击参数形式化表达体系。通过对SQL注入准确的形式化定义,提供了准确的渗透测试安全漏洞存在性判定准则;而通过定义的攻击参数(测试用例)形式化表达方法,可以对渗透测试用例进行有序和完备无遗漏的描述,这两方面的工作共同作用可提高渗透测试准确度。通过本发明定义的SGM-SQL模型驱动渗透测试框架,可将上述研究方面串联起来,实现SGM-SQL模型对web应用安全漏洞渗透测试的三大要素支持指导,对软件安全漏洞测试等相关领域具有广泛的应用和研究意义。
【具体实施方式】
1.定义SGM-SQL注入攻击安全漏洞渗透测试框架
本发明定义了攻击模型驱动的web应用安全漏洞渗透测试框架(图1),框架通过SGM-SQL注入攻击模型所表述的SQL注入攻击规律信息,对SQL注入攻击位置、安全漏洞判定准则、注入参数或称测试用例规则三大测试要素进行指导,包括:框架中的SGM-SQL注入攻击模型“探查WEB输入点”子任务节点表述信息指导查找web应用的SQL注入攻击位置A;SGM-SQL注入攻击模型中“窃取系统信息”、“绕过认证”、“运行恶意命令”子目标节点表述信息指导产生较准确的安全漏洞判定准则D;SGM-SQL注入攻击模型中构造注入内容的诸子节点所表述信息指导生成条理化注入参数或称测试用例规则I。SGM-SQL注入攻击模型通过对此三项内容的指导,实现对最底端的实际测试活动在识别攻击位置、测试用例和判定安全漏洞存在三方面的支持。
2.应用SGM定义SGM-SQL注入攻击模型
本发明应用安全目标模型(SGM),定义了SGM-SQL注入攻击模型(图2)。此攻击模型是:根据安全目标模型(SGM)的建模理论方法,将对web应用的SQL注入攻击实际手段进行模型化抽象表达:将SQL注入攻击分为窃取系统信息、绕过认证、运行恶意命令三大子类,分别以SGM的子目标节点表述。其中窃取系统信息子类又分为盲注入和注入获得可利用错误信息两个子类,各自由SGM子目标节点表述;运行恶意命令子类又分为注入运行SQL命令和注入运行注入运行存储过程两个子类,分别以SGM的子目标节点表述。盲注入子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:时间推断命令和条件式,及探查web输入点的子任务。注入获得可利用错误信息子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:异常字符和不可执行命令,及探查web输入点的子任务。绕过认证子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:条件式和异常字符,及探查web输入点的子任务。注入运行SQL命令子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:条件式和可执行命令,及探查web输入点的子任务。注入运行存储过程子目标节点上方以SGM子目标节点描述此类攻击所需注入的攻击注入参数类型:可执行命令,及探查web输入点的子任务。根据SGM的建模规则,子目标节点之间以单向箭头及AND、OR操作符表述子目标间上述的分类依赖关系,以表达攻击实现手段的规律。
SGM可更好满足所提框架对驱动攻击模型的需要:定义的SGM-SQL注入攻击模型描述漏洞攻击位置、漏洞特征和攻击输入。以下据此模型的表述信息,生成SQL注入安全漏洞的形式化定义集合(步骤3)和SQL注入攻击参数或称测试用例的形式化表达体系集合(步骤4)。
3.定义SQL注入安全漏洞的形式化定义集合
本发明定义SQL注入安全漏洞的形式化定义集合。即根据步骤2所定义的SGM-SQL注入攻击模型,用形式化语言准确定义SQL注入攻击漏洞的行为特征,定义web应用对攻击注入有怎样的反应、动作以判定是否有SQL注入安全漏洞。其研究的目的和意义在于:为渗透测试判定web应用的SQL注入安全漏洞存在性,提供准确判定准则。
设:攻击者为attacker;受测web应用记为WA;根据SGM-SQL注入攻击模型的描述:
定义1:某WA存在SQL注入安全漏洞,记作SQLI(WA),则:
SQLI(WA)
I(WA)∨R(WA)∨L(WA) (1)
定义2:SQL注入窃取系统信息,记作:I(WA):
I(WA)
deformSInject(WA)∨blindInject(WA) (2)
定义3:SQL注入诱发错误信息,表示攻击者可通过注入异常字符或无法执行的命令来诱发web应用错误信息,从中获得有价值的信息,记作:deformSInject(WA);
deformSInject(WA)
(attacker.input∈Deformed characters∨attacker.input∈Deformedcommands)∧information∈WA.response(attacker.input).error∧attacker.GET_knowledge(information); (3)
attacker.input表示攻击者向WA提交的输入;Deformed characters表示异常字符集合、Deformed commands表示可诱发错误信息的异常命令语句,两者的主要目的在于诱发干扰web应用产生错误信息;
attacker.GET_knowledge()表示攻击者可获得有利于攻击的信息;WA.response()表示WA对输入的反应;WA.response.error表示WA产生出错信息。
定义4:SQL注入盲注入,记作:blindInject(WA)。如模型所示,其包括时间推断timing_inference()和条件猜解condition_inference()两种方式:
blindInject(WA)timing_inference(WA)∨condition_inference(WA); (4)
timing_inference(WA)
attacker.input i,j∈IN_conditional∧true(attacker.inputi)≠true(attacker.input j)→information∈WA.response(attacker.input i).time≠WA.response(attacker.input j).time∧attacker.GET_knowledge(information)∧(true(attacker.inputi)=true(attacker.input j)→WA.response(attacker.input i).time=WA.response(attacker.inputj).time); (5)
condition_inference(WA)
attacker.input i,j∈IFC_conditional∧true(attacker.inputi)≠true(attacker.input j)→information∈WA.response(attacker.input i).state≠WA.response(attacker.input j).state∧attacker.GET_knowledge(information)∧(true(attacker.inputi)=true(attacker.input j)→WA.response(attacker.input i).state=WA.response(attacker.inputj).state); (6)
定义IN_conditional为时间推断命令的条件式;IFC_conditional为用于条件猜解的条件式;定义true(conditional)为条件式conditional成立与否状态,即可确定的其真或假(成立/不成立)两种状态;WA.response().time为WA对输入的时间反应;WA.response().state为WA的反应状态。
定义conditional为符合SQL语法规范的条件式集合;TRUE conditional表示恒为真的条件表达式集合;FALSE conditional为恒不成立(为假)的条件式;且TRUE conditional,FALSE conditional,IN_conditional,IFC_conditional∈conditional.
定义5:SQL注入运行恶意命令攻击,表示攻击者可向WA注入SQL语法允许的、符合攻击者目的的命令并运行。记作:R(WA);
R(WA)
SQLRuning(WA)∨SPRuning(WA); (7)
SQLRuning(WA)表示web应用可被注入SQL语句或条件进行运行;SPRuning(WA)表示攻击者可向web应用注入命令语句,运行已有的系统存储过程或自定义过程。即:
SQLRuning(WA)
(attacker.input∈SQL commands∨attacker.input∈AD_conditional∨attacker.input∈TRUE conditional)∧WA.response(attacker.input).run==true;(8)
SPRuning(WA)
attacker.input∈stored procedures∧WA.response(attacker.input).run==true; (9)
SQL commands表示可执行的SQL语法语句集合;AD_conditional表示攻击者在原SQL命令末尾额外注入的条件,其目的是改变原命令所涉及的记录范围,实现更多查询、删除等记录范围,AD_conditional∈conditional;stored procedures表示可执行的web应用存储过程集合;WA.response().run表示web应用对攻击者注入的命令是否予以执行。
定义6:SQL注入绕过认证,表示攻击者可以通过SQL注入攻击实现绕过web应用WA的合法用户认证。记作:L(WA)。
L(WA)(attacker.input∈LG_Deformed characters∨attacker.input∈TRUE conditional)∧usr,pwd ∈attacker.input∧WA.response(usr,pwd).authenticated==true (10)
其中authenticated表示是否通过web应用的身份认证;usr,pwd表示输入web应用的用户名和密码信息。LG_Deformed characters表示可用于干扰web应用登录认证机制的异常字符。LG_Deformed characters∈Deformed characters。
4.定义生成SQL注入攻击参数(测试用例)的形式化表达体系集合
本发明创立SQL注入安全漏洞的攻击参数(测试用例)形式化表达体系。即根据步骤2所定义的SGM-SQL注入攻击模型,形式化表述SQL注入攻击参数,从而实现对其渗透测试用例的形式化表达,实现SQL注入渗透测试用例的有序规则表达和100%覆盖描述。
本发明定义安全测试的注入攻击参数算子(symbolics)
代表对于某种web应用的注入型安全漏洞i,可使用的对其攻击的注入参数集合。如
代表的是SQL注入攻击参数总体集合。对SQL注入攻击参数算子具体内容定义如表1。所定义的攻击参数算子着眼于从攻击目的表述注入参数,而非描述参数具体的形式或格式。算子代表的是用于某种攻击目的的注入参数集合。
表1 SQL注入攻击参数算子
在上述定义的攻击注入参数算子的基础上,以下将参数算子结合起来以形成算子表达式。为此本发明进一步定义||为算子的或操作,&&为算子的与操作。即
且
定义算子的复合运算为·:算子
与算子
进行复合运算记为
其表示
为某种操作动作(OPERA)算子,其处理算子
代表的注入参数,生成新的或复合的参数形式:
定义『』为参数格式适应操作,意为对攻击参数具体格式进行处理,以适应具体web应用注入点格式要求(如数值型、字符型等)。
本发明定义上述算子运算符的优先级:其中复合运算符·的运算顺序为从右至左,即
意为
&&操作符优先级高于||操作符,即
等价于
以此类推。复合运算符·的优先级高于&&和||操作符。括号的优先级最高,表2定义的表达式规则中,为清楚明确起见,使用括号标出优先级顺序(尽管非必须)。
表2 SQL注入攻击参数算子表达式
表2中试探参数(Probing parameters)意为:在实际大规模攻击实施之前,攻击者采用的试探注入手段,探查web应用是否存在SQL注入漏洞。attacker.input表达的是可用作攻击的全部(已知)参数集合,试探参数为选择攻击参数中最具代表性参数作为用例提供了基础。根据上述攻击参数算子含义和操作符的定义,表3定义算子表达式的运算规则:
表3 算子表达式的运算规则定义
定义:Φ为空算子符号,表示对算子不进行任何操作、本身不含任何元素。其用来指代算子自身。如:在规则式中Φ可理解为“不进行任何操作”。根据上述定义可将原攻击参数规则式化简为更简洁的形式。
表4是对表2的化简,其规则表达式表述意义不变、不丢失信息,表现形式更简洁。
表4 化简后的SQL注入攻击参数算子表达式
本发明定义:
为实际攻击参数的模拟攻击参数算子。即,
表示攻击参数算子
代表的实际攻击参数的模拟攻击参数形式。换言之
是
所代表的实际攻击参数的无害化参数部分,如:
中注入命令;drop table XX;--命令是会对web应用产生有害影响的注入命令(其删除了数据表),而;select*from XX;--命令则不会对web应用产生不可逆的实际损害,属于
基于表4中实际攻击的代表形式:试探参数的规则,本发明列举渗透测试SQL注入安全漏洞的模拟攻击参数算子(测试用例)规则如表5所示。
表5 渗透测试模拟攻击参数算子(用例)规则
对SQL注入一类的注入式安全漏洞渗透测试,应考虑注入参数和web应用注入点之间的对应关系。根据SQL注入攻击的特点,其一般的注入点为带参数URL和各种表单等,注入点与攻击参数算子规则式的对应关系如表6所示:
表6 web应用注入点与SQL注入参数用例规则对应关系
实际的渗透测试可根据web应用的具体状况和测试的实际条件进行变通调整,例如增加对于cookies注入等方式的考虑或根据测试规模增减注入点使用用例种类。
5.定义生成步骤3和步骤4所述集合的实例化方法和结果;
形式化规则式的实例化方法,即将本发明步骤3的SQL注入安全漏洞的形式化定义集合和步骤4的SQL注入攻击参数或称测试用例的形式化表达体系集合,转化为测试中的实际测试语句和可操作判定标准。
步骤4所定义攻击参数算子是对实际的攻击参数进行抽象意义上的表达,各算子代表的攻击参数(测试用例)实际形式应随不同的web应用具体情况而定。故根据目标web应用情况(例如输入格式要求、后台数据库型号等)对测试用例进行实例化。这个过程可以用SGM图(图3)表述。
对步骤3所定义的判定准则的实例化,即按照形式化描述,确定实际的可操作的漏洞判断标准。如可根据web应用后台数据库类型确定可诱发的错误信息具体内容,以判断attacker.GET_knowledge(information)攻击者是否可获得有价值信息、或通过返回查询结果数量判定注入命令是否运行等。从而与实例化的测试输入配套使用,提高渗透测试准确度。
6.定义SGM-SQL注入安全漏洞渗透测试算法,应用步骤5的实例化结果进行SQL注入安全漏洞渗透测试
模型驱动的web应用渗透测试算法,将步骤1~5提出的理论思想及实例化结果应用到渗透测试实际,以算法的形式明确所提出的SGM-SQL注入模型驱动渗透测试理论思想具体应用步骤。本发明定义的SGM-SQL注入安全漏洞渗透测试算法是采用当前web应用安全漏洞渗透测试通行的“爬行-模拟攻击-分析反应”的步骤,本发明对这个过程的改进主要体现在算法的“模拟攻击”和“分析反应”阶段:在算法的模拟攻击阶段采用本发明步骤5所述对步骤4定义的测试用例形式化规则的实例化结果、作为模拟攻击输入,使测试具有有序完备的用例输入;在算法的分析反应阶段使用本发明步骤5所述的对步骤3定义的安全漏洞形式化定义集合的实例化结果、作为分析漏洞存在性的依据,使测试具有准确的安全漏洞判定标准。算法最终返回受测web应用SQL注入安全漏洞的注入点集合作为测试结果,完成测试。
算法1.SGM-SQL注入安全漏洞渗透测试算法
输入:受测web系统;
根据SGM-SQL注入攻击模型M所定义的测试用例的形式化表达体系集合I、SQL注入安全漏洞的形式化定义集合D;I与D的对应关系S;根据模型M的表述知识,定义I、D与P的对应关系T
输出:受测web系统中存在SQL注入安全漏洞的注入点集合VIP.
算法步骤:
①VIP=Φ;
②自动爬行或人工分析受测web系统,查找其SQL注入攻击的可注入点或称攻击位置集合P、同时根据T将P中各注入点与I及D建立联系备用,并获取关于可注入点及受测web系统的相关信息W;
③根据W实例化I和D,生成实例化的测试用例I’和D’(I’与D’的对应关系亦为S,I’、D’与P的对应关系亦为T);;
④Foreach测试目的di∈D:
⑤{根据S确定di相对应的用例注入参数集合F’i∈I’:
⑥根据T确定di相对应的可注入点集合Pi∈P;
⑦Foreach实例化可注入参数f’j∈F’i
⑧{if(Pi!=Φ):
⑨{Foreach可注入点pk∈Pi
⑩{将f’j注入pk;
以d
i的实例化形式D’
i∈D’作为判定准则集合,判断p
k是否存在SQL注入漏洞;
{VIP=VIP∪pk;Pi=Pi-pk;}
}//end of if(Pi!=Φ)
}//end of Foreach实例化可注入参数f’
j
算法1体现了当前web应用安全漏洞渗透测试的一般方法步骤,同时其中应用了本发明所定义的安全漏洞形式化定义和渗透测试用例形式化表达集合,使得渗透测试过程具有了准确的安全漏洞存在性判定准则(算法步
)和完备有序的测试用例(算法步⑤),从而可提高测试准确度。算法1可通过自动web应用安全漏洞渗透测试系统(图4)实现,对受测web应用进行较准确的SQL注入安全漏洞渗透测试。
实施例1
根据本发明方法,基于所提出的渗透测试形式化表述体系的实例化结果和测试算法,对web应用的SQL注入安全漏洞进行渗透测试。以对带有SQL注入安全漏洞的web应用进行自动的渗透测试为例,具体实施过程如下所示。
一、开发自动web应用安全漏洞渗透测试系统。
为测试目标web应用,可开发对受测web应用进行安全漏洞渗透测试的系统:采用相关安全漏洞渗透测试通用的“爬行-注入-分析”检测方式。自动渗透测试系统主要结构建议包含有以下几个模块:爬行模块,渗透测试模块(包括用例注入引擎、漏洞判定引擎),如图4所示。
整套自动测试系统依据算法一的步骤,自动完成从查找攻击位置到SQL参数自动注入及判定漏洞存在性的任务。
其中爬行模块遍历受测Web应用得到其所有页面集合,从中查找SQL注入攻击位置。为渗透测试模拟攻击注入参数(用例)提供前提。渗透测试模块中的测试用例注入引擎负责将形式化用例规则的实例化形式参数(如表8),对目标受测web应用攻击位置进行攻击注入。渗透测试模块中的漏洞判断引擎依据本发明定义SQL注入形式化描述的实例化形式判断是否存在漏洞。
二、使用上述开发的自动渗透测试系统对受测web进行检测。假设有两个受测web应用,分别用ASP和JSP技术开发,两个受测目标应用存在局域网服务器中:http://192.168.111.222/。首先应用自动测试系统的爬行模块遍历两个受测Web应用,以得到其所有页面集合(包括存在SQL注入安全漏洞的页面)。然后从所爬行到的页面集合中根据攻击位置类型,解析查找SQL注入的攻击位置,查找注入点:包括有带参数的URL(URLquerystring)和登录认证FORM(LOGIN FORM)等等。得到结果如表7所示:
表7 受测web应用SQL注入漏洞攻击位置测试查找结果实例
三、根据本发明步骤5所述、依据步骤3和步骤4的形式化定义,生成符合受测web应用的实例化测试用例输入和漏洞定义判定准则。
根据本发明步骤4所述形式化渗透测试用例规则(如表5),根据受测web应用的实际情况,对形式化测试用例规则表达式实例化,结果如表8中实例化用例输入一列。进一步对步骤3所定义的判定准则的实例化,即按照形式化描述,确定实际的可操作的漏洞判断标准。如可根据受测web应用后台数据库类型确定注入可运行的程序语句,或通过异常字符诱发的返回错误信息具体内容,以判断attacker.GET knowledge(information)攻击者是否可获得有价值信息、或通过返回查询结果数量判定注入命令是否运行等(表8中实例化的安全漏洞存在性判定准则一列)。将实例化的测试用例输入集合装载自动测试系统的测试用例注入引擎,将实例化的安全漏洞存在性判定准则集合装载自动测试系统的漏洞判断引擎。
对受测web应用测试用例实例化例举如下:
表8 对受测web应用的SQL注入渗透用例实例化设定示例
以表8中列出的实例化用例输入的基本形式,未列出其变形伪装形式。为绕过web应用防御机制,典型的伪装攻击注入措施包括有:大小写混合、UNICODE或ASCII等编码法、重写过渡法等等。这些操作由
符号代表。
在实际渗透测试实例化过程中,可先对步骤3的deformSInject(WA)和blindInject(WA)两部分测试用例进行实例化,即先进行此两项的渗透测试。若web应用存在信息泄露漏洞,可以为接下来的运行恶意命令等(SQLRuning)测试用例实例化提供有用的信息。
四、根据上述实例化形式的用例、爬行查找到的SQL注入攻击位置,使用所开发的自动渗透测试系统,对受测web应用进行SQL注入安全漏洞的测试。
对于各个测试目的:deformSInject(WA)、blindInject(WA)、SQLRuning(WA)、SPRuning(WA)、L(WA),按照表6中的规则,将表8中的实例化用例输入上述查找到的SQL注入攻击位置中去,进行渗透测试。自动测试系统中的用例注入引擎装载这些实例化的攻击参数自动完成这一任务。
在注入实例化的用例输入后,以自动测试系统中的漏洞判断引擎收集受测web应用对用例输入的反应,对这些反应根据所装载的表8中的实例化安全漏洞判定准则判定各个受测web应用的攻击位置是否存在SQL注入安全漏洞。
上述自动渗透测试系统应用算法一的步骤、以表8为渗透测试用例和判定准则,可提高对受测web应用进行渗透测试的准确度,体现了本发明的研究思想目的。
以上述所开发的测试工具(命名为NKWebAppScanner 1.0)返回的存在SQL注入安全漏洞可注入点(VIP)集合中内容作为评价标准,所得的对目标web应用SQL注入安全漏洞测试结果举例如下(表9中“√”表示测试工具测出了此处存在SQL注入漏洞):
表9 受测web应用SQL注入漏洞渗透测试结果示例
从而通过上述渗透测试过程和测试结果,检测到受测web应用的SQL注入安全漏洞可注入点,从而得知受测web应用中存在的SQL注入安全漏洞问题。本发明所述方法通过对渗透测试过程提供有序完备的测试用例输入、准确的安全漏洞判定准则,提高其测试准确度。
图1所定义的渗透测试框架其思路是通过对SQL注入建模,以模型表达的信息对渗透测试三大测试要素:攻击位置、攻击输入、安全漏洞准确定义进行指导,对应实现对最底端的测试活动在识别攻击位置、测试用例和判定安全漏洞存在三方面的支持。
为此,本发明应用新型SGM对SQL注入攻击进行建模,以定义的SGM-SQL(图2)模型去指导生成SQL注入安全漏洞的形式化定义、及创立了对其渗透测试用例的形式化表述体系,这两者分别为实际的渗透测试过程提供了准确判定受测web应用SQL注入漏洞存在性和如何有序完备地使用测试用例的指导信息。
而两者以形式化形式表达的规则式集合,通过图3所示的实例化生成实际的测试用例,使得测试用例和安全漏洞判定都在确定的规则指导下并具备理论基础。体现了图1所提出的测试框架的精神:以SGM-SQL注入模型及依据其产生的测试用例规则、安全漏洞判定准则对渗透测试进行支持,从而提高SQL注入安全漏洞渗透测试准确度。