[课业] | 软件安全 | 使用American Fuzzy Lop工具挖掘C/C++程序漏洞

这篇具有很好参考价值的文章主要介绍了[课业] | 软件安全 | 使用American Fuzzy Lop工具挖掘C/C++程序漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念介绍

1. 模糊测试的概念

1.1 模糊测试技术的核心思想

  • 模糊测试(Fuzz Testing)主要属于黑盒测试和灰盒测试领域,是一种基于缺陷注入的软件安全测试技术。
  • 模糊测试技术的核心思想是通过监视非预期输入可能产生的异常结果来发现软件问题。
    • 具体来说就是使用大量半有效的数据,以程序是否出现异常作为标志,发现应用程序中结构可能存在的安全漏洞。
    • 半有效数据是指,对应用程序来说,测试用例的必要标识部分和大部分数据是有效的,这样待测程序就会认为这是一个有效的数据,但是同时该数据的其他部分是无效的。这样,应用程序就有可能发生错误,这种错误可能导致应用程序的崩溃或者触发相应的安全漏洞。

1.2 模糊测试的方法

  • 模糊测试可以简单到随意敲打键盘来输入随机数据。
  • 早期的模糊测试方法多是基于对单一数据进行一维或多维变异来形成测试数据。当前,模糊测试已经演变成了更为有效的、自动化更加健全的技术。
  • 模糊测试方法分类如下:
    • 预生成测试用例。需要理解对象规约支持的数据结构和可接受的范围,然后对应生成测试边界条件或者是违反规约的测试用例。生成测试用例很费神,但是可以复用。用完用例,测试结束。
    • 随机生成输入。效率最低,但是可以快速识别目标是否有非常糟糕的代码。
    • 手工协议变异测试。比随机生成更加初级。优点是可充分发挥自己过去的经验和“直觉”。常用于Web应用安全测试。
    • 变异或强制性测试。模糊器从一个有效的协议样本或是数据格式样本开始,持续不断地打乱数据包或是文件中的每一个字节、字、双字或是字符串。虽然该方法浪费了CPU资源,但是不需要对应用进行研究,并且整个模糊测试过程可以完全自动化。
    • 自动协议生成测试。需要先对应用进行研究,理解和解释协议规约或文件定义。但是这种方法并不基于协议规约或文件定义创建硬编码的测试用例,而是创建一个描述协议规约如何工作的文法。例如,SPIKE和SPIKEfile工具都是这类测试的典型例子,采用SPIKE脚本描述协议或是文件格式,并使用一个模糊测试引擎来创建输入数据。

2. 模糊测试的过程

模糊测试可以分为6个基本阶段,如图所示:
american fuzzy lop,安全

2.1 确定测试目标

  • 不同的测试目标使用的模糊测试技术和方法也不一样。需要考虑对内部开发的应用程序还是对第三方应用程序进行模糊测试。还必须选择应用程序中的具体的目标文件或库,尤其是选择那些被多个应用程序共享的库,因为这些库的用户群体比较大,出现安全漏洞的风险也相应较高。
  • 在此过程中,针对被测试程序,在一些典型的漏洞信息网站(如SecurityFocus、Secunia、CNVD等),查找软件开发商历史上曾出现的安全漏洞,分析这些漏洞的形成原因及编码习惯,有针对性地选择相应的模糊测试工具和方法。

2.2 确定预期输入

  • 模糊测试是一个不断枚举输入向量的过程,任何从客户端发往目标应用程序的输入都应该作为输入向量,比如一个http请求,包括请求头、url以及发送的参数等,其他输入向量还有文件名、环境变量以及注册表键值等。
  • 对不同的软件,可以选择性地侧重某些输入向量,但是一个完整的模糊测试过程应该进行充分、完全的测试。
  • 例如,对tcp协议处理软件进行模糊测试,不仅要对数据部分进行测试,序号、确认号、数据偏移字段、标志位、保留字段、窗口以及校验和等部分也应该被纳入模糊测试的范围。

2.3 生成模糊测试用例

  • 确定待测试目标和输入向量后,应该根据不同的输入向量选择不同的模糊器来生成模糊测试用例。由于数据量较大,这个阶段通常会采用自动化方式完成。
  • 模糊器常用的生成测试数据的方法如下:
    • 基于生成的方法,在对目标软件输入数据格式的规约有深刻了解的基础上,自动生成一些不满足数据规约的测试样本。
    • 基于变异的生成方法,从一个合法的样本出发,通过某些算法不断地修改其中一些数据,生成一批畸形的测试用例。
    • 生成和变异相结合的方法。

2.4 执行模糊测试用例

  • 执行模糊测试用例就是将上一阶段生成的大量模糊测试数据不断发送给待测试目标程序。面对大量的模糊测试数据,同样需要使用自动化工具来完成。

2.5 监视异常

  • 监视异常可以发现程序哪里发生故障,并根据监视信息进一步分析为什么会产生故障。由于模糊测试过程比较长,当测试用例的数目较多时,常常需要采用自动化的方式实现。
  • 当前常用的异常监视技术依据原理分为两种:
    • 基于调试的方法。在调试模式下启动目标软件,通过操作系统平台提供的调试API,开发有针对性的异常检测模块。此方法实现异常监视虽然难度较大,但更加高效。
    • 基于插桩的方法。在模糊测试过程中,仅仅通过观察程序的输入、输出,对了解软件内部的运行信息往往是不够的。例如软件运行过程中内部变量的状态信息、模块之间的交互信息等,这些信息对于发现漏洞及定位漏洞来说特别重要。基于插桩的方法就是在保证被测试程序原有逻辑完整的基础上,在程序中插入一些探针(又称为“探测仪”,本质上是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。目前常用的插桩方法分为源代码插桩、静态代码插桩和二进制代码插桩等。
      • 源代码插桩(Source Code Instrumentation)。这是一种最自然的方式,即在编写软件时,在需要监视的地方插入检测代码,如增加输出信息语句、增加日志语句等,尤其是面向切面编程技术(Aspect Oriented Programming)可以较好地用于源代码插桩,有效分离业务逻辑与监测逻辑。
      • 静态代码插桩。例如在Java中,字节码插桩可以直接更改中间代码文件(如Java的.class文件等)或在类被类加载器(Class Loader)装载时进行字节码插桩。字节码插桩拥有执行效率高、插桩点灵活等优点,使其在面向切面编程领域大放光彩,并陆续出现了BCEL、Javassit和ASM等工具。
      • 基于二进制的插桩。该技术可以进一步提高模糊测试的异常检测能力,但是其系统消耗较大,且大部分为商业插桩软件。常用的二进制插桩工具有DynamoRIO、Dyninst和Pin等。

2.6 异常分析并确认漏洞

  • 异常分析并确认漏洞是模糊测试过程中的最后一步,主要分析目标软件产生异常的位置与引发异常的原因。常用的分析方法是借助于IDA Pro、OllDbg和SoftICE等二进制分析工具进行人工分析。

实验流程

1. 安装AFL

  • 下载AFL源代码
    wget https://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
    tar -zxvf afl-latest.tgz
    cd afl-2.52b
    
    american fuzzy lop,安全
  • 安装gcc编译器
    • 原本打算通过安装llvm与clang进行编译,不过在之后执行sudo make install的时候报错"Oops, the instrumentation does not seem to be behaving correctly...",经查可能是llvm版本问题,故改为gcc编译。
    sudo apt-get install gcc
    
    american fuzzy lop,安全
  • make并展示指令列表,确认安装成功
    make 
    sudo make install
    alf-fuzz
    
    american fuzzy lop,安全
    american fuzzy lop,安全
    american fuzzy lop,安全

2. 安装漏洞语料库、目标C程序

  • 安装漏洞语料库
    mkdir testcase
    cd testcase
    wget http://samples.ffmpeg.org/tests/DivX-test/Xmen-OpenDivX-200-slow.avi
    cd ..
    
  • 确定目标C程序:选择的目标C程序是off-the-shelf C程序ultrix42-deroff.c,其内容存在于testfile.c
    american fuzzy lop,安全

3. 开始测试

  • 对代码进行编译

    afl-gcc -g -o afl_test testfile.c
    

    american fuzzy lop,安全

  • 开始fuzzing程序

    • 原本使用的指令为afl-fuzz -i testcase -o output . /afl test,报错内容为
      american fuzzy lop,安全
    • 修改配置,执行以下指令,结果如图
      sudo su root
      echo ecore > /proc/sys/kernel/core_pattern
      exit
      
      american fuzzy lop,安全
    • 此问题解决之后再次报错显示内存的50M限制被占满,该用以下指令解决该问题。
      afl-fuzz -i testcase -o output ./afl_test sam2p @@
      
      american fuzzy lop,安全
  • fuzzing时的面板
    american fuzzy lop,安全

  • 结束后的面板
    american fuzzy lop,安全文章来源地址https://www.toymoban.com/news/detail-761741.html

参考内容

  1. 博客:AFL(American Fuzzy Lop)的初次使用使用
  2. 教材:机械工业出版社《软件安全技术》
  3. 博客:AFL(American fuzzy lop) 二进制程序模糊测试工具学习
  4. 论坛:llvm_mode error with llvm 13: "Oops, the instrumentation does not seem to be behaving correctly"报错的原因
  5. 博客:AFL黑盒测试FFmpeg(参照使用了此博客内实验流程使用的测试语料库)
  6. 博客:fuzzing工具之AFL的安装与使用(参照使用此博客内实验流程的指令格式,解决"Oops, the program crashed with one of the test cases provided." 报错)
  7. 代码:有漏洞的off-the-shelf C程序ultrix42-deroff.c
  8. 官方网页:AFL官网

到了这里,关于[课业] | 软件安全 | 使用American Fuzzy Lop工具挖掘C/C++程序漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自学黑客/网络安全工具软件大全100套

    Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上。它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance–终端用户授权协议)。它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界

    2024年02月08日
    浏览(62)
  • 有了这几个软件安全测试工具,编写安全测试报告再也不愁

    软件的安全是开发人员、测试人员、企业以及用户共同关心的话题,尤其是软件产品的使用者,因为系统中承载着用户的个人信息、人际互动、管理权限等各类隐私海量关键数据。软件安全测试工作不仅是为了用户,更牵扯到许多的利益共同体。因此软件安全测试必不可少,

    2024年02月03日
    浏览(46)
  • 2023软件测试工具大全(自动化、接口、性能、安全、测试管理)

    目录 前言 一、自动化测试工具 Selenium Appium TestComplete 二、接口测试工具 Postman SoapUI JMeter 三、性能测试工具 LoadRunner JMeter Gatling 四、安全测试工具 Burp Suite OWASP ZAP Nmap 五、测试管理工具 TestRail JIRA TestLink 总结 软件测试是保障软件质量的重要环节,而现代化的软件开发过程中

    2024年02月16日
    浏览(128)
  • [系统安全] 四十五.恶意软件分析 (1)静态分析Capa经典工具的基本用法万字详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更

    2023年04月16日
    浏览(47)
  • 长尾关键词挖掘软件-免费的百度搜索关键词挖掘

    嗨,大家好!今天,我想和大家聊一聊长尾挖掘工具。作为一个在网络世界里摸爬滚打多年的人,我对这个话题有着一些个人的感悟和见解,希望能与大家分享。 首先,让我坦白一点,长尾挖掘工具对于我来说真是救命稻草。在我刚开始做网站优化和内容创作的

    2024年02月09日
    浏览(96)
  • 抖音视频批量下载软件功能|短视频数据挖掘软件

    《抖音视频批量下载软件——提升工作效率的利器》         在当今信息爆炸的时代,视频内容已经成为人们获取信息、娱乐放松的重要途径之一。而针对抖音视频的批量下载需求,我们推出了一款功能强大的软件,让您轻松实现视频批量提取,提高工作效率,让您事半功倍

    2024年03月09日
    浏览(63)
  • 【工具使用】Modsim32软件使用详解

            Modsim32是一个运行在windows下,作为在RTU或这ASCII传输模式下的MODBUS协议从设备的应用程序。用来模拟从设备(与之相对的是Modscan32,用于模拟主设备)。它可以接收主设备发送的指令报文,根据窗口配置的数据返回主设备需要的指令报文。         文章只谈及

    2024年02月02日
    浏览(87)
  • 【工具使用】Modscan32软件使用详解

            Modscan32是一个运行在windows下,作为在RTU或这ASCII传输模式下的MODBUS协议主设备的应用程序。用来模拟主设备(与之相对的是Modsim32,用于模拟从设备)。它可以发送指令报文到从机设备中,从机响应之后,就可以在界面上返回相应寄存器的数据。         文章

    2024年01月17日
    浏览(37)
  • [系统安全] 四十六.恶意软件分析 (2)静态分析Capa经典工具批量提取静态特征和ATT&CK技战术

    终于忙完初稿,开心地写一篇博客。 您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代

    2024年02月11日
    浏览(43)
  • 【工具使用】Modbus Poll软件使用详解

             Modbus Poll是一个模拟Modbus协议主机的上位机软件,主要用于模拟测试跟其他从机设备通信的过程。与之成套存在的另一个软件--Modbus Slave,则是模拟Modbus协议从机的上位机软件。该软件内部封装标准Modbus协议栈,通过图形化界面使得操作更为简便。目前软件支持

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包