APP下载

可编程数据平面系统异常检测系统的设计与实现

2022-01-28陈立军陈孝如

信息安全研究 2022年2期
关键词:哈希攻击者交换机

陈立军 张 屹 陈孝如

(广州软件学院 广州 510990)

可编程数据平面的研究所带来广泛而巨大的影响,使几乎所有的网络领域参与者都将从中获益,它有助于网络系统供应商进行更快速的迭代开发,迅速推出新的功能,甚至直接通过打补丁修复现有产品中发现的数据平面程序漏洞.数据平面的灵活性使得各个供应商能够在系统功能和性能上存在差异化,以有别于其他厂商.最根本的是,这些系统供应商可以从软件产业过去几十年已发展成熟的软件编程理论、实践和工具中受益.

可编程交换机[1]的最新进展,使得可以使用高级领域特定的网络语言(如NPL[2]和P4[3])在数据平面上编程的行为成为可能,这为解决传统固定管道开关中被认为困难和复杂的网络问题提供了广泛的机会.

最近的研究工作,如HULA[4],Contra[5],Blink[6],Net-Cache[7],提出了数据驱动的数据平面系统,在延迟和吞吐量方面实现了更好的性能,这些系统的核心部分是在数据平面上运行包处理算法,连续监控流量情况或监听数据平面信号,并在几十纳秒内快速响应以适应网络条件.

尽管这种新颖的数据驱动数据平面系统似乎有望实现更好的性能,但它们面临更大的攻击面,因此容易受到以前从未见过的网络攻击,例如:网络攻击者可以潜在地利用控制逻辑的语义并制造对抗性网络输入[8-9],这些输入将直接影响系统所作的决策,并可能对很大一部分流量的行为产生负面影响,潜在地导致严重的性能下降.有趣的是,为了生成虚假的数据平面信号,攻击者不需要特殊的特权,因为许多数据平面系统可以被欺骗和操纵数据平面信号.要解决这个问题,可能需要验证到达的流量或数据平面信号,然而,P4数据平面支持有限的操作集,不支持循环和递归,因此意味着我们不能在数据平面中运行复杂的加密代码.

总而言之,为了获得数据驱动的数据平面系统的性能优势,并使此类系统得到广泛部署,保护系统不受对手攻击变得至关重要和紧迫.

本文的目标是确保数据驱动系统不受敌对网络输入的影响.为了达到这个目标,提出了一个系统来检测数据平面系统和相关的包处理算法,其关键思想是,与某些正常标准相比,检测异常行为.具体来说,本文所提议的方法是:1)精确理解P4中编写的数据平面算法的非对抗性(正常)行为;2)监控运行时的实际行为;3)定期将实际行为与正常行为进行比较,当实际行为明显偏离正常行为时提出警告.

首先,本文将识别对最近提出的数据驱动系统的可能攻击,并解释攻击者如何瞄准特定的系统组件并执行攻击(详见第2节);其次,提出了一个异常检测系统,该系统对数据平面中的数据包执行的路径进行统计分析,以检测异常,这些数据在运行时的一个重要变化会暗示异常行为,如果系统受到攻击,此行为最有可能被观察到,例如,P4程序中调用交换机CPU的路径很昂贵时,应该视为受到攻击;或者,如果我们突然发现有太多的包通过这条路径,可以视为异常行为.

实现所提议的方法主要挑战是可编程数据平面资源受限:每个包的时间预算有限(100 ns)、每个包内存访问次数有限(每管道阶段1~2次)以及有限的存储能力.本文设计的系统是为了实现在这些限制下工作,具体来说,本文的系统具有3个主要特点:首先,依赖数据包执行路径统计来了解数据平面系统的正常数据包处理行为,然而,在约束下跟踪数据平面中每个数据包的执行路径是具有挑战性的.为此,P4track[10]提出了一种使用BL(Ball-Larus)编码跟踪每个数据包的执行路径的技术,并表明它在英特尔的Tofino开关约束下运行良好.本文在这项工作的基础上构建一种系统,并将其与本文检测恶意数据包处理行为的方法相结合(更多细节见2.2节).

其次,保持对数据包处理的吞吐量影响,或没有影响的数据包执行路径统计数据很少.为了实现这一点,本文在哈希表中维护统计信息,该表可以使用有状态寄存器来实现,并且可以在数据平面中以线速度更新,有关哈希表设计选择的详细信息在3.2节中给出.

最后,为了检测异常行为,必须将跟踪的数据包执行路径统计(或观察)与预期(或正常)行为进行比较,为此,本文使用Pearson卡方检验[11]来确定预期行为与观察到的行为之间是否存在显著偏差(更多详情请参见3.3节和3.4节).

1 相关工作

1.1 国内情况

武汉大学李健等人[12]提出了一种基于可编程数据平面的状态防火墙方法,通过在数据平面设计有限状态机和状态表,实现根据不同的数据包类型制定相应的检测逻辑,将状态的检测和管理逻辑从控制平面转移到数据平面.异常检测的方法与本文方法完全不同,他们是检查数据包的种类,而本文的方法虽然也有对数据包种类进行分类,但重点是对数据包执行路径的检查,检查是否与预期执行路径相同.

中国传媒大学耿俊杰等人[13]介绍了可编程数据平面技术和高性能数据中心网络的研究现状,并基于可编程数据平面以软件定义的方式实现了优先流量控制算法,进而实现了可编程的无损数据中心网络.但他们没有介绍数据平面异常检测这项功能.

空军工程大学吕娜等人[14]提出一种基于时延和负载均衡的传输节点迁移策略,将故障控制节点所管控数据平面中的传输节点迁移至其他正常控制节点,恢复网络的正常管控.显然,他们的方法与本文的出发点是不一样的,他们是把故障节点转移到正常节点,而不是主动把故障消灭在萌芽状态.

福建师范大学肖如良等人[15]提出一种基于局部敏感布隆过滤器模型的异常检测算法.首先利用基于空间划分的快速变换对数据进行哈希映射,然后采用相互竞争策略进行除噪,最后利用0-1编码构建布隆过滤器.他们的方法与本文也有相似之处,都用到了布隆过滤器,但本文的方法还要执行数据包执行路径的检查.

大连理工大学吕浩等人[16]提出了一种时序多尺度自编码器网络用于预测未来帧,并通过预测值与真实值的差异完成视频异常检测.该方法与本文的方法有点类似,但他们的方法应用有一定的局限性,只能用在视频信号的异常检测,而本文的方法是全方位的,只要是应用数据平面的网络都可以应用.

靳晓琪等人[17]提出了基于信息熵的网络异常检测及入侵防御系统设计,将主机探测器部署在Linux操作系统上采集相关数据,并传递给分析模块,结合信息熵理论推导熵计算公式,分析网络异常情况,划分出网络流量,由此检测入侵流程,但漏报率最高达到9%.

1.2 国外现状

最近的一项研究工作[8,18]提出了一种概率程序分析器,它使用符号执行和模型计数来分析程序行为,以进行对抗性测试.相比之下,本文根据实际轨迹在运行时对路径执行概率分布进行建模,并使用该模型来检查偏差.从文献[8,18]得知本文的工作很好地补充了概率程序分析器.因为他们的工作可能会在测试期间错过极端情况,或者在有用的时间内探索大型程序的所有可能路径的成本很高.另一项研究工作[19-21]探索使用静态分析或符号执行等技术自动验证有关P4程序的各种属性,但是,这些工具仍然在P4程序的级别上运行,但无法发现P4程序在运行时是否受到攻击者的影响.

2 数据平面系统受到的攻击

现有的数据驱动系统,如HULA[4],Blink[6],Poise[22],Silkroad[23]和NetCache[7],利用可编程硬件功能显著减少了控制回路决策时间、端到端结束延迟,或遥测数据收集和处理开销,实现了以下功能:1)监控网络流量;2)向控制平面代理和/或相邻节点(例如交换机)发送反馈控制信号;3)采取适当的行动,例如:丢弃数据包、添加规则、重新路由流量、更新寄存器和创建数据包.

HULA[4]在每个时间窗口中,侦听携带路径性能指标的定期探测,选择通往目的地的当前最佳路径,并在所选路径上转发流量;Blink[24]系统跟踪在当前路径上流的数量,如果流的数量超过某个阈值,则流量将重新路由到备用路径;如果某个键的访问次数超过特定次数(阈值),则NetCache[7]会将其归类为热键,然后控制平面将这个键值对安装在表中,这样交换机就可以响应后续的键请求,而无需访问存储服务器,从而减少延迟.

2.1 威胁模型

确定攻击数据平面系统所需的权限类型很重要,在本节中,确定谁可以发送对抗性输入来攻击数据平面系统.

攻击目标.建立在可编程开关之上的数据平面系统可以快速响应数据平面信号,此信号有2种:1)由监控传入流量的交换机原语生成的消息;2)控制网络中其他交换机或主机发送的报文.

攻击者及其特权.本文考虑了攻击者能够发送对抗性输入的2种可能情况:受感染的主机或中间人攻击,对于这2种类型的攻击者,假设他们知道哪些数据包头值和数据包顺序会影响受攻击数据平面系统的决策,攻击者可以将恶意流量注入网络,或通过操纵控制数据包,或通过创建虚假控制数据包来欺骗系统.

需要注意的是,为了影响决策制定,攻击者不需要访问P4代码,或知道数据包处理行为,或访问交换机,攻击者可以通过其他方式(例如通过监控端到端性能)找到控制逻辑的语义,然后推断数据包头值及其顺序以影响决策,例如:在NetCache系统中,攻击者可以通过观察键变热前后响应时间的差异,来推断将键归类为“热”的阈值.

2.2 可能的攻击

在这种情况下,本文识别对数据平面系统的攻击,尤其是那些针对响应数据平面信号的特定系统组件的攻击,表1总结了本文将在下面介绍的对数据驱动数据平面系统的可能攻击:

表1 可能对数据平面系统进行攻击的详细信息

1) CPU耗尽.计算成本表示要为特定输入(数据/控制包)执行的工作量,通常,并非所有输入都具有相同的计算成本——数据平面中的数据包处理速度非常快(纳秒到微秒),调用控制平面(例如复制到CPU)的数据包处理速度很慢(毫秒到秒),因此,在更大的时间尺度上调用控制平面是一种很好的做法,攻击者可以利用这一点并专门制作输入以连续调用控制平面,从而成功耗尽交换机CPU资源.

2) 内存饱和.数据平面有2种状态:无状态匹配操作表规则和有状态寄存器,这些状态要么在SRAM中维护,要么在TCAM中维护(TCAM是一种三态内容寻址存储器,主要用于快速查找ACL、路由等表项),要么在两者中都维护,其中TCAM拥有几千条规则[29].在某些系统中,每当有来自数据平面的信号时,控制平面代理就不断地更新匹配动作规则,例如,考虑上面提到的NetCache[7]系统的密钥分类,对手可以利用这一过程,以目标访问不同的密钥,每个密钥都超过其阈值,最终会导致为太多的键安装规则,由于安装太多的键而丢弃合法的键请求,缺少空间而丢弃合法的键请求,从而增加端到端延迟,类似地,有状态寄存器通常是预先分配的,只要满足某些条件(例如在新流到达时分配块),就会在运行时分配寄存器块,对手可以经常注入欺骗流,目的是使有状态寄存器饱和,从而导致内存饱和攻击,内存饱和的后果是不可预测的,交换机可能表现异常(例如丢包),或者攻击者可能成功地逃避防御者.

3) 性能下降.为了快速处理动态网络事件(例如:拥塞、链路/交换机故障),一些系统在控制平面响应之前立即在数据平面上作出决定,例如,HULA[4]监听探头中携带的网络反馈,并快速响应决策(例如重路由流量),以避免性能下降.然而,在这种情况下,可能潜在地利用控制逻辑的语义来编制网络输入(例如:修改/延迟探测),并影响数据平面上的决策,因此将潜在地导致对很大一部分流量的行为产生负面影响,从而降低总体网络性能.

4) 损坏网络统计数据.流量工程、安全审计等网络管理任务在很大程度上依赖于由数据平面监控原语生成的网络遥测数据(例如:平均、最小、计数估计),为了以线速度执行监控,通常使用像布隆过滤器及其变体(例如:计数布隆过滤器)这样的紧凑数据结构,它们具有空间效率高和每包计算成本低的特点.此外,为了保持较低的误报率,一般使用由多个哈希函数(例如k个)索引的多个布隆过滤器,例如,要检查数据包是否属于旧流,数据包的五元组流密钥被哈希k次,如果所有k位置的条目都设置为1,则该数据包被标记为旧流,否则,该数据包被标记为新流.先前关于攻击布隆过滤器的研究[30]表明,攻击者可以通过产生流量以增加1的数量来污染布隆过滤器,这样误报率显著增加,从而误导学习算法并成功逃避检测;另一种可能的尝试为,通过生成流量,使得最后一个哈希函数的流键值为0,其他哈希函数的流键值为1,从而增加查询执行时间和成员查询的开销.

3 设 计

本文工作的主要目标是在运行时检测数据平面系统是否受到攻击,首先,提出了一种异常检测系统,该系统对交换数据平面的数据包执行路径统计分析.

图1示出本文异常检测的方法:

该系统大致可分为3个阶段:

1) 模型预期行为.本文的系统在正常条件下监控流量,其中在数据平面中运行的P4程序编码跟踪和维护数据包执行路径统计信息,控制平面定期收集统计信息并构建数据包执行路径分布,这将是预期的分布.

2) 捕获观察到的行为.在运行时捕获每个时间窗口的数据包执行路径统计信息,控制平面使用它构建数据包执行路径分布——观察到的分布.

3) 计算偏差.本文使用称为卡方检验的统计检验技术计算预期分布和观察到的分布之间的偏差,并在观察到显著偏差时发出警报.

3.1 跟踪数据包执行路径

数据包可能采用P4程序中的任何路径,为了跟踪每条路径(应用的表和执行的动作)需要扩充原始P4程序,以便在数据包传输时更新每个数据包的状态,如数据包头向量(PHV).然而,由于PHV是一种稀缺资源,路径编码技术应该在可编程数据平面的资源限制下运行.最近,P4track[10]表明BL编码技术[30]适合跟踪P4程序中的数据包执行路径,这是因为P4程序是无循环的,编码不需要复杂的更新,对路径变量的加法操作已经足够,本文使用这种技术跟踪路径并在该技术之上构建预期和观察到的分布.

下面简要介绍BL编码技术的核心思想:由于P4程序是无循环的,因此P4程序的控制流图(CFG)是一个有向无环图(DAG),其中每个节点代表一个程序语句,例如表、动作或条件.BL编码算法执行DAG的反向拓扑排序,并为每条边分配1个标签,这样,当给定的输入数据包从一个程序语句转换到下一个程序语句时,PHV中维护的数据包路径变量被添加到相关联的边缘标签,最后,在DAG(或程序)处理结束时,路径变量值唯一地表示数据包在程序中所走的路径,因此,如果存在N条可能的路径,则程序处理后的路径变量在0~N-1之间具有唯一值.

运行示例:图2(a)示出NetCache[7]P4程序的CFG,它首先检查是否收到有效的NetCache查询数据包(CFG 中的节点A),如果收到则通过应用read_query表(节点B)检查查询响应是否在缓存中,如果查询正常,则生成响应数据包并发送给发送方(节点C和节点D),否则,它会检查该查询之前是否已多次出现,如果是则查询会变得很热,并且会向本地交换机CPU发送信号,后者又会在缓存(节点E和节点F)中安装响应,否则,查询将发送到目标服务器(节点G),最后,退出操作标志.

在CFG上运行BL算法时,为E→G,C→E,B→H,A→H分别分配标号1,1,3,4,当包遍历1条边时,相关的边标签被添加到每个包的路径变量V中,CFG从根节点(A)到叶节点(H)有5条不同的路径,当程序完成数据包处理时,V的值必须在图2(a)所示的0~4的范围内.

多变量BL编码:简单的调整BL编码在操作复杂性和流水线阶段数量方面,可能产生巨大的开销,具体地说,适用于大型P4程序,如switchP4[3]路径变量大小可以大到几百位,使得线速率的整数运算成为挑战.另一个问题是通过多个表更新相同的路径变量迫使编译器将表放在多个阶段,否则这些阶段将被映射到相同的阶段,从而增加阶段的数量.P4track[10]通过为BL编码(MVBL)使用多个变量来处理这些挑战,其关键思想是仔细划分原始DAG,并为每个分区(即子DAG)分配1个变量,分别跟踪包的执行路径,通过这样操作,由于每个子DAG比原始DAG有更少的路径,路径变量大小将保持在算术操作数的限制内,并且将不同的路径变量分配给映射到同一阶段的表,使它们在BL编码后共存于同一阶段.

3.2 维护报文执行的路径统计

本文使用哈希表来维护每条路径的统计信息,对路径变量值(V)进行哈希,并将该哈希值用作在哈希表中查找条目的键,如果存在该键则增加现有计数器,否则使用该键分配和初始化一个条目.本文利用SRAM中的有状态寄存器以线速率存储和更新哈希表项.在一个大型P4程序中路径的数量会激增,因此需要大内存来保持较低的哈希冲突概率,然而,在实际操作中,包会遍历所有可能路径的一小部分,因此,与交换机中可用的SRAM相比[29]所需的内存相当低.本文的实验中,观察到Netcache中的数据包,P4在600个可能路径中穿越10个路径[7],在Blink中在108个路径中穿越60个路径[30],本文还观察到,穿过不同窗口的路径数量在大多数情况下保持不变,如果它发生变化,百分比变化非常小.因此,给定一个大小为500 KB、有100个键的哈希表,预期的冲突数是0.077,这是通常建议限制键数的0.1%.

此外,本文的控制平面代理将重置在2个后续窗口中计数器值相同的陈旧项,这一清理过程进一步降低了碰撞率,如果MVBL编码是适当的,对于多个路径变量,它需要额外的内存来维护统计数据,以便碰撞率在限制之下.

3.3 模型预期行为

为了建模预期行为,本文在交换机上部署带有BL算法和哈希表的P4程序,收集一段时间内(训练阶段)真实流量的包执行路径分布,捕获P4程序中每个执行路径上的数据包数量,通过定期收集数据平面哈希表中维护的每条路径统计信息来构建预期的分布,例如E,形式上,假设在给定的时间窗口wi中有k条路径,则当前窗口wi的预期分布Ewi定义为[31]

Ewi=(Ewi(1),Ewi(2),…,Ewi(k)),

(1)

其中Ewi(1),Ewi(2),…,Ewi(k)分别表示对应于路径1,2,…,k的频率,令Si为在此窗口中看到的总数据包,由式(2)给出:

(2)

在为每个窗口捕获Ew和S之后,对每个路径对应的概率进行建模,以定义NULL假设,根据由式(3)给出的集合M来定义NULL假设:

M=(p1,p2,…,pk),

(3)

其中p1,p2,…,pk分别表示对应于路径1,2,…,k的概率,具体来说,如果有n个窗口,则路径j对应的概率pj由式(4)给出:

(4)

总之,本文用M表示预期行为,并将其用作验证观察到的分布参考.

3.4 验证预期

给定预期流量分布的基准,应该确定观察到的流量是否超出常规模式,为此,在训练阶段之后,本文收集哈希表中维护的每个路径的流量统计信息,并将观察到的分布与M进行比较,形式上,对于给定的窗口wi,观察到的分布O定义为

Owi=(Owi(1),Owi(2),…,Owi(L)),

(5)

其中Owi(1),Owi(2),…,Owi(L)表示在路径L上观察到的数据包数量,令Si是在wi中看到的总数据包,由式(6)给出:

(6)

本文使用卡方检验[11]测量观察到的分布和预期分布之间的偏差,独立的卡方检验χ2比较2个频率分布(M和O)以查看它们是否相关,具体来说,将窗口i的χ2定义为

(7)

其中路径j,Ewi(j)的预期计数定义为

Ewi(j)=pj×Si.

(8)

小的卡方值意味着观察到的分布数据与预期数据非常吻合,另一方面,较大的卡方值意味着观察到的数据与预期数据有很大的偏差.

观察到的路径集(L)可能与M中的预期路径集(K)不同,为了解决这个问题,本文考虑2种情况:L⊆K和LK.当L⊆K时,对于K-L集合中的那些路径,观察到的数据包计数为0;另一方面,当LK时,本文将一个小的阈值ti添加到预期集合L-K中,以使卡方值无限,根据卡方p=1,当标准卡方值比较小时,观察到的分布偏离了预期.

4 实 验

1) 实验环境.为了证明本文方法的可行性,本文对NetCache[7]P4程序进行了初步实验,通过P4c编译器生成的.json和.dot文件来构建NetCache P4程序CFG[3],接下来,在CFG上运行BL算法并解释原始P4程序中的动作和条件语句.目前,P4程序是手动注释的,本文可以通过逐行解析P4程序,并使用更新BL变量的代码附加操作和条件块自动执行此步骤,最后,在数据包处理的末尾添加一个哈希表,并将带有注释的P4程序部署在P4交换机上.本文的实验是在Mininet v2.3.0中进行的,其中有1个P4交换机、8个键值存储主机、1个请求密钥的客户端、1个使用热键更新交换机缓存的控制器,以及1个使用bash脚本多次读取实验的收集器,每个实验包含大约4万个查询,运行时间为3 min,BL编码、收集和验证的代码是用Python编写的.

2) 内存饱和攻击.如前所述,如果请求的密钥超过某个阈值,则NetCache系统将密钥分类为“热”,一旦攻击者发现了这个阈值,可以用不同的热键来制造流量,从而导致:在缓存中安装不需要的密钥以及当缓存被填满时,合法的密钥被释放,从而增加合法流量的响应时间.

3) 实验.首先,发送正常流量,收集数据包执行多窗口的路径计数器,再根据3.3节中描述的预期分布模型,正常的流量遵循齐夫定律(Zipf)的分布,其中键请求的频率与其排名成反比,即10%的键占查询的60%~90%[32],建立期望分布模型后,注入攻击流量,收集路径统计信息,并进行卡方检验.攻击流量中的密钥是随机生成的,目的是创建更多热键,设置缓存大小为8 KB.

4) 结果.为了解释卡方检验结果,本文将实际的卡方值与预先设定的卡方阈值进行比较,图3(a)和图3(b)中的红色虚线显示卡方p值被设置为21,当观察到的路径的数量小于11时,与标准阈值一致,通过比较,如果实际值或观测值低于给定卡方阈值,则表示系统行为符合预期;如果实际值或观测值超过阈值,本文可以得出系统显示异常行为的结论.

图3(a)中的绿虚线表示当没有攻击流量时,卡方值低于阈值,当系统受到攻击时,如图3(b)所示,卡方值增加并饱和.实验表明,本文的异常检测方法能够检测系统中的异常行为.

图4总结了多次运行NetCache的实验结果,x轴表示攻击查询的百分比,y轴表示实际的卡方值与阈值的卡方值的距离,实际值与阈值之间的差值是多次运行时的平均值,本文将攻击查询的百分比从0更改为50%,并记录每个场景的平均值,当没有攻击查询(即0攻击百分比)时,结果为负值,如图4中的绿色条形图所示,表示没有受到攻击;当攻击查询的百分比增加时,看到一个正的平均值,如图4中蓝色条形图所示,这表明本文的系统能够成功地检测到攻击行为,即使攻击流量百分比很低.

5 结 论

本文对建立在可编程交换机上的现有数据驱动数据平面系统的可能攻击进行了分类,并设计了一种异常检测系统,帮助确定数据平面系统是否受到对手的攻击,实验证明了本文设计的系统在检测NetCache数据平面系统的数据包处理行为异常方面的可行性和有效性.未来的工作是改进攻击者模型,通过不断学习,避免误报使模型适应新常态,使设计对可能的攻击具有鲁棒性.

猜你喜欢

哈希攻击者交换机
基于贝叶斯博弈的防御资源调配模型研究
面向未来网络的白盒交换机体系综述
基于特征选择的局部敏感哈希位选择算法
哈希值处理 功能全面更易用
局域网交换机管理IP的规划与配置方案的探讨
文件哈希值处理一条龙
基于地铁交换机电源设计思考
正面迎接批判
正面迎接批判
浅谈交换机CAN基本配置