欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

模糊测试基础指南(上)

来源:本站整理 作者:佚名 时间:2019-04-30 TAG: 我要投稿

介绍了关于模糊测试的基础知识,以及几种模糊测试工具,并由以下三个部分阐述一些最新的关于fuzzing技术的资讯。
第一部分主要介绍高级模糊测试技术。简要地讨论了使用模糊测试的情景,并进一步解释了开启模糊测试场景以及经典的模糊测试工具的架构。第二部分主要描述模糊测试入门的过程,并介绍几种通俗易懂,易于理解和使用的模糊测试工具。虽然,通常情况下直接使用现有的fuzzer更为简便,但是由用户自己编写的fuzzer或调整现有的fuzzer可能会产生更好的效果。本文提供的不是一个足够全面完整的列表,而是一系列不同模糊测试技术的示例。第三部分主要阐述了最近发表的关于模糊测试技术的研究。它将重点关注新型模糊测试技术和经过测试用例已生成技术的公开研究结果。0 – Fuzzing 101

介绍

本章节将介绍高级模糊测试技术,并简要地讨论了使用模糊测试技术的理由。我将会进一步解释你需要如何开始进行模糊测试以及典型的模糊测试工具的架构。什么是模糊测试?

Fuzzing或模糊测试是一种自动化的软件测试技术,通常用于识别程序中的潜在漏洞。对程序进行模糊测试是通过向其提供随机输入语句并记录导致程序中的崩溃或非崩溃的内存损坏的测试用例来完成的。在某种意义上,模糊测试就是通过蛮力搜索漏洞。几乎所有需要某种输入的软件都可以进行模糊测试,比如——浏览器,通过查看或编辑文件的应用程序,系统内核,大多数API和其他程序接口,驱动程序,网络守护程序,Web应用程序等等都可以对其进行fuzzing。


简单的模糊测试不需要任何有关程序的信息,因此,这是一种黑盒测试技术。但是,有一些先进的模糊测试技术可以分析或检测源代码或二进制文件,以便将生成的输入定制到模糊程序,这将是本系列的下一篇博文介绍的内容之一。

为什么选择模糊测试?

Fuzzing 是一种自动发现 bug 的方法; 理想情况下,Fuzzing 可以简单地在机器上运行并且不受干扰。 因为它不需要太多的手动交互,所以它可以是一种廉价的测试技术。另一方面,手工测试非常耗费资源,它揭示的错误数量取决于测试人员的技能。模糊测试和手动测试的结合是最佳的一种做法,因为这两种技术通常会发现不同类型的错误,并且它们可以互补。应用程序越复杂,就会有越多的 bug,随着复杂性的增加,攻击面也会增加。 对非常复杂的应用程序进行手工测试需要花费大量时间,并且需要良好的测试技能。 例如,如果一个公司决定只手动测试一个浏览器,那么在下一个版本完成之前,就需要很多技能熟练的测试人员来测试整个应用程序。一个fuzzer可以简单的永久运行并且可以在软件发布之前完成测试。 大多数fuzzer的规模相当不错,所以如果需要测试的更快,找到更多的bug,那么你可以只是增加更多的测试机器或更多的CPU内核。也可以使用 Fuzzing 回归测试来确保不会再次引入任何已知的 bug。作为一个安全研究人员, fuzzing 的确是伟大的,因为一旦一个fuzzer设置好并运行后,你可以解放双手去做其他的事情。模糊测试的常见问题虽然 fuzzing 是一个发现bug的伟大且廉价的方法,但它并不总是最佳的选择。这取决于应用程序和期望的缺陷类型,fuzzer 可能需要大量的时间来进行设置才能找到更多的缺陷。特别是那些能够意识到输入结构的可自编写的智能fuzzer的设置将会花费一些工作,直到它产生可用的结果。一个fuzzer是不能替代其他安全措施的。虽然你有最强大的fuzzer,发现了大量的漏洞,但它不太可能找到一个程序中的每一个漏洞。所以如果你的 fuzzer 没有发现更多的漏洞,这并不意味着你的程序是完全安全的。模糊测试只是对其他安全措施(如定期代码审计和其他安全开发原则)的一个很好的补充。Fuzzer可以产生许多误报,无法利用的bug以及重复的结果。因此,评审过程是强制性的,无论是手动的还是自动的,这是需要资源的。输入越复杂,评审过程就越复杂。最大限度地提高Fuzzer的效率是模糊测试最困难的部分之一。一个Fuzzer的价值通常取决于它发现了多少以前未知的bug或漏洞。为了找到更多的 bug,fuzzer 需要有一个高崩溃率的测试用例,这高度依赖于生成的测试用例的质量。通过管道/dev/urandom 到你的目标很容易,但是每个测试用例的崩溃率可能太低,无法在适当的时间窗口中找到任何内容。同时,单个测试用例的执行时间应该尽可能的短。模糊测试需要什么?要开始模糊测试,你需要一个接受输入的目标。应用程序越复杂,就越有可能使用fuzzer找到bug。它可以是内部软件,也可以是第三方软件,这取决于你的测试用例。你需要考虑你想要捕捉的bug的类型。一个 fuzzer 需要知道什么时候它发现了一个 bug,所以最容易发现的 bug 是那些导致崩溃的 bug,因为这将表明一个潜在的安全漏洞。当你清楚你想模糊测试的应用程序和bug类型,那么你有必要思考情况使用什么样的fuzzer。如果你不想从头开始编写模糊测试工具,那么你可以选择许多不同的模糊测试工具。其中一些需要工具一些工作来进行设置,其他的工作则可以迅速完成。因为正确选择模糊测试工具既重要又困难,本系列的下一篇博客文章将介绍一些最重要的 模糊测试工具。一个fuzzer可以找到什么类型的bug?理论上,通过模糊测试工具可以找到所有可能的 bug 类型。fuzzer需要一种检测机制来将程序的行为分类为无意的或恶意的。因此,有些 bug 的类比其他 bug 的类在代码中更容易找到,因为它们会产生明显的错误行为。例如,内存损坏bug在触发时导致崩溃是很容易检测到的。另一方面,逻辑错误可能非常难以检测,因为程序没有明显的不正常行为,而且预先定义检测逻辑错误的规则可能比较棘手。一个典型的fuzzer架构一个典型的fuzzer由三个不同的部分组成。 一个测试用例生成器生成输入,输入到被测试的程序; 一个worker程序执行给定的输入,并识别意外的行为; 一个日志记录器记录有趣的测试用例以及分析 bug 所需的一切。大多数fuzzer还包括一个服务器或主机,它协调其他三个部分并管理它们之间的通信。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.ylxj.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载