今天要给大家推荐的论文是来自清华大学软件学院Wingtecher Lab投稿的最新研究Bleem: Packet Sequence Oriented Fuzzing for Protocol Implementations,目前该工作已发表于USENIX Security 2023。
研究背景
协议实现是网络基础设施的基石,需要正确处理潜在攻击者的畸形或恶意流量。
模糊测试作为一种自动化软件测试技术,在检测软件漏洞方面非常有效。然而,传统的协议模糊器两方面问题。
首先,盲目生成测试报文降低效率。经典协议模糊测试器Peach基于用户预设的测试模型生成报文,但缺乏程序反馈,难以识别有价值尝试并用于进一步优化。为解决此问题,一些方法引入了进化算法:通过覆盖率识别有价值的报文,并直接保存用于后续变异,这基于相同报文在发送给同一协议程序时具有可复现行为的假设。然而,这些方法仍存在局限性:首先,这些反馈机制需要对源代码或二进制程序进行插桩,不适用于黑盒测试场景。其次,一些协议的特定验证规则可能使现有的进化算法失效。如TLS、DTLS和SSH等协议,在握手过程中采用随机数防止“重放攻击”,在这种情况下,之前探索过程中保留的有价值的报文无法再次重现当时的行为,因此,后续基于这些报文的变异难以产生有价值的结果。
其次,由于协议是有状态的系统,被测程序的输入空间受所处状态的约束。有效遍历协议状态空间并覆盖多样交互情形需精心构造报文序列,这涉及复杂的协议逻辑,包括报文的传输顺序及报文的语法语义正确性。Peach基于用户自定义的协议模型生成报文序列,它能有效覆盖模型内涉及的逻辑,但无法测试超出模型描述的逻辑。
技术方案
与以往的协议测试模式只测试协议服务端不同,Bleem将协议的客户端引入进来,将服务端和客户端作为整体的测试对象SUT,并采用Man-in-the-Middle的测试方式。下图是Bleem的框架设计图,主要分为两个模块。
第一个模块是反馈收集模块。Bleem引入了一种非侵入性的实时反馈机制,通过分析待测系统SUT的输出(即报文序列)实现。其基本原理在于,报文序列既反映协议系统内部状态,又具有结构化特点。因此,Bleem在运行过程中收集目标系统的输出报文序列,分析其中传达的语义,并以客户端与服务端作为一个整体系统的视角来构建系统状态转换图。
具体来说,在分析报文时,Bleem采用了报文解析方法,通过报文中的类型字段识别报文的语义信息,并对具体报文进行“抽象化”。例如,下图展示了QUIC协议握手过程,图中的报文表示经过抽象化处理的结果,如Intial[CRYPTO]代表该报文为Intial报文,且其中包含一个CRYPTO类型的子帧。
基于此,作者提出了系统状态追踪路径,以每个报文发送时间节点进行建模。下图展示了将上述会话建模后的状态追踪路径。每个状态涉及协议参与双方的状态,例如状态"S(b)|C(a)"表示客户端(C)在发送完a报文后,服务器(S)即将回复b报文。
更多的技术实现和实验细节可以访问原文: https://www.usenix.org/conference/usenixsecurity23/presentation/luozhengxiong 投稿作者介绍: 罗正雄 清华大学软件学院直博四年级学生,主要研究方向为网络协议的安全,相关研究成果发表于USENIX Security、DAC、EMSOFT等,并获得EMSOFT'19和EMSOFT'22最佳论文提名。
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-05-30 Bleem
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论