热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AFLfuzz测试

一、AFL安装(注:实验环境为Ubuntu64位)第一步,安装Clang.Clang是一个高度模块化开发的轻量级编译器,编译速度快、占用内存小、有着友好的出错提示。在使用AFL编译


一、AFL安装

(注:实验环境为Ubuntu 64位)

第一步,安装Clang. Clang是一个高度模块化开发的轻量级编译器,编译速度快、占用内存小、有着友好的出错提示。在使用AFL编译时,实践表明afl-clang-fast相较于afl-gcc会更高效。

第二步,安装LLVM. 可以认为LLVM是一个完整的编译器架构,也可以认为它是一个用于开发编译器、解释器相关的库。且在使用LLVM架构的时候,Clang其实大致上对应到编译器的前端,主要处理一些和具体机器无关的针对语言的分析操作;编译器的优化器部分和后端部分就是LLVM后端。LLVM Mode模式编译程序也可以获得更快的Fuzzing速度。

第三步,安装AFL. 网上关于下载AFL的方法有很多,如果无法使用sudo apt-get install xx的方法,也可以通过下载AFL源码包,然后解压使用。

第四步,查看是否安装成功。 出现以下界面,则说明安装成功,版本号为2.52b。



二、AFL测试

(一)了解AFL [^1]

AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。其工作流程大致如下:

①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);

②选择一些输入文件,作为初始测试集加入输入队列(queue);

③将队列中的文件按一定的策略进行“突变”;

④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;

⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。

(二)测试步骤 [^2]

1、进入到要测试的源文件的所在文件目录中。

2、使用CC=afl-clang-fast来编译源文件,并进行插桩。

3、核心转储。在执行afl-fuzz前,如果系统配置为将核心转储文件(core)通知发送到外部程序。 将导致将崩溃信息发送到Fuzzer之间的延迟增大,进而可能将崩溃被误报为超时,所以得临时修改core_pattern文件。

4、设置合适的输入样例input来提高效率。AFL将这个作为种子然后变异生成其他测试样例。[ 也可以省略这一步,AFL自动生成输入样例 ]

5、常规格式:afl-fuzz -i input -o out /path/to/program [params]

out文件则是由AFL自动生成,用来存放crash、queue等内容。

6、没有什么错误,Fuzzer就正式开始工作了。首先,对输入队列中的文件进行预处理;然后给出对使用的语料库可警告信息;最后,开始Fuzz主循环,显示状态窗口。

*上图为执行刚开始

*上图为执行24分钟以后

*上图为执行10小时以后

7、当队列中的所有文件都经过变异测试了,则完成一次"cycle done"。而可以结束的依据就是当右上角cycles done字段的数字颜色由洋红变为橙色,最后变为绿色时,说明测试已经差不多了,则按下Ctrl+C来终止测试。

(三)Crash分析

查看out文件目录里面的crashs文件夹。

共有8个crash。将每个crash带入源代码运行后,共有如下几类错误:

①段错误(核心已转储)

②堆栈粉碎

③输入不符合格式要求导致输出错误



三、难点及解决方法

问题一:AFL生成的out文件不可访问(提示权限不够)

解决方法:sudo chmod 777 out -R(设置此目录下所有文件可读可写)

问题二:crash文件为二进制文件,没有直接打开的可用软件

解决方法:利用vim/cat可查看



四、总结心得

刚开始接触AFL时,由于关于安装和测试的一些经验贴比较少,所以走了不少弯路。很多帖子中测试到的bug,现如今已被修复,后续再测也找不到可挖掘之处。然,学习了一段时间后,越发觉得AFL的一些强大之处,很多大神灵活利用AFL测试,也是非常厉害。抱着继续学习的心态,找到了这个GitHub上的一个实验项目,感觉挺适合AFL测试的入门练手,便测试了其中一道题来学习一番,总不至于跑了几个小时没有收获:)

参考文献:

[^1] AFL漏洞挖掘技术漫谈(一):用AFL开始你的第一次Fuzzing

https://www.freebuf.com/articles/system/191543.html

[^2] 测试源代码来自:Exercises to learn how to fuzz with American Fuzzy Lop

https://github.com/mykter/afl-training



推荐阅读
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
author-avatar
chenkaij_305
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有