网络入侵检测的动态负载均衡方法转让专利

申请号 : CN200910311772.6

文献号 : CN101729573A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 于洪伟刘贤洪

申请人 : 四川长虹电器股份有限公司

摘要 :

本发明涉及网络安全技术领域。本发明公开了一种应用于网络入侵防御系统中的多检测引擎负载均衡方法,以多核网络服务处理器为硬件基础,使用多核网络服务处理器的多个处理核作为检测引擎,利用基于流的动态负载均衡方法保证多核间负载均衡、保证检测准确率和千兆处理线速的处理需求。本发明的网络入侵检测的动态负载均衡方法,包括检测引擎实时负载表的更新和维护步骤,数据包的下发步骤,数据包下发表的更新和维护步骤和负载均衡步骤。通过上述步骤的具体实施,能够保证流的完整性,使后续检测或其他处理更加准确。同时采用动态负载均衡方法,使各处理引擎的负载量分配均衡、相应快速。本发明特别适合千兆网络环境下的入侵检测。

权利要求 :

1.网络入侵检测的动态负载均衡方法,包括检测引擎实时负载表的更新和维护步骤,数据包的下发步骤,数据包下发表的更新和维护步骤和负载均衡步骤;其特征在于:检测引擎实时负载表的更新和维护具体步骤如下:a1、当定时器时间到,调用信息收集函数收集所有检测引擎处理的会话数Si(t)、检测引擎的待处理队列中的待处理数据包数目Pi(t)、检测引擎的内存占用率Mi(t)、检测引擎的核利用率Ci(t);

a2、计算相应检测引擎的负载量Li(t):a3、调用负载判断函数判断是否需要负载均衡;如果需要负载均衡,执行步骤a4;否则执行步骤a5;

a4、执行负载均衡处理函数;

a5、更新负载表;

a6、结束检测引擎实时负载表的更新和维护步骤;

数据包的下发具体步骤如下

b1、从输入队列中获得当前待下发数据包的五元组Hash值;

b2、利用查找算法从数据包下发表中查找是否有当前数据包的Hash值,如果命中,执行步骤b3;如果未命中,执行b6;

b3、检查数据包的TCP标志位,如果其标志位是FIN或RST中之一,说明这是一个会话终止数据包,执行步骤b4,否则执行步骤b5;

b4、删除下发表中对应当前Hash值的相应表项,该会话结束;

b5、下发数据包到下发表中命中表项的相应引擎号的队列中;返回步骤b1;

b6、未命中表明一个新的会话到来,查找引擎负载表中负载最小的引擎号,将当前数据包下发到对应的待检测队列中;

b7、将新到来的会话的Hash值,分配的检测引擎号,当前时间生成一个新的下发表项,更新下发表;

b8、返回步骤b1;

数据包下发表的更新和维护具体步骤如下:c1、根据调用函数传递的参数判断是何种原因引起的更新;如果是定时器引起的更新,执行步骤c2;否则执行步骤c6;

c2、获得下发表的当前指针,如果是刚开始则是头指针,读取下发表下一表项;检测表项是否是TCP连接的表项,如果不是执行步骤c3;如果是执行步骤c5;

c3、判断表项的更新时间和当前时间的差值,如果超过更新阈值Th,执行步骤c4;否则执行步骤c5;

c4、删除表项;

c5、判断是否到链表的尾节点,如果是则返回步骤c2,否则执行步骤c9;

c6、判断是否是新的连接到来,如果是,执行下步骤c7;否则执行步骤c8;

c7、添加新表项,执行步骤c9。

c8、删除表项;

c9、结束数据包下发表的更新和维护步骤;

负载均衡具体步骤如下:

d1、负载表更新完成后,读取负载表的表项;

d2、判断当前的引擎的负载是否超过规定的阈值,如果超过,执行步骤d3;否则,执行步骤d4;

d3、将当前表项加入过载链表。

d4、读取下一个表项,判断是否为空,如果是,执行步骤d5;否则,返回步骤d2;

d5、判断过载链表是否为空,如果是空,则执行步骤d8;否则,执行步骤d6;

d6、如果链表中只有一个表项,表明只有一个引擎过载,调用负载均衡函数,将部分连接分配到负载小的引擎;否则执行步骤d7;

d7、如果多个检测引擎过载,调用异常处理函数;

d8、结束。

2.根据权利要求1所述的网络入侵检测的动态负载均衡方法,其特征在于,步骤b7中,更新下发表时,按数据包的五元组Hash值大小排序。

3.根据权利要求1或2所述的网络入侵检测的动态负载均衡方法,其特征在于,步骤a2中负载量Li(t)计算公式如下:Li(t)=a1Si(t)/S+a2Mi(t)+a3Pi(t)/P+a4Ci(t)i=1,2,…N其中,N为检测引擎的数量;a1、a2、a3、a4分别代表会话数、内存利用率、待处理数据包数、核利用率对负载的影响系数,他们的和常量S为检测引擎可容忍的最大会话数,常量P为检测引擎最大可接受的待处理数据包数目。

说明书 :

技术领域

本发明涉及网络安全技术领域。特别涉及利用多核处理器进行入侵检测,并利用多个核运行入侵检测引擎进行并行检测、利用动态负载均衡方法调整各检测核的负载的方法。

背景技术

面对日益严重的网络入侵攻击,网络安全专家提出很多解决方法。denning在1987年提出的入侵检测(IDS)系统模型在很长一段时间被广泛应用。但是入侵检测的防御能力是它的致命弱点,很多入侵是非常快速的,入侵防御不及时将会造成重大损失。国际知名调研机构Gartner在2003年的一份研究报告中称入侵检测系统已经“死”了。Gartner认为IDS不能给网络带来附加的安全,反而会增加管理员的困扰,建议用户使用入侵防御系统(IPS,Intrusion Prevention System)来代替IDS。Gartner公司认为只有在线的或基于主机的攻击阻止(实时拦截)才是最有效的入侵防御系统。由于网络技术及网络应用的迅速发展使得网络上的数据流量不断加大,网络带宽飞速提高,传统的10Mbps网络已迅速被100Mbps、1000Mbps网络取代。在如此高速的环境下,要将网络中全部数据包截获下来,并做入侵检测分析或其它分析处理,传统的技术架构已经不足以应付,必须使用专用的网络服务处理芯片。
传统的网络入侵检测和入侵防御安全产品多采用高CUP主频单核X86架构服务器,但是X86架构存在的瓶颈使它不能达到千兆处理能力,I/O、系统总线和内存速度、协议开销也是X86架构的瓶颈,X86架构在网络处理方面没有任何优势。后来专用的网络服务处理器被开发出来,但是单CPU很难满足千兆线速处理的需求,随着2006年Intel和AMD相继推出多核处理器,CPU进入多核时代,基于多核的专用网络服务处理器满足了网络安全检测的千兆线速处理的硬件要求,虽然多核处理器单个核的主频并不高,但是利用多个核并行工作就很容易达到这个要求。为了实现高速网络特别是千兆网络环境下的在线实时入侵检测,需要对经过入侵防御部署节点进行数据分析。当等待分析数据的产生速度超过处理能力时,将会影响网络服务质量。即使专门应用于网络的网络服务器也必须使用多个检测引擎。因此,在线对网络数据包进行入侵检测的系统必须进行负载均衡,负载均衡系统的好坏影响检测准确性和检测速度。负载均衡方法按照分配方式的不同可分为两种,一种是静态负载分配,一种是动态负载分配。只是利用系统负载的平均信息,而忽视系统当前的负载状况的方法被称为静态负载分配。根据系统当前的负载状况来调整任务划分的方法被称为动态负载分配。与静态负载分配方法相比,采用简单的动态调整策略,可以明显的提高负载均衡性,其性能接近于采用复杂动态调整策略的方法。但动态负载分配方法通常不保证报文顺序,因此,报文负载分配应尽量采用动态负载分配方法,同时采用适当的策略保证报文不乱序,在均衡性与报文乱序率间做出平衡。

发明内容

本发明所要解决的技术问题,就是提出一种应用于网络入侵防御系统中的多检测引擎负载均衡方法,以多核网络服务处理器为硬件基础,使用多核网络服务处理器的多个处理核作为检测引擎,组成分布式处理集群。利用基于流的动态负载均衡方法保证多核间负载均衡、保证检测准确率和千兆处理线速的处理需求。
本发明解决所述技术问题采用的技术方案是,网络入侵检测的动态负载均衡方法,包括检测引擎实时负载表的更新和维护步骤,数据包的下发步骤,数据包下发表的更新和维护步骤和负载均衡步骤;其特征在于:
检测引擎实时负载表的更新和维护具体步骤如下:
a1、当定时器时间到,调用信息收集函数收集所有检测引擎处理的会话数Si(t)、检测引擎的待处理队列中的待处理数据包数目Pi(t)、检测引擎的内存占用率Mi(t)、检测引擎的核利用率Ci(t);
a2、计算相应检测引擎的负载量Li(t):
a3、调用负载判断函数判断是否需要负载均衡;如果需要负载均衡,执行步骤a4;否则执行步骤a5;
a4、执行负载均衡处理函数;
a5、更新负载表;
a6、结束检测引擎实时负载表的更新和维护步骤;
数据包的下发具体步骤如下
b1、从输入队列中获得当前待下发数据包的五元组Hash值;
b2、利用查找算法从数据包下发表中查找是否有当前数据包的Hash值,如果命中,执行步骤b3;如果未命中,执行b6;
b3、检查数据包的TCP标志位,如果其标志位是FIN或RST中之一,说明这是一个会话终止数据包,执行步骤b4,否则执行步骤b5;
b4、删除下发表中对应当前Hash值的相应表项,该会话结束;
b5、下发数据包到下发表中命中表项的相应引擎号的队列中;返回步骤b1;
b6、未命中表明一个新的会话到来,查找引擎负载表中负载最小的引擎号,将当前数据包下发到对应的待检测队列中;
b7、将新到来的会话的Hash值,分配的检测引擎号,当前时间生成一个新的下发表项,更新下发表;
b8、返回步骤b1;
数据包下发表的更新和维护具体步骤如下:
c1、根据调用函数传递的参数判断是何种原因引起的更新;如果是定时器引起的更新,执行步骤c2;否则执行步骤c6;
c2、获得下发表的当前指针,如果是刚开始则是头指针,读取下发表下一表项;检测表项是否是TCP连接的表项,如果不是执行步骤c3;如果是执行步骤c5;
c3、判断表项的更新时间和当前时间的差值,如果超过更新阈值Th,执行步骤c4;否则执行步骤c5;
c4、删除表项;
c5、判断是否到链表的尾节点,如果是则返回步骤c2,否则执行步骤c9;
c6、判断是否是新的连接到来,如果是,执行下步骤c7;否则执行步骤c8;
c7、添加新表项,执行步骤c9。
c8、删除表项;
c9、结束数据包下发表的更新和维护步骤;
负载均衡具体步骤如下:
d1、负载表更新完成后,读取负载表的表项;
d2、判断当前的引擎的负载是否超过规定的阈值,如果超过,执行步骤d3;否则,执行步骤d4;
d3、将当前表项加入过载链表。
d4、读取下一个表项,判断是否为空,如果是,执行步骤d5;否则,返回步骤d2;
d5、判断过载链表是否为空,如果是空,则执行步骤d8;否则,执行步骤d6;
d6、如果链表中只有一个表项,表明只有一个引擎过载,调用负载均衡函数,将部分连接分配到负载小的引擎;否则执行步骤d7;
d7、如果多个检测引擎过载,调用异常处理函数;
d8、结束。
本发明的有益效果是,通过利用多核网络服务处理器实现并行检测,并可以根据具体应用环境扩展和系统虚拟(一个入侵防御系统虚拟成多个检测引擎,节约成本)。本发明针对负载均衡算法的不保序性,提出基于流的负载均衡方法,保证了同一通信数据分配到相同检测引擎,提高检测准确性。本发明从工程性和实用性考虑,采用一种简单的动态负载均衡方法,解决了在高速网络环境下静态负载均衡算法的负载不均被放大的问题;同时避免了复杂负载均衡算法的复杂性。
本发明主要应用环境:
千兆网络环境下的主干网络节点,可以是计算机通信网、实现了双向网络改造的广播电视网等类似环境。
可以针对不同的环境进行系统虚拟,硬件系统基于多核网络服务处理器。
下面结合具体实施方式对本发明作进一步详细描述。

具体实施方式

本发明创新的利用多核网络服务处理器的多个处理核构成分布式处理集群,采用一种非常适合工程应用的动态负载均衡算法。针对负载均衡的不保序缺点,将一种保护数据流完整性的方法与负载均衡算法结合,提出一种基于网络的实时在线数据处理设备的负载均衡解决方案,工程实用性强。
数据流完整性、负载均衡的算法的好坏是影响入侵检测系统性能的两个主要因素。数据流的完整性影响检测的准确性,同一个会话的数据包要分配到一个检测引擎上。负载均衡算法好坏影响检测速度,尽量使每个检测引擎都在未满负荷状态下工作。
随着各种应用软件的不断增加,传统的基于传输层以下的数据包入侵检测已经不能准确检测现在的入侵,必须进行深层协议分析。为了方便扩展,每个检测引擎最好完成相同的功能。同时,可以实现虚拟检测引擎功能,节省部署成本。
在对数据包进行负载均衡前一般需要进行数据包还原,在典型的TCP/IP协议环境下,主要是进行IP碎片重组、TCP会话重组等,也可以进行深层协议分析。很多专用的网络服务处理器都将捕包、还原等功能利用硬件实现,本发明是在上述工作完成后进行多引擎负载均衡。
根据数据包中的五元组(协议,源端口,源IP地址,目的端口,目的IP地址)的哈希值可以唯一区分一个会话,一般专用的网络服务处理器会自动生成这个值,也可以自己求得。
本发明利用多个核来实现多检测处理引擎并行处理,那么必须要处理好以下问题:
负载均衡问题。每个检测引擎处理待检测的数据包的快慢可能不同,跟数据包的具体内容有关,所以分配给每个检测引擎的待检测队列中的数据包负载量要有变化,要不然会出现一个检测处理引擎处于空闲状态,但其他的检测引擎却很忙的情况,影响系统的工作效率。所以针对多检测引擎必须要面对负载均衡的问题。
数据的完整性是另一个需要考虑的问题,数据的完整性影响着检测的准确性或处理的有效性。检测的准确性或处理的有效性是一个系统的重要性能指标。数据的分流不能是任意的,如果没有保障会话的完整,单纯保证负载的均衡,那么从某个IP地址来的入侵攻击的数据被分包后就可能被分配到不同的检测引擎中,检测引擎将无法得到完整的数据进行检测,就会出现漏报现象。因此,负载均衡策略须确保所有同一连接的数据包被发送到同一检测器。
负载均衡策略问题。当前的负载均衡策略主要有下面几种形式:策略1,检测引擎针对特定协议策略:每个检测引擎都针对特定协议(如http、ftp、telnet等)数据包进行检测,缺点是可能目标网络上各种协议的数据包数量不同,且随着时间变化而变化,因此很难达到负载均衡的效果;策略2,检测引擎负责特定被保护目标的策略:特定的检测引擎负责被保护网络中特定IP的主机,缺点是同一时刻被保护目标的流量不均匀,且被保护目标的一天中各时段流量也在不断变化,不具有通用性;策略3,每个检测引擎通用策略:通用的引擎是指可以对所有网络数据流(包括所有应用协议或所有目标主机的数据流)进行入侵检测与分析的引擎。基于该策略,负载均衡器可以不受数据包应用协议类型和目标主机地址的限制,而只依据负载均衡算法将网络数据流分发到后续的各个通用引擎中。
降低开销的问题。保持较少的状态信息。保存当前流的状态信息需要大量资源,因此要保持较少的状态信息,使算法简单,开销小,以满足数据报文线速处理要求。
出于通用性考虑,本发明采用第三种负载均衡策略,即每个检测引擎通用的策略,采用通用性策略还有方便扩展(增加检测引擎)、可以进行检测设备虚拟等好处,考虑到数据的完整性和低开销问题,采用了一个基于流的动态负载均衡算法。
本发明利用了一个基于流的动态负载均衡算法,首先考虑反应检测引擎负载量的主要指标:检测引擎处理的会话数Si(t)、检测引擎的待处理队列中的待处理数据包数目Pi(t)、检测引擎的内存占用率Mi(t)、检测引擎的核利用率Ci(t)。这些指标反映了检测引擎t时刻的负载量Li(t):
Li(t)=a1Si(t)/S+a2Mi(t)+a3Pi(t)/P+a4Ci(t)  i=1,2,  …N  (1)
其中,N为检测引擎的数量;a1、a2、a3、a4分别代表会话数、内存利用率、待处理数据包数、核利用率对负载的影响系数,他们的和常量S为检测引擎可容忍的最大会话数,常量P为检测引擎最大可接受的待处理数据包数目。
区别不同的会话主要用五元组标识:<协议号,源IP,源端口,目的IP,目的端口>,对于无连接协议(如UDP、ICMP等)我们定义在相近的极短时间T内具有相同的五元组标识的所有数据包为一个会话,在本发明的网络处理器上对新来的数据包会自动生成一个五元组的哈希值。
负载均衡主要有以下几个主要部分:
一、检测引擎实时负载表的更新和维护。负载表中包括:检测引擎号、待检测会话数、数据包的剩余量、检测核利用率、内存占用率、当前的检测引擎负载量。该表采用顺序表存储,在一段给定的很短的时间间隔后更新。信息的采集可以采用专门的线程或利用管理控制核进行。检测引擎实时负载表的结构如下:
typedef struct_detectengineload{
u_int16_t engine_id,//检测引擎号。
u_int32_t session_count,//待检测会话数。
u_int32_t remain_packet_count,//数据包的剩余量。
u_int16_t engine_utilization,//检测核利用率。
u_int16_t mem_utilization,//内存占用率。
u_int32_t load, //当前的检测引擎负载量
}DETECTENGINELOAD;
检测引擎实时负载表的更新和维护由以下步骤来实施:
第一步,当定时器时间到,调用信息收集函数收集所有检测引擎处理的会话数Si(t)、检测引擎的待处理队列中的待处理数据包数目Pi(t)、检测引擎的内存占用率Mi(t)、检测引擎的核利用率Ci(t)。
第二步,根据公式1计算相应检测引擎的负载量Li(t)。
第三步,调用负载判断函数判断是否需要负载均衡,如果需要负载均衡,执行第四步;否则执行第五步。
第四步,执行负载均衡处理函数。
第五步,更新负载表。负载表很小,但是不能更新频繁,否则将影响系统性能。
第六步,结束检测引擎实时负载表的更新和维护步骤。
二、数据包的下发。该流程基于数据包下发表和引擎负载表进行运算和操作。当一个新会话到来时,按照当前负载最小的原则选择一个引擎,并在下发表中加入相应于该会话的一条分发记录,随后同一会话的所有数据包都分发到该引擎。只要接收数据包的五元组标识在下发表中没有相应的记录,就认为是一个新会话的开始。当一个会话结束时,就将该会话记录从下发表中删除。对于TCP数据包,FIN和RST标志用来结束一个会话。对于无连接协议(UDP、ICM P等)的数据包,以及不完整TCP连接的数据包,则利用表中的记录项“更新时间”定时清除超时的会话记录。下发表项的数据结构如下:
typedef struct_detectengineload{
PHASH packet_hash,            //五元组的哈希值。
u_int16_t engine_id,    //数据包被分配到的引擎号。
u_int16_t is_tcp               //是否tcp连接。
struct timeval  ts,     //更新时间。
}DETECTENGINELOAD;
数据包的下发由以下具体步骤来实施:
第一步,从输入队列中获得当前待下发数据包的五元组Hash值.
第二步,利用查找算法从数据包下发表中查找是否有当前数据包的Hash值。如果命中,执行第三步;如果未命中,执行第六步。
第三步,检查数据包的TCP标志位,如果其是标志位是FIN或RST的数据包,说明这是一个会话终止数据包。执行第四步,否则执行第五步。
第四步,删除下发表中对应当前Hash值的相应表项,该会话结束。
第五步,下发数据包到下发表中命中表项的相应引擎号的队列中。返回第一步。
第六步,未命中表明一个新的会话到来,查找引擎负载表中负载最小的引擎号,将当前数据包下发到对应的待检测队列中。
第七步,将新到来的会话的Hash值,分配的检测引擎号,当前时间生成一个新的下发表项,更新下发表。更新下发表时采用按Hash值大小排序。
第八步,返回第一步。
三、数据包下发表的更新和维护。由于在高速网络中不可能将一个会话完全重组后才进行检测,那样需要缓存的数据量会很大,所以建立下发表是非常有必要的。下发表中包括:引擎号,更新时间,五元组<协议号,源IP,源端口,目的IP,目的端口>。当一个会话结束、新的会话到来或定时器时间到,更新下发表。处理无连接通信采用定时更新方法。
数据包下发表的更新和维护具体步骤如下:
第一步,根据调用函数传递的参数决定是何种原因引起的更新。如果是定时器引起的更新,执行下一步;否则执行第六步。
第二步,获得下发表的当前指针,如果是刚开始则是头指针,读取下发表下一表项,检测表项是否是TCP连接的表项,如果不是执行下一步;如果是执行第五步。
第三步,判断表项的更新时间和当前时间的差值,如果超过更新阈值Th(阈值Th可以根据网络数据流量的大小和网络服务处理器的能力由系统自行确定),执行下一步;否则执行第五步。
第四步,删除表项。
第五步,判断是否到链表的尾节点,如果是否则返回第二步,否则执行第九步。
第六步,判断是否是新的连接到来,如果是,执行下一步;否则执行第八步。
第七步,添加新表项,执行第九步。
第八步,删除表项。
第九步,结束。
四、负载均衡。当某个检测引擎的负载量超过一定的阀值LTh(阈值LTh可以用最大负载量作为参照值进行确定)时,将应该分配到本引擎的数据包进行负载均衡,分配到其他检测引擎中,这种情况当一个检测引擎的会话都是大流量会话时可能出现,当多个引擎出现这种情况时,要产生报警,调用异常处理函数。负载均衡函数只有在负载表更新后被调用,被负载更新函数调用。
负载均衡具体步骤如下:
第一步,负载表更新完成后,读取顺序存储负载表的表项。
第二步,判断当前的引擎的负载是否超过规定的阈值LTh,如果超过,执行下一步;否则,执行第四步。
第三步,将当前表项加入过载链表。
第四步,读取下一个表项,判断是否为空,如果是,执行第五步;否则,执行第二步。
第五步,判断过载链表是否为空,如果是空,则执行第八步;否则,执行下一步。
第六步,如果链表中只有一个表项,表明只有一个引擎过载,调用负载均衡函数,将部分连接分配到负载小的引擎。否则执行下一步。
第七步,多个检测引擎过载,调用异常处理函数,可以考虑是否是拒绝服务攻击等异常出现,这里不是本发明的重点。
第八步,结束。
本发明能够保证流的完整性,使后续检测或其他处理更加准确。同时采用动态负载均衡方法,使各处理引擎的负载量分配均衡、相应快速。利用多个处理引擎的架构使一些在千兆网络环境下的基于网络的应用不会成为网络瓶颈。