关于Fuzzable
对于需要对软件进行安全评估的漏洞研究人员来说,通常会使用AFL++和libFuzzer这样的强大工具来增强基于覆盖率的模糊测试。这一点非常重要,因为它可以自动执行错误查找过程,并快速发现和利用目标中存在的安全问题。然而,遇到大型复杂的代码库或闭源二进制文件时,研究人员必须花时间手动审查并对它们进行逆向工程分析,以确定目标可以进行模糊测试。
Fuzzable是一款基于静态分析实现的可模糊测试的自动化目标识别工具,该工具基于Python和C/C++开发,可帮助漏洞研究人员识别可用于模糊测试的功能目标。这是通过应用几种基于静态分析的启发式方法来确定软件中的风险行为以及执行这些行为的功能来实现的。然后,研究人员可以利用该框架生成基本的模糊测试增强模板,然后可以使用这些模板来查找漏洞,或者将其集成为连续模糊化管道的一部分,例如谷歌的oss fuzz项目。
除了作为独立工具运行外,Fuzzable还针对Binary Ninja反汇编程序制作了插件部分。
功能介绍
1、支持对代码进行分析(使用Angr、BinaryNinja和tree-sister实现);
2、支持以独立命令行工具或Binary Ninja插件执行静态分析;
3、利用生成的工具组件快速执行模糊测试任务;
工具安装
命令行(独立工具)
如果你安装了Binary Ninja,请确保安装了正确的API:
$ python3 /Applications/Binary\ Ninja.app/Contents/Resources/scripts/install_api.py
接下来,我们可以使用pip看命令来安装Fuzzable:
$ pip install fuzzable
手动/开发构建
我们使用了poetry来实现依赖管理和项目构建,如需进行手动构建,则需要使用下列命令克隆项目代码以及第三方模块:
$ git clone --recursive https://github.com/ex0dus-0x/fuzzable
接下来,切换到项目目录中,并使用下列命令完成项目的手动构建:
$ cd fuzzable/ # 不使用poetry $ pip install . # 使用poetry $ poetry install # 使用poetry 和开发virtualenv环境 $ poetry shell
现在,我们就可以使用该工具来分析二进制文件或源代码了:
# 分析一个单独的共享对象库代码 $ fuzzable analyze examples/binaries/libbasic.so # 分析一个单独的C源代码文件 $ fuzzable analyze examples/source/libbasic.c # 分析一个包含多个C/C++文件和头文件的工作空间 $ fuzzable analyze examples/source/source_bundle/
Binary Ninja插件
工具使用
静态分析启发式
$ fuzzable analyze <TARGET> --score-weights=0.2,0.2,0.2,0.2,0.2
分析过滤
$ fuzzable analyze --list-ignored <TARGET>
报告生成
$ fuzzable analyze --export=report.json <TARGET>
报告生成样例
许可证协议
本项目的开发与发布遵循MIT开源许可证协议。
项目地址
Fuzzable:【GitHub传送门】
参考资料
https://github.com/google/oss-fuzz
https://codemuch.tech/2021/06/07/fuzzabble/
https://tree-sitter.github.io/tree-sitter/
https://scikit-criteria.quatrope.org/en/latest/tutorial/quickstart.html
https://resources.sei.cmu.edu/asset_files/WhitePaper/2010_019_001_53555.pdf
https://github.com/ex0dus-0x/fuzzable/blob/main/templates/linux_source_harness.cpp
https://github.com/ex0dus-0x/fuzzable/blob/main/templates/linux_closed_source_harness.cpp
https://github.com/mirrorer/afl/blob/master/qemu_mode/README.qemu
请登录/注册后在FreeBuf发布内容哦