基于FPGA 的组件化抗重放攻击设计*
2022-08-23何远杭
曹 宝,郭 爽,陈 洋,何远杭
(中国电子科技集团公司第三十研究所,四川 成都 610041)
0 引言
随着计算机网络技术的发展,各种类型和规模的数据中心应运而生,数据中心承载了大量的关键、敏感数据。数据中心作为最重要的网络资产,也成了黑客和敌对势力的重点攻击目标。数据集中后出现的数据安全问题,其影响面和破坏程度大大增大[1],针对数据中心的安全防护是网络安全防护的重中之重。
网络攻击分为主动攻击和被动攻击,主动攻击包括篡改消息、数据伪造、拒绝服务等,被动攻击包括窃听、流量分析等。重放攻击是数据伪造攻击的重要方式。
重放攻击(Replay Attacks)是最基本、最常用、危害性最大的一种攻击形式[2],针对重放攻击的防护通常采用平台加软件模块的方式实现,但这种方式在大流量、重负载的数据中心中的效果并不理想。基于此,本文设计了一种基于现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)的抗重放攻击组件,满足高带宽、低时延的网络安全防护需求,同时标准化的模块设计也能够满足未来数据中心的安全资源服务化[3]的需求。
1 重放攻击及常用手段
重放攻击(Replay Attacks)又称重播攻击、回放攻击,原指攻击者发送一个目的主机已经接收过的包,来达到欺骗系统的目的,主要用于在身份认证过程中破坏认证的正确性。例如,在认证协议交互过程中,针对系统开展重放攻击,可以欺骗系统,使其疲于响应攻击包,导致系统不能响应正常认证流程,造成认证失败,更甚者可能造成系统崩溃。
作为曾经的“合法包”,重放攻击中的数据包若没有被及时识别、丢弃,会占用大量的安全防护设备的资源,导致防护效能下降。因此重放攻击在网络中大行其道,已经不仅仅局限于针对认证流程的攻击,在业务通信过程中也被广泛使用。此外,重放攻击的流量攻击特性被应用于分布式拒绝服务(Distributed Denial of Service,DDoS)攻击,起到致瘫效果,从而严重威胁数据中心的安全防护效能。
基于长期对抗重放攻击的经验,针对不同数据包的格式、特点,总结形成了6 种主要的抗重放攻击方案[4],如表1 所示。
表1 6 种主要抗重放攻击方案的优劣比较
如表1 所示的6 种抗重放攻击方案各有利弊,单独使用时通常效果不好。考虑当前数据中心的多连接、大数据量、长时间、高可用的特点,方案4和方案6 因其效率较低或是占用资源太多而基本不被采用。
目前的安全防护设备基本采用两种方案结合的方式抗重放攻击,如将方案1 和方案2 结合,将方案3 和方案5 结合,并通常基于高性能处理器设计抗重放攻击软件,实现对重放攻击数据包的检测、丢包、上报等功能,但软件实现的抗重放攻击在检测处理能力和移植性方面还存在不少问题,具体如下文所述。
(1)检测、处理能力弱,主要体现在带宽受限和时延较大两个方面。由于重放攻击的检测需要占用较多的资源,虽然现在的处理器性能、核数都有了很大提升,但是当有多个连接或是网络流量达到数个Gbit/s 时,仍然会带来处理器性能的急剧下降,严重时会导致处理器死机。而频繁的软硬件交互和协议栈内的处理则带来了时延的增加。
(2)移植性不强。软件的灵活性也意味着开发者可以随意发挥,因此功能模块接口各异,参数选择复杂,针对新的重放攻击类型,一般通过“打补丁”的方式进行处理,没有设计科学的架构和制定统一的标准,因此可移植性不强。
因此,本文研究设计了一种基于FPGA 的组件化抗重放攻击模块,采用基于FPGA 的实现方式,具备高可用、可配置、可扩展、移植性好等特点,可以极大提升数据中心的抗重放攻击防护效能。
2 基于FPGA 的组件化抗重放设计
针对企业级数据中心边界安全防护设备,本设计在组件化设计思想的指导下,将抗重放攻击功能从复杂的系统中解耦[5-6],定义精简的内外部接口,选择两种典型的业务数据包作为防御目标,充分利用FPGA 实时、并行、高效的处理特点[7-8],支持处理器的关键配置,实现高效、灵活、可扩展的抗重放攻击功能。
2.1 抗重放攻击模块设计方案
在分析现有抗重放攻击技术的基础上,进行组件化设计,以抗重放攻击功能为核心,划定功能模块的边界,明确抗重放攻击模块的对外接口。
该方案针对两种典型的传输控制协议(Transmission Control Protocol,TCP)业务数据包场景,分别定义为业务包和协商包。业务包为通常认识中的业务数据包,具有数量大的特点,包头中有包序号字段;协商包本质上是业务数据包,作为业务流程中的协议包处理,包头中没有包序号字段,有一定长度的自定义字段。
本文设计了抗重放攻击模块的功能架构、关键数据包处理状态机、重要配置表项等,实现高带宽、低时延的数据包重放攻击检测和处理。抗重放攻击模块的功能架构组成如图1 所示。
图1 抗重放攻击模块功能架构
抗重放攻击模块分为数据包处理和处理器配置两个部分。
数据包处理部分包括协商包/普通业务包分路子模块、协商包抗重放处理子模块、普通业务包抗重放处理子模块和合路子模块。各子模块之间数据接口形式为串行外设接口(Serial Peripheral Interface,SPI)。数据包在子模块中采用并行、流水线处理,不存在反馈、重复处理等情况。
处理器配置部分包括处理器配置处理子模块和序列号基准值、随机数黑名单、协商次数等配置表项处理子模块。
整个模块设计功能划分清晰,信号处理流程顺畅,通过软件配置表项,数据包根据表项的参数及配置进行重放包检测、处理。
2.2 关键模块实现
2.2.1 业务包抗重放处理子模块
因为业务包格式中在包头位置有4 个字节的包序号字段,所以业务包的抗重放攻击采用滑动窗口与序列号结合的方式。
每次协商成功后,由处理器配置一个初始的4字节业务报文序号,作为基准值;然后提取进入模块的业务包的包序号,将该包序号与基准值在一个设定的窗口范围内进行比较,不同的比较结果会输出不同的处理结果,同时需要更新基准值。
以上为一个连接的典型处理流程,针对数据中心面临多个连接的情况,在FPGA 内基于BlockRAM构建一个深度为256 的基准值表项,将接收到的业务包序列号与基准值表项中的相应值进行比较,从而实现针对255 个连接通道的重放攻击检测。
业务包抗重放攻击状态转移[9-10]如图2 所示。状态机工作原理如下:
图2 业务包抗重放攻击状态转移
(1)若当前业务包为首包,则为正常包,放行;
(2)若当前业务包不是首包,比较当前包序号和基准值,若当前包序号大于基准值,且差值大于或等于上窗口门限,则为合法包,同时更新基准值,清零历史寄存器;
(3)若当前包序号大于基准值,且差值小于上窗口门限,则为合法包,同时更新基准值,移位历史寄存器;
(4)若当前包序号等于基准值,则为重放包,丢弃;
(5)若当前包序号小于基准值,且差值大于或等于下窗口门限,则为重放包,丢弃,不更新基准值;
(6)若当前包序号小于基准值,且差值小于下窗口门限,且与历史值不重复,则为合法包,否则为非法包;
(7)业务包判别完成后返回空闲状态,等待处理下一个业务包。
本模块能够实现255 个连接通道的业务重放包检测、处理功能,当需要更多连接、更高带宽的业务重放包检测能力时,可以通过扩大基准值表项的深度、提高处理时钟的速率或是采用多个模块并行处理的方式,因而本模块具有良好的扩展性。
2.2.2 协商包抗重放处理子模块
协商包作为一种特殊的业务包,主要出现在通道建立过程中或是检测到异常情况时,用于传递重要信息,相对于业务包的数据量小很多。
由于协商包头中没有包序号字段,利用其自定义字段承载随机数,针对协商包采用时间戳与随机数结合的抗重放攻击防御方式。
设备启动后,由处理器配置时间信息和随机数黑名单表项。鉴于协商包出现的频率,结合系统时间同步情况,将时间信息定义为“天”;提取进入模块的协商包的时间字段、随机数字段,分别与时间信息和随机数黑名单进行比较。不同的比较结果会输出不同的处理结果。
协商包抗重放攻击状态转移如图3 所示。
图3 协商包抗重放攻击状态转移
状态机工作原理:
(1)判断当前协商包的时间字段是否等于{昨天,今天,明天}中任意一个,如果都不等,则判定为非法包,如果等于其中一个,则进入下一步判别;
(2)判断当前协商包的随机数字段是否在黑名单内,如果在,则判定为非法包,如果不在,则为合法包,放行。
本模块针对特定场景将时间戳的粒度定义得非常粗,为了提高检测率采用了深度为512 的随机数黑名单表项,每一个合法协商包在进行随机数黑名单检测时会额外带来512 个时钟周期的时延。因为协商包出现的频率很低且有重传机制,一般情况下不会带来通信效率的下降。针对时间同步相对精确的系统或是对时延敏感的系统,可以通过细化时间戳粒度、降低单个黑名单深度并行处理的方式。因而本模块支持灵活配置、动态可调。
2.2.3 表项配置子模块
当前主流的高性能FPGA 除了提供各种高速接口,都提供了大量的BlockRAM,相应的Slice 数量反而不是非常的充足。本模块支持最大255 个连接通道的重放攻击检测,为了提高每一个通道检测率,滑动窗口的门限设置和随机数黑名单的长度需要满足一定的要求。
基于以上两点,在FPGA 内例化了相应的BlockRAM 作为重要配置的存储表项,从而节约了宝贵的Slice 资源,实现了高速、动态、可靠的配置表项处理。
2.3 仿真及资源占用情况
在设计了结构清晰的架构和简洁严谨的状态机的基础上,本模块采用严格的时序设计,避免了组合逻辑设计带来的不稳定性,整个设计简洁、高效。
通过仿真脚本,功能、性能仿真覆盖率达到100%,重放攻击包的检测率达到100%,状态机运行稳定、纠错能力强,结果符合预期。
本模块在保障处理性能的基础上,在面积与速度之间取得了良好的平衡,并基于BlockRAM 设计了关键配置表项,资源占用情况如表2 所示
表2 模块资源占用情况
相比于7K325T FPGA 丰富的逻辑资源,抗重放攻击模块BlockRAM、Slice 等关键资源的消耗比例是非常低的。
2.4 验证情况
本设计采用62.5 MHz 时钟,处理带宽理论上可以达到500 Mbit/s;业务包的处理时延为120 个时钟周期(1.92 μs),协商包的处理时延为632个时钟周期(10.112 μs)。
在实际运行环境中开展重放攻击测试,分别验证处理带宽、时延和检测率,由于协商包的数量较少,没有进行大带宽的测试,时延为设计的理论值10.112 μs,检测率达到100%。
本文重点验证业务包的抗重放攻击处理能力,针对不同包长的业务包分别测试其处理带宽、时延和检测率,并与基于传统协议栈软件实现的抗重放攻击模块进行对比,实验结果如表3 所示。
表3 业务包测试结果对比
通过以上对比测试,当攻击数据量未达到处理器能力瓶颈时,基于FPGA 的组件化抗重放攻击模块在处理带宽和检测率方面稍微优于软件实现的抗重放攻击模块,在降低时延方面有非常大的提升。
3 结语
本文面向数据中心抗重放攻击的安全防护需求,采用组件化的设计思想,设计了结构清晰的架构和简洁严谨的状态机,并采用规范化FPGA 设计,平衡了面积与速度。经过验证,所提方法满足高带宽、低时延的数据包重放攻击检测和处理需求,具有高可用、可配置、可扩展、移植性好等特点,适用于企业级的数据中心边界安全防护,可满足未来安全防护设备对安全资源服务化的需求。