基于LLVM的AFL分析

AFL++模糊测试实战:挖掘libpng图像解析库的潜在漏洞 模糊测试作为自动化漏洞挖掘的核心技术,通过向目标程序输入大量随机或半随机数据,监控其异常行为来发现未知缺陷。其原理基于代码覆盖率引导,能够系统性地探索程序执行路径,特别适合挖掘内存破坏、逻辑错误等安全漏洞。在软件安全领域,模糊测试已成为发现0-Day漏洞的关键工程实践,广泛应用于操作系统、浏览器、文件解析器等基础组件的安全性评估。以libpng这一广泛使用的PNG图像解析库为例,通过AFL++框架进行深度模糊测试,可以高效触发其边界条件下的异常行为。本文结合实战案例,详细解析了从环境搭建、语料库构建、并行测 阅读详情

简介

Fuzzing是指通过构造测试输入,对软件进行大量测试来发现软件中的漏洞的一种模糊测试方法。当前大多数远程代码执行和特权提升等比较严重的漏洞都是使用Fuzzing技术挖掘的,Fuzzing技术被证明是当前鉴别软件安全问题方面最强大测试技术。
然而Fuzzing技术仍然存在着覆盖率低的缺陷,而许多的代码漏洞需要更大的路径覆盖率才能触发,而不是通过纯粹的随机尝试。
AFL (American Fuzzy Lop)是一款采取遗传算法生成用例的Fuzzing工具,可以有效地解决这些问题。AFL有两种Fuzzing方法:

  1. 针对开源软件:AFL软件在编译的同时进行插桩,以方便fuzz
  2. 针对闭源软件:配合QEMU直接对闭源的二进制代码进行fuzz

另外,AFL有基于gcc和llvm的两种实现方式,本文只讨论基于llvm的AFL对开源软件即有源码的程序的插桩和fuzz过程。

使用

流程概述

首先用afl-clang-fast编译源代码进行插桩,然后启动afl-fuzz程序,将testcase(输入的测试文件)作为程序的输入执行程序,AFL会在这个testcase的基础上进行自动变异输入,使得程序产生crash,产生的crash会被记录起来用于进一步分析。

插桩编译

首先使用以下命令编译源文件,编译过程中会进行插桩:

afl-clang-fast -g -o afl_test afl_test.c

如果是编译c++的源码,那就需要用afl-clang-fast++。
接着建立两个目录:fuzz_in和fuzz_out,用来存放程序的输入文件和fuzz的输出文件。在fuzz_in中创建一个testcase文件,用于写入被测试程序的输入。
在编译项目时,通常有Makefile,这时就需要在Makefile中添加内容:

CC=/path/to/afl/afl-clang-fast ./configure
make

使用afl-fuzz

对那些可以直接从stdin读取输入的目标程序来说,语法如下:

$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program […params…]

对从文件读取输入的目标程序来说,要用“@@”,语法如下:

$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program @@

AFL界面

在这里插入图片描述

process timing:
这里展示了当前fuzz的运行时间、最近一次发现新执行路径的时间、最近一次崩溃的时间、最近一次超时的时间。
值得注意的是第2项,最近一次发现新路径的时间。如果从fuzzing开始一直没有发现新的执行路径,那么就要考虑是否有二进制或者命令行参数错误的问题了,对于此状况,AFL也会智能地进行提醒。
overall results:
这里包括运行的总周期数、总路径数、崩溃次数、超时次数。
其中,总周期数可以用来作为何时停止fuzzing的参考。随着不断地fuzzing,周期数会不断增大,其颜色也会由洋红色,逐步变为黄色、蓝色、绿色。一般来说,当其变为绿色时,代表可执行的内容已经很少了,继续fuzzing下去也不会有什么新的发现了。此时,我们便可以通过Ctrl-C,中止当前的fuzzing。
stage progress:
这里包括正在测试的fuzzing策略、进度、目标的执行总次数、目标的执行速度。
执行速度可以直观地反映当前跑的快不快,如果速度过慢,比如低于500次每秒,那么测试时间就会变得非常漫长。如果发生了这种情况,那么我们需要进一步调整优化我们的fuzzing。

分析

AFL-FUZZ框架在/AFL_PATH/llvm_mode下包含了基于LLVM的实现源码,包括alf-clang-fast.c/afl-llvm-pass.so.cc/afl-llvm-rt.o.c三个文件:

afl-clang-fast.c
其主要功能是在/AFL_PATH目录下编译出afl-clang-fast和af

24、使用LLVM工具进行调试 本文介绍了如何使用LLVM工具进行调试、性能分析和代码检查。重点讲解了libFuzzer和AFL的使用场景及限制,通过XRay对代码进行性能分析,以及Clang静态分析器的应用。此外,还详细描述了如何为Clang静态分析器添加新的检查器,以提高代码质量和发现潜在问题。这些工具的结合可以帮助开发者高效地优化和维护应用程序。 阅读详情

相关推荐

24、LLVM工具调试指南:从性能分析到代码检查

本文介绍了如何使用LLVM工具进行调试,涵盖模糊测试、性能分析和代码检查。对比了libFuzzer和AFL的适用场景,详细讲解了使用XRay进行性能分析和Clang静态分析器检查代码错误的方法,并演示了如何为静态分析器添加新的检查器。适合需要提升调试效率和准确性的开发人员阅读。

wdx0123456的博客 156

24、LLVM工具调试指南

本文介绍了几种实用的LLVM工具,包括libFuzzer、XRay和Clang静态分析器,并详细讲解了它们的使用方法以及如何通过这些工具发现和解决代码中的问题。此外,还探讨了如何为Clang静态分析器添加自定义检查器,以提高代码的安全性和可靠性。

s3t4u的博客 71

afl-utils:实用的自动崩溃样本处理分析工具,轻松的afl-fuzz作业管理和语料库优化

注意:未来的发展将通过! 从2018年6月6日开始,该项目移至 ,这就是为什么该存储库被存档并且是只读的原因,直到将其从Github中完全删除为止。 计划于2018年9月15日删除存储库。 请报告问题,并通过新请求合并。 所有进一步的讨论-即使是针对现有问题的讨论-都将在那里进行。 谢谢, rc0r afl-utils afl-utils是有助于使用的实用程序的集合。 afl-utils包含用于以下目的的工具: 自动崩溃样本收集,验证,减少和分析( afl-collect , afl-vcrash ) 轻松管理并行(多核)模糊测试作业( afl-multicore , afl-m

基于级联H桥的储能变流器仿真与性能优化

本文深入探讨了基于级联H桥的储能变流器,通过仿真建模与性能优化,详细解析了其模块化结构、载波移相SPWM控制策略及核心性能指标。重点攻克了电池SOC均衡难题,介绍了利用零序电压注入实现相内均衡及功率调节实现相间均衡的实战策略,为提升储能系统效率与电池寿命提供了关键技术路径。

gpu4optimizer的博客 369

Vue3 + MQTT.js 实现 SCADA 实时数据通信:从不稳定到稳定的完整实践

本文介绍了SCADA组态引擎开发中MQTT协议的应用及优化实践。项目采用MQTT协议实现工业设备数据采集与可视化,但面临连接不稳定、数据格式多样化和数据绑定复杂三大问题。针对MQTT连接问题,分析发现超时设置过短(原8秒)、缺少客户端超时配置和心跳机制是主要原因。优化方案包括:协议转换(mqtt://→ws://)、双重超时保护(15秒手动+30秒客户端)、60秒心跳间隔等,显著提升了连接稳定性。通过完整代码实现展示了连接配置、认证处理和错误处理机制,为物联网数据传输提供了可靠解决方案。

weixin_36794508的博客 1397

云模型在综合评价过程中的应用

目录 1 云模型标尺(标准云模型)的构建方法 1.1 通过正态云的“3En 规则”来表示评价论域 1.2 通过论域的边界值隶属度相等来表示评价论域 1.3 通过黄金分割法来表示评价论域 2 确定评价结果的过程 2.1 基本云发生器 2.2 X条件云发生器 2.3 两种方法的区别 综合评价问题一般分为以下六个步骤 1、明确评价目的; 2、确定被评价对象; 3、建立评价指标体系(包括收集评价指标的原始值、评价指标的若干预处理等); 4、确立与各项评价指标相对应的权重系数; 5、选..

weixin_62223576的博客 1万+

先进封装类别分析与典型案例

当制程微缩逼近物理极限、单颗大芯片(reticle limit)面积受限于光罩尺寸,且逻辑、存储、射频、传感等功能无法用同一套工艺最经济地制造时,性能增益的来源从 "晶体管密度" 转向 "互连密度"。先进封装的本质,是在芯片外部用更短、更密、更宽的路径把多个裸 die(die)互连起来,换取更高带宽、更低延迟、更小体积和异构集成能力。行业通常按划分为 2D、2.5D、3D、扇出、SiP 五大谱系,Chiplet/UCIe 则是贯穿其上的设计方法论,玻璃基板、共封装光学(CPO)是正在成型的新分支。

0 28

海康DS-7604N-K1/RTB固件包

【摘要】海康DS-7604N-K1/RTB萤石云设备发布V4.30.091版本升级程序(2022.09.19),仅适用于指定型号。升级前需先升级至V3.4.106基础版本,刷机会重置设备为未激活状态,需重新设置admin密码。该机型支持密码/手势登录,无密码时可通过U盘升级。注意事项:升级存在风险,需确认程序适用性;升级过程严禁断电;必须阅读压缩包内的刷机说明。此为定制机型,非必要不建议升级。(150字)

海康威视技术支持 1568

RML2018.01a数据集的读取与使用

基于深度学习的自动调制识别

QAQIknow的博客 1万+

python实现边缘检测Canny算子 (附完整源码)

python实现边缘检测Canny算子 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 456

【网络安全】零基础入门网络安全劝退指北

作为从16年接触网络安全的小白,谈谈零基础如何入门网络安全,有不对的地方,请多多指教。 这些年最后悔的事情莫过于没有把自己学习的东西积累下来形成一个知识体系。 后续我也会陆续的整理网络安全的相关学习资料及文章,与大家一起探讨学习。 如何入门 简单了解网络安全 网络安全就是指的确保网络系统中的数据不被别人破坏,而网安工程师就是涉及程序来维护网络安全。 网安方向有很多职位,比如安全产品工程师,安全分析师,数据恢复工程师,网络架构工程师,安全编程工程师,以及网络集成工程师等。 工作内容主要包括: 安全评测,风

互联网老辛 4580

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: zuul转发请求之重组参数
下一篇: 基于LLVM的Fortran编译器分析
leebin_20
博客等级 码龄12年 17粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值