干货分享 | 协议模糊测试的应用、挑战和发展

源起

1988年,在威斯康星大学Barton-Miller教授的计算机实验课上,首次提出Fuzz生成器(Fuzz Generator)的概念,用于测试Unix程序的健壮性,即用随机数据来测试程序直至崩溃。因此,Barton Miller教授也被多数人尊称为”模糊测试之父”。

概念

模糊测试作为一种常用的软件安全测试技术,目的是寻找软件系统或给定目标程序的漏洞。其核心是自动或半自动的生成随机数据输入到应用程序中,同时监控程序的异常情况,如崩溃、代码断言失败,以此发现可能的程序错误,如内存泄漏。在系统开发与调试过程中,模糊测试也可以找到那些我们可能没有注意到的缺陷。

由于模糊测试技术具有可以充分遍历所有输入数据、代码覆盖全面、测试自动化,能够有效地发现软件中存在的安全问题等特点,受到信息安全中漏洞分析领域研究人员的广泛欢迎。模糊测试的对象可以是应用程序、操作系统、数据库、通信协议、智能合约等。其中,以协议模糊测试技术应用最为广泛,发展了约20多年,已经有许多成熟的测试工具。

本文主要讨论的是协议模糊测试的相关话题。

协议模糊测试

在互联网飞速发展的今天,许多本地应用都是在B/S模式下转化为网络服务:服务器部署在网络上,而客户端应用程序通过网络协议与服务器通信。网络协议的安全性测试成为一个重要问题。协议中的安全问题可能会产生比本地应用更严重的损害,如拒绝服务、信息泄露等。

早期的网络协议模糊器主要以黑盒的方式运行,通常是盲目地、持续地生成消息,并将消息发送到位于给定IP地址和端口的被测服务SUT(Server Under Test)。尽管黑盒模糊测试很容易实现,但由于在模糊过程中缺乏SUT内部反馈,导致代码覆盖率和漏洞发现效率具有局限性。因此也出现了很多改进的模糊测试方法,比如基于模型的协议模糊测试技术,该方法的关键在于如何去描述程序输入数据格式以及如何生成测试用例,结合输入数据的先验知识,包括格式或者规范等,通过建立数据描述模型,进而指导测试用例产生和执行,其优点在于不需要源代码、不受限于被测系统的内部实现细节和复杂程度。

在针对多状态协议的模糊测试方面,研究者们也提出了一些优化办法。比如采用XML脚本对协议状态机进行描述,通过构建协议状态转换路径标识的有限状态机和相应的测试数据序列,并设计算法去除具有相同路径转换关系的测试数据序列来为具有状态的协议生成模糊测试数据,以提高有状态协议的模糊测试效率。

研究者们利用这些方法与现有模糊测试工具相结合,虽然一定程度上提高了对多状态的覆盖率,但是依然无法避免传统协议漏洞挖掘工具的繁琐性。除了对模糊测试本身的算法进行优化以外, 近年来,随着灰盒模糊测试工具AFL的流行,研究者开始将AFL中基于程序反馈与遗传算法的灰盒模糊测试思想引入到协议模糊测试中,有效提高了协议模糊测试的性能。另外,模糊测试领域与机器学习各个领域相关知识的结合成为了新的研究热点。

应用领域

网络服务及设备

网络协议测试的对象是各类网络产品中的网络协议解析模块,目的是在测试其在组装、解析网络协议的过程中是否存在漏洞。其思想是模糊器通过Socket与被测目标之间进行通信,向被测目标应用发送变异或者包含错误的模糊值,并监视目标应用以发现错误。因此我们首先需要做的就是研究各类协议的规范和标准,以便创建合理的测试用例。

在常见的网络协议测试中,主要有两种类型。第一种是客户端和服务器模式,即模糊器和被测对象分别为测试过程中的两个端点。在这个过程中,模糊器既可以充当客户端的角色,用来测试服务端程序的安全性,比如Web服务程序,也可以充当服务端角色,用来测试客户端的安全性,一般还会有一个监视器模块,用来对被测对象的行为进行收集、分析以判断是否存在异常情况。第二种主要是用来测试防火墙、路由器和安全网关等部署在网络中间的设备,模糊器构造的数据被发送到协议服务器的过程中,位于模糊器和协议服务器之间的被测对象对其起到了重组和解析的作用,一旦重组和解析的过程中出错,可能造成被测对象出现异常状态,同样地,这里也会有一个监视器模块,来对被测对象的异常状态进行收集、分析,最终定位漏洞所在的位置。

车联网

由于汽车与外部通信的接口不断增多,黑客可以通过多种方式与汽车内部的 CAN总线网络进行通信。另外,由于 CAN 总线本身的脆弱性,攻击者往往利用向总线上发送非预期的报文从而对汽车产生影响。再就是利用测试工具通过随机生成大量数据,将数据发送给车辆,可以通过发送大量伪造报文来进行拒绝服务攻击。

另外还有车外通信,比如典型的无线通信协议蓝牙、WIFI,以及近年来的5G等。随着技术的发展,越来越多的设备通过无线传输的方式连接到互联网,在给使用者带来便捷的同时,也给了攻击者提供了更多的攻击机会。比如通过欺骗用户连接到虚假的WIFI接入点。

模糊测试技术除了用于揭示安全漏洞以外还可以用于入侵检测算法的测试与验证。

物联网

鉴于对提升IoT系统的安全性的迫切需求,许多国际上重要的物联网设备供应和制造商,例如华为、海康、谷歌、思科等,都分別成立了自己的IoT安全实验室。国内外的重点高校,实验室,研究所,也开始关注和开展了大量的IoT系统安全研究。

在对传统软件的安全漏洞挖掘研究中,模糊测试技术能够取得不错的效果,历史上通过模糊测试检测出过大量的软件安全漏洞。模糊测试主要方法是通过随机构造的输入数据,对软件进行破坏性测试,用以挖掘出软件中存在的潜在安全漏洞与缺陷。

工业控制

随着“两化”融合的推进和以太网技术在工业控制系统中得到大量使用,进而引发的病毒和木马攻击工控设备的事件不断出现,严重威胁基础工业控制设备的安全运行,其造成的 损失可能非常巨大,甚至不可估量。2010 年 10 月, 伊朗“震网”(Stuxnet) 病毒事件,引起了各国对工控设备安全的高度重视。必须要针对工业控制系统设备进行安全性模糊测试, 发现潜在安全风险,以便及时采取风险应对措施,防止安全风险被进一步利用,降低工业控制系统安全风险被利用的概率。

工控设备的通信协议可分为3类:基础通信协议(ARP、IP、ICMP、TCP、UDP等)、通用服务协议(HTTP、FTP、SNMP等)和工业控制协议(Modbus TCP、Ethernet/IP、DNP3、BACnet等)。由于工控设备自身的脆弱性,往往在基础通信协议和通用协议测试中就能发现不少问题。

面临挑战

网络服务可能会定义它们自己特有的通信协议,有时我们也称其为“专有协议”或“私有协议”,而这些协议标准往往不公开。此外,即使是有文档规范的协议,其具体实现也不一定能严格遵循诸如RFC文档之类的规范。

协议模糊器需要与被测目标建立通信连接,然后将生成的符合协议规范的测试用例发送给被测目标。建立通信的过程和发送测试用例的过程会带来额外的开销,因此协议模糊测试吞吐量往往低于本地文件模糊测试的吞吐量。

协议模糊测试的被测目标通常具有很大的状态空间,有时需要精心构造特定顺序的消息序列才能到达某一状态。早期的协议模糊测试工具常采用基于生成的方式进行黑盒模糊测试,这种方式依赖于协议格式的先验知识来生成有效的模糊测试用例,并且由于黑盒的特性,很难探索深层次的漏洞。

发展趋势

协议模糊测试的发展以AFLNET工具为分界线。在AFLNET提出之前,主流的协议模糊测试工具采用黑盒的方法,由于黑盒测试不能得到SUT的反馈,模糊测试很难有效探索协议的状态空间;在AFLNET提出之后,基于覆盖的有状态灰盒模糊测试成为协议模糊测试的主流方法。未来协议模糊测试技术的研究应侧重于两点:

一是改进种子筛选策略,以更快更有效地发现深层次的漏洞。

二是引入状态感知和结构感知的变异,使模糊测试变异阶段能够生成更有效、更有价值的测试用例。

开源网安模糊测试平台(SFuzz)

开源网安模糊测试平台是自主研发的基于模糊测试技术的黑盒安全检测产品,专注于面向文件格式和网络协议的模糊测试,具有模块化、跨平台、自动化测试及高效可控等优点。在航空航天、医疗、物联网、计算机、工业控制系统等行业实践落地并广受客户好评。与国际同类产品相比,本产品在技术创新性、产品功能、可靠性、稳定性等方面已处在同一梯队,并在产品本地化方面,如中文支持、售后服务及适用性等方面优于国外产品,完全可用于国外相关产品的国产化替代。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark Streaming 和 Flink 都是流处理框架,但在一些方面有所不同。 1. 数据处理模型 Spark Streaming 基于批处理模型,将流数据分成一批批进行处理。而 Flink 则是基于流处理模型,可以实时处理数据流。 2. 窗口处理 Spark Streaming 的窗口处理是基于时间的,即将一段时间内的数据作为一个窗口进行处理。而 Flink 的窗口处理可以基于时间和数据量,可以更加灵活地进行窗口处理。 3. 状态管理 Spark Streaming 的状态管理是基于 RDD 的,需要将状态存储在内存中。而 Flink 的状态管理是基于内存和磁盘的,可以更加灵活地管理状态。 4. 容错性 Flink 的容错性比 Spark Streaming 更加强大,可以在节点故障时快速恢复,而 Spark Streaming 则需要重新计算整个批次的数据。 总的来说,Flink 在流处理方面更加强大和灵活,而 Spark Streaming 则更适合批处理和数据仓库等场景。 ### 回答2: Spark Streaming 和 Flink 都是流处理框架,它们都支持低延迟的流处理和高吞吐量的批处理。但是,它们在处理数据流的方式和性能上有许多不同之处。下面是它们的详细比较: 1. 处理模型 Spark Streaming 采用离散化流处理模型(DPM),将长周期的数据流划分为离散化的小批量,每个批次的数据被存储在 RDD 中进行处理,因此 Spark Streaming 具有较好的容错性和可靠性。而 Flink 采用连续流处理模型(CPM),能够在其流处理过程中进行事件时间处理和状态管理,因此 Flink 更适合处理需要精确时间戳和状态管理的应用场景。 2. 数据延迟 Spark Streaming 在处理数据流时会有一定的延迟,主要是由于对数据进行缓存和离散化处理的原因。而 Flink 的数据延迟比 Spark Streaming 更低,因为 Flink 的数据处理和计算过程是实时进行的,不需要缓存和离散化处理。 3. 机器资源和负载均衡 Spark Streaming 采用了 Spark 的机器资源调度和负载均衡机制,它们之间具有相同的容错和资源管理特性。而 Flink 使用 Yarn 和 Mesos 等分布式计算框架进行机器资源调度和负载均衡,因此 Flink 在大规模集群上的性能表现更好。 4. 数据窗口处理 Spark Streaming 提供了滑动、翻转和窗口操作等灵活的数据窗口处理功能,可以使用户更好地控制数据处理的逻辑。而 Flink 也提供了滚动窗口和滑动窗口处理功能,但相对于 Spark Streaming 更加灵活,可以在事件时间和处理时间上进行窗口处理,并且支持增量聚合和全量聚合两种方式。 5. 集成生态系统 Spark Streaming 作为 Apache Spark 的一部分,可以充分利用 Spark 的分布式计算和批处理生态系统,并且支持许多不同类型的数据源,包括Kafka、Flume和HDFS等。而 Flink 提供了完整的流处理生态系统,包括流SQL查询、流机器学习和流图形处理等功能,能够灵活地适应不同的业务场景。 总之,Spark Streaming 和 Flink 都是出色的流处理框架,在不同的场景下都能够发挥出很好的性能。选择哪种框架取决于实际需求和业务场景。 ### 回答3: Spark Streaming和Flink都是流处理引擎,但它们的设计和实现方式有所不同。在下面的对比中,我们将比较这两种流处理引擎的主要特点和差异。 1. 处理模型 Spark Streaming采用离散流处理模型,即将数据按时间间隔分割成一批一批数据进行处理。这种方式可以使得Spark Streaming具有高吞吐量和低延迟,但也会导致数据处理的粒度比较粗,难以应对大量实时事件的高吞吐量。 相比之下,Flink采用连续流处理模型,即数据的处理是连续的、实时的。与Spark Streaming不同,Flink的流处理引擎能够应对各种不同的实时场景。Flink的实时流处理能力更强,因此在某些特定的场景下,它的性能可能比Spark Streaming更好。 2. 窗口计算 Spark Streaming内置了许多的窗口计算支持,如滑动窗口、滚动窗口,但支持的窗口计算的灵活性较低,只适合于一些简单的窗口计算。而Flink的窗口计算支持非常灵活,可以支持任意窗口大小或滑动跨度。 3. 数据库支持 在处理大数据时,存储和读取数据是非常重要的。Spark Streaming通常使用HDFS作为其数据存储底层的系统。而Flink支持许多不同的数据存储形式,包括HDFS,以及许多其他开源和商业的数据存储,如Kafka、Cassandra和Elasticsearch等。 4. 处理性能 Spark Streaming的性能比Flink慢一些,尤其是在特定的情况下,例如在处理高吞吐量的数据时,在某些情况下可能受制于分批处理的架构。Flink通过其流处理模型和不同的调度器和优化器来支持更高效的实时数据处理。 5. 生态系统 Spark有着庞大的生态系统,具有成熟的ML库、图处理库、SQL框架等等。而Flink的生态系统相对较小,但它正在不断地发展壮大。 6. 规模性 Spark Streaming适用于规模小且不太复杂的项目。而Flink可扩展性更好,适用于更大、更复杂的项目。Flink也可以处理无限制的数据流。 综上所述,Spark Streaming和Flink都是流处理引擎,它们有各自的优缺点。在选择使用哪一个流处理引擎时,需要根据实际业务场景和需求进行选择。如果你的业务场景较为复杂,需要处理海量数据并且需要比较灵活的窗口计算支持,那么Flink可能是更好的选择;如果你只需要简单的流处理和一些通用的窗口计算,Spark Streaming是更为简单的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值