河北网站制作公司报价,做一个微信公众号商城多少钱,自贡做网站的公司,谷歌网站入口安全之安全(security)博客目录导读
ATF(TF-A)/OPTEE之FUZZ安全漏洞挖掘汇总
目录
一、AFL简介
二、AFL的安装
三、代码示例及种子语料库
四、AFL插桩编译
五、AFL运行及测试
六、AFL结果分析 一、AFL简介 模糊测试#xff08;Fuzzing#xff09;技术作为漏洞挖掘最有…安全之安全(security²)博客目录导读
ATF(TF-A)/OPTEE之FUZZ安全漏洞挖掘汇总
目录
一、AFL简介
二、AFL的安装
三、代码示例及种子语料库
四、AFL插桩编译
五、AFL运行及测试
六、AFL结果分析 一、AFL简介 模糊测试Fuzzing技术作为漏洞挖掘最有效的手段之一近年来一直是众多安全研究人员发现漏洞的首选技术。AFL、LibFuzzer、honggfuzz等操作简单友好的工具相继出现也极大地降低了模糊测试的门槛。 AFLAmerican Fuzzy Lop是由安全研究员Michał Zalewskilcamtuf开发的一款基于覆盖引导Coverage-guided的模糊测试工具它通过记录输入样本的代码覆盖率从而调整输入样本以提高覆盖率增加发现漏洞的概率。其工作流程大致如下
①从源码编译程序时进行插桩以记录代码覆盖率Code Coverage
②选择一些输入文件作为初始测试集加入输入队列queue
③将队列中的文件按一定的策略进行“突变”
④如果经过变异文件更新了覆盖范围则将其保留添加到队列中;
⑤上述过程会一直循环进行期间触发了crash的文件会被记录下来。 二、AFL的安装 下载AFL源码https://github.com/google/AFL/解压后编译安装。 make sudo make install
安装成功 安装目录 三、代码示例及种子语料库 首先创建一个简单的vulnerable.c源文件其功能无外乎接受一行命令行输入一个整数、一个字符、再一个整数然后根据中间这个字符当作运算符输出四则运算结果。可以看见这个被测程序的内容和普通的用户交互程序一模一样看不出来任何不同就是以stdin/stdout作为交互的输入输出以main函数作为执行入口。 作为模糊测试AFL需要提供初始的种子输入。 但实际上你完全可以提供任何无意义的输入作为种子模糊测试也一般能达到效果只不过效率会低一些而已是否提供有意义种子提供多少无外乎在种子获取难度和测试的效率要求之间进行权衡而已。 四、AFL插桩编译 编译过程和普通gcc编译也是一样除了使用的命令需要带上afl-前缀因此
afl-gcc -g -o vulnerable vulnerable.c
五、AFL运行及测试
执行命令 afl-fuzz -i testcases/ -o outputs -- ./vulnerable但是不出意外命令会报错
[-] Hmm, your system is configured to send core dump notifications to anexternal utility. This will cause issues: there will be an extended delaybetween stumbling upon a crash and having this information relayed to thefuzzer via the standard waitpid() API.To avoid having crashes misinterpreted as timeouts, please log in as rootand temporarily modify /proc/sys/kernel/core_pattern, like so:echo core /proc/sys/kernel/core_pattern[-] PROGRAM ABORT : Pipe at the beginning of core_patternLocation : check_crash_handling(), afl-fuzz.c:7275
以及
[-] Whoops, your system uses on-demand CPU frequency scaling, adjustedbetween 781 and 4003 MHz. Unfortunately, the scaling algorithm in thekernel is imperfect and can miss the short-lived processes spawned byafl-fuzz. To keep things moving, run these commands as root:cd /sys/devices/system/cpuecho performance | tee cpu*/cpufreq/scaling_governorYou can later go back to the original state by replacing performance withondemand. If you dont want to change the settings, set AFL_SKIP_CPUFREQto make afl-fuzz skip this check - but expect some performance drop.[-] PROGRAM ABORT : Suboptimal CPU scaling governorLocation : check_cpu_governor(), afl-fuzz.c:7337
具体原因上述信息已经提到了大致就是AFL测试时用到功能需要还没有开启因此切换到root用户执行上面报错中给出的命令即可。不过因为上述命令中修改的都是/proc和/sys目录下的文件二者Linux内核映射出来的逻辑文件并非实际的磁盘文件重启之后所有修改都会丢失避免麻烦还是将这几个语句保存成为脚本有利于重复执行。
root用户切换 sudo su echo core /proc/sys/kernel/core_pattern cd /sys/devices/system/cpu echo performance | tee cpu*/cpufreq/scaling_governor
再次执行命令
afl-gcc -g -o vulnerable vulnerable.c
可以正常运行输出一段信息后呈现如下界面表示fuzz已经开始了可以在该界面中查看运行时间、崩溃数量等信息。 ctrl-C结束fuzz可以看到当前目录下已经多出了outputs目录这是本次模糊测试的结果。
六、AFL结果分析 引起崩溃的测试样例会位于outputs/crashes文件夹下文件名大致形如id:000000,sig:08,src:000002,op:flip1,pos:3本次测试中获得的崩溃样例的内容为 其中包含10/0三个可打印字符和一个换行符。并未出乎意料就是这种输入会导致程序中发生除零意外。
crashes导致目标接收致命signal而崩溃的独特测试用例queue存放所有具有独特执行路径的测试用例。AFL输出文件
crashes/README.txt保存了目标执行这些crashes文件的命令行参数。
hangs导致目标超时的独特测试用例。
fuzzer_statsafl-fuzz的运行状态。
plot_data用于afl-plot绘图。
afl-plot outputs plots 参考GitHub - google/AFL: american fuzzy lop - a security-oriented fuzzer