软件源代码安全缺陷检测技术研究进展综述
作者:网络转载 发布时间:[ 2013/6/26 11:29:48 ] 推荐标签:
4、软件故障注入
4.1 软件故障注入方法概述
软件故障注入是在机器指令可以访问到的范围内,用软件方法通过修改软件或硬件的状态变量或数据来模拟故障的产生,加速系统的失效。软件故障注入不需要增加昂贵的附加硬件,不会损坏目标系统的硬件环境,容易回收数据,且能够方便地跟踪目标程序的执行,既能注入软件故障也能注入硬件故障,而且还能把故障注入于操作系统之中。与其他故障注入方法相比,软件故障注入有实现简单、灵活、工作量小、评测范围大、不损害原系统等特点,有广泛的应用前景。根据注入方式,软件故障注入可分为动态注入和静态注入。动态注入是在程序运行期间,在特定的状态或条件下,通过某种触发机制,触发故障注入,使程序将要执行的指令和数据等发生变化。常用的触发机制有定时引发和异常/陷阱触发。这种方式的优点在于:
① 注入故障前被测系统不被改变,因此它能逼真地模拟被测系统的运行。
② 该种方式是根据被测系统的运行状态或条件注入故障的,所以它具有灵活性。
动态注入的缺点:
① 需要一个监控程序来监控目标系统的状态,以决定是否进行故障注入,
② 需要监测目标系统的关键状态信息,因此该监控程序的优先级不能太低,所以可能会抢占系统其他任务的运行和占用目标系统很大的资源开销,以致影响系统正常运行。
静态注入指的是在目标程序的内存映象被加载和执行前,通过程序插桩方式改变被验代码,通过按预设策略的插桩代码变异将故障注入到目标程序中。故障注入产生了一个错误的软件内存映象,当系统执行这个错误的映象时,故障即被激活。静态注入适合于注入性故障[7]。这种方式的优点在于:静态注入占用很少的系统资源,也不需要监控程序,能够较好的保持系统原来的时序,因此静态注入法有好的优化性,同时具有优势的特点在于其平台无关性,即仅针对代码本身进行,无需考虑代码所需的运行平台,基于Win平台的注入工具可实现针对Unix C的应用代码进行故障注入和缺陷验证。基于以上的分析,我们确定采用了静态方式。以下将对基于静态注入方法的缓冲区溢出验证算法进行详述。
4.2 程序变异
软件静态故障注入技术是以程序变异技术为基础的。它根据软件故障类型及分布通过改变程序源代码对软件故障进行仿真。程序变异方法主要用来评价测试用例集的充分性以及对软件中潜伏故障的预测。程序变异技术并不直接针对软件故障测试,其主要作用是:衡量测试用例集的完整性;帮助产生新的测试用例;帮助测试者在随机产生的测试用例集中选择合适的测试用例;为行为分析、风险分析、可靠性分析提供数据等。变异测试会生成大量的变异程序,根据变异程度的不同,可以分为强变异和弱变异,一般认为,弱变异比强变异付出的代价低,而两者的效率相差不多。
断言违背(assertion violation)是一种基于程序变异的软件静态故障注入方法。其基本思想是在程序的源代码中插入故障代码,修改函数或过程的前提条件或后继条件,迫使软件出现故障,改变程序执行的控制流,使程序执行意外处理或故障恢复代码。前提条件是对关于系统状态的断言,这种状态的正确性是使被调用的函数正确执行的条件。而一个后续条件则是对函数的输入、输出状态之间的关系进行正确描述的断言。以上这两个条件在程序文本中通常是隐含的假设条件。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11