模糊/定位堆错误和潜在漏洞的现代方法

逆向工程 视窗 linux 注射 模糊测试
2021-06-15 05:04:39

真的很高兴我找到了这个很棒的学习资源。

我想知道,有没有办法模糊或自动化堆漏洞评估?我知道很多基于堆栈的模糊测试的许多变体的实用框架,但是当我阅读论文或 cvs 时,他们注意到他们试图手动查找错误,使程序崩溃或避免蓝屏死机并使用 windbg 对其进行调试. 但是手工测试每个功能/漏洞似乎是有问题的,手工去每一层的深度似乎不切实际。

有没有更聪明的方法或已知的方法来扫描/模糊以堆放漏洞?如果重要的话,我更喜欢基于 windows 的框架,但 linux 的许多品种也可以。

非常感谢您帮助我和其他许多有兴趣学习或扩展漏洞评估技能的人。

2个回答

实现这一目标的好工具 WindowsApplication Verifier

总体思路是,您使用验证程序通过不同的堆检查运行您的程序。例如 - 在单独的内存页面上进行的每个分配,释放的内存不仅返回到池中,而且被标记为已释放,以后对它的任何访问都会导致异常等等。这种成本在显着的内存成本和一些性能损失。

启用后,可以使用任何模糊测试方法,例如AFL.

Valgrind是 Linux 的一个很好的等价物。

基本上,当您限制 PageHeap 的大小时,更容易发现错误。如果不考虑 EMET 或类似的缓解措施,基本上,附加到 windbg/IDA 并尝试查看正在调用哪些函数,为什么以及您可以有意或由于其他原因覆盖或更改的数据.

检查正在调用的函数,例如从浏览器中调用,并查看是否正在执行任何分配或覆盖。如果是这样,请查看如何利用它们来覆盖或分配数据以满足您的特定需求。

您也可以使用 in memory 或不同的 fuzzing 工具,但作为基准,尝试检查您如何改变您插入的数据并尝试模糊可接受协议的不同元素,让它成为 HTML、PHP、JAVASCRIPT、DOM、CSS 和相似的。还要尝试检查浏览器是如何处理代码的,它的解析方式以及类似的方式。

大量的模糊测试指南仅仅依赖于粉碎或覆盖某些寄存器,但这只是发现错误的部分方法。尝试更深入地挖掘,连接调试器并捕获可能不会导致程序崩溃或导致蓝屏死机但可以管理的错误,看看它们是否可以帮助您控制程序的缺陷。

如果严格来说是关于模糊器,我还会检查它是愚蠢的还是智能的模糊器,它变异或生成输入的方式,它寻找什么,它是否理解协议或只是寻找崩溃等。