基于SGM模型视角下SQL注入攻击模型
2019-06-10侯鹏
侯 鹏
(贵州大学 科技学院,贵州 惠水 550600)
1 关于攻击直接目的SQL注入攻击树模型分类
根据现有相关文献资料,笔者对目前关于SQL注入攻击的研究进行总结,可分为Tautology(重言式攻击)、Union Queries(联合查询)、Piggybacked Queries(多命令语句攻击)、Malformed Queries(异常命令语句攻击)、Inference(推断攻击)、Altemate Encodings(攻击输入编码伪装)、Leveraging Stored Procedures(存储过程攻击)七大类[1]。
基于以上分类,本文对目前SQL注入攻击行为进行系统分析之后,按SQL注入攻击的直接目的,可分恶意运行命令、窃取系统信息、绕过认证三大类。其进行简化意义是使攻击树模型更加完善、精练、紧凑。在这基础上,一般攻击者与攻击者的目的对应比较详见表1。
我们把SQL注入攻击直接目的作为参考依据,再通过对SQL注入攻击方式进行系统了解,从而能够抽象地对攻击模型进行设计,详见图1所示。
表1 一般攻击者目的与攻击者直接目的的对应
从图1 SQL注入攻击模型可知对Web应用安全漏洞攻击建模,至少从攻击措施、目的与流程三个方面去构建模型。本文重点所论述的模型从攻击直接目的角度把SQL注入攻击分为三大类,分别是注入运行恶意命令、绕过论证与窃取系统信息。然后在模型中自下朝上分别描述实现此三类攻击目的方法。比如对于绕过认证攻击的目的,是通过重言式攻击或注入导常字符等方法来实现的。而窃取系统信息的攻击目的,是通过错误信息利用SQL注入攻击方法与盲注入来实现的[1]。
如图1 所示,本文所构建的攻击树模型把SQL注入攻击主要分成绕过认证、错误信息利用、盲注入、以及注入运行SQL命令与非SQL命令等几大类。与SQL所论述的SQL注入攻击类型所对应关系如表2.图1中所构建模型能够对目前各种类型的SQL注入攻击比较全面的描述,而且此模型的描述不仅仅是对目标系统的具体攻击步骤,或者是细致化攻击程序语句格式。此种描述方式,对于支持将具体样式与攻击输入代码符号进行分离非常有利,便于对原本没有序的SQL注入攻击输入集合,改变成有序的形式化符号。图1的模型是较为抽象的建模,有很强的稳定性。
图1 基于攻击直接目的的SQL注入攻击树模型
表2 一般SQL注入攻击分类与本文所提出的攻击树模型对应
从攻击目的构建SQL注入攻击树模型,是为指导形成优化渗透测试用例打基础。图1模型重点对SQL注入攻击输入规律进行详细描述,所以可依据其生成有规律的SQL用例输入,不过它对于SQL漏洞反应规律与注入攻击位置规律还没有作具体描述。在图1 中对SQL注入攻击模型中在漏洞反应与攻击位置方面信息进一步完善会导致攻击树模型有太多无用分支,并且会使描述得不到统一。原因是因为攻击树模型的特点及其概念的不足,而使得分节点没有能力阻止产生无用和重复的分支,这就给实际SQL攻击录入有关规则的划分带来非常不利的因素。同时还有攻击树模型自身的一些不足,比如节点既可以表示攻击者发动攻击行为,又可以代表攻击者进行攻击最后结果,这样行为与结果不分,极易产生混乱的现象[2]。
2 SGM建模
.SGM是安全目的模型英文单词第一个字母的集合,英文名全称为Security Goal Model,是新模型方法。重点对攻击、漏洞的特点等方面进行描述,其最明显的特征就是表现能力强[3]。安全目的模型能够与4类模型工具一样应用,还能与别的建模工具进行转换。SGM建模规则如表3。
表3SGM建模规则表
在SGM中,根节点表示可通过各子目的元素实现而达到总目的。一个SGM中,仅有一个根节点。Subgoal(子目的)表示一个有助于实现或不利于实现模型总目的中的局部目的,一个SGM能够包括N个子目的。模型中的操作符包括OR表示“或”,与AND表示“和”两种子目的之间可实现关系。SGM的dependence edge(依赖边)表示子目的之间OR或AND的相互关系非常密切(相互依存)。一条依赖边(从A指向B)是指根节点,该节点的功能是对该模型所描述的总目的实现,子目的A和B应该依次实现。SGM还应具有对子目的之间的信息交流能力进行描述。可以通过information edge(信息边)对子目的之间传递信息情况进行描述[24]。通过information port(信息节点)对子目的内部向外发送接收信息的接口状况进行表述。在SGM中信息边并不是一定需要的,比如当SGM在对安全漏洞规律等方面进行描述时,信息边就可当作不存在。
3 SGM建模与攻击树比较的优势
与攻击树相比较而言,安全目的模型主要优势表现在:表达能力较强,但规模不大;表达简洁,但并不繁冗[5]。比如以篡改软件攻击建模作为案例进行分析,倘若采取攻击树作为建模工具,那么得到相应的攻击树详见图2。采用安全目的模型建模就能够描述成图3。
从图2 与图3相比较可知,安全目的模型的优势是可以实现模型相关节点共享,不会像攻击树模型那样要重复列出相同的节点步骤。所以模型就会更加简单化,除此之外,安全目的模型具有更强表述能力。该模型中能够体现更多的相关信息,而且还有非常好的表述性。
本文分析了从安全目的模型构建SQL注入攻击模型如图4,模型从攻击直接目的的方面对SQL注入攻击规律进行表述。
图2 篡改软件攻击的攻击树模型
图3 篡改软件攻击的安全目的模型图
图4 SQL注入攻击安全目的模型图
安全行为是以SGM描述角度为目的,是基于前文分析的攻击者直接攻击目的对SQL注入攻击进行建模图。图4中模型根节点是对SQL注入攻击的总目的实现,从下到上进行表述,依据攻击最直接的目的,把攻击分成注入运行恶意命令、绕过论证与窃取系统信息。模型向上分别对该三类子目的攻击进行表述,比如注入条件式或注入执行命令的子目的,注入运行SQL命令需要查找Web应用注入点。
图5 SQL注入攻击中“窃取系统信息”安全目的模型
在图4 对SQL注入规律总的描述基础上,对图4 中“窃取系统信息”子目的具体化做进一步展开描述构模如图5。在图1 攻击树模型中,盲注入与错误信息二类攻击形式均属于窃取系统信息攻击,从安全目的模型描述,把窃取系统信息建模分为图5两个子模型:即(A)盲目注入攻击子目的模型,(B)错误信息使用攻击子目的模型。在使用此模型过程中,此模型上端对为实现此攻击目标进行录入描述;注入不可执行命令子目的或者是异常字符。该模型中间白色方框部分是对Web应用存在SQL注入漏洞时对攻击输入的漏洞反应进行描述:Web在该模型中的运用,就是使有价值错误信息及时传送回来;黑框就是代表Web应用防患策略,对SQL 注入攻击的防御措施,给实施成功的攻击带来不便,因此通过反作用节点进行表述。而在盲注入子模型中,实现此种攻击目的需要攻击录入,通过模型上端进行表述。注入时间推断命令或者注入不等式且注入恒等式,分别实现模型中间部分白框的表述Web应用对两个等式不同(即恒等式与不等式),以及能够体现时间变动的子目的。它们分别对应的是完成的SQL注入条件预测攻击与时间推测攻击所表现的特点。同模的黑色方框表示Web应用防御策略,即防御策略对SQL注入与盲注入攻击子目的不容易成功[4]。
依照同样的方法,对图4 中“注入运行恶意命令”按照预先设定的流程进行建模处理,以描述该子目的细节。结合图6 中所提供相关信息,对该子目的进一步划分为(A)、(B)两个模型。将注入攻击模式分别于模型上端进行如下描述:当恒等式或者可执行命令被注入后,模型白色方框提示注入成功。同样的,存储过程攻击子模型也同样将攻击输入描述与子模型上端,并将攻击成功的所有特征通过白色方框加以描述。而在防御措施的描述方面,这两个模型均采用中间黑色方框为代表。
图6 SQL注入攻击中的“注入运行恶意命令”安全目的模型
把图4 中“绕过论证”攻击子目的再详细描述如图7。此模型上端是注入干扰异常字符或者注入恒等式(对攻击输入进行了具体描述),中间白方框为成功的攻击特点——经过Web运用的认证机制,模型中间的黑框为Web运用防御策略。
图7 SQL注入攻击中的“绕过认证”安全目的模型
下面从图4 至图7 中的各子模型中寻找Web运用注入点子目的作更进一步的建立模型。
本文主要是对SQL注入用例的优化方面问题进行分析,所以把两大输入点当作被测试的对象,该两大输入点分别是Web运用中登陆认证表单与所含的参数,并以此为立足点,寻找使用注入点子目的构建模型如图8。
图8 SQL注入攻击中“查找Web应用注入点” 安全目的模型
在图5至图8中的模型是对图4具体展开的描述。把图4模型中所对应的子目的展开为数个子模型,另 一方面在该模型中还对SQL注入攻击漏洞反应规律与位置信息等方面进行具体描述。这样就详细反应了SGM的优势。可以对模型上的节点能够做进一步分层描述,同时还能对其所支持的反应做了诠释。图4至图6中各模型中自上而下每条不带有反作用目的节点的路径表示一类攻击子目的过程。对攻击输入通过上端进行描述,Web对攻击输入漏洞反应是通过中部子目的节点进行描述。模型中的反作用节点是代表攻击遭受Web运用防御拦截所导至失败攻击路径。
立足于表3中的攻击树模型,对SGM进一步建立了新的SQL注入攻击模型,较之与普通的攻击树建模,本文建立新的SQL注入攻击模型,其优势主要表现在以下几方面:
(1)主张子目的展开分层论述。该项特点具有多方面优点,一方面能够使模型根据现实情况对攻击规律进行描述;另一方面能够对攻击规律细节进行具体化展开,详见图5至图8。
(2)使模型表述上的冗余减少,而且还非常有利于使描述信息上的一致性得到保障。如图4中的安全目的模型构建,就不必把相同内容在各分支上反复出现,也使模型上分支重复减少。
(3)安全目的模型对SQL注入攻击漏洞具体表述进行支持,依据其能够形成较为准确的SQL注入输出,有利于健全对SQL注入用例建模信息,当前相关研究提出的攻击树并没有考虑到较为明确表述攻击效果,SQL注入漏洞反应特点方面信息描述,所以难以充分指导生成包含预期输出信息的SQL注入用例集合[5]。
(4)安全目的模型的SQL注入攻击模型可以通过对子目的节点展开表述,表达SQL注入攻击输入之间分类信息。