Defensics健壮性测试工具测试方案
1. 前言
本文档就CodenomiconDefensics的工控安全测试方案提供说明,就测试原理,测试组网,支持的协议以及测试流程提供帮助,指导测试的进行。
2. 测试日程安排
N/A
3. 产品功能介绍
CodenomiconDefensics是基于协议级别的专门进行fuzzing测试的健壮性测试工具,专门用于发掘产品当中的未知漏洞。当前随着APTs高级持续攻击的日益猖獗,网络及工控安全面临前所未有的挑战,大部分的攻击利用的都是设备或系统当中的零日漏洞,这类漏洞由于缺少相应的防护措施以及补丁,往往成为黑客攻击的首选。而黑客在寻零日漏洞时往往采用的就是fuzzing技术,Defensics能够先敌而动,在黑客攻击之前发现产品当中隐含的零日漏洞,帮助客户弥补潜在的安全隐患。
CodenomiconDefensics通过构造有序的异常用例集合,来查看系统是否会出现中断或服务失败等现象。通过采用基于协议建模的构建方法,可以保证对协议所有状态机和字段的覆盖。而通过智能高效的用例生成策略,可以使测试人员从无限的数据源中摘取出容易诱发系统服务失败的数据。作为黑盒测试,Fuzzing测试不需要访问源代码,因此可在第三方软件上使用。通过自动化的用例生成、管理和执行,最大限度地提升测试效率,保证产品的安全质量。
4. 测试原理
模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。目前国际上公认寻未知漏洞的最佳途径就是通过Fuzzing
Codenomicon公司主推的Defensics产品就是一款基于黑盒的专门针对网络协议进行Fuzzing的安全性/健壮性测试平台。我们会选取出一系列的有组织的异常数据(畸形报文)发送给被测设备,并通过正常报文的探测来观察被测设备是否还处于正常工作状态。这里所谓的“有组织的异常数据”是通过一下两个方向来形成的:
缓冲区溢出/溢进,边界值,等等(后续会有具体分类);
根据某种特定网络协议的规约(比如RFC)来对该协议的每一个具体字段,以及整个状态机的所有报文顺序进行遍历,确保代码的高覆盖率。
以下是Defensics进行Fuzzing的原理,如图所示,一个完整的测试场景一般可以分为三个步骤:
互通性测试,互通性测试的目的是检测工具和被测物之间的配置一致性和连通性是否正常。工具会发送一组正常的协议报文用例到被测物,每个用例都是一个完成的报文交互过程,通过这样一组正常用例,可以覆盖协议所有的状态机和字段,在发送异常用例之前确保被测物状态正常,同时检查其支持的协议状态机。
发送异常报文,工具会基于正常的互通性用例生成异常用例,每一个用例同样是一个完整的协议交互,工具会修改其中的某个报文的某个字段或某几个字段,或者重新构造整个报文,用例的数量从几万到几百万不等,工具会自动化的执行测试。
发送探测报文,每发送一个异常测试用例之后,工具会发送一个正常的探测报文,去检查被测物是否能正常响应探测报文,其目的一是检查一下被测物在接收到异常报文后是否能够
正常提供服务,二是在进行下一条用例前确保被测物的状态正常。如果被测物能够正常响应检测报文,工具会自动跳转到下一条用例。如果不能正常响应,工具会一直检测下去直到被测物响应为止。
互通性测试
通过
失败
检查配置/一致性
发送异常报文
发送探测报文
通过
失败
轮数+1
下一个测试例
   
根据上图我们可以看到判定探测报文通过与否是我们检验某一条测试用例是否对SUT造成影响的唯一标准;而判定标准是由Timeout值决定的,该值由测试人员根据SUT的正常响应时间决定。所以,所有我们判定探测失败的测试用例,都是因为超过了Timeout值还没有得到正常的相应,通过这种机制,我们可以100%的确保没有误判,因为所有失败的用例都使得SUT在正常响应时间内无法提供服务。
这里我们以IPv6协议为例,结合Defensics的界面进行具体说明。
1. Interoperability中套件已经根据规约定义好正常的协议交互测试用例,这些用例覆盖了该协议所有可能的状态机。点击test即开始执行互通性测试,通过互通性测试可以检查测试仪和被测设备之间的配置一致性是否正常,有些被测设备可能并不支持协议的全部实现,会显示为部分pass,部分fail(绿表示pass,红表示fail)。
2.  在进行完Interoperability(互通性测试)之后,工具会基于刚才跑通的正常用例生成变异的测试用例,由于之前进行了互通性检测,可以保证被测设备对这部分功能是支持的。在5字符串长度工具test cases中可以选择异常用例的范围。
3.    在选择完测试用例后,在4Instrumentation中选择探测报文类型,这些探测报文都是正常的协议报文,默认情况下该功能是打开的。通过配置探测报文,测试工具会在每条测试用例中先发送异常报文,然后发送探测报文检查被测设备状态,如果被测设备正常响应,就跳转到下一条用例,如果不能,就重发该检测报文,直到被测设备响应为止。
4.  在完成4instrumentation5test cases之后,即可进入到6test run部分开始执行测试用例。
5. 功能特点
(1) 基于协议建模,全状态机全字段覆盖
Defensics是基于协议级别的fuzzing测试工具,每个协议有相应独立的套件,套件采用协议建模的方式进行构建,因此可以保证对协议状态机和字段100%的覆盖。在测试过程中,每一个用例都是一个完整的报文交互,因此不仅仅是可以对第一步交互进行fuzzing,而且可以对所有的协议交互流程进行深度的覆盖。
(2) 用例自动生成,基于黑盒测试原理
Defensics是基于黑盒测试的fuzzing工具,使用时无需访问源代码。测试脚本按照协议规约的定义已经内嵌其中,从用例的生成、管理、执行,到结果的导出,生成报告,完全实现自动化的运行。
(3) 用例公开,便于问题定位和复现
Defensics的用例库涵盖了协议的所有字段,数量从几万到几百万不等,并且可以根据需要手动调节用例库的规模。Defensics的每一个用例都是对用户公开的,用户可以查看用例报文的交互流程,报文的具体内容以及如何生成的异常用例。
(4) 广泛的协议覆盖,支持大多数主流通讯和工控协议
Defensics能够支持超过260种协议,涵盖了二层到七层的通讯协议、工控协议、文件格式、私有协议、空口协议等,目前大部分的通讯协议和主流的工控协议均可测试。
(5) 支持私有协议测试,提供二次开发Java SDK
针对私有协议特别是工控领域中大量用到的私有协议,可以使用Defensics专门针对私有协议的套件Traffic Capture Fuzzer进行测试。Traffic Capture Fuzzer采用抓包变异的原理,将正常的交互报文导入测试套,基于正常的报文进行fuzzing变异。并且用户可以根据需要修改、定制相关的测试脚本。针对一些复杂的协议交互,例如checksum校验、协议字段交互等,Codenomicon还提供一套Java SDK用于高级二次开发。
(6) 支持服务器端和客户端,提供双向测试
Defensics基于某个具体协议,可以提供针对服务器端和客户端的双向测试,从而确保对协议报文的完整覆盖。
6. 测试协议覆盖
目前Defensics可以针对260多种协议进行fuzzing测试,覆盖了从2层到7层的大部分通讯协议,工业控制协议以及私有协议。并且对一个特定协议可以支持服务器端和客户端两个方向。
支持的工控协议:
Modbus TCP PLC/Master,DNP3 Client/Server,Profinet DCP server,Profinet PTCP Client/Server,IEC61850 MMS Client/Server,GOOSE/SV,IEC60870-5-104 Client/Server,CIP/EtherNet

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。