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

概念介绍

1. 模糊测试的概念

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

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

1.2 模糊测试的方法

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

2. 模糊测试的过程

模糊测试可以分为6个基本阶段,如图所示:
请添加图片描述

2.1 确定测试目标

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值