深度包检测(Deep Packet Inspection,DPI)系统能够记录并阻止异常的网络连接,在网络防护中发挥着重要作用。然而,DPI系统往往由各厂商自主设计,缺乏统一的安全实现规范,因此,DPI系统中容易出现安全漏洞。攻击者可以构造攻击数据包来触发其漏洞,绕过DPI系统对特定网络连接的检查,实现非法数据传输与服务访问的效果。现有工作通常使用人工检查、符号执行与模糊测试等方法来检测DPI系统中绕过检测规则的漏洞,但存在需要过多人工干预、路径爆炸、反馈信息较少等不足,难以实现高效的漏洞挖掘。为此,开发了基于差分测试的DPI系统漏洞检测框架StateDiver,该框架以DPI系统的状态转移情况为引导,为测试用例的变异和筛选提供指导,实现对DPI系统中绕过检测规则漏洞的高效挖掘,发现了Snort、Snort++、Suricata等开源DPI系统中的16个规则绕过漏洞(其中,8个为已知漏洞,8个为新发现的漏洞)。

该成果“StateDiver: Testing Deep Packet Inspection Systems with State-Discrepancy Guidance”发表在国际会议Annual Computer Security Applications Conference (ACSAC 2022) 上。ACSAC是CCF B类会议,与DSN、ESORICS和RAID并称为网络与信息安全领域的“四小安全会议”。2022年,ACSAC会议共收到投稿303篇,录用73篇,接收率为24.1%。会议于2022年12月5日至2022年12月9日在美国得克萨斯州奥斯丁举办。

  • 论文链接:

    https://doi.org/10.1145/3564625.3564650

  • 代码链接:

    https://github.com/CGCL-codes/StateDiver

背景与动机

传统网络防火墙中的普通报文检测仅能分析传输层及以下网络层级的报文内容,深度包检测(Deep Packet Inspection,DPI)则能够对数据包的应用层有效载荷进行解析,从而提供更强的数据包检测与过滤功能,如对病毒、数据泄露、网络钓鱼攻击等的检测与防御。为了实现上述功能,各个厂商需要在DPI系统内部实现一套自己的网络协议栈,这是因为:1)DPI系统需要持续跟踪并分析大量网络数据流,以从中提取出应用层报文信息用于分析,所以,标准的协议栈无法满足DPI系统的负载需求; 2)不同类型的操作系统(如,Windows和Linux)的协议栈实现以及同一类型不同版本操作系统(如,不同内核版本的Linux操作系统)的协议栈都可能存在差异,为了能够适配和兼容所有操作系统,DPI系统需要自主实现一套网络协议栈。

目前,厂商通常依赖协议标准文档(RFC)来实现DPI系统的协议栈,这一做法带来如下安全隐患:1)开发人员对自然语言编写的协议文档具有不同的理解,因此,其实现的协议栈可能由于理解错误而引入安全问题;2)厂商为了提升性能等需求而对协议栈进行定制化实现,可能忽略RFC文档中规定的某些细节,从而产生具有漏洞的协议栈实现。因此,DPI系统和网络端设备(客户端和服务器)对相同数据包可能会有不同的处理逻辑。攻击者通过精心构造报文,可能使得DPI系统和端设备进入不同的逻辑分支,导致DPI系统的协议栈状态与网络端设备的协议栈状态出现不一致,并最终实现对DPI系统中检测规则的绕过攻击。

现有检测DPI绕过漏洞主要有三种方法,人工分析、符号执行与模糊测试。人工分析主要依靠技术人员经验和手动测试分析,无法实现自动化的漏洞挖掘;基于符号执行的方法能够自动且系统地探索DPI自主协议栈的各个分支,但往往需要消耗大量的资源,存在路径爆炸等问题,这些缺陷阻碍了符号执行针对DPI系统的大规模测试;现有的基于模糊测试的DPI绕过漏洞检测方法缺少有效的反馈机制,导致其在种子变异的有效性和高效性方面存在不足。为此,我们提出一种以状态转移情况为引导机制的差分测试方法,旨在高效检测DPI系统的绕过漏洞。

设计与实现

通过分析已知的DPI系统绕过漏洞,我们发现,当DPI系统处理攻击数据包序列时,在包含恶意应用层负载的数据包到达之前,具有漏洞的DPI系统往往会呈现出异常的状态转移,如提前转入TCP的CLOSE_WAIT状态,而不具有该漏洞的DPI系统则不会出现异常的状态转移。由此,我们设想了基于状态转移情况来指导动态测试的漏洞检测方法,优先选择能够导致状态异常转移的测试数据包作为输入并在此基础上进行变异,从而触发DPI系统中更多的状态异常转移,并最终挖掘到导致绕过检测的漏洞。

然而,直接判断DPI系统是否处于异常状态存在挑战:我们需要严格定义异常状态的特征与判断标准,而不同的DPI系统的实现架构、编程语言等都不一样,这就使得难以实现一套通用的高准确率的DPI系统异常状态识别方法。为此,本文提出了一种差分测试方案,即同时观测多个DPI系统执行情况,通过对比执行结果来发现状态的异常转移。具体而言,我们将一组数据包称为一个输入,将该数据包与在此基础上变异生成的数据包称为一对输入。将一对输入送入多个DPI系统,检查不同DPI系统内部状态变化的一致性。如果一个DPI系统对给定的输入显示出不同的内部状态迁移,而其他DPI系统内部状态迁移未发生变化,则将该DPI系统所达到的新状态视为异常状态。为了比较不同DPI系统的内部状态转移情况,我们还需要从DPI系统中提取状态信息。通过对开源DPI系统的分析,我们发现,DPI系统在追踪网络连接的过程中,使用多个变量存储网络端设备的TCP状态,并通过调试模块打印输出,因此,我们利用调试模块的输出来提取DPI系统的内部状态。此外,我们还在其他关键代码位置处(如数据包接收点、拒绝点、函数退出点)人工添加调试函数,以获得更细粒度的状态信息。

图1 StateDiver 框架

为了能够高效地分析不同的DPI系统,我们设计并实现了一个基于差分测试的自动化框架StateDiver,其架构如图1所示。在编译阶段,我们通过状态插桩在DPI系统中添加状态跟踪器,以日志文件形式定期输出DPI系统的状态迁移信息。StateDiver的运行分为两个阶段:首先,策略选择器随机生成策略并填充种子池,种子池中记录了当前所有的备选种子,每一个种子是一个生成测试数据包序列的策略(简称:策略),通讯器根据策略与服务器进行网络报文交互,状态跟踪器生成每个策略对应的状态迁移日志;然后,策略选择器从种子池中循环挑选策略并对其进行变异,状态跟踪器捕捉变异后DPI系统的状态迁移信息,状态迁移分析器依照状态迁移引导算法评估变异的水平,并相应地调整优先级和变异频率等。如果找到一种成功绕过DPI系统的策略(即通讯器收到了服务器的HTTP 200响应数据包),系统将保存该策略并将其作为结果输出。

图2 状态差异引导算法

状态迁移引导算法如图2所示。若一个策略由另一个策略通过变异生成,我们称前者为父策略,后者则称之为子策略。对于两个不同的DPI系统(DPI0与DPI1),使用parDPIjStat表示父策略作用下DPIj系统的状态变化序列(如,[SYN_SENT, SYN_RCVD]),使用currDPIjStat表示子策略作用下DPIj系统的状态变化序列(如,[SYN_SENT, SYN_RCVD, ESTABLISHED])。CmpDPI函数通过比较parDPIjStat与currDPIjStat的一致性来判断DPIj系统是否在父策略和子策略的作用下产生了不同的状态迁移,并用变量DPIjStatAlt记录比较结果:如果DPIj系统产生了不同状态迁移,则DPIjStatAlt取值为True,否则为False。如果DPI0存在不同的状态迁移而DPI1不存在(或DPI0不存在而DPI1存在),则将该变异视为最优变异(best_score);如果DPI0和DPI1均存在不同的状态迁移,将该变异视为次优变异(good_score);如果DPI0和DPI1均不存在不同的状态迁移,则将该变异视为最低优先级变异(moderate_score)。

发现与讨论

我们将StateDiver与同类工作进行了不同维度的比较。首先,我们评估了StateDiver在真实DPI系统上的漏洞挖掘能力。具体而言,使用StateDiver检测了三个知名开源DPI系统(Snort,Snort++和Suricata)中的漏洞,成功地发现了16种DPI绕过漏洞,其中8个为以前已经发现的漏洞,而另外8个为首次发现。

图3 Snort系统下绕过漏洞随时间变化曲线

此外,我们还比较了使用状态差异引导算法的StateDiver与同类型的模糊测试工具Geneva的效率。Geneva使用服务端回复报文作为引导,为了控制变量,我们实现了本地测试版本的Geneva-fast、使用状态差异引导机制替换服务端回复报文引导的Geneva-state,在相同环境下运行24小时并重复5次。如图3所示,实验结果表明,StateDiver发现的绕过漏洞数是Geneva的两倍,并且在找到首个绕过漏洞的耗时上缩短了5倍。此外,StateDiver触发的状态迁移数也提高了1.2倍。总体来看,StateDiver在发现绕过策略的数量、发现首个绕过策略所需的时间、以及触发的状态迁移数量等方面都优于同类工具Geneva,并且能够触发更加复杂的状态迁移。

综上,我们提出了一种创新的差分测试反馈机制——状态差异,实验证明状态差异能够较好地提升差分测试效率,实现对DPI系统绕过检测规则漏洞的高效挖掘;同时,我们设计并实现了一个基于差分测试的深度包检测系统漏洞检测框架StateDiver,并在真实系统中发现了新的绕过漏洞。本工作既为深度包检测系统安全性测试提供了新的思路,也将为其他领域的动态测试研究提供新的启示。

详细内容请参见:

Zhechang Zhang, Bin Yuan, Kehan Yang, Deqing Zou, and Hai Jin. 2022. StateDiver: Testing Deep Packet Inspection Systems with State-Discrepancy Guidance. In Proceedings of the 38th Annual Computer Security Applications Conference (ACSAC "22). 756–768. https://doi.org/10.1145/3564625.3564650

声明:本文来自穿过丛林,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。