手机网站做静态路径,青岛专业公司网站设计,莆田网站建设哪家好,淘宝客网站一般用什么做的近年来#xff0c;随着信息技术的发展#xff0c;各种新型自动化测试技术如雨后春笋般出现。其中#xff0c;模糊测试#xff08;fuzz testing#xff09;技术开始受到行业关注#xff0c;它尤其适用于发现未知的、隐蔽性较强的底层缺陷。这里#xff0c;我们将结合AFL开…近年来随着信息技术的发展各种新型自动化测试技术如雨后春笋般出现。其中模糊测试fuzz testing技术开始受到行业关注它尤其适用于发现未知的、隐蔽性较强的底层缺陷。这里我们将结合AFL开源工具对模糊测试的基本概念和流程进行说明。
01 模糊测试的定义
模糊测试的核心思想是根据一定的规则自动或半自动生成的随机数据然后将产生的数据输入到程序中并监视程序是否有异常出现以发现可能的程序错误如内存泄漏、系统崩溃、未处理的异常等。
当一个模糊测试生成器开始启动并运行后它将自己寻找漏洞并不需要人工干预非常有助于发现传统测试方法或手动审计无法检测到的缺陷。
模糊测试包括几个基本的测试步骤确定被测系统-给定输入-生成测试用例-灌入用例进行测试-监控目标程序情况-输出崩溃日志。 图一模糊测试流程
02 测试用例生成算法
模糊测试用例的生成算法主要有两种
1基于变异根据已知数据样本通过变异的方法生成新的测试用例
例如对一个图片文件进行变异用户需要提供一个相应格式的图片文件变异生成器会基于该图片进行变异。著名的开源模糊测试工具AFL就是基于变异生成用例。
2基于生成根据已知的协议或接口规范建模并生成测试用例
某些程序可能对输入有严格的规则要求例如必须是SQL语句、或者给定的协议规范等。测试引擎需要在测试前预先学习对应的语法语义规则对其进行建模在此基础上才能变异出有效的测试用例。
03 测试工具介绍
当前已经有很多开源的模糊测试工具其中使用较为广泛的是AFLAmerican Fuzzy Lop由谷歌工程师迈克尔·扎里斯基Michal Zalewski开发该项目已经由Github托管。
在执行前需要对被测程序源码进行插桩
instrumentation以获知被测程序的运行信息。在执行过程中它通过记录输入样本的代码覆盖率从而调整输入样本以提高覆盖率增加发现漏洞的概率。其工作流程大致如下
1. 从源码编译程序时进行插桩以记录代码覆盖率
2. 选择一些输入文件作为初始测试集加入输入队列
3. 将队列中的文件按一定的策略进行“突变”
4. 如果经过变异文件更新了覆盖范围则将其保留添加到队列中;
5. 上述过程一直循环进行期间触发crash的文件会被记录下来。 图二AFL模糊测试的基本流程
AFL的优点是可以轻松部署配置相对简单测试效率相对较高。原生的AFL仅适配于C/C程序的测试不过目前已经衍生出很多分支用于适配其他语言的模糊测试如针对JAVA程序的Kelinci等。 04 用例变异方式
AFL是采用遗传算法基于变异生成的测试用例变异的主要类型有下面这几种
· Bit flip按位翻转1变为00变为1
· Arithmetic整数加/减算术运算
· Interest把一些特殊内容替换到原文件中
· Dictionary把自动生成或用户提供的token替换或插入到原文件中
· Havoc又称“大破坏”是前面几种变异的组合
· Splice又称“绞接”将两个文件拼接起来得到一个新文件
AFL需要一些初始输入数据也称种子文件作为模糊测试的起点这些输入可以是毫无意义的数据。AFL通过上述方式自动确定文件的格式和结构。当输入队列中的全部文件都完成变异测试则完成了一个Cycle周期如果用户不停止执行种子文件将会不断变异下去。 图三AFL监控台显示当前为Cycle 6, Splice 12阶段
扎里斯基曾经给出一个有趣的例子对djpeg一个Linux系统上的图像处理程序进行模糊测试在仅初始输入“hello”字符串的情况下最后凭空生成了大量jpeg的图像。
综上所述我们简要介绍了模糊测试的概念以及开源工具AFL的测试流程欢迎持续关注。 感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取