基于AFL改进的内存敏感的模糊测试工具MemAFL - treebacker

admin 2021年12月31日15:11:03评论175 views字数 823阅读2分44秒阅读模式

项目地址

MemAFL:https://github.com/treebacker/MemAFL

简要介绍

一句话:属于本人的毕业设计实现的一个AFL改进的模糊测试工具,也是帮助本人第一次刷CVE的工具。

主要基于llvm做的插桩上的改进,改进的几个重点(改进代码都在mm_metric目录下)

  • 程序的预分析

    通过llvm在每一个module中分析字符串处理函数,对于strcmpstrcpystrcat等这种函数如果引用了常量字符串,那么说明这些字符串有影响程序控制流的可能,将保留作为种子因素,参与后续的种子变异中。

  • 内存敏感

    主要从两个方面,一个是指令级,会记录每一个种子程序的执行路径覆盖的mem-operation情况。

    另一个是函数级,对于敏感函数,如mallocfree等,会偏向于覆盖这些路径。

  • 路径覆盖

    基于插桩获取的信息,覆盖更多的路径,继承的AFL的策略,加上了内存敏感的路径覆盖。

    另外,也会记录路径中的子函数调用情况,优先选择调用子函数更频繁的种子。

  • 哈希碰撞率的缓解

    研究过AFL原理的应该记得,AFL使用的路径记录策略,当程序基本块量足够大时,会有很大概率的哈希碰撞情况。由于基于覆盖率的模糊测试依赖于路径,路径信息的错误使得后续很多策略都是受到误导的。

    缓解的思想如下图:

    在AFL中,这个函数会被插入三个BlockID,但是MemAFL只会插入一个BlockID。

    原因如下:

    函数的入口基本块,只要执行该函数就一定会执行完全该基本块,不存在去区分路径,所以就省去了插桩。

    对于函数退出基本块,如果是唯一的,那么也适用于这个道理。

    通过减少插桩点,对应的,需要记录的路径信息减少了,经过测试可以降低10%-20%的哈希碰撞率。

发现的CVE

​ 都是一些没什么利用价值的开源软件...,上图

最后

​ 其实总体上,做出的改进并不多,但是效果作为毕设我还是挺意外的,毕业证拿到了,想开源出来(被捶认了),欢迎师傅交流,一起学习漏洞挖掘漏洞利用啊!

BY:先知论坛

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月31日15:11:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于AFL改进的内存敏感的模糊测试工具MemAFL - treebackerhttp://cn-sec.com/archives/710627.html

发表评论

匿名网友 填写信息