首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >honggfuzz漏洞挖掘技术深究系列(3)——Fuzz策略

honggfuzz漏洞挖掘技术深究系列(3)——Fuzz策略

作者头像
泉哥
发布于 2019-07-18 09:48:58
发布于 2019-07-18 09:48:58
1.5K0
举报
文章被收录于专栏:漏洞战争漏洞战争

honggfuzz在对输入文件进行变异前,会先创建个临时文件名(honggfuzz+pid+time),然后将输入数据变异后写入临时文件。

fuzz策略的实现主要集中在mangle.c中,在循环的fuzzloop函数中,会根据用户的选择的fuzz方式来调用动态fuzz或者静态fuzz的方法,但最后都是调用mangle_mangleContent来变异文件数据:

跟进mangle_mangleContent函数:

重点就在于后半部分,它会随机选择变异函数进行处理,更改的字节数也是随机的,根据用户指定的mutation变异率来定,即允许变异文件大小的百分比,变异函数列表如下:

这些函数都是在mangle_init中初始化,各函数之间也会相互调用:

把这些函数过一遍就是honggfuzz中所有的文件变异规则了,如果想实现自己的fuzzer,这些规则来扣出来用Python实现一遍,顺便把afl的规则也扣过来就更完美了,下面是我之前写office fuzzer时的半成品代码,最后偷懒直接用radamas去实现变异了:

再回到刚才的变异函数列表,我们一个个走读源码。

1、mangle_Resize函数:

用空格填充随机位置

2、mangle_Byte函数:

向随机位置写随机的uint8类型的数据

3、mangle_Bit函数:

取随机位置的数值做位翻转

4、mangle_Bytes函数:

在随机位置覆盖写2~4字节数据

5、mangle_Magic函数:

取各种边界值进行覆写,这些边界值部分跟AFL还不一样,我在自己的fuzzer里面把它们作了整合。由于边幅所限,我省略了不少边界值:

6、mangle_IncByte函数:

取随机位置的数据加1

7、mangle_DecByte函数:

取随机位置的数据减1

8、mangle_NegByte函数:

取随机位置的数据取反

9、mangle_AddSub函数:

取随机位置的1、2、4或8字节的数据长度作加减操作,操作数取 rand(0~8192)-4096

10、mangle_Dictionary函数:

变异目录名,也是随机取文件夹名称进行变异,如果有多个目录,那被变异的目录数也是随机的

11、mangle_DictionaryInsert函数:

在目录的随机位置中插入随机数据

12、mangle_MemMove函数:

取随机位置的数据拷贝随机长度的数据,里面就是调用memmove函数实现的

13、mangle_MemSet函数:

取随机位置、随机大小,用UINT8_MAX数值填充

14、mangle_Random函数:

取随机位置、随机大小的缓冲区,用随机数填充

15、mangle_CloneByte函数:

取两处随机位置的作数据交换

16、mangle_Expand函数:

文件末尾扩展随机长度的空间,用空格填充,然后在随机位置,取前面的随机长度作数据拷贝

17、mangle_Shrink函数:

删除随机长度的文件内容

18、mangle_InsertRnd函数:

在文件的随机位置插入随机长度的数据

19、mangle_ASCIIVal函数:

在随机位置覆盖32字节的随机数

总结

在Fuzzing过程中,很多变异规则是共用的,可以参考一些主源的开源软件,比如afl\peach\honggfuzz\libfuzzer,提取规则作整合,然后写个自己的fuzzing框架,在后面作针对的fuzzer时,可以直接套用。

从上面的fuzz策略可以总结出常规的变异规则:

  • 随机数据替换
  • 数据值增减
  • 已知边界值替换
  • 插入随机数据
  • 删减文件内容
  • 目录变异
  • 数据拷贝覆盖
  • ……
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
honggfuzz漏洞挖掘技术深究系列(1)——反馈驱动(Feedback-Driven)
“ 反馈驱动:通过监控样本触发的代码覆盖率,进而改进输入样本以提高代码覆盖率,增加发现漏洞的概率。”
泉哥
2019/07/18
1.5K0
honggfuzz漏洞挖掘技术深究系列(1)——反馈驱动(Feedback-Driven)
从研究者的视角看Fuzzing技术发展30年
1988年,在威斯康星大学Barton Miller教授的计算机实验课上(http://pages.cs.wisc.edu/~bart/fuzz/CS736-Projects-f1988.pdf),首次提出Fuzz生成器(Fuzz Generator)的概念,用于测试Unix程序的健壮性,即用随机数据来测试程序直至崩溃。因此,Barton Miller教授也被多数人尊称为"模糊测试之父"。但是,当时更多是为了验证代码质量和程序的稳定性,而非专门用于挖掘安全漏洞,真正用于软件安全漏洞挖掘的开端要从下面两件事说起。
泉哥
2020/02/14
2.5K0
libfuzzer 文档
就是变异,覆盖率那些都给你做好了,你只需要定义LLVMFuzzerTestOneInput,将编译的数据喂给要fuzz的目标函数就行
用户1423082
2024/12/31
2250
漫谈漏洞挖掘
从笔者个人的感觉上来看,这三者尽管通常水乳交融、相互依赖,但难度是不尽相同的。本文就这三者分别谈谈自己的经验和想法。
evilpan
2023/02/12
5260
漫谈漏洞挖掘
honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer
对于一些复合文件格式,如果只是单纯的暴力Fuzzing,会导致生成很多无法被解析的文件,因此需要对文件变异作一些定制化的工作,比如docx、doc等office复合文件,docx是个压缩包,doc是个OLE格式,如果fuzz docx自然需要将其zip解压,再针对感兴趣的文件作变异,对于doc最好是作文件格式解析,只对感兴趣的stream作文件变异,这样的fuzzing的有效性才会更高。
泉哥
2019/07/18
1.1K0
honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer
安全测试中的模糊测试(Fuzzing)技术介绍
在软件安全测试领域,漏洞挖掘始终是防御体系建设的第一步。而在诸多漏洞发现技术中,模糊测试(Fuzzing)被誉为“黑盒测试中的利器”。它能够在不知道系统内部结构的情况下,通过大量随机或半随机输入刺激目标程序,捕获潜在的内存错误、边界溢出、空指针引用、崩溃、拒绝服务(DoS)等严重安全漏洞。
AI智享空间
2025/07/14
3090
安全测试中的模糊测试(Fuzzing)技术介绍
一系列用于Fuzzing学习的资源汇总
本文主要是向大家推荐一系列,用于fuzzing和Exploit开发初始阶段学习的资源合集,其中将包括相关的书籍,课程 - 免费或收费的,视频,工具,教程,以及一些供大家练习使用的靶机应用。(PS:文内所有链接点击“阅读原文”均可查看)
FB客服
2018/07/30
2.4K0
afl-fuzz技术白皮书[通俗易懂]
AFL-fuzzer用一个全局的map用来存储之前执行时看到的tupes。这些数据可以被用来对不同的trace进行快速对比,从而可以计算出是否新执行了一个dword指令/一个qword-wide指令/一个简单的循环。 当一个变异的输入产生了一个包含新路径(tuple)的执行trace时,对应的输入文件就被保存,然后被用在新的fuzzing过程中。对于那些没有产生新路径的输入,就算他们的instrumentation输出模式是不同的,也会被抛弃掉。 这种算法考虑了一个非常细粒度的、长期的对程序状态的探索,同时它还不必执行复杂的计算,不必对整个复杂的执行流进行对比,也避免了路径爆炸的影响。为了说明这个算法是怎么工作的,考虑下面的两个trace,第二个trace出现了新的tuples(CA, AE)
全栈程序员站长
2022/11/01
1.2K0
IOT漏洞研究:Web服务
路由器、防火墙、NAS和摄像头等由于功能复杂,为方便交互一般都会提供web管理服务,和服务器web相比,IOT的web功能较为简单,也就避免了一些复杂功能存在的漏洞,但是由于嵌入式设备的硬件瓶颈,设备自身的安全检测与防护能力有限,也就增加了其安全风险。 IoT Web服务 IOT web常采用开源框架+自研模块的方式,漏洞特点也较为明显: (一) 自研CGI模块中存在漏洞的概率较高,漏洞差异性大 (二) 开源框架(可能的)漏洞广泛存在各种设备,漏洞同源性强 虽然具体漏洞存在差异,但常见的大致分为几类。 2.
FB客服
2023/04/26
1.2K0
IOT漏洞研究:Web服务
针对二维码解析库的 Fuzzing 测试
在四月份的时候出了那么一个新闻,说微信有一个打开图片就崩溃的 bug,当时微信群里都在传播导致手机各种闪退。
evilpan
2023/10/17
5170
针对二维码解析库的 Fuzzing 测试
[当人工智能遇上安全] 2.清华张超老师 GreyOne和Fuzzing漏洞挖掘各阶段进展总结学习
Discover Vulnerabilities with Flow Sensitive Fuzzing
Eastmount
2021/12/03
3.3K0
[当人工智能遇上安全] 2.清华张超老师 GreyOne和Fuzzing漏洞挖掘各阶段进展总结学习
RustChinaConf 2022大会实录 - 腾讯安全实验室 陈鹏《从零开始实现Rust Fuzzer》
陈鹏:大家好,今天我给大家分享一下怎么从零开始实现Rust Fuzzer,又叫模糊测试工具。首先介绍一下我自己,我叫陈鹏,来自腾讯安全的安全大数据实验室,我们实验室主要以人工智能和大数据来解决安全问题为目标,在这个过程中我们也在尝试把Rust和安全与大数据这两个核心要素结合在一块,包括两个方面。
MikeLoveRust
2023/02/15
1K0
RustChinaConf 2022大会实录 - 腾讯安全实验室 陈鹏《从零开始实现Rust Fuzzer》
Winafl中基于插桩的覆盖率反馈原理
最近winafl增加支持对Intel PT的支持的,但是只支持x64,且覆盖率计算不全,比如条件跳转等,所以它现在还是不如直接用插桩去hook的方式来得准确完整,这里主要想分析也是基于 DynamoRIO插桩的覆盖率反馈原理。
泉哥
2019/07/18
2.1K0
Winafl中基于插桩的覆盖率反馈原理
精读:REDQUEEN: Fuzzing with Input-to-State Correspondence
近年来,基于模糊的抽象自动化软件测试经历了一次复兴,特别是反馈驱动模糊以其在有限输入语料库下高效地进行随机测试的能力而闻名(such afl)。尽管取得了许多进展,但有两个常见的问题是 magic numbers 和 checksums,这些问题通常使用 taint tracking 和symbolic execution 等计算开销较大的方法来克服这些障碍。不幸的是,这样的方法通常需要访问源代码、对环境的需求较高(例如,库调用或底层操作系统的行为)或平台指令集的确切语义。
p4nda
2023/01/03
1.1K0
精读:REDQUEEN: Fuzzing with Input-to-State Correspondence
HITB AMS 2021 议题分析与学习,感叹华人真多
最近也看到一些微博或公众号提到HITB会议的一些议题,就是分享链接,但还没人聊过里面的议题,今天我又批量下载议题pdf学习下。老规矩,聊聊一些自己感兴趣的话题。
泉哥
2021/07/05
1.2K0
ClusterFuzz的bot源码(fuzz engine的选择与调度之libfuzzer)阅读
上一次我们选择了fuzz task的代码进行阅读,这次我们进一步深入,看看fuzz engine的选择
用户1423082
2024/12/31
1170
ClusterFuzz的bot源码(fuzz engine的选择与调度之libfuzzer)阅读
honggfuzz漏洞挖掘技术深究系列(2)—— Persistent Fuzzing
上篇《honggfuzz漏洞挖掘技术深究系列(1)——反馈驱动(Feedback-Driven)》讲到基于软件的代码覆盖率驱动fuzzing的方式,除了软件还有硬件方式,即基于Intel BTS (Branch Trace Store) 或Intel PT (Processor Tracing) 去计算代码覆盖率,同时要求Linux内核>=4.2,这种方式的最大好处是完全由硬件支配,无所谓软件是闭源还是开源。由于硬件环境受限,我也一直未使用过,有此条件的同学可以试下。
泉哥
2019/07/18
1.1K0
honggfuzz漏洞挖掘技术深究系列(2)—— Persistent Fuzzing
初识 Fuzzing 工具 WinAFL
本文前两节将简要讨论 fuzzing 的基本理念以及 WinAFL 中所用到的插桩框架 DynamoRIO ,而后我们从源码和工具使用角度带你了解这个适用于 Windows 平台的 fuzzing 利
Seebug漏洞平台
2018/03/30
2.1K0
honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace
Intel® Processor Trace (Intel® PT) 是在i5/i7 5000以上型号上加入的功能,由于它是硬件级的特性,相比Qemu或Boch,在性能上和代码工作量会占有一定优势。在Linux上可以通过perf来使用PT,可以先简单看是否支持PT:
泉哥
2019/07/18
2.2K0
honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace
用 AFL 玩超级玛丽:通过Fuzzing探索程序空间状态以发现更多执行路径
今年S&P顶会上有一篇研究论文"IJON: Exploring Deep State Spaces via Fuzzing",他们通过改造AFL来探测程序的空间状态,以发现更多程序行为,并拿游戏"超级玛丽"来作演示:
泉哥
2020/03/06
1.1K0
推荐阅读
相关推荐
honggfuzz漏洞挖掘技术深究系列(1)——反馈驱动(Feedback-Driven)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档