前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用 AFL 玩超级玛丽:通过Fuzzing探索程序空间状态以发现更多执行路径

用 AFL 玩超级玛丽:通过Fuzzing探索程序空间状态以发现更多执行路径

作者头像
泉哥
发布于 2020-03-06 01:18:23
发布于 2020-03-06 01:18:23
1.1K0
举报
文章被收录于专栏:漏洞战争漏洞战争

今年S&P顶会上有一篇研究论文"IJON: Exploring Deep State Spaces via Fuzzing",他们通过改造AFL来探测程序的空间状态,以发现更多程序行为,并拿游戏"超级玛丽"来作演示:

当前最流行的Fuzzing技术就是基于覆盖率的方法,Edge Coverage应该是当前最有效的覆盖率统计方法,比BasicBlock方式多记录调用边界,而afl对覆盖率的探测很多是暴力猜解的,一些afl家族工具也对其进行扩展,比如切割多字节指令为单字节作数据比较,提取cmp指令的一些常量操作值作变异。但是,这种方法对于一些特定的代码结构,若不去探测程序状态空间的中间点,就很难触发新的覆盖路径。

何为程序状态空间?

状态空间代表程序所有可能状态的集合,状态代表内存和寄存器的一种配置,以及系统提供的状态(比如文件描述符、类似原语)。状态空间比代码覆盖统计空间更大,若改造AFL就需要实现对状态空间的支持,以优化测试用例达到状态的多样性。

论文主要贡献
  1. 分析当前主流Fuzzer的反馈机制,并实现如何用它们表示状态空间;
  2. 扩展当前主流的覆盖反馈Fuzzer的能力,允许分析人员通过程序状态空间解决当前业界方法无法解决的路径约束问题;
  3. 展示了可信平台模块(TPM)、复杂格式解析器、超级马里奥游戏、迷宫和散列映射实现的软件仿真器的状态空间,演示其是如何被Fuzzer有效探索到的。顺便,解决掉一些CGC挑战集合中的难题(CGC专门为机器人自动打CTF而设计的题目,与真实软件场景还是有差异的),也发现了一些真实软件的漏洞(其实就是一个偏门的dmg2img工具而已)。
主要设计原理

作者设计了一套源码注释原语,其实就是给源码加个一两行补丁代码,用来干预Fuzzer的反馈功能。在可交互的Fuzzing会话中,分析人员可以人工介入去分析一直无法触达的执行路径,然后为其增加补丁代码解决路径探索障碍的问题。

afl-gcc或afl-clang本身就是对gcc/clang编译器的封装,添加一些编译选项,以及代码插桩的功能,作者为其编写了个链接库,以实现前面所说的注释原语,包括一些自定义函数和宏等,通过它能够访问AFL用于存储覆盖信息的位图(其实是个哈希表),直接添加和设置条目上去,将状态值直接反馈给Fuzzer。同时,也允许相同的edge coverage存储到不同的覆盖位图中,因为不同的状态值可能触发的是同一处edge coverage,这代表它能够实现更细粒度的反馈,为此它还提供扩展用于存储覆盖位置的共享内存区域。对于状态空间爆炸的问题,也会提供"爬山算法”(hill-climbing)作出优化选择。

作者对超级玛丽作了修改,使所有的键盘命令都可以从标准输入中读取,并且马里奥只能不停地向右跑,只要停下来就死掉,这个设计主要是为节省时间。

作者还用改造后的Ijon与AFL作对比,运行12小时的AFL看其能打到哪一关,而使用注释原语的Ijon只几分钟就通过了大部分的关卡,有些确实过不了。下图是超级玛丽打喷火怪兽那关,线条是Fuzzer发现的所有执行路径,对比还是比较明显的,AFL暴力探测的密集度比较明显,更关键还是没通关,至少从作者统计图上看是如此的。

论文链接:https://www.syssec.ruhr-uni-bochum.de/media/emma/veroeffentlichungen/2020/02/27/IJON-Oakland20.pdf

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏洞战争 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
初识 Fuzzing 工具 WinAFL
本文前两节将简要讨论 fuzzing 的基本理念以及 WinAFL 中所用到的插桩框架 DynamoRIO ,而后我们从源码和工具使用角度带你了解这个适用于 Windows 平台的 fuzzing 利
Seebug漏洞平台
2018/03/30
2K0
afl-fuzz技术白皮书[通俗易懂]
AFL-fuzzer用一个全局的map用来存储之前执行时看到的tupes。这些数据可以被用来对不同的trace进行快速对比,从而可以计算出是否新执行了一个dword指令/一个qword-wide指令/一个简单的循环。 当一个变异的输入产生了一个包含新路径(tuple)的执行trace时,对应的输入文件就被保存,然后被用在新的fuzzing过程中。对于那些没有产生新路径的输入,就算他们的instrumentation输出模式是不同的,也会被抛弃掉。 这种算法考虑了一个非常细粒度的、长期的对程序状态的探索,同时它还不必执行复杂的计算,不必对整个复杂的执行流进行对比,也避免了路径爆炸的影响。为了说明这个算法是怎么工作的,考虑下面的两个trace,第二个trace出现了新的tuples(CA, AE)
全栈程序员站长
2022/11/01
1.1K0
Winafl中基于插桩的覆盖率反馈原理
最近winafl增加支持对Intel PT的支持的,但是只支持x64,且覆盖率计算不全,比如条件跳转等,所以它现在还是不如直接用插桩去hook的方式来得准确完整,这里主要想分析也是基于 DynamoRIO插桩的覆盖率反馈原理。
泉哥
2019/07/18
2K0
Winafl中基于插桩的覆盖率反馈原理
精读:REDQUEEN: Fuzzing with Input-to-State Correspondence
近年来,基于模糊的抽象自动化软件测试经历了一次复兴,特别是反馈驱动模糊以其在有限输入语料库下高效地进行随机测试的能力而闻名(such afl)。尽管取得了许多进展,但有两个常见的问题是 magic numbers 和 checksums,这些问题通常使用 taint tracking 和symbolic execution 等计算开销较大的方法来克服这些障碍。不幸的是,这样的方法通常需要访问源代码、对环境的需求较高(例如,库调用或底层操作系统的行为)或平台指令集的确切语义。
p4nda
2023/01/03
1K0
精读:REDQUEEN: Fuzzing with Input-to-State Correspondence
[当人工智能遇上安全] 2.清华张超老师 GreyOne和Fuzzing漏洞挖掘各阶段进展总结学习
Discover Vulnerabilities with Flow Sensitive Fuzzing
Eastmount
2021/12/03
3.2K0
[当人工智能遇上安全] 2.清华张超老师 GreyOne和Fuzzing漏洞挖掘各阶段进展总结学习
使用AFL++-QEMU和libprotobuf进行高级二进制模糊测试——语法感知+内存持久模糊测试的实例
QEMU是AFL++支持的后端之一,用于Binary-only的模糊测试,这是通过patch QEMU来执行原始二进制文件,以收集覆盖率信息。
用户1423082
2024/12/31
1940
使用AFL++-QEMU和libprotobuf进行高级二进制模糊测试——语法感知+内存持久模糊测试的实例
关于审计技术和工具 101事
人们也可以把这些看作是手动/半自动/完全自动,其中半自动和完全自动的区别是需要用户定义属性的工具和除了分流结果外(几乎)不需要用户配置的工具之间的区别。完全自动化的工具往往是直接使用的,而半自动化的工具则需要一些人工协助,因此资源成本较高。
Tiny熊
2023/01/09
1K0
构建安全可靠的系统:第十一章到第十五章
一旦您分析并设计了您的系统,就该是实现计划的时候了。在某些情况下,实现可能意味着购买现成的解决方案。第十一章提供了谷歌在决定构建定制软件解决方案时的思考过程的一个例子。
ApacheCN_飞龙
2024/01/11
3060
构建安全可靠的系统:第十一章到第十五章
机器人相关学术速递[10.19]
【1】 Discovering and Achieving Goals via World Models 标题:通过世界模型发现和实现目标 链接:https://arxiv.org/abs/2110.09514
公众号-arXiv每日学术速递
2021/10/21
8170
Python 强化学习实用指南:11~14
在最后三章中,我们学习了各种深度强化学习算法,例如深度 Q 网络(DQN),深度循环 Q 网络(DRQN)和异步优势演员评论家(A3C)网络。 在所有算法中,我们的目标是找到正确的策略,以便我们能够最大化回报。 我们使用 Q 函数来找到最佳策略,因为 Q 函数告诉我们哪个动作是在某种状态下执行的最佳动作。 您认为我们不使用 Q 函数就能直接找到最优策略吗? 是。 我们可以。 在策略梯度方法中,我们无需使用 Q 函数就可以找到最优策略。
ApacheCN_飞龙
2023/04/23
6460
【翻译】NIST IR 8151: 显著减少软件漏洞——致美国白宫科技政策办公室
Paul E. Black,Lee Badger,Barbara Guttman 和 Elizabeth Fong 著
安全乐观主义
2019/11/20
1.2K0
机器学习学术速递[11.15]
【1】 STFL: A Temporal-Spatial Federated Learning Framework for Graph Neural Networks 标题:STFL:一种图神经网络的时空联合学习框架 链接:https://arxiv.org/abs/2111.06750
公众号-arXiv每日学术速递
2021/11/17
1.5K0
机器学习学术速递[6.21]
【1】 Self-supervised Incremental Deep Graph Learning for Ethereum Phishing Scam Detection 标题:自监督增量式深度图学习在以太网络钓鱼检测中的应用
公众号-arXiv每日学术速递
2021/07/02
1.6K0
机器学习学术速递[12.7]
【1】 Distance and Hop-wise Structures Encoding Enhanced Graph Attention Networks 标题:增强型图注意网络的距离和跳数结构编码 链接:https://arxiv.org/abs/2112.02868
公众号-arXiv每日学术速递
2021/12/09
1.2K0
机器学习学术速递[11.10]
【1】 Unsupervised Learning for Identifying High Eigenvector Centrality Nodes: A Graph Neural Network Approach 标题:识别高特征向量中心度节点的无监督学习:一种图神经网络方法 链接:https://arxiv.org/abs/2111.05264
公众号-arXiv每日学术速递
2021/11/17
1.7K0
机器学习学术速递[10.19]
【1】 Beltrami Flow and Neural Diffusion on Graphs 标题:图上的Beltrami流与神经扩散 链接:https://arxiv.org/abs/2110.09443
公众号-arXiv每日学术速递
2021/10/21
2K0
机器学习学术速递[12.17]
【1】 Progressive Graph Convolution Network for EEG Emotion Recognition 标题:渐进图卷积网络在脑电情感识别中的应用 链接:https://arxiv.org/abs/2112.09069
公众号-arXiv每日学术速递
2021/12/17
1.8K0
机器学习学术速递[9.10]
【1】 fGOT: Graph Distances based on Filters and Optimal Transport 标题:fGOT:基于滤波器和最优传输的图距离 链接:https://arxiv.org/abs/2109.04442
公众号-arXiv每日学术速递
2021/09/16
1.8K0
机器学习学术速递[6.22]
【1】 Boundary Graph Neural Networks for 3D Simulations 标题:用于三维仿真的边界图神经网络
公众号-arXiv每日学术速递
2021/07/02
1.4K0
计算机视觉与模式识别学术速递[12.20]
【1】 Efficient Visual Tracking with Exemplar Transformers 标题:利用样本变换器实现高效的视觉跟踪 链接:https://arxiv.org/abs/2112.09686
公众号-arXiv每日学术速递
2021/12/24
1.5K0
相关推荐
初识 Fuzzing 工具 WinAFL
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文