最近几年,IPS产品成为安全产品市场新的热点,不仅保持了每年100%以上的市场增长率,而且应用领域不断扩大,应用技术也逐步普及。与传统的IDS旁路接入不同,IPS产品采用inline工作方式,即对接收的数据进行检测,然后按照其目的转发,这与安全网关类产品如防火墙、VPN等非常相似。这种工作方式决定了IPS产品除了要有准确的检测能力,还要有与应用网络相适应的性能要求。
实际上自IPS产品诞生以来,一直采用协议识别和攻击特征模式匹配等成熟技术,困扰其应用范围的主要是性能要求。目前的防火墙达到千兆线速、4G、甚至10G转发能力已属平常,但IPS要实现这一性能绝非易事。在IPS中不仅需要检查数据报文的头部,还要针对具体的应用协议检查数据报文的内容,这就使得在IPS中五元组相同的数据报文也不能"加速处理",也就是说在IPS处理数据报文的整个路途中没有"捷径",IPS需要对流经自身的每一个报文进行逐一检测。这样IPS成为CPU资源的主要耗费者,其性能很大程度上取决于硬件处理器的处理能力。
使用硬件内容加速卡来协助处理类似正则表达式查找的工作,可以起到局部加速作用,但整体效果有限,因为类似对TCP流状态的跟踪、各种应用协议的识别、策略的查找以及事件的统计和记录等等繁重工作还是要依靠CPU来处理。
近年来多核处理器的发展为并行处理技术的应用提供了广阔的空间,在一个处理器内部集成多个内核(独立运算单元)已日趋成熟,比较有代表性的商业化产品是RMI公司的XLR系列线程处理器,它集成了多达8个内核。在多核处理器硬件平台上,可以利用并行处理技术来提升IPS产品性能,但是实际性能的提升取决于IPS并行化的方法及其并行化的程度,不幸的是IPS软件的并行化远比硬件增加1个或几个物理内核要复杂得多,这涉及到操作系统并发工作的模式、流量的分担与负载、IPS引擎的并行检测、配置的同步与竞争控制、事件统计以及运行态调试等等问题。以下我们将对这些IPS并行化中的问题逐一探寻。
首先需要IPS系统软件(这里假定IPS系统是一个运行于应用层的程序,如果将IPS做为内核模块嵌入到操作系统中则需要考虑的问题会更多一些)的载体-操作系统本身支持并行化,也即操作系统有稳定的SMP版本。操作系统在多核处理器硬件平台上一般有两种构架,一种是SMP方式,也称为同构方式(见图:SMP方式示意图,以4核为例),另一种为AMP方式,也称为异构方式(见图:AMP方式示意图,以4核为例)。
SMP方式示意图
AMP方式示意图
SMP方式顾名思义就是将多个内核平等看待,每个内核运行的操作系统相同,且每个内核上都运行一套IPS系统,这样从数据接收、连接建立、数据检测到数据发送都是并发执行的,相当于多个IPS系统在同时运行。这种架构比较简洁,各个处理器内核负载均衡,可以全方位地提升IPS产品性能,特别是在测试单一性能指标时,由于所有内核都参与处理工作,往往可以获得比较好的表现。这种架构也有其固有缺陷,因为所有内核都运行相同的软件系统(包含操作系统和IPS系统),势必产生对共享资源(内存数据、文件描述符、I/O设备等)的争用。为处理并发与同步需要使用大量的锁机制,而这些锁的操作又影响了性能发挥,更严重的是随着内核数量的增多,并发与同步的消耗达到一定的量级,这时性能就不再增长甚至下降了。
AMP方式就是将多个内核区别看待,可以运行不同的操作系统也可以在相同的操作系统上运行不同的任务,各个处理器内核按照任务划分,各负其责,规避共享资源的竞争,做到"术有专攻",从而提升IPS产品的综合性能。完整的操作系统往往比较庞大,耗费资源较多,效率也较低。拿出几个物理内核,在其上建立一种简易的系统环境(有时候直接叫做"裸核"环境),在这个"洁净的空间"内运行单一任务(比如收发数据、模式匹配等)往往可以获得极高的性能,这是AMP方式的特点,也是其优势。另外一种方式,在相同的操作系统上运行不同的任务也是同样的机理,只不过更容易实现一些,相应的性能提升的效果也逊色一些。这种架构也有其缺陷,在测试单一性能指标时,因为特定功能只有有限的内核参与处理,往往性能不够理想。架构本身也比较复杂,需要仔细权衡各个内核的任务分担,否则会造成内核负载不均衡,影响性能发挥。
选择哪一种架构需要根据处理器硬件平台与IPS系统本身的特点来抉择,通常在硬件处理器内核比较少的情况下选择SMP架构,在需要将一大堆不可能并行化的"遗产"继承到产品中时只好选择AMP架构,如果已经使用了硬件内容加速,那么可以选择SMP架构,如果是新开发IPS产品,内核分工可以动态调整的AMP架构是不错的选择,但需要保证足够的技术储备和适当的人力投入。
在确定了工作模式后,就要考虑流量的分担与负载问题了,多个内核并行处理,它们共同的输入就是来自网络的数据流,如何将这些数据流"喂"给处理器内核呢?最简单的就是轮询方法,即将到达的数据依次交给等待处理的内核,各个内核平均分配,这对早期的基于单个数据包检测的IPS系统比较适合。现代的IPS系统功能丰富,不仅可以进行TCP流重组,还可以跟踪应用层协议和控制流量。但是在多个内核上并发地跟踪TCP状态机是个棘手的问题,实现难度也较大,所以出现了另外一种按照五元组分流的方法,即将同一个数据流分配到同一个内核上,保障一个数据流始终由一个内核处理。这种方式大大降低了IPS内部实现复杂度,虽然具有流量较小时负载不均衡的副作用,但从研发成本考虑还是可以接受的。
接下来就是对提升性能至关重要的IPS引擎的并行检测,IPS检测引擎的并发是提升性能的关键。这里的引擎主要指应用协议的识别和分析、攻击特征的匹配、策略的检查以及后续的数据处理。如果运行于应用层,可以将每个IPS引擎作为一个单独的进程对待,它们共用一份公共的攻击特征库,对各自的输入的数据流进行并行检测和处理,就好像多个引擎在同时工作。但是数据流之间有时候是相关的,比如一个应用层协议可以动态协商出它的一个子连接,当这个子连接分配到另外一个IPS进程上处理时,要想控制它就需要进行进程间通讯,这样引擎的独立性就被破坏了。同样在双机热备份的状态同步、应用层协议动态识别上也会遇到同样的困难。如果IPS作为一个内核模块运行于操作系统核心层,那么需要对所有可能产生竞争的共享资源进行并发访问控制,使其彻底并行化,除此之外可能没有什么更好的办法了。
配置问题是并发系统中一个棘手的问题,用户常常在系统运行过程中进行配置变更,而且总是希望这种变更后的配置能够即时生效。
在并发IPS系统中只有一份配置,配置的变化意味着所有的并行工作都要暂停下来,需要根据新的配置调整运行参数。运行时态频繁地调整配置不可避免地影响并发IPS系统性能,如果设计不好还会产生"停顿",导致丢包。同样的,在IPS系统中各种统计数据(流量统计、事件统计、时间统计等)都需要实时地准确地显示到用户可视层面,多个引擎需要并发地对单一数据结果操作,如果简单地用锁规避竞争也会很大程度上影响并发IPS系统性能的提升。
一个系统的成熟和完善离不开调试,与基于单内核的系统相比,并发IPS系统的调试工具极度匮乏,调试手段也很不成熟。那些传统的强大的单步跟踪工具已经没有用武之地,就连简单的打印调试信息也需要特别小心,因为你需要先知道这个信息是哪个内核打印的才好定位问题。如果系统运行时死锁,那么整个系统或者IPS进程会被挂起,但留下的供你调试的线索却非常有限。总之,有四类问题比较关键:死机、内存泄漏、内存篡改和报文调试。这些问题影响并发IPS系统的稳定,当然也影响到性能发挥。
机遇与挑战并存。尽管利用并行处理技术提升IPS产品性能并非易事,还有很多问题有待解决,很多技术有待探索和突破,但是相信,在当今多核处理器迅速普及并不断发展的趋势下,硬件计算资源的开发暨并行处理技术的应用将为IPS产品带来性能的质的飞跃。同时伴随着新技术新产品的应用,也将引发现有IPS产品市场布局的一场变革。
天融信公司的网络卫士入侵防御系统(TopIDP)应用了先进的多核处理器硬件平台,将并行处理技术融入天融信自主知识产权操作系统TOS系统,实现了高效率的并行处理检测引擎,达到了千兆级性能,能够满足高速网络的安全防御要求,同时也打破了国外产品长期垄断高端IPS产品市场的局面。
(注:作者"吴亚飙"现为天融信总工程师)