
RetroWrite与AFL集成如何通过二进制重写实现高效的模糊测试覆盖率收集【免费下载链接】retrowriteRetroWrite -- Retrofitting compiler passes through binary rewriting项目地址: https://gitcode.com/gh_mirrors/re/retrowriteRetroWrite是一款革命性的二进制重写工具它能够在无需源代码的情况下为现有的二进制程序添加模糊测试覆盖率收集功能。通过与业界领先的模糊测试工具**AFL**集成RetroWrite为安全研究人员和开发者提供了一个强大的二进制模糊测试解决方案。本文将详细介绍如何利用RetroWrite与AFL的集成实现高效的模糊测试覆盖率收集。什么是RetroWrite为什么需要二进制重写RetroWrite是一个静态二进制重写工具支持x64和aarch64架构。它采用符号化技术也称为可重新组装的汇编能够在没有源代码的情况下向二进制文件插入检测代码。这对于那些只有二进制文件、没有源代码的软件进行安全分析至关重要。传统的模糊测试工具通常需要源代码来插入覆盖率收集代码但现实中很多软件只有二进制版本。RetroWrite解决了这一痛点使得即使没有源代码也能进行高质量的模糊测试。RetroWrite与AFL集成的工作原理核心技术符号化汇编RetroWrite的核心创新在于将二进制文件转换为符号化汇编文件。这个过程包括二进制加载与分析使用librw_x64或librw_arm64库加载和解析ELF二进制文件指令反汇编将机器码转换为可读的汇编指令符号化处理为每个指令和数据结构添加符号信息检测代码插入在适当位置插入AFL覆盖率收集代码AFL覆盖率收集机制当RetroWrite与AFL集成时它会插入覆盖率跟踪代码在每个基本块入口处插入代码记录执行路径实现forkserver优化模糊测试的进程创建效率维护共享内存映射存储覆盖率信息供AFL分析实战指南使用RetroWrite为二进制添加AFL覆盖率收集环境准备与安装首先克隆RetroWrite仓库并安装依赖git clone https://gitcode.com/gh_mirrors/re/retrowrite cd retrowrite pip install -r requirements.txt为x64二进制添加覆盖率收集对于x64架构的二进制文件操作步骤如下# 1. 生成符号化汇编文件 retrowrite /path/to/binary binary.symbolized.s # 2. 使用afl-gcc重新编译 AFL_AS_FORCE_INSTRUMENT1 afl-gcc binary.symbolized.s -o binary_instrumented为aarch64二进制添加覆盖率收集对于ARM64架构过程略有不同# 1. 使用覆盖率检测通道生成汇编文件 retrowrite -m coverage /path/to/binary binary.coverage.s # 2. 重新组装为二进制文件 retrowrite -a binary.coverage.s binary_instrumented开始模糊测试准备好检测后的二进制文件后即可开始模糊测试# 创建测试种子目录 mkdir -p seeds/ echo test input seeds/seed1 # 运行AFL模糊测试 afl-fuzz -i seeds/ -o findings/ ./binary_instrumented高级功能与配置选项内核模块模糊测试支持RetroWrite还支持内核模块的模糊测试通过KRetrowrite组件实现# 为内核模块添加AFL检测 retrowrite --kernel --kcov /path/to/module.ko module_instrumented.ko持久模式优化对于需要长时间运行的模糊测试可以启用持久模式# 设置持久模式环境变量 export AFL_PERSISTENT_ADDR0x12345678 export AFL_PERSISTENT_CYCLES1000 # 运行模糊测试 afl-fuzz -i seeds/ -o findings/ ./binary_instrumented自定义检测通道RetroWrite支持自定义检测通道位于rwtools_x64/和rwtools_arm64/目录中rwtools_x64/asan/地址消毒器检测rwtools_x64/jumparound/指令随机化混淆rwtools_arm64/coverage/AFL覆盖率收集rwtools_arm64/android_coverage/Android平台覆盖率收集实际应用案例案例1测试系统工具假设我们要测试/bin/ls命令# 为ls命令添加覆盖率检测 retrowrite --asan /bin/ls ls_instrumented.s gcc ls_instrumented.s -lasan -o ls_instrumented # 使用AFL测试 afl-fuzz -i test_cases/ -o ls_findings/ ./ls_instrumented 案例2内核驱动测试测试Linux内核的ext4文件系统模块# 进入内核演示目录 cd demos/kernel_demo/ # 运行模糊测试脚本 ./fuzz-module.sh ext4性能优化与最佳实践1. 选择合适的MAP_SIZEAFL使用共享内存来存储覆盖率信息。RetroWrite会根据二进制大小自动调整MAP_SIZE但也可以手动优化# 查看默认MAP_SIZE echo $((1 16)) # 输出65536 # 对于大型二进制可能需要更大的MAP_SIZE export AFL_MAP_SIZE1310722. 利用forkserver优化RetroWrite会自动为AFL添加forkserver支持显著提高模糊测试效率。如果遇到兼容性问题可以禁用export AFL_NO_FORKSERVER13. 并行模糊测试充分利用多核CPU进行并行测试# 主fuzzer afl-fuzz -i seeds/ -o sync_dir/ -M fuzzer01 ./binary_instrumented # 从fuzzer在其他终端运行 afl-fuzz -i seeds/ -o sync_dir/ -S fuzzer02 ./binary_instrumented故障排除与常见问题问题1汇编文件编译错误症状undefined reference to __asan_init_v4解决方案sed -i s/asan_init_v4/asan_init/g binary_instrumented.s问题2位置无关代码要求症状RetroWrite requires a position-independent executable解决方案确保二进制是位置无关的PIE文件或使用--ignore-no-pie参数谨慎使用问题3剥离二进制处理症状It looks like binary is stripped解决方案使用--ignore-stripped参数但注意这可能会影响重写质量集成到CI/CD流水线将RetroWrite与AFL集成到持续集成流程中# GitHub Actions示例 name: Fuzzing with RetroWrite on: [push, pull_request] jobs: fuzz: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - name: Setup RetroWrite run: | pip install -r requirements.txt git clone https://github.com/AFLplusplus/AFLplusplus cd AFLplusplus make - name: Instrument binary run: | retrowrite -m coverage ./target_binary binary_coverage.s retrowrite -a binary_coverage.s binary_instrumented - name: Run AFL fuzzing run: | mkdir -p seeds/ echo initial seed seeds/seed1 timeout 3600 afl-fuzz -i seeds/ -o findings/ ./binary_instrumented || true总结与展望RetroWrite与AFL的集成为二进制模糊测试带来了革命性的改进。通过无需源代码的二进制重写技术安全研究人员能够扩大测试范围测试闭源软件和第三方库提高测试效率利用AFL的先进模糊测试算法降低门槛无需源代码即可进行深度安全测试随着RetroWrite项目的持续发展我们期待看到更多创新功能如对更多架构的支持、更智能的检测策略以及与更多模糊测试工具的集成。无论是安全研究人员、质量保证工程师还是开源项目维护者RetroWrite与AFL的集成都是一个值得掌握的重要工具。它不仅能帮助发现潜在的安全漏洞还能提高软件的整体质量。开始你的二进制模糊测试之旅吧【免费下载链接】retrowriteRetroWrite -- Retrofitting compiler passes through binary rewriting项目地址: https://gitcode.com/gh_mirrors/re/retrowrite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考