一种基于模型驱动的安全测试方法

文档序号:6483390阅读:375来源:国知局
专利名称:一种基于模型驱动的安全测试方法
技术领域
本发明属于软件安全技术领域,涉及一种软件安全测试方法。
背景技术
随着互联网的迅速发展和软件功能的不断强大,软件安全面临的问题越来越大。一 个关键的问题是如何在软件发布之前发现尽可能多的安全缺陷以便更正或缓和漏洞。为 了满足软件对安全性和可靠性越来越高的需求,微软提出了可信计算的理念,并通过对 传统软件开发生命周期的各个阶段增加一系列的针对安全的改进,提出了安全开发生命 周期这一概念,形成了遵照这一软件开发流程的安全软件工程。这种流程旨在尽量减少 设计、编码和文档编写过程中出现的漏洞,并在开发生命周期中尽可能早地检测到并消 除这些漏洞。对于被用来处理来自Internet的输入、控制可能被攻击的关键系统和处 理个人身份信息的软件,最需要实施这种流程。
安全软件工程针对软件开发的各个生命周期分别采取了相应的安全措施。从分析、 设计到编码、测试以及后期的维护工作,安全软件工程都增加了相应阶段的安全控制或 威胁抵抗机制。

发明内容
本发明的目的是通过分析软件在测试阶段的代码运行状况,明确当中可能出现的安 全隐患,从而在软件开发的最后阶段找到系统中仍可能存在的问题,避免有问题的软件 的发布,有效提高软件的安全性。
为此本发明采用如下的技术方案
一种基于模型驱动的安全测试方法,包括下列步骤 第一步制作顺序第二步通过遍历顺序图里表达的所有消息传递序列,得到攻击路径的总和; 第三步分析源码文件,假如遇到一个方法定义,就将探査函数执行的语句插入在 所要执行函数的定义的第一声明之前;假如遇到一个方法调用,就将探査方法调用的语 句插入在方法调用的调用语句之前,从而为取得程序运行时可能要执行的路径做准备; 第四步通过生成随机数据的方式,作为已植入代码的程序运行时的数据提供者, 运行程序,将程序运行所产生的各个执行路径与各个攻击路径相匹配,获得各个执行路 径的适应值,对适应值在(0.85、)区间的随机数据通过遗传算法得到新的测试数据,然 后再次检验他们的适应值,再次选取适应值在(O. 85 1)区间的数据并再次使用遗传算法,以此方式逼近攻击路径,若找到匹配的攻击路径或运行到设定的次数,则程序终止; 第五步分析软件系统中可能存在的漏洞。
本发明通过构造UML顺序图和对这个图进行分析,能够找到系统中可能存在的攻击 路径,从而为后面的测试工作提供了一个基础。这些攻击路径也可以对程序编写人员有 一定的启迪,可以避免程序中出现这些问题,从而提高软件的质量。而代码植入部分的 自动完成,也大大减少了人工的干预,从而保证程序能够客观的进行,不会由于人为的 失误而出现错误。而测试数据也是自动生成的,并且通过使用遗传算法,使数据的质量 达到了一个比较高的水平,从而保证了最后我们得出的测试结果是正确的。并且,这种 数据驱动测试的方式,不需要人工来选取测试数据,从而保证了程序的客观正确性。最 后,对已经得到的攻击路径和执行路径进行匹配,发现系统中存在的漏洞,也就是攻击 路径和执行路径是可以匹配成功的,说明了系统在设计上是存在问题的,有利于程序员 作出修改,从而使系统的安全性得到提升。
通过以上四个部分的工作,可以有效的检测系统中是否出现漏洞,在软件开发过程 中明确可能存在的问题,有助于及早发现和解决。有利于降低开发成本,提高软件的可 信度和开发效率。同时这又是一个可以基本自动完成不需要人工干预的测试流程,没有 给软件测试人员增加工作量。同时它也给安全测试人员提供了一个新颖的测试思路。


图l本发明的测试方法的整体流程图; 图2获得攻击路径过程流程图; 图3代码自动植入过程流程图; 图4新的测试数据生成过程流程图; 图5匹配过程流程图; 图6示意顺序图。
具体实施例方式
模型驱动测试已提出了很长时间,它所提倡的正是消除设计缺陷,本发明则正是是 基于此种测试模式研究了一种安全测试方法,能在测试阶段很好的检测软件设计缺陷。 本发明利用安全测试工具从已存在的XML文档中提取相应的威胁信息、攻击路径信息。 接着根据这些信息建立相应的测试场景,生成相应的测试数据,这一过程即基于顺序图 的攻击路径的生成。首先根据某一攻击模式(威胁树)产生具体威胁的顺序图模型,该 顺序图用来描述某个威胁要成功所需要的经过,然后通过一定的覆盖标准遍历顺序图, 从而得到具体威胁的路径。威胁就是一些攻击者可能会破坏系统的行为,UML顺序图就用 来描述一些交互信息。 一个威胁场景用一个消息交换的序列来表示, 一个消息序列就是 顺序图中从第一个消息到最后一个消息的一条路径。因为顺序图中可能存在判断或者循环,我们可以遍历这个顺序图,得到所有消息的顺序。接下来是要提取程序运行时所真 正执行到的威胁。这个威胁的保存方式也是用一个消息序列的方式来保存的,即XML这 种格式来保存。我们是借助于在程序中植入代码来实现获取执行时的威胁的。最后一步 的工作,我们用到了模型驱动测试的方法。首先将程序执行时的执行路径进行粗略选取, 然后通过和我们事先得到的攻击路径进行匹配,得到一些符合条件的执行路径,再用遗 传算法进行杂交,生成子类的执行路径,继续和攻击路径进行匹配,通过这样一个过程, 来最后监测软件中存在的安全隐患。
本发明的重点在于用顺序图来表示一个具体的攻击,然后遍历UML顺序图找到攻击 路径。接着在目标程序中植入代码,并运行得到执行路径。最后,对攻击路径和执行路 径进行匹配,得出软件中是否存在威胁的结论,并告知用户。
具体来说,包括以下三个方面
1. 构建攻击模型攻击模型是表示的是系统中可能存在的漏洞。通过它, 可 以发现系统中存在的所有可能的漏洞,即攻击路径。但它只是从理论上得到的结果,并 不表示系统在执行过程中, 一定会出现这个漏洞。
2. 构造实现模型实现模型的构造是通过对程序植入代码并多次运行程序而得到 的。实现模型可以真实的运行程序,并发现系统中存在的漏洞,即执行路径,从而为下 一步的路径匹配模块提供了对比的依据。
3. 路径匹配模块用数据驱动的方式,将得到的攻击路径和执行路径进行匹配,看 看之前得到的攻击路径在程序的执行过程中真的能够发生,如果是的话,证明程序中确 实存在这种漏洞。如果没有执行到的话,说明程序是没有问题的。其中的数据驱动是完 全不需要人工干预的测试方式,能够将测试人员从大量繁重的提供数据的重复劳动中解 放出来。
针对上述目标,本发明提出的方法大致分为五个部分,即制作顺序图,读取UML顺 序图、获取攻击路径、植入代码、生成测试数据并返回结果。首先,要完成读取UML顺 序图部分,这个UML顺序图是用XML文档形式保存的。它的对象间存在消息传递,这个 消息传递的信息是需要重点处理的。通过消息传递的过程进行分析,査找软件中可能存 在的攻击路径,并把这个攻击路径用消息序列的形式表示出来。在找到所有的攻击路径 之后,将攻击路径的信息呈现给用户。其主体过程的流程如附图l所示。
1. 制作顺序图首先我们要通过对程序的系统分析,得到其中可能存在的漏洞,并 且将它们用顺序图的形式表示出来。这个顺序图要作为我们下一步寻找攻击路径的一个 输入。
2. 读取UML顺序图部分要求用户输入UML顺序图。具体的讲就是将软件设计人员 绘制的顺序图作为整个过程的起点和输入。通常顺序图会以^uml的格式存取,但由 于.uml格式可以无信息损失的转换为.xml格式,所以这一部分的主要内容就是读入包含 有顺序图信息的.xml文件。这个部分的工作用到的主要工具是ArgoUML。3. 获取攻击路径部分这部分负责提取XML顺序图中的消息传递序列,也就是攻击 路径。在顺序图中,对象间的联系就是靠消息的传递,这个消息传递也是有时间先后顺 序的。他们可以表示消息的走向,同时也是一个攻击路径可能的过程。所以,我们要通 过遍历所有的消息来得到攻击路径的总和,并将这个结果作为下一步工作的对象。具体 获得攻击路径的过程如附图2所示。获取攻击路径的算法如下所示遍历由UML顺序图 转换成的XML文件中的SDG,获取攻击路径的算法
遍历SDG获取攻击路径的算法
输入存储SDG的XML文档
输出存储攻击路径(ThrScn)的XML文档
算法描述 '
1) 在SDG中取出所有节点的信息存放在列表中,并得到初始节点;
2) 建立一条只包含首节点的攻击路径,并存放到存储所有路径的列表中;
3) 设置flag=0; 〃利用flag来标识一次遍历循环中所有攻击的路径有没发生变化,
假如没变化说明遍历可以结束,初始值赋为0;
4) 将路径列表里的总数赋值给ScnNum,并建立一个空的用来存储攻击路径的临时 列表;
5) 取出路径列表中的一条路径,并得到该路径最后一个节点的信息,ScnNum减l, 然后判断该节点是否为NULL,假如为NULL则跳到第11步,否则执行第6步;
6) 读取节点列表的一个节点信息,并判断其是否为该路径最后一个节点的后继节 点,假如是则执行第7步,否则跳到第8步;
7) 将该节点插入到此路径的最后形成一个新的路径,并将新路径信息存储到临时的 攻击路径列表中,并赋值flag^,接着执行第9步;
8) 对不是该路径后继节点的数量进行统计;
9) 判断节点列表中的节点是否全部被提取比较过,假如是则执行第10步,否者返 回第6步;
10) 假如节点列表中的所有节点都不是该路径的后继节点,则给该路径加上一个NULL 节点,并执行第ll步,否则跳到第12步;
11) 将此路径添加至临时路径列表中;
12) 将临时路径列表赋值给路径列表,并判断,假如flag=l,则返回执行第3步, 否者执行第13步;
13) 将路径列表中的全部路径信息存储到XML文档中。
4. 植入代码部分这部分的主要任务是要取得程序运行时可能要执行的路径。其主
要的方式为分析源码文件,假如遇到一个方法定义,就将探査函数执行的语句插入在
所要执行函数的定义的第一声明之前;假如遇到一个方法调用,就将探查方法调用的语 句插入在方法调用的调用语句之前。这个过程的算法详细描述如下所示,其流程图如附图3所示。
植入代码算法描述
1)在Java源文件中扫描,直到文件的最后一行。在扫描过程中,当发现一个函数 m且m在Mlist(方法列表)中,贝lj:
a) 如果m是函数调用,则在Java源文件中此方法的的前一行插入pCodel (类型为 1的代码段);
b) 如果m是函数定义,则在Java源文件中此方法的的前一行插入pCode2 (类型为 2的代码段);
其中,方法列表是对源代码扫描得到的所有的方法的一个列表。pCodel和pCode2 则是对文件中类和方法的一些描述,借助这些信息,可以进行执行路径的查找。
5.生成测试数据并返回结果部分首先通过生成随机数据的方式,作为巳植入代码 运行时的数据提供者,运行程序并获得执行路径的适应值。将对适应值比较高(例如在 (0.85~1)范围内的数据通过遗传算法的杂交,变异等方式得到新的测试数据,然后再次检 验他们的适应值,再次选取适应值高的数据并再次使用遗传算法。最后,通过对攻击路 径和执行路径的匹配,来得到是否存在威胁的结论。测试数据生成过程及匹配过程如附 图4和5所示。
匹配算法描述如下
输入执行路径ExcutePath[O,…,m-1],攻击路径ThrScn[O,…,n-1] 输出ExcutePath和ThrScnt的相似度即适应值
1) 相似度similaritFO, firstNode-攻击路径的第一个节点,lengthOfPath:执行路 径的长度,lengthOfTh^攻击路径的长度;
2) 在执行路径中查找firstNode节点,返回位置并赋值给posOfFirst,假如不存在则 赋值lengthOfPath+l;
3) 判断posOfFirst是否等于lengthOfPath+l,假如不等则执行第4步,否则跳到第2 步;
4) 利用match变量来统计覆盖到节点的总数,match=0,用posOfPath来表示执行路径 中的位置,并赋值pos0fPatl^pos0fFirst;
5) 从攻击路径的posOfScn节点和执行路径的posOfPath节点开始,判断对应节点是否 一致
5. 1 假如一致,贝iJmatch+十,pos0fPath++, pos0fScn++,执行第5步; 5.2假如不一致,则执行第6步;
6) 判断match是否大于similarity,假如大于,则similarity二match;
7) 从执行路径的第++1)03(^卩1^{个节点开始查找廿^1,016节点的位置,并赋值给
posOfFirst,然后返回执行第3步;■s!' w 〃 a r 〃_y 返回适应值 ^ 的值。
下面以附图6中的顺序图为例,来说明本发明的应用。
第一个阶段是分析我们获得的顺序图。这个顺序图是我们对系统进行分析之后得到 的一个顺序图,它表示的是从用户内存溢出到这些数据被利用来攻击用户的一个过程,, 从这个图上我们可以得到以下的信息
对象的个数是3;
方法的数目是3; 得到一个具体的攻击路径,其顺序如下
A. Message () - 〉 B. Message () -〉C. Message (); 并且这个攻击的执行路径是唯一的。
第二个阶段就是要向这个顺序图所表示的程序中植入代码,来收集在程序运行过程
中数据。其程序的框架结构如下
public static void main() {
i"…)(
A. message ()
i"…){
B. message (); C. message ();
通过植入代码,我们可以得到形式如下的代码片段
public static void main(){
if(…){
String s = "a. message"; String si = ^testl"; A. message 0
String s = "b. message"; String si = "testl,,;B. message ();
String s = "c.message"; String si = "testl,,;
C. message ();
接下来的工作,就是生成测试数据。从程序的代码中分析可得,这个程序需要一个 输入。运用遗传算法的原理,首先生成随机的数据,然后对这个数据运行一次程序,得 到一个执行路径。接下来对数据进行杂交变异的操作,得到子类数据,并再次运行程序,
得到新的执行路径。总结得到的程序的执行路径有以下几个
I . C. message 0 ;
II. A. message () _> C. message ();
III. B. message () -> C. message ();
IV. A. message () —> B. message () _〉 C. message ();
最后的步骤,就是将程序运行时得到的执行路径,和从顺序图所得到的攻击路径进
行匹配。最后(IV)能成功的和攻击路径匹配。它恰好表示了一个缓存溢出攻击的过程
1. 首先是缓存发生溢出,
2. 然后是这些数据被其他人通过某种手段得到,
3. 最后通过分析这些缓存中的数据,得到用户的使用信息,并利用这些
数据来对用户进行攻击。 根据这些信息,用户能在代码成型之后,最后分析出系统中可能存在的漏洞,权衡利弊 得失,修改、完善其原有设计,得到高安全性能的软件开发方案。从而达到完善软件总 体结构,避免软件中漏洞泄露的目的。
权利要求
1.一种基于模型驱动的安全测试方法,包括下列步骤第一步制作顺序图;第二步通过遍历顺序图里表达的所有消息传递序列,得到攻击路径的总和;第三步分析源码文件,假如遇到一个方法定义,就将探查函数执行的语句插入在所要执行函数的定义的第一声明之前;假如遇到一个方法调用,就将探查方法调用的语句插入在方法调用的调用语句之前,从而为取得程序运行时可能要执行的路径做准备;第四步通过生成随机数据的方式,作为已植入代码的程序运行时的数据提供者,运行程序,将程序运行所产生的各个执行路径与各个攻击路径相匹配,获得各个执行路径的适应值,对适应值在(0.85~1)区间的随机数据通过遗传算法得到新的测试数据,然后再次检验他们的适应值,再次选取适应值在(0.85~1)区间的数据并再次使用遗传算法,以此方式逼近攻击路径,若找到匹配的攻击路径或运行到设定的次数,则程序终止;第五步分析软件系统中可能存在的漏洞。
全文摘要
本发明属于软件安全技术领域,涉及一种基于模型驱动的安全测试方法,包括下列步骤制作顺序图;通过遍历顺序图里表达的所有消息传递序列,得到攻击路径的总和;在程序中植入代码;生成随机数据的方式,运行植入代码后的程序,将程序运行所产生的各个执行路径与各个攻击路径相匹配,获得各个执行路径的适应值,对适应值在(0.85~1)区间的随机数据通过遗传算法得到新的测试数据,然后再次检验他们的适应值,再次选取适应值在(0.85~1)区间的数据并再次使用遗传算法,以此方式逼近攻击路径,若找到匹配的攻击路径或运行到设定的次数,则程序终止;分析软件系统中可能存在的漏洞。本发明有利于降低开发成本,提高软件的可信度和开发效率。
文档编号G06F21/00GK101551842SQ20091006873
公开日2009年10月7日 申请日期2009年5月5日 优先权日2009年5月5日
发明者丁刚刚, 冯志勇, 超 徐, 李晓红, 李衍法 申请人:天津大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1