软件安全与质量保证的模糊测试

软件安全与质量保证的模糊测试(翻译)

第一章 介绍

欢迎来到模糊测试的世界!

总的来说,模糊测试的目的是输入一个自动生成的数据到一个系统中,并尝试破坏掉这个系统,由此来揭露程序的可靠性问题。尽管有些人依然对于模糊测试的能力、有效性、实用性有所误解,模糊测试还是被广泛用于安全和质量保证的研究。模糊测试可以被理解为

一种高度自动化的测试技术。它使用非法数据作为程序的输入覆盖了众多的边界情况,以此来更好地确认没有容易被进攻的危险点。fuzzing这个名字来自现代程序常常因为电话线上随机化的线路噪声而崩溃。

在你探索模糊测试更远之前,我们希望你知道你为什么对模糊测试感兴趣。鉴于你正在读这本书,有一点是明确的:你喜欢寻找软件的错误,喜欢那些对软件安全造成影响的漏洞。为什么你想找到这些漏洞?总的来说,寻找这些漏洞是为了三个不同的目标:

1.质量保证:测试和保卫你的内部开发的软件

2.系统管理:测试和保卫软件依赖的使用环境

3.脆弱性评估:测试并尝试侵入他人的软件或系统

在这本书里,我们会从所有这些视角来考虑模糊测试。我们会从开发者的角度考虑模糊测试,也会从企业端用户的角度观察。我们也会考虑第三方评估团队的需求,无论他们是测试顾问还是黑客。本书的目的在于让软件公司(测试者)和漏洞分析家(黑客)有相同的起点。软件测试者可以向有天赋的黑客学习,反之亦然。

模糊测试是最强大的用于发现软件安全问题的自动化测试工具。一个人可以认为代码审计工具能从代码中找到更多的漏洞,但在比较智能模糊测试和代码审计的成果之后,结果显然模糊测试更胜一筹。在代码审计工具中发现的很多漏洞都是假阳性的,对此进行警告并不会对安全有什么正面影响。模糊测试则没有这样的问题。模糊测试不会报告假阳性的漏洞。漏洞就是漏洞,错误就是错误。大多数模糊测试所发现的漏洞在一定程度上都是可以被利用的,至少会导致拒绝服务。鉴于模糊测试通常是黑盒测试,很明显,每个漏洞都是可以远程利用的、依赖于你测试的接口的,并且一定程度上在你对利用的定义中。模糊测试在测试闭源的、现成的程序和私有系统中是非常有用的,因为在大部分情况下模糊测试不需要接触任何源码。

在本章中,我们会对模糊测试以及有关的技术进行综述。我们关注安全问题发生的原因以及为什么当前的安全方法面对这些安全问题时并不能保护我们。我们会通过介绍这种有前瞻性的、每个人都可以使用其发现与剔除安全漏洞的工具探索其如何对于安全问题有所帮助。接着,我们看哪里已经了使用模糊测试,并考虑原因。最后,我们会收获一些技术并回顾模糊测试的历史,在此过程中,我们专注于理解有多么多的模糊测试技术得以存在。不变的是,记住我们这一章的目的仅仅是提供一个概述,让你为这本书之后介绍的做好准备。随后的章节会为这些简述提供更多的细节。

1.1 软件安全

对于在软件中发现安全漏洞,模糊测试是一种快速并低耗能的工具。不幸的是,模糊测试并不经常在需要它的地方被用到,因此,从安全的视角来看,很多我们依赖的系统都是不成熟的。安全领域有一件事是很清晰的:软件总是有安全问题的。几乎所有的软件都可以被很容易地入侵。但是有如果你对于软件安全问题以及相关技术很熟悉,你可能会能够知道实际上软件中到底寄生了多少安全问题。这就是软件安全研究的问题。

今天,很少有人真的知道什么是软件安全,即使他们被称为安全专家。就像古时候地图用于警示,地图外的危险区域,有时候最好不要去干涉。没有被记载的领土被称为“此处有恶龙”,意思是你不应该到此处冒险。这太可怕了,或者说太具有挑战性了。幸运的是,在软件安全领域,黑暗的岁月结束了,因为最初的探索者为探索侵入的神秘领地奉献了毕生心血。他们尝试为普通的软件开发者解释软件安全。最开始, 因为他们的新技术,他们受到人们的敬畏;之后他们就被指责有了太多的危险发现。即使是今天,他们还在被认为拥有很多让他们变得特殊的艺术品。然而,毕竟他们发现的没有那么复杂。

软件安全测试可以被使用在各种组织中,从研发到测试实验室环境,再到企业。
1

<center>
模糊测试的使用场景:开发,第三方测试实验室和企业运营
</center>

在研发过程中,模糊测试可以被用于多数编程过程的的早期的原型阶段和实施阶段。事实上,在最开始的原型做好之后,就可以立刻使用模糊测试。自动化测试经常集成到持续集成、自动化构建程序、回归测试的过程中。源代码审计工具经常在软件开发时被用于剔除编程错误导致的简单的漏洞。研发过程包括测试,特别是在系统集成之前进行的测试。

在一个系统继承完毕后,通常测试实验室中的专门的测试团队会执行大部分剩余的测试工作。限于软件开发进程,一些测试会更加贴近于集成在开发之中。剩余的在测试实验室中完成的测试工作会与在研发环境中进行的测试工作有很大不同。在系统开发中,测试实验室非常常见,例如在电信、金融和工业网络中都会涉及,并且其规模十分庞大。在一个安全实验室中,一个系统可能被任何有效的工具测试,而测试结果会被使用所有可能的被选择的软件度量来分析。一个测试实验室可能控制着昂贵的、专门性的工具来进行装载和性能以及模糊测试。实际上,一些商业的模糊测试工具在传统的测试实验室环境中已经被作为一种固定测试设备来部署了。

在企业中,使用很多后期部署的技术来提高软件安全性。像Nessus一样的漏洞扫描器和安全扫描器在实际环境中经常被用到。对于测试工具,一个很重要的准则就是测试正常运转的系统时,不能妨碍其正常服务。渗透测试服务仍然经常对抗在线系统,因为他们需要通过真实的入侵威胁来确认实际环境的安全有效性。这是因为不是所有的问题都能在实验室环境下被发现。相似的,模糊测试也应该谨慎地考虑企业环境。有可能在实际环境中会比实验室环境中发现更多的漏洞,但也有可能会妨碍当前的服务。

永远不要忘记安全领域是没有必杀武器的:即使是模糊测试也不能保证软件中没有遗留任何漏洞。不管怎样,快节奏下的社会下,技术正在改变、发展,并不断地进化变得更好。这对于测试者来说是个好消息:人们在可预见的未来会写出新的软件。而新的软件不可避免地会带有一些漏洞。你未来的职业生涯获得了担保。软件不断地变复杂,软件中的漏洞数量也会和代码行数成正比地增加。而你所拥有的安全测试工具也在不断提升,就像你看到的,过去20年中模糊测试工具也一直在不断地进化。

1.1.1 安全事故

对于软件安全最主要的目的是避免安全事故:比如有人可以通过主动攻击损害系统安全性,以及由于人们的错误或由于洪水或龙卷风等自然灾害而引起的泄露或破坏数据的事件。

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021-2024 Kery
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信