模糊测试的简介

  1. 了解模糊测试、污点分析的相关内容
  2. 配置KLEE等生产环境。
  3. 分析模糊测试的优缺点

模糊测试

  1. 核心思想:模糊测试是一种软件漏洞自动挖掘技术,其核心思想是将一段数据输送给目标软件,并监控 / 判断程序行为特征,如崩溃、断言失败等,从而发现软件漏洞。
  2. 具体的工具:

在这里插入图片描述

  1. 研究方面的结合
  • 符号执行
  • 污点推断
  • 人工智能 + 启发式搜索
  • 执行调度优化
  1. 现状
  • 结合符号执行
  • 结合污点分析
  • 启发式搜索
    • 进化算法
    • 模拟退火
    • 蒙特卡洛算法等
  • 人工智能
  • 分布式与并行AFL的实现。
  1. 存在问题
  • 代码覆盖率问题 – 代码覆盖的深度不够,因为难以突破复杂的路径约束的测试用例。
  • 局部区域导向测试 – 难以测试大型的代码。对大型代码智能进行局部测试。
  • 速度慢,并行程度低。

AFL的配置与使用

  1. AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。其工作流程大致如下:

①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);

②选择一些输入文件,作为初始测试集加入输入队列(queue);

③将队列中的文件按一定的策略进行“突变”;

④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;

⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。

在这里插入图片描述

  1. AFL变异的方式

bitflip:按位翻转,1变为0,0变为1

arithmetic:整数加/减算术运算

interest:把一些特殊内容替换到原文件中

dictionary:把自动生成或用户提供的token替换/插入到原文件中

havoc:“大破坏”,是前面几种变异的组合

splice:“连接”,此阶段会将两个文件拼接起来得到一个新的文件

  1. AFL的安装和使用。

使用linux操作系统

  • git下载源码,解压使用make install指令安装
  • 创建test.c文件,写上代码
  • 执行下面的脚本
afl-gcc -g -o test test.c 
mkdir fuzz_in fuzz_out
echo '1+1' > fuzz_in/seed
echo core | sudo tee /proc/sys/kernel/core_pattern
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
afl-fuzz -i fuzz_in -o fuzz_out ./test

之后得到下面的运行流程。

  • 最后执行ctrl + c终止
    在这里插入图片描述

创建test.c文件,直接输出hello world,然后进行测试。得到下面的执行流程。在使用ctrl + c结束之后,可以得到fuzz_out文件夹。然后其中有相应的错误信息。包含下列文件夹。

crashes:导致目标接收致命signal而崩溃的独特测试用例queue:存放所有具有独特执行路径的测试用例。AFL输出文件:

crashes/README.txt:保存了目标执行这些crashes文件的命令行参数。

hangs:导致目标超时的独特测试用例。

fuzzer_stats:afl-fuzz的运行状态。

plot_data:用于afl-plot绘图。

由于没有什么错误信息。所以crashes和hangs文件夹都是空的。plot_data包含下面数据。见下图

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值