AFL安全漏洞挖掘

安全之安全(security²)博客目录导读

ATF(TF-A)/OPTEE之FUZZ安全漏洞挖掘汇总

目录

一、AFL简介

二、AFL的安装

三、代码示例及种子语料库

四、AFL插桩编译

五、AFL运行及测试

六、AFL结果分析


一、AFL简介

        模糊测试(Fuzzing)技术作为漏洞挖掘最有效的手段之一,近年来一直是众多安全研究人员发现漏洞的首选技术。AFL、LibFuzzer、honggfuzz等操作简单友好的工具相继出现,也极大地降低了模糊测试的门槛。

        AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(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_pattern'Location : 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' with'ondemand'. If you don't 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_stats:afl-fuzz的运行状态。

plot_data:用于afl-plot绘图。

afl-plot outputs plots

参考:GitHub - google/AFL: american fuzzy lop - a security-oriented fuzzer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/108991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go项目踩坑:go get下载超时,goFrame框架下的go项目里将vue项目的dist同步打包发布,go项目打包并压缩

Go项目踩坑:go get下载超时,goFrame框架下的go项目里将vue项目的dist同步打包发布,go项目打包并压缩 go get下载超时goFrame打包静态资源vue项目打包gf pack生成go文件 静态资源使用打包发布go项目交叉编译,省略一些不必要的信息通…

基于闪电连接过程优化的BP神经网络(分类应用) - 附代码

基于闪电连接过程优化的BP神经网络(分类应用) - 附代码 文章目录 基于闪电连接过程优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.闪电连接过程优化BP神经网络3.1 BP神经网络参数设置3.2 闪电连接过程算…

超越平凡:Topaz Photo AI for Mac带您领略人工智能降噪的魅力

在这个充满噪点和高频信息的时代,照片和视频的降噪成为了一个重要而迫切的需求。Mac用户现在有了一个强大的新工具——Topaz Photo AI for Mac,这是一款利用人工智能技术进行降噪和优化的软件。通过这款软件,您可以轻松地改善图像质量&#x…

Ps:变形

Ps菜单:编辑/变换/变形 Edit/Transform/Warp 变形 Warp是自由变换的一种模式,不仅可以用于物体的伸缩扭曲,也可用于人体的局部塑形。 除了从菜单打开,通常情况下,按 Ctrl T 进入自由变换,然后在画面上右击…

分享一份适合练手的软件测试实战项目

最近,不少读者托我找一个能实际练手的测试项目。开始,我觉得这是很简单的一件事,但当我付诸行动时,却发现,要找到一个对新手友好的练手项目,着实困难。 我翻了不下一百个web网页,包括之前推荐练…

单目3D自动标注

这里介绍两种 1. 基于SAM的点云标注 Seal:是一个多功能的自监督学习框架,能够通过利用视觉基础模型的现成知识和2D-3D的时空约束分割自动驾驶数据集点云 Scalability:可拓展性强,视觉基础模型蒸馏到点云中,避免2D和…

算法-堆/归并排序-排序链表

算法-堆/归并排序-排序链表 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/sort-list/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 优先级队列构建大顶堆 2.1 思路 优先级队列构建小顶堆链表所有元素放入小顶堆依次取出堆顶…

30W网络对讲广播一体音柱

SV-7042T 30W网络对讲广播一体音柱 一、描述 SV-7042T是深圳锐科达电子有限公司的一款壁挂式网络有源音柱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,其采用防水设计,功率可以从20W到40W。SV-7042T作为网…

01【Git的基本使用与底层命令】

下一篇:02【Git的分支与数据恢复】 目录:【Git系列教程-目录大纲】 文章目录 一、Git概述1.1 Git简介1.2 集中式与分布式1.2.1 集中式版本控制1.2.2 分布式版本控制 1.3 Git的使用流程1.3.1 本地仓库1.3.2 协同开发 1.4 Git的配置1.4.1 Git的配置等级1…

华为汪涛:5.5G时代UBB目标网,跃升数字生产力

[阿联酋,迪拜,2023年10月12日] 在2023全球超宽带高峰论坛上,华为常务董事、ICT基础设施业务管理委员会主任汪涛发表了“5.5G时代UBB目标网,跃升数字生产力”的主题发言,分享了超宽带产业的最新思考与实践,探…

MySQL远程连接

一、什么是mysq的远程连接? 1、本地连接 直接在本地使用mysqladmin命令登录 mysql -u root -p 解释如下: mysql:mysql 命令表示要启动 MySQL 客户端。-u root:-u 选项指定要使用的用户名。在这里,我们使用 root 用户名作为示例。-p:-p 选项需要用户输入密码。如果省…

比postman更好用的接口管理软件——Apifox

比postman更好用的接口管理软件——Apifox 官网安装和登录Apifox功能使用团队管理&项目管理接口管理接口文档 Apifox 帮助文档 最近使用了一个好用的中文版接口管理软件,Apifox,以下介绍一下它的使用方式及好处。 官网 Apifox的官方地址&#xff1a…

Python制作PDF转Word工具(Tkinter+pdf2docx)

一、效果样式 二、核心点 1. 使用pdf2docx完成PDF转换Word 安装pdf2docx可能会报错,安装完成引入from pdf2docx import Converter运行也可能报错,可以根据报错提示看缺少那些库,先卸载pip uninstall xxx,使用pip install python-docx -i htt…

Stm32_标准库_16_串口蓝牙模块_手机与蓝牙模块通信_手机传入信息能对芯片时间日期进行更改

实现了手机发送信息给蓝牙模块,程序对数据进行分析拆解,并更新自身数据 main.c: #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h" #include "Ti…

Docker仓库harbor私服搭建

Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FT…

特斯拉pre-test (Go)

特斯拉pre-test (Go) 1 Q12 Q23 Q3 1 Q1 原文: You are given an implementation of a function Solution that, given a positive integer N, prints to standard output another integer, which was formed by reversing a decimal repres…

基于Lang-Chain(ChatGLM和ChatChat)知识库大语言模型的部署搭建

环境准备 阿里云个人认证后,可免费试用机器学习平台PAI,可提供适合大语言模型环境搭建的高配置服务器。 点击试用阿里云服务器 试用产品选择:选择交互式建模PAI-DSW 适合哪些场景 文章/知识库/帮助文档等的检索基于现有知识库实现问答… …

GPT4 Advanced data analysis Code Interpreter 做行业数据分析、可视化处理图像、视频、音频等

1. 跨境电商如何用ChatGPT选品 ChatGPT Jungle scout 案例:跨境电商如何用ChatGFT选品 ChatGPTJungle scout 素材和资料来自: Jungle ScoutEM, Michael Soltis 和 文韬武韬AIGC 1.1 从Jungle scout上下载数据 Date Range > Last 90 days Downlo…

uniapp(uncloud) 使用生态开发接口详情3(新增产品分类,产品列表,新闻列表)

我的想法是有产品分类,产品列表,新闻咨询,新闻列表 项目中, uniCloud > database 目录下新建 sy_product_nav.schema.json // 代码如下 {"bsonType": "object","required": ["classname"],"permission": {"read&…

rabbitMq (2)

RabbitMQ 消息应答与发布 文章目录 1. 消息应答1.2 自动应答1.2 手动应答1.3 代码案例 2. RabbitMQ 持久化2.1 队列持久化2.2 消息持久化 3. 不公平分发4. 预取值分发5. 发布确认5.1 发布确认逻辑5.2 开启发布确认的方法5.3 单个确认发布5.4 批量确认发布5.5 异步确认5.5.1 处理…