基于Altera FPGA的IP碎片重组模块实现 window.google_render_ad(); Implementation of an FPGA-Based IP Reassembly Module 摘要:为了更好地支持网络安全,IP碎片重组是IDS/IPS中一个必不可少的操作。由于采用软件实现IP碎片重组的速度很低,很难达到高速接口的线速处理要求,所以在高速IDS/IPS上应采用硬件处理的机制。本文实现了一个基于Altera FPGA的IP碎片重组模块,可解决IDS/IPS处理IP碎片重组遇到的性能瓶颈问题,同时提供了一种IP碎片攻击的预警机制,其特点是可以根据设备资源的使用情况,提供不同程度的警报信息。借助于QuatusII综合布线工具,经面向硬件威廉希尔官方网站 的仿真验证,本文的方法可实现OC-48接口(2.5Gb/s)上线速分组的IP碎片重组,并具有硬件开销小,可扩展性好的特点。 关键词: IP碎片;FPGA;RLDRAM控制器;最大传输单元; Abstract:In order to secure the network, IP reassembly is needed on every IDS/IPS. Because the software-implementation could not run at a high speed, the processing of IP reassembly should be implemented in hardware. In this paper, we implemented an FPGA-based IP reassembly module. It solved the bottleneck problem that most IDS/IPS had met, and it also provided a mechanism to be aware of the attacks that had been launched by hackers using the vulnerability of IP fragmentation and reassembly. The design was verified on an Altera FPGA using QuatusII to synthesize and floor plan. It can achieve a throughput of 2.5Gb/s. And it is characterized as low cost and high scalability. Keyword: IP fragment; FPGA; RLDRAM controller; MTU; Hole 1 引言 由于链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值,如以太网的MTU是1500字节。IP分组的理论长度可达64KB,如果IP层要发送的数据报文的长度超过了链路的MTU,那么IP层就要对数据报文进行分片操作,使每一片的长度都小于或等于MTU。在报文的接收端,需要对分片的报文重组。 IP碎片一直存在于各种类型的网络中,对网络设备和终端有着不可忽视的负面影响[1]。路由器需要耗费控制通路的资源来处理IP分片和重组,对于终端,IP分片和重组不是在网卡的专用硬件上完成的,而是由操作系统完成的,每个报文的处理都要产生中断,内存拷贝,耗费大量的CPU周期。攻击者利用上述特征,将攻击流量进行分片后向攻击目标发送,导致目标主机因处理IP碎片能力耗尽而出现拒绝服务。为解决这一问题,不少IDS/IPS软件都已经实现了IP碎片重组的功能,如Snort[2](使用frag2预处理模块),但当面临大量的分片报文时,系统的吞吐率仅能达到几十Mb/s。此外,攻击者还针对系统内核在重组过程中存在的漏洞,向目标主机发动攻击,造成系统崩溃或者更严重程度的拒绝服务,著名的攻击有:ping o’death,jolt2,teardrop[3],这对IP碎片重组的工作提出了严峻的挑战。 本文采用RFC815中的重组算法实现的基于FPGA的IP碎片重组模块能够提供对OC-48接口流量的支持,具有硬件开销小,可扩展性好的特点,并提供了一种针对IP碎片攻击的预警机制,能够抵抗常见的IP碎片攻击,可作为构成先进网络安全设备的重要组件。 2 IP报文的分片与重组操作的关键技术 IP报文头部有3个字段用于分片与重组:ID字段,Flag字段和偏移字段。ID字段用于标识特定数据报文的分片,依据IP报文的源地址、目的地址、协议号和ID字段,可以确定每个分片所属的原始数据报文。Flag字段由3个比特组成。比特0保留,比特1表示“不分片”(DF),比特2表示“更多分片”(MF)。偏移字段表示该报文在原始报文内分片的位置,以8字节为单位计算。在重组过程中,当某个数据报文的所有分片都到达以后,将分片按照顺序组合起来,形成一个更长的完整报文,交给上层协议处理。 在使用软件处理IP碎片重组时,每到达一个报文,就要产生一次系统中断,两次内存拷贝,为了维护重组信息,还要多次读写存储器。对于1Gb/s的接口,1500字节报文的到达间隔是12us,一般的操作系统无法达到这样的性能。目前,很多商用硬件网络安全设备都实现了IP碎片重组的功能,但是其速率最高也仅能支持到1Gb/s,而其设计方案并没有公开。 本文提出的IP碎片重组设计方案,使用少量的片上内存以及高速的短延迟DRAM(RLDRAM),采用灵活的硬件控制机制,可支持2.5Gb/s的接口流量,并具有良好的抗攻击特性。 3 设计方案 重组模块的设计如图1所示,主要由7个模块和3个表构成:主控模块,Checksum模块,哈希模块,老化模块,洞描述符控制器,读写控制模块,RLDRAM控制器;内存块信息表,重组信息表,洞描述符表。下面分别介绍各模块的设计及表的构造。 500)this.style.width=500;" border=0> 图 1 IP碎片重组模块设计图 3.1 重组信息表 重组信息表的表项记录了重组报文的必要信息,其结构如图2所示。协议号、源地址、目的地址、ID分别记录IP报文的对应域;锁定表示该表项被设定为锁定状态,不能被其他模块写入;块头指针指向重组报文所在的内存块链表头,块尾指针指向当前该重组报文最后一个分片所在内存块;有效位表示该表项是否有效,0为无效,1为有效;计时器用来对重组过程计时,每收到一个分片,将计时器初始化重新计时;洞计数记录重组报文过程中出现的洞的个数。已超时表示该报文重组超时。重组信息表有1K个表项,支持1K个IP报文同时重组。使用的内存大小为:126×1K=126Kb。 500)this.style.width=500;" border=0> 图2 重组信息表的表项 3.2 内存块信息表 内存块信息表的表项记录了每个内存块连接的信息,其存储的下一内存块指针用来将内存块连接起来形成链表。每个内存块大小为4KB,为了支持1K个64KB的最长IP报文,一共有16K个内存块,所以指针长度为14位,使用的内存大小为:14×16K=224Kb,外部存器的需求是16K×4KB=64MB。 3.3 洞描述符表 在RFC815中,对重组过程中出现的“洞(hole)”做了解释,比如对于没有分片到达的情况,其洞描述符为0000ffff(0-64K),当偏移字段为0xB9(185),长度为1500字节的报文到达时,原来的洞描述符变为了两个新的洞描述符:0000-05C7(0-1479),0B90-ffff(2960-64K),洞描述符记录着尚未到达的字节的偏移位置。 洞描述符表的表项如图3所示,记录了重组报文过程中洞的位置,前向指针和后向指针分别记录前一个洞描述符和后一个洞描述的地址;每个重组报文最多可以出现6个洞,所以洞描述符表共有6K个表项,使用的内存大小为:58×6K=348Kb。 为了实现对表项的快速访问,上述3个表全部使用FPGA上的片内存储器实现。 500)this.style.width=500;" border=0> 3.4 主控模块 主控模块接收哈希模块送来的地址,访问重组信息表,并根据报文头部的信息确定下一步的操作。可能的操作如表1所示[4]。其中,有效位表示重组信息表的有效位。 500)this.style.width=500;" border=0> 分片报文到达后,主控模块(图1)通过IP报文的偏移量及长度,与洞描述符表项相比较,确定是否需要读写控制模块连接新的内存块,如是,需要连接多少个内存块。当主控模块发现有异常的报文出现,如分片报文的长度过短(小于576字节),或者出现报文覆盖等情况,则向控制通路发出警报消息。 3.5 哈希模块 哈希模块使用CRC-10算法对报文的协议号、源地址、目的地址、ID域进行计算,得到10位的结果作为访问重组信息表项的地址。虽然CRC-10能够使哈希的结果均匀分布,但也存在冲突。当哈希冲突发生时,通过链表把冲突的报文信息表项连接起来。 3.6 Checksum模块 Checksum模块校验IP报文头部信息的完整性,如果计算结果不正确,则将报文丢弃;如果正确,则将报文送往哈希模块。 3.7 老化模块 老化模块扫描重组信息表的计时器、有效位,如果表项超时,则通知主控模块放弃该报文的重组,删除相应的表项。 3.8 洞描述符控制器 洞描述符控制器将对应于各重组信息表项的洞描述符组织成双向链表的格式。当增加一个洞描述符时,先向空闲块队列请求一个空闲内存块,然后连接在链表尾部;删除一个洞描述符时,先从双向链表摘除该内存块,然后将该内存块的编号写入空闲块队列中。 3.9 读写控制模块 读写控制模块接收来自主控模块的指令,通过RLDRAM控制器对内存进行读/写操作。该模块维护一个空闲块队列,当需要将新的报文写入内存块时,从空闲块队列读取一个或多个空闲块编号,将报文写入对应该编号的内存块,并更新相应的内存块信息表。当一个报文重组完毕后,读写控制模块将对应的报文内容写入报文输出队列,删除对应的内存块链表,更新相应的内存块信息表项,并将空闲的内存块编号写入空闲块队列。当空闲块队列为空或者低于特定值时,表示模块的资源已经趋于耗尽,网络流量出现了异常,读写控制模块通知主控模块,主控模块向控制通路发出警报。该方案可以有效地预防IP碎片攻击。 3.10 RLDRAM控制器 RLDRAM控制器用于控制RLDRAM II SIO存储器(系统共2片,每片容量为288Mb),使用的RLDRAM II SIO存储器是由Micron公司提供的MT49H16M18CFM器件[5],其设计时钟频率为166MHz,每个管腿的单向数据速率为333Mbps(DDR),面向上层用户提供32比特数据位宽。读、写端口并发执行,单端口的峰值速率可达5.312Gb/s,考虑到需要对其进行刷新,双端口的速率为单端口速率的2倍,整个RLDRAM II SIO存储器的带宽为10.492Gb/s。 4 仿真及综合结果 为了验证方案的可行性,本文使用Verilog编程实现了IP碎片重组模块,并采用NLANR[6]提供的OC-48接口流量的trace作为模块的输入,对输出进行了校验,通过了功能仿真。 同时,借助于QuatusII综合布线工具,使用Altera公司的StratixII EP2S60 FPGA芯片进行了综合、布线,模块的运行频率达到107MHz,RLDRAM控制器的运行频率为166MHz。整个设计共使用了2348个LUT,1,250,304比特片上内存,64MB的RLDRAM。 5 结论 本文研究设计了一个基于FPGA的硬件IP碎片重组模块,可大大提高IP碎片报文的重组速度,并提供了一种基于资源使用情况的攻击预警机制,能够抵御常见的碎片报文攻击。仿真实验表明,该模块可运行在OC-48接口速率下,适宜在高性能网络安全设备中应用。 本文的创新点说明: 1) 实现了高速的IP碎片重组操作 2)具有硬件代价小,可扩展性好的特点 3) 能够抵御常见的IP碎片攻击 本文可能所用到的IC型号: LH61664K-70 HM6116ALP-15 BA3917 SMP100-120 HCTL-2017-PLC MB3807 NCP1271D100R2G 74AC11M W83791D |
更多回帖