技术分享|从Fuzz到SFuzz,模糊测试的进阶之路

2022-03-26 15:30

在当前的测试体系中,软件生命周期各个阶段都存在检测工具以应对可能会出现的风险,比如:设计阶段的组件安全及合规工具,识别引用代码的安全性和开源证书的等级;开发阶段的代码审核工具,检测静态代码中存在的明显漏洞和问题;运行阶段的实时防护工具,对可能出现的问题进行防护。这些工具为软件的安全做出了贡献,但是这些工具暴露的问题也显而易见:只能解决事先设定的有限的问题。测试若不能覆盖到指数级别的代码运行路径,一旦存在未测试过的代码路径,就很有可能存在漏洞。





为应对软件周期的各种风险,Fuzz应运而生

模糊测试(Fuzz Testing, Fuzzing)是一种重要的安全测试技术,广泛应用于计算机系统、网络通信系统、IoT设备等复杂系统的安全测试,也是渗透测试的必备方法之一。其核心思想是自动或半自动的生成非预期数据发送给被测对象,并实时监控被测对象的工作状态,检测被测对象工作是否异常,如崩溃、断言(Assertion)失败、服务中断等,以发现被测对象潜在的安全漏洞,如缓冲区溢出、死锁等。是安全测试和渗透测试的重要手段之一。

可以概括性地理解为:

自动地、随机地产生数据,将数据输入到被测对象,监测被测对象的状态。




模糊测试仍有痛点,需求也在不断变化

从1988年模糊测试概念提出来后,模糊测试经历了30多年的发展,但是,这些工具始终存在着工业化、应用化的痛点,使其大多停留在实验室或者个人研究阶段,没有大规模集成的商业化应用出现,其主要问题为:



测试效率低

几乎所有工具只能单线程执行逻辑,未有效利用现如今单机高达GHz级别的算力。



漏洞检出率低

从理论上说模糊测试工具能够检测出漏洞,但是模糊测试工具提供的漏洞数量还是远少于漏洞检出数量,大多数漏洞还是依赖于专业人员。



易用性差

只有极个别工具有可视化的界面操作,绝大多数工具还是依赖于专业人员,上手模糊测试需要很高的门槛。

我们必须要正视以上痛点,同时随着模糊测试的不断发展及所存在现实原因,相应的需求也在不断变化着,具体表现为:



复杂协议的安全测试需求

随着电气化设备数量的递增,简单协议已经不能满足于现有设备的通信,协议趋向于往复杂化、定向化发展。



多样性的安全需求

现存工具无法满足产品开发团队不同利益相关方的诉求。


   


   国产化替代需求

近年来的某大国在芯片行业我国的封锁显而易见,我们有必要实现自己的模糊测试平台,防止被“卡脖子”。




SFuzz—自动化检测未知安全漏洞

近年来,为应对Fuzz持续出现的需求及痛点,国内厂商始终在努力,力求创建更高效、智能的模糊检测平台,开源网安就是其中的佼佼者。其开发的开源网安模糊测试平台(简称SFuzz), 适应性强、扩展性好。基于模型智能生成的测试用例,可高效检测出各种软、硬件系统中的未知漏洞。是产品开发、质量保证、产品测试、安全测试等团队及安全检测实验室等单位的有力助手。可广泛应用于航空、航天、医疗、物联网、计算机、工业控制系统(电力、水利、能源、数据采集)等领域。


概括性理解为:下一代智能模糊测试平台。







那么SFuzz是如何解决痛点和需求的呢?




以关键技术作为第一驱动力


  • 模型文件格式

    SFuzz的模型文件使用的是XML格式,根据RFC对协议格式的定义,结合SFuzz模型的规范编写数据模型及状态模型等。为了方便相关人员的快速上手使用,SFuzz已经完成了近200种左右标准协议的模型文件编写。SFuzz提供模型的自定义功能,使得用户的私有协议可以低代码甚至零代码的方式得到支持。


  • 测试用例生成

    Fuzzing引擎算法中,融合了基于变异和基于生成两种方式生成测试用例,整理出一套完整的“协议规范内的通用语言”,以兼容各种不同的协议,使得整个模板解析部分更具有通用性。


  • 模糊化算法

    根据模版引擎解析出来的数据结构和行为,我们需要搭配模糊化算法生成具体的模糊化数据,虽然模糊测试的结果是建立在量的基础上的,但相比于完全随机的模糊,优秀的算法能进一步保障模糊化出来的数据质量,更容易测出潜在的安全缺陷。





(SFuzz功能架构)




以创新打造超强竞争力


  • 支持的协议丰富

  • 支持的标准协议近200种,包括底层网络协议、传输层协议以、网络客户端协议以及工业控制协议、蓝牙WIFI协议等。


  • 支持测试用例自定义

    基于RFC定义文档开发,支持对全部可变字段的设置,包括优先级、是否变异及默认值等。


    对私有协议支持友好

  • 通过创建自定义的模型,实现对自定义或专有协议的测试。


以上三点联合解决了 “复杂协议的安全测试需求”和“安全需求的多样性”问题。近200种标准协议,覆盖了OSI七层模型中从数据链路层一直到应用层的绝大多数协议。类似WiFi(802.11*)、蓝牙这些复杂协议都有支持,实现了“复杂协议的安全测试需求”。“支持测试用例自定义”“对私有协议支持友好”保证了在处理SFuzz暂不支持的协议或者私有协议时,能够提供完善的后备机制,保证了“安全需求的多样性”。





(SFuzz工作原理)


  • 支持的变异算法多样

    支持60+种变异算法,实现对测试用例的智能化变异。并且用户可以指定协议中字段变异的优先级、是否编译等选项。实际上提升了变异数据的随机性,进而能够匹配到被测对象中更多的路径,从而解决“漏洞检出效率低”的痛点。


  • 支持并行化测试

    支持测试代理的多地执行,添加测试任务后可以分配给多个测试代理。在以往的工具中,要么不支持并行化测试,要么测试流程呈链式结构受限于单一节点的吞吐能力。SFuzz实现了基于代理形式的并行,能够将测试任务分割,分配到多个代理。代理执行测试任务时,具有高内聚的表现,整体系统的吞吐能力不受限于单一节点的吞吐能力,即增加代理节点即能增加并行能力。有效地解决了“测试效率低”的痛点。


  • 具备多平台监视能力

    监测器包含适用于 Windows、Linux 和 OS X 等多个平台。


  • 测试进度可视化

    界面可以直观地看到测试任务的进度及运行状态。


  • 丰富的测试报告

    报告提供一个全面总结,包括测试任务的基本信息、参数配置及可变字段描述等。


以往的工具中最大的问题就是可用性的问题,要么工具适用范围极小,要么工具只支持某种特定的运行环境。这严重影响了工具的使用和传播。SFuzz具备在多平台运行能力,并且所有测试进度可视化,可对所有测试进行可视化管控。当然,SFuzz也有能力生成一个丰富的测试报告,囊括测试相关的详细的信息,为后续跟进人员提供便利。这些功能都有效率地解决了“易用性”痛点。


SECZONE—软件安全国产化的先行者

SecZone是中国人完全控股的企业,一直致力于软件安全的国产化。SecZone具备SFuzz的软件著作权,对SFuzz相关专利具备完全控制能力。SFuzz是国内第一家也是唯一一家能够完整解决现有痛点和需求的模糊测试平台。





(SFuzz运行场景)


在全球化趋势有逆向,碎片化的今天。类比一个国家应有一个完整的工业体系,测试系统中不仅需要传统手段,更需要将测试体系完整化,这样才能不受制于其他外部力量。为了这一远大的目标,我们实现了模糊测试平台的国产化,实现了我国模糊测试平台的零的突破。为中国软件企业提供更安全、更高效的测试手段。


不忘初心,捍卫中国软件安全。