干货分享|5分钟了解「软件缺陷」和面向「软件缺陷」的测试方法
模糊测试软件测试
6/20/2023
来源

首图.gif


当软件与我们的联系越来越密切的时候,我们也面临着许多问题。由于软件系统的数量、规模和复杂性每天都在增加,软件缺陷的数量也在增加,带来的质量和安全问题造成不可忽视的风险影响。及时并正确地检测和修复软件缺陷,不但将大大减少来自网络攻击和数据泄露的影响,更能提升软件质量、缩减产品成本。


什么是软件缺陷?

软件缺陷常常又被叫做 Bug,指计算机软件或者程序中存在的某种破坏正常运行能力的问题、错误或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。


软件应用程序中的一些主要和常见缺陷包括业务逻辑错误、复杂性问题、文件处理问题、封装问题、数据验证问题、身份认证和授权错误等。


许多人经常认为软件中的 "漏洞 "和 "缺陷 "是可以互换的词,其实不然,软件漏洞和软件缺陷有一定关联,但实际上是不同的。


软件漏洞和软件缺陷有什么区别和联系?

从两者的定义出发

国内外各种规范和标准对软件缺陷和软件漏洞都有相关定义,下面摘录两条。

IEEE 729-1983对软件缺陷的定义:从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。
中国国家标准 GB/T 28458-2020 《信息安全技术-网络安全漏洞标识与描述规范 》对漏洞的定义是:网络产品和服务在需求分析、设计、实现、配置、测试、运行、维护等过程中,无意或有意产生的、有可能被利用的缺陷或薄弱点。


攻击者可以利用软件中的缺陷来违反软件正常的安全策略和运行状态从而达到自己的攻击目的,比如让系统宕机从而使系统不能正常提供服务,或者绕过系统的保密机制泄露系统的信息数据等。结合标准中的定义,我们可以认为——可以被利用的一个或多个缺陷形成漏洞,缺陷是漏洞的根本原因。


对缺陷和漏洞的描述及管理

为了便于缺陷的管理,通用缺陷枚举(CWE)数据库对常见的软件和硬件缺陷进行了描述,将可能存在的软件缺陷进行了全面分类。


公开已知的漏洞被收录在通用漏洞披露(CVE)中,CVE为广泛认同的信息安全漏洞或者已经暴露出来的缺陷给出一个公共的名称,以更好的识别、定义和修复已知漏洞。


从 CWE 角度看,正是由于 CWE 的一个或多个缺陷,从而形成了 CVE 的漏洞。


而除了“已知的已知(CVEs)”、“已知的未知(CWEs)”,还存在大量“未知的未知(Zero Days)”——0day漏洞(Zero Days)是指软件或系统中已经被人发现,但还并未被开发商或使用者所知晓的缺陷或隐患。

640.png


如何减少软件缺陷的影响?

对软件缺陷有了一定的认识之后,我们来了解下软件缺陷的危害,以及如何减少它的影响。


产品上线后的缺陷往往带来严重影响。2021年11月,特斯拉宣布召回近12000辆汽车,召回原因是软件版本2021.36.5.2可能存在通信错误,或导致车辆意外启动紧急制动系统(ABS)或前置防撞报警器(FCW)系统。2020年2月16日,因系统出现故障,希思罗机场大量航班被取消或延误。此次事件也影响了行李处理系统和值机系统,数百名旅客被迫滞留,数千名旅客错过航班。


在发现并修复软件缺陷的过程中,越晚修复成本越高。《The Shift-Left Approach to Software Testing》中提到,假如在编码阶段发现的缺陷只需要 1 分钟就能解决,那么单元测试阶段需要 4 分钟,功能测试阶段需要 10 分钟,系统测试阶段需要 40 分钟,而到了发布之后可能就需要 640 分钟来修复 。


由此可见,使用必要的测试手段尽早发现、修复缺陷是非常重要的,有助于确保产品的质量,减少软件缺陷带来的负面影响。


针对软件缺陷的测试方式

关于所有测试方式及各测试方式能解决的问题,我们可以用下图来表示。

640 (1).png


对于已知的缺陷和已知的漏洞/暴露,一般使用静态分析安全测试(SAST)和软件组成分析(SCA)工具来检测。


静态分析安全测试:

指在不运行代码的方式下对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标。更容易发现违背编码标准、代码可维护性差、代码存在缺陷、需求缺失和接口规范不一致等缺陷类型。

不过,静态分析依赖于已知漏洞库,无法发现未知缺陷;误报率高,需要对比查找,人工核实是否需要修复;主要关注信息安全问题,比较少关注软件可靠性缺陷。


软件组成分析:

是一种用于管理开源组件应用安全的方法,通常在开发过程中对应用程序进行分析,可以检测出第三方组件的已知漏洞、第三方组件的软件许可问题和第三方组件的篡改问题。

SCA同样非常依赖已知漏洞库;影响SCA分析准确性的因素很多,比如支持组件的数量和检测算法、应用程序引用开源软件的方式等,且SCA的扫描效率和准确性是一对矛盾体,很难兼顾。


但是已知的缺陷和已知的漏洞/暴露只是冰山一角,由于软硬件系统的复杂性与多样性,未知的缺陷会更多。虽然它们没有被发现,但在客观上已经存在,带来的是隐蔽的威胁。一般通过渗透测试/人工测试来挖掘未知缺陷。


渗透测试/人工测试:

通常指模拟黑客采用的漏洞发掘技术及攻击方法,检测网络、主机、应用及数据是否存在安全问题,也即从攻击者角度发现分析系统的漏洞和潜在的安全弱点。

虽然通过渗透测试/人工测试可以在安全威胁被利用之前识别和解决这些威胁,但会消耗很多精力和时间,对测试人员要求也非常高,且需要为每个新软件开发单独的测试用例。


模糊测试有何优势?

经过分析,我们可以发现,针对软件缺陷的测试方式各有优劣,并不足以确保软件的安全性和稳定性。在已知缺陷挖掘方面,需要误报率低、自动化程度高、同时关注软件可靠性缺陷的测试方法;在未知缺陷的挖掘上,则需要更高效、更智能、更自动化的工具。


与之相对应的是,当前规模庞大的软件和系统中的缺陷往往难以被检测,有的缺陷甚至能潜伏十余年不被发现。目前缺陷修复的速度也远远追不上缺陷增长的速度——在Eclipse等开源社区中,一个缺陷平均需要半年以上才能被修复。这也意味着快速进行缺陷检测、定位、调试以及修复至关重要。


模糊测试作为当今世界极具创新的测试技术,可以有效弥补当前测试工具不足。

  • 模糊测试是强大的自动化软件测试方法,一旦模糊测试程序被设置好,就可以在没有输入的情况下继续寻找漏洞;
  • 模糊测试是动态测试技术,查找到的缺陷几乎没有误报;
  • 模糊测试能够发现其他软件测试技术无法找到的漏洞(特别适合用于挖掘0day漏洞),而且特别擅长发现程序崩溃、竞争死锁、断言失败、资源泄漏/短缺等引起系统运行异常的缺陷,加之其简单高效的特点,已经成为挖掘引起系统运行异常的缺陷、未知漏洞的利器;
  • ……

640 (2).png

近年来,国外ForAllSecure、Code Intelligence、Synopsys等公司纷纷聚焦模糊测试,面向军工、工业、汽车等领域客户,提供模糊测试相关工具和解决方案,取得了卓越效果。国内也涌现了不少模糊测试方向的创业公司,如安般科技,入局商业化智能模糊测试较早,落地经验丰富,技术实力相较于国外厂商也有很大优势。


总结

随着信息技术的飞速发展,软件已经成为信息化社会不可或缺的基础设施,高效地构建和运用高质量软件系统的能力成为国家和社会发展的一种核心竞争力。通过测试尽早发现并修复缺陷、降低软件潜在的安全风险十分必要。针对软件缺陷的测试方法和测试工具很多,模糊测试以其得天独厚的优势,在其中发挥的作用不容忽视。