1
硬件化探索第三步-NIDS
前面已经讨论了Router和包预处理器的设计与实现,本章我们讨论一个更加复杂的网络系统NIDS。NIDS(network ,网络入侵检测系统)在网络上实时检测传输的数据流,分析捕获的数据包,主要工作是匹配入侵行为的特征或者从网络活动的角度检测异常行为,进而完成入侵的预警或记录。
熟悉NIDS工作原理的捷径是分析一个开源的网络入侵检测系统Snort,从检测模式而言,Snort 属于误用检测。从本质上来说,Snort
是基于规则检测的入侵检测工具,即针对每一种入侵行为都提炼出其特征值,从而形成一个规则数据库,在运行中对规则进行模式匹配。
Snort工作的总体流程如下:首先执行主函数,其中包括对命令行参数的解析以及各种标识符的设置。同时,主函数还调用相关例程对预处理模块、输出模块和规则选项关键字模块进行初始化工作,其实质是构建包含各种处理模块或者初始化模块的链表结构。接着,调用了关键的规则解析进程,主函数启动数据包的处理进程。在对数据包进行处理时,首先是调用各种网络协议解析模块,对当前数据包进行分层协议格式字段的分析。然后,系统一次调用预处理模块和入侵检测模块,根据给定的各种规则和当前截获数据包的协议分析结果,做出是否发生入侵行为判断的响应,如判断为入侵则进行日志记录和报警操作。其中数据包解析模块与检测模块是最重要的模块。
数据包解析模块的全部工作都是围绕着网络协议栈中的各层定义展开的,包括了数据链路层和传输层等协议层的定义。解析引擎中的每个子模块使用事先定义好的数据结构,从原始网络数据中解析出协议信息。这些子模块按照网络协议自下而上的顺序调用,从数据链路层到传输层,直到应用层结束。
检测模块的流程就是使用预定义的规则进行模式匹配。Snort系统将其检测规则组织成一个二维的链表结构:链表头和链表选项,如图2-2所示。所有的规则按照规则头排成主链,然后根据规则选项把规则插入到这个链中,构成一棵规则树。这样每一个选项节点就对应一条规则,规则匹配的过程就是对网络上捕获的每一条数据报从二维的方向对规则树进行匹配扫描。
1.1
基于FPGA的NIDS研究现状
大多数NIDS都是基于NP技术,目前人们也在研究利用ASIC或者FPGA的纯硬件并行处理特点对核心模块进行加速,以实现高速NIDS,如TCP/IP协议解析芯片的处理能力达4Gbps[2]。而FPGA的可重匹配、并行处理等特点更适合于NIDS的硬件加速,它的并行处理可以摆脱原有技术受限于CPU顺序指令的制约,提高处理能力;因此可重配置则比ASIC芯片更适合规则不断更新的NIDS。随着FPGA规模的飞速发展,基于FPGA的NIDS加速方案也越来越受到重视。
目前国外有较多研究机构都在进行基于FPGA的高速NIDS系统实现方案的研究。在这个方向上取得一定成果,具有代表性的主要有美国的Los Alamos国家实验室、佐治亚理工大学的Clark的小组以及华盛顿大学Lockwood领导的小组。下面分别分析每一个小组的技术。
1)
美国Los Alamos国家实验室的方案
Los Alamos实验室第一次提出了采用可编程器件和处理器结合的方法[15],其结构如图2-10所示。
图2-10 Los Alamos国家实验室的方案[15]
主机把网络数据通过PCI接口送至FPGA,数据流先经过X1单元,完成数据包格式判断,标志位判断以及数包头的匹配,同时数据载荷送至X2进行数据包内容匹配,数据包头和数据包载荷分别得到匹配结果,这个匹配结果再通过PCI接口返回至主机,由主机处理器对匹配结果进行分析处理,SRAM用于更新规则表,其模式匹配模块采用的是基于FPGA片内CAM的方法。这种实现方式是一种协处理卡的方案,将受限于PCI接口的速率。而主机CPU同时还要完成TCP/IP协议解析等工作,在高速环境下的TCP/IP协议也将占用大量的处理器资源,因此这种方案不能将主机CPU从繁重的处理工作中解脱出来。
2)
美国佐治亚理工大学研究小组的方案
佐治亚理工大学Clark小组采用NP和FPGA结合的方案[16],他们的结构如图2-11所示。
图2-11 佐治亚理工大学方案[16]
这个方案利用NP强大的分布式处理能力,完成原来由主机处理器完成的协议解析等工作,然后把待匹配的数据送至FPGA完成模式匹配,模式匹配采用NFA(Nondeterministic Finite
Automata,非确定有限自动机)的方案,匹配结果再返回给NP进行进一步的分析处理,并上报。与上一方案相比,这个小组的方案可以直接处理网卡发送过来的数据流,然后把检测的结果通过PCI总线上报至主机,而不需要主机的参与,减轻了主机的负担,提高了主机CPU的处理效率。
3)
美国华盛顿大学研究小组的方案
前述两种方案中,FPGA只完成了模式匹配部分的工作。其余部分的工作都是交给主机处理器或者专用处理器完成的。而华盛顿大学Lockwood领导的小组的方案是整个系统都在FPGA中实现,这个小组在这一领域的工作是处于领先地位的。图2-12是这个小组提出的基于FPGA的防火墙结构图,其网络数据拆包的工作是由FPGA完成的,经过Protocol Wrappers的数据再送至数据包内容匹配模块进行处理,这里采用的匹配方法是基于正则表达的方法,经匹配得到的结果再送至中心处理模块完成处理。这个方案中的中心处理模块是可扩展的,即可以根据不同的应用需求替换为不同的模块,这种设计体现了SOPC的思想[17]。在此基础上,这个小组设计了基于FPGA的网络入侵检测系统,其结构如图2-13所示。这个新的方案中,模式匹配采用了Bloom Filter的方法,在FPGA内构建哈希函数,实现模式匹配。这个小组的两种方案都实现了基于FPGA的网络数据拆包,真正意义上实现了基于FPGA的网络数据流分析处理[18]。但是由于设计中没有处理器参与的,实现一些复杂规则的检测困难很大。
图2-12 基于FPGA的防火墙[17]
图2-13 基于FPGA的入侵检测[18]
以上三个小组的方案的结构都和Snort的处理方式类似,分为数据包头匹配和数据内容匹配,但处理的先后顺序上略有不同。在数据包解析这个模块任务的分配上,这三个小组的方案完全不一致,分别采用了主机处理器,专用处理器和FPGA三种不同的方案。同时在模式匹配这一核心模块的结构设计上,这三个小组的方案也各不相同,在第5章中将对模式匹配模块的设计详细论述。
2002年以来,国内外的网络安全设备企业纷纷推出各自的高速NIDS产品,中国的千兆IDS是启明星辰公司首家推出并通过权威部门的测试认证的,几种代表性的产品及其性能如表2-1中所示:
表2-1 国内外高速NIDS代表性产品
高速NIDS产品
|
标称最高吞吐速率
|
硬件结构
|
绿盟科技“冰之眼”1600系列
|
1.6Gbps
|
GPP
|
启明星辰“天阗”2800系列
|
2Gbps
|
未知
|
CISCO IPS4200系列
|
单口1Gbps
|
GPP/NP
|
Source Fire IS5800系列
|
8Gbps
|
NP/ASICs
|
特别需要说明的是,不能简单地通过开发商标称的吞吐速率和入侵规则数目指标来对比高速NIDS的优劣。事实上,很多号称千兆NIDS或者千兆IPS的产品只不过是配备了具备”Zero Copy”功能的千兆网卡和更高一些的硬件配置,“可以接入千兆环境的NIDS”与“具备千兆线速处理能力的NIDS”级别相差甚远。在对比商业千兆NIDS的实际性能的时候至少需要考虑以下几个问题:1) 它所支持的入侵和病毒规则库覆盖率(分类过细的入侵规则产生放卫星式的检测特征条数除了增加管理员的负担外并无其他作用);2) 它所支持的最大和最小包尺寸;3) 它在最小包情况下的吞吐速率;4) 入侵规则库的更新速度和难易程度。
2.6.2 基于规则处理的高速NIDS系统研究现状
美国圣路易斯华盛顿大学的Lockwood博士带领的研发团体在2005年4月的IEEE FCCM会议上提出了一种利用Xilinx公司FPX开发平台堆叠构建的FPGA+RAM结构的可重配置高速网络规则处理框架[33]。该原型系统理论上在现有Virtex2000E芯片上可以实现2.5Gbps(OC48)的吞吐量,采用SNORT规则库,具备800万并发TCP会话处理能力。目前未见有其他论文宣称更优的基于FPGA的完整高速NIDS系统实现。但是2002年以来,世界各国的研究组针对高速NIDS系统的各种关键技术的研究成果非常丰富,其中基于FPGA平台在关键字模式匹配、TCP协议解析和流重组、SNORT规则头匹配、SNORT规则匹配四个方面比较有特色的成果可以归纳为表2-2所示:
表2-2 基于FPGA的高速NIDS系统关键技术研究现状归纳
功能
|
研究组与算法名称
|
所用器件
|
逻辑单元消耗
|
吞吐速率 (Gbps)
|
TCP流监控
|
GaTech Stream Assembler[34]
|
Virtex 1000
|
876 (10%)
|
3.2
|
NorthW U Flow Monitor [18]
|
Virtex2-8000
|
-
|
48.3
|
WashU TCP Processor [19]
|
Virtex4 140
|
22,100 (35%)
|
10.3
|
规则头匹配
|
WashU BV-TCAM [22]
|
Virtex4 100
|
4,200 (10%)
|
10
|
数据包内容
关键字匹配
|
Crete Pre-decoded CAMs [30]
|
Virtex 2-6000
|
64,268 (95%)
|
9.7
|
GaTech Decoder Trees [26]
|
Virtex 2-8000
|
54,890 (81%)
|
7
|
Tokyo Trie-based Hash [28]
|
Virtex2-6000
|
2,365 (7%)
|
10
|
USC Partitioning [35]
|
Virtex2 Pro 100
|
15,010 (15%)
|
4.5
|
WashU Bloom Filters [32]
|
Virtex 4-100
|
35,850 (85%)
|
20.4
|
入侵规则处理
|
WashU Rule Processor[33]
|
Virtex4 100
|
40,200 (95%)
|
15.9
|