安般科技带您读懂“什么是模糊测试”
从软件质量说起
随着信息技术的发展,计算机软件已逐步渗透到社会生活的方方面面,可以说目前是一个软件定义世界,软件定义服务,软件定义硬件的时代。
软件正在爆发式的增长,随之而来的软件质量问题也大大影响着我们的生活。比如新闻报道中出现的一辆新能源 汽车 出现刹车失灵,撞在树上等问题,其实都是软件质量问题导致的。新能源汽车的代码现在大概有3-4亿行,以后很可能会变成10亿行以上,依靠人力读完所有代码的可能性几乎没有。所以,我们势必需要以特定的软件测试方式去尽量避免因软件质量问题而引起的安全性、稳定性问题。
认识软件缺陷与漏洞
软件缺陷是影响软件质量的关键因素,同时它也是软件开发过程中不可避免的。软件缺陷也叫bug,指计算机软件或程序存在某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。
据统计,在软件开发中约有42%的经费用于投入与软件缺陷相关的工作,而在维护阶段发现bug的成本是开发阶段发现bug的100倍。由此可见,使用更先进的测试技术及工具尽快、尽早地发现软件的bug,将非常有利于降低开发成本、提升软件安全质量。
在软件缺陷中,有一种类型正逐步受到广泛的关注和重视,即软件漏洞。它是程序中可以被攻击利用的缺陷,也被称为软件安全性缺陷。经常被提及的有:已知漏洞、未知漏洞和0-day漏洞,我们可以通过下图来说明。
发现缺陷的方法
当今软件无处不在,那么应该如何去发现软件缺陷呢?当下我们可使用白盒、黑盒和灰盒测试技术来发现软件缺陷。
简单来说,黑盒测试可将被测程序看做是个黑盒子,我们看不到它里面做了些什么,只能通过输入输出看是否能得到我们所需的来测试。白盒测试可以当盒子是透明的,里面的一切我们都看得清楚,从而我们可以通过测内部结构来进行测试。而灰盒测试介于白盒和黑盒之间,不仅关注输入输出,还关注目标内部状态。
与众不同的智能模糊测试
模糊测试作为一种测试技术,其概念的提出最早可以追溯到 1989 年。但从模糊测试到智能模糊测试,其技术发展经历一段历程。早期的模糊测试技术主要以黑盒模糊测试技术为主,它具备简单、直接、粗暴的特点,但效率十分低下。随着人工智能技术的发展2014年后智能模糊测试进入高速发展的阶段,结合机器学习的灰盒模糊测试技术成为了主流。灰盒模糊测试通过源代码插桩等技术捕捉程序控制流信息,并通过控制流信息的变化来选取优异种子进行变异,因此测试效果要远高于黑盒模糊测试。
由于模糊测试技术的成熟与发展,国内外也纷纷出现一批 商业 化的公司可提供成熟的模糊测试产品,并逐步进入各个领域。国外如美国公司ForAllSecure、以色列公司Fuzzit。国内如安般 科技 ,是国内首家将智能模糊测试技术商业化的公司,旗下多款智能模糊测试工具已应用到了国防军工、软件测评中心、汽车等多个行业领域。
什么是模糊测试?
作为当今热门的测试技术,模糊测试是一种自动化的测试技术,它会根据一定的规则自动或半自动地生成随机数据,然后将这些产生的随机数据输入到动态运行的被测程序入口,同时监控被测程序是否有异常情况出现,如系统崩溃、断言失败等来发现软件的缺陷。
模糊测试技术可发现那些使程序运行异常的缺陷,同时它也特别适合发现未知/0-day漏洞。
模糊测试仅仅是随机吗?
看到这里,有人会问这不就是随机数自动化测试吗?怎么就叫模糊测试了呢?
随机测试中最著名的例子就是Android的Monkey Test(猴子测试)。其思想就是模拟猴子毫无逻辑的操作,以此来测试 手机 软件的健壮性。但它只是测试用户界面上的随机操作,有些深层次、底层的问题是很难发现的,如通讯协议的缺陷。
比较起来,模糊测试用例的变异,是建立在一定的规则上的随机,用例生成有如下两种算法:
基于生成:根据协议或接口规范进行建模,由模型直接生成新的测试用例。我们知道某些程序是无法接收非结构化的输入的,因为它对输入有严格的规则,例如协议规范、SQL语句。因此测试引擎在测试前需要预先学习相应的语法、语义规则,对其进行建模,并在此基础上才能变异出有效的测试用例。
基于变异:在已知数据样本的基础上通过变异的方法生成新的测试用例。例如要对一个图片文件进行变异,用户就需要提供一个相应格式的图片文件,变异生成器会基于这张图片进行变异。目前这种技术主流是灰盒模糊测试,在对样本进行变异的时候,能够获取代码逻辑信息,基于路径反馈进行变异,所以可达到一个很好的测试效果。
因此可以说,模糊测试与纯随机自动化测试,是完全不同的。模糊测试构造出的测试用例其针对性、有效性更强,测试效率更高。并且随着人工智能技术的发展,模糊测试技术结合更多种的智能分析方法,测试覆盖率会更高,测试用例的构造也会更快、更准确地发现程序深层次的缺陷。
模糊测试的工作流程
结合模糊测试的特点来看,它对被测程序是有要求的,一是可以动态运行,二是一定要有输入入口。
对于一个模糊测试通用的测试流程,其描述如下:
01
首先被测系统要动态运行,被测工具要与被测系统建立联系;
02
测试工具根据变异算法对原始测试用例进行变异;
03
测试工具将生成的测试用用例发送给被测系统的入口;
04
测试工具监控被测系统的运行状态(是否可以正常响应,是否可以正常运行);
05
测试工具如果发现缺陷,进行记录;
06
重复上述操作,直至测试结束。
模糊测试的优点
作为当今世界极具创新的测试技术,模糊测试一定有其特殊性,我们可以从如下几个方面进行总结:
01
模糊测试是一种自动化的测试方式,测试用例是由测试工具自动产生的,其测试效率高,且不依赖于测试人员的经验;
02
目前普遍使用的测试方式,大部分集中在功能测试,并结合一些非功能测试,如压力测试。但这些测试都是正面测试,很少有工具专注于负面测试(即验证软件不执行其不应该完成的工作)。而模糊测试的出现,正弥补了其他测试方法的不足,它专注于负面测试,与其他测试技术联合使用可全面保障软件的安全性和稳定性;
03
模糊测试是动态测试技术,因此查找到的缺陷几乎没有误报。而目前市面上流行的基本都是静态分析工具,其误报率远远高于模糊测试工具;
04
目前市面上的自动化测试工具更注重已知漏洞的发现,忽视了未知漏洞的危害,模糊测试工具正是发现未知漏洞的利器;
05
模糊测试变异的测试用例,是有一定规则的随机,相较于随机自动化测试工具,模糊测试的测试用例能达到更好的效果。
模糊测试能发现真正的缺陷吗?
模糊测试技术已经是软件测试、漏洞挖掘领域中最有效的手段之一,可发现程序中那些引起系统运行异常的缺陷。
近几年许多国际知名的大型公司也在开发自己的模糊测试工具,如FAANG(Facebook、Apple、Amazon、Netflix和Google)已经广泛使用模糊测试来检测未知/0-day漏洞,以确保其产品的健壮性和安全性。Google对模糊测试尤为重视,Chrome在最近几年利用模糊测试找到16000个bug,占所有bug总量的80%以上。而微软也将模糊测试应用在Windows内核、Office等产品的测试中,据报告Windows发现的安全漏洞约1/3是通过模糊测试技术发现的。此外,根据公开资料统计模糊测试也是黑客们发现软件漏洞的首选技术。因此可以说模糊测试技术是目前世界范围内热门的动态挖掘软件深层次缺陷的有力工具。
模糊测试,它的能与不能
世界上没有任何一种测试技术或工具是完美的,也没有任何一种测试技术或工具,可以保证软件0缺陷。模糊测试技术也是如此,它善于发现某些类型缺陷的同时,也存在着一定的局限性。
这些缺陷,“我可以”
由于模糊测试的特性,模糊测试工具更擅长发现那些会引起系统运行异常的缺陷,其缺陷类型如下图所列。
这些缺陷,“Say sorry”
模糊测试是发现那些引起系统运行异常的缺陷、未知漏洞的利器。但对逻辑上的缺陷却无能为力,例如访问控制漏洞、代码逻辑错误漏洞、后门、多点触发的漏洞(当前的模糊测试技术只能挖掘出由单个因素引起的漏洞)等,这些类型缺陷就无法通过模糊测试发现。
那些正在被fuzzing的程序
目前模糊测试技术的应用十分广泛, 可以测试的对象种类繁多, 比如源代码、API接口、通讯协议、数据库系统等。
源代码模糊测试,是一种灰盒模糊测试。可通过特定的编译器对源码进行编译,在其编译的过程中对源代码进行插桩,取得代码的逻辑结构,并基于路径反馈进行变异。然后通过程序入口输入大量的非预期输入,观察该程序是否能够正常响应。这种类型的模糊测试工具,可以作为单元测试在开发阶段进行,比如安般科技的拳头产品——易恒智能模糊测试系统。
Web 应用程序容易受到各种类型的漏洞攻击, 如拒绝服务、跨站点编写脚本等。通过对Web API的接口函数进行模糊测试,可保证Web应用程序的安全性和稳定性,安般科技旗下的易察WEB/API 模糊测试系统正是该类型产品。
通讯协议的模糊测试可能是最广泛被利用的模糊测试类别。主要是因为它能够发现很多高风险漏洞,其测试对象包括工控设备、智能驾驶设备、物联网设备等。安般科技的易侦协议模糊测试系统就在被大范围的商业化应用中。
针对数据库系统的模糊测试,是通过对数据库访问操作语句进行变异,然后将测试用例输入到数据库系统中,但其变异算法较为复杂,因此目前成熟的数据库系统模糊测试工具较少,但该类型的模糊测试工具对推进国产软件自主化的发展价值巨大,安般科技相关产品也将推出上市。
模糊测试的发展方向
模糊测试通过其特定的测试方法可以发现程序代码中隐藏的、很难通过常规测试方法发现的缺陷和漏洞,所以在现实中的意义巨大。
未来,模糊测试会逐步深入到开发流程中,在开发的各阶段对程序进行模糊测试。例如在软件设计阶段,针对软件架构设计好模糊测试方案,引入模糊测试工具进行单元测试,实现测试左移;在测试验证阶段,基于设计好的模糊测试方案,进行大规模的模糊测试,同时可将模糊测试工具集成到CICD流程中进行全自动化的模糊测试。
在模糊测试应用场景方面,由于嵌入式技术的迅猛发展以及多个领域的广泛使用,针对嵌入式设备的模糊测试也是一个发展方向,但模糊测试要求被测程序动态运行,因此与固件仿真技术相结合,可使模糊测试技术更广泛地应用到嵌入式领域中。目前将两者成功结合的成熟经验在世界范围内都比较欠缺,但安般科技在该领域已经取得了阶段性的成果,并开始逐步商用,填补了国内外的空白。
另外,随着对模糊测试技术的重视,各国也纷纷将模糊测试技术纳入软件测试标准中,未来模糊测试工具将会进一步集成到各大测试平台,形成统一的测试规范。
简而言之,模糊测试正在逐渐改变软件测试的整个生态。