提高AFL的fuzz速度
2017-04-17 11:38
183 查看
参考/docs/perf_tips.txt
1.测试集不要过大
尽量保证测试集的大小在1KB以内,大的测试集处理起来需要花费很多时间以及内存。在/testcases/文件夹中,以及提供了很多不同类型的测试用例,可以试着去使用它们。或者在测试之前,用afl-cmin对你的测试集进行精简。
2.使用简单的目标进行测试
考虑在fuzzing过程中使用一个简单的目标二进制程序。
3.使用LLVM插桩
当目标fuzzing过程很慢时,可以使用基于LLVM的插桩技术对代码进行插桩,这样会将fuzzing速度提高2倍。
4.优化二进制程序
检查你的程序中是否有可以明显提高性能的参数或设置。例如在一个图片格式转化的工具里面,将图片转为BMP格式会比转为PNG格式快很多。有些程序里面还可能包含诸如sleep(),usleep(),nanosleep()的函数,同样会使得fuzz很慢。
还有一点,如果你正在使用ASAN并且性能不可接受,考虑将其关闭,并稍后在ASAN启用的二进制文件中手动检查生成的语料库。
5.只对需要的部分进行插桩
只对你真正需要的库文件进行插桩。如,当你测试一个加密应用时,对libgmp插桩不起到任何作用,因为它主要依赖bignum。
6.使fuzzing并行化
每个fuzzer在工作时需要一个内核,因此,在一个4核的计算机上,你可以开启4个fuzzer进程。
7.保持对内存使用与超时时间的监控
如果-m或-t限制超出了真正的需求,考虑将其重新开始。
对于名义上运行非常快,但处理某些输入时又很缓慢的程序,可以尝试设置-t值为一个比其自身使用的更强大的值。 在快速和空闲的机器上,下降到-t 5可能是一个可行的计划。
-m参数也值得一看。 一些程序最终可以花费相当多的时间用来进行发配分配和初始化兆字节的内存,当提供病理性输入时。 低的-m值可以使它们更早放弃,而不会浪费CPU时间。
8.检查操作系统的配置
有几个操作系统的因素可能会影响fuzzing速度:
系统负载高。可考虑关闭一些非必需的进程。
网络文件系统,用于fuzzer输入/输出,或由模糊二进制文件访问以读取配置文件。
CPU按需分配。分析时,低估了由afl-fuzz产生的短暂过程的需求。可通过以下命令解决:
启动了透明大页(Transparent huge pages),可通过以下命令关闭它:
次优的调度策略。解决方法:
9.上述选择都失败时,使用-d选项
对于真正缓慢的程序,如果无法避免使用巨大的输入文件,或者只想在早期获得到结果,则可以随时使用-d模式。
该模式会导致afl-fuzz跳过所有确定性的模糊步骤,这使得输出不太整洁,最后的测试也不太深入,但它会给您一些比其他模糊工具更熟悉的体验。
1.测试集不要过大
尽量保证测试集的大小在1KB以内,大的测试集处理起来需要花费很多时间以及内存。在/testcases/文件夹中,以及提供了很多不同类型的测试用例,可以试着去使用它们。或者在测试之前,用afl-cmin对你的测试集进行精简。
2.使用简单的目标进行测试
考虑在fuzzing过程中使用一个简单的目标二进制程序。
3.使用LLVM插桩
当目标fuzzing过程很慢时,可以使用基于LLVM的插桩技术对代码进行插桩,这样会将fuzzing速度提高2倍。
4.优化二进制程序
检查你的程序中是否有可以明显提高性能的参数或设置。例如在一个图片格式转化的工具里面,将图片转为BMP格式会比转为PNG格式快很多。有些程序里面还可能包含诸如sleep(),usleep(),nanosleep()的函数,同样会使得fuzz很慢。
还有一点,如果你正在使用ASAN并且性能不可接受,考虑将其关闭,并稍后在ASAN启用的二进制文件中手动检查生成的语料库。
5.只对需要的部分进行插桩
只对你真正需要的库文件进行插桩。如,当你测试一个加密应用时,对libgmp插桩不起到任何作用,因为它主要依赖bignum。
6.使fuzzing并行化
每个fuzzer在工作时需要一个内核,因此,在一个4核的计算机上,你可以开启4个fuzzer进程。
7.保持对内存使用与超时时间的监控
如果-m或-t限制超出了真正的需求,考虑将其重新开始。
对于名义上运行非常快,但处理某些输入时又很缓慢的程序,可以尝试设置-t值为一个比其自身使用的更强大的值。 在快速和空闲的机器上,下降到-t 5可能是一个可行的计划。
-m参数也值得一看。 一些程序最终可以花费相当多的时间用来进行发配分配和初始化兆字节的内存,当提供病理性输入时。 低的-m值可以使它们更早放弃,而不会浪费CPU时间。
8.检查操作系统的配置
有几个操作系统的因素可能会影响fuzzing速度:
系统负载高。可考虑关闭一些非必需的进程。
网络文件系统,用于fuzzer输入/输出,或由模糊二进制文件访问以读取配置文件。
CPU按需分配。分析时,低估了由afl-fuzz产生的短暂过程的需求。可通过以下命令解决:
cd /sys/devices/system/cpu echo performance | tee cpu*/cpufreq/scaling_governor
启动了透明大页(Transparent huge pages),可通过以下命令关闭它:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
次优的调度策略。解决方法:
echo 1 >/proc/sys/kernel/sched_child_runs_first echo 1 >/proc/sys/kernel/sched_autogroup_enabled
9.上述选择都失败时,使用-d选项
对于真正缓慢的程序,如果无法避免使用巨大的输入文件,或者只想在早期获得到结果,则可以随时使用-d模式。
该模式会导致afl-fuzz跳过所有确定性的模糊步骤,这使得输出不太整洁,最后的测试也不太深入,但它会给您一些比其他模糊工具更熟悉的体验。
相关文章推荐
- Matlab------------提高运算速度
- 【华磊原创】-提高用户体验?衡量页面加载速度的几个关键指标。
- 25种提高网页加载速度的方法和技巧
- Linux中通过缓存DNS的解析来提高上网的响应速度!
- 整合碎图提高页面下载速度
- 启用IIS6的GZIP功能,提高网站打开速度
- 提高开发速度快捷键
- WinCE提高编译、build速度(一) CE6.0的SOC
- 如何提高SQL查询速度
- Google声称Chrome 7浏览器速度将提高60倍
- heritrix 提高抓取速度
- Firefox提高速度方法有哪些
- 在jsp页面中响应速度提高的7种方法分享
- 如何提高数据库查询速度 (摘录)
- django使用事务提高插入mysql数据库速度
- 提高wince中断响应速度的一种方法(作者:wogoyixikexie@gliet)
- linux多核处理下提高编译速度 make -j
- 提高matlab运行速度的心得
- 通过预编译头文件来提高CB的编译速度
- 科学速读法:20分钟让你阅读速度提高3倍