一种入侵检测的数据获取方法转让专利

申请号 : CN200910001196.5

文献号 : CN101789883B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李岩刘桂东陈玄同

申请人 : 英业达股份有限公司

摘要 :

本发明公开了一种入侵检测的数据获取方法,该方法在进行防火墙的转发链过滤之后获取数据。其中获取数据的方式包括套接字(socket)通信方式和字符设备的工作方式。本发明的入侵检测的数据获取方法能够获得防火墙过滤后的数据,减少误报;并且能够获得网络地址转换(Network AddressTranslation,NAT)操作后的数据,从而正确定位攻击者和被攻击者;还能够获得解密后的因特网协议安全数据包(IPsec数据包),从而正常处理IPsec数据流。

权利要求 :

1.一种入侵检测的数据获取方法,用于在包括一防火墙和一入侵检测系统的架构中获取入侵检测的数据,其特征在于,包括以下步骤:在该防火墙的一转发链过滤模块中注册一数据获取点;

在进行转发链过滤之后,于所述数据获取点获取用于入侵检测的数据;其中获取数据的方式包括socket通信方式和字符设备的工作方式,所述socket通信方式进一步包括:

注册协议类型;

注册socket;

在转发链将socket注册为回调函数,借以在进行转发链过滤之后获取数据;以及所述字符设备的工作方式进一步包括:注册字符设备;

在转发链将字符设备注册为回调函数,借以在进行转发链过滤之后获取数据;其中是采用zero_copy的方式来减少用户态和内核态之间的数据复制数量,并且提供mmap函数。

说明书 :

一种入侵检测的数据获取方法

技术领域

[0001] 本发明涉及网络安全的数据处理方法,特别是涉及一种入侵检测的数据获取方法。

背景技术

[0002] 入侵检测(Intrusion Detection)是对入侵行为的发觉。它通过对计算机网络或者计算机系统中的若干关键点收集信息并对其进行分析,从中发现网络或者系统中是否存在违反安全策略的行为和被攻击的迹象。入侵检测系统(IDS)是进行入侵检测的软件和硬件的组合。一般来说,入侵检测系统可分为主机型和网络型。主机入侵检测系统往往以系统日志、应用程序日志等作为数据源。网络入侵检测系统(NIDS)的数据源则是网络上的数据包。
[0003] 请参考图1和图2,图1是现有技术的入侵检测系统100获取数据的系统功能框图,而图2是现有技术的入侵检测系统获取数据的数据流框图。如图1和图2所示,现有技术的入侵检测系统100是在防火墙200的外部获取数据,因而存在如下缺陷:
[0004] (1)被防火墙过滤掉的流量仍将会出现在入侵检测的处理中:图2左侧的数据包获取位置的操作位于防火墙操作之前,因此,它会获取被防火墙丢掉的数据包,这些数据包对于入侵检测系统没有意义,反而会造成入侵检测系统的误报。
[0005] (2)针对开启了网络地址转换(NAT)功能的流量将无法正常的实现入侵检测处理:开启了NAT操作的防火墙,在进行数据包转发时需要相应的改变源Ip、源端口或者目的ip、目的端口。入侵检测系统需要获得这些被NAT操作处理后的地址和端口才能确定正确的攻击主机和被攻击主机。这些操作在图2的“路由前目标网络地址转换(PRE_ROUTING DNAT)”模块和“路由后源网络地址转换(POST_ROUTING SNAT)”模块中完成,而现有技术获取的数据包的ip和端口信息是NAT操作前的信息,从而导致入侵检测系统定位到错误的攻击主机或被攻击主机。
[0006] (3)无法把加密后的因特网协议安全(Internet Protocol Security,IPsec)数据包还原成明文进行检测:IPsec加密数据包会在协议栈(protocol stack)内部被解析,现有技术的数据包获取位置位于协议外部,因此获取到的是未解密的数据包,入侵检测系统无法对密文数据包进行处理。

发明内容

[0007] 为了解决上述现有技术中所存在的问题或缺陷,本发明的目的之一在于提供一种入侵检测的数据获取方法,用于在包括一防火墙和一入侵检测系统的架构中获取入侵检测的数据,其特征在于,包括以下步骤:
[0008] 在该防火墙的一转发链过滤模块中注册一数据获取点;
[0009] 在进行转发链过滤之后,于所述数据获取点获取用于入侵检测的数据。
[0010] 所述的入侵检测的数据获取方法,其中,获取数据的方式包括socket通信方式和字符设备的工作方式。
[0011] 所述的入侵检测的数据获取方法,其中,所述socket通信方式进一步包括:
[0012] 注册协议类型;
[0013] 注册socket;
[0014] 在转发链将socket注册为回调函数,借以在进行转发链过滤之后获取数据。
[0015] 所述的入侵检测的数据获取方法,其中,所述字符设备的工作方式进一步包括:
[0016] 注册字符设备;
[0017] 在转发链将字符设备注册为回调函数,借以在进行转发链过滤之后获取数据。
[0018] 所述的入侵检测的数据获取方法,其中,是采用zero_copy的方式来减少用户态和内核态之间的数据复制数量,并且提供mmap函数。
[0019] 与现有技术相比,本发明所提供的入侵检测的数据获取方法能够获得防火墙过滤后的数据,减少误报;并且能够获得NAT操作后的数据,从而正确定位攻击者和被攻击者;还能够获得解密后的IPsec数据包,从而正常处理IPsec数据流。
[0020] 以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。

附图说明

[0021] 图1是现有技术的入侵检测系统获取数据的系统功能框图;
[0022] 图2是现有技术的入侵检测系统获取数据的数据流框图;
[0023] 图3是本发明的入侵检测系统获取数据的系统功能框图;
[0024] 图4是本发明的入侵检测系统获取数据的数据流框图;
[0025] 图5是本发明的通过socket通信方式获取数据的步骤流程图;
[0026] 图6是本发明的通过字符设备的工作方式获取数据的步骤流程图。

具体实施方式

[0027] 下面结合附图和具体实施方式对本发明的技术方案作进一步更详细的描述。
[0028] 请参考图3和图4,图3是本发明的入侵检测系统获取数据的系统功能框图,图4是本发明的入侵检测系统100获取数据的数据流框图。如图4所示,防火墙200的三个主要功能模块,包括路由前目标网络地址转换(PRE_ROUTING DNAT)400、转发链过滤入侵检测数据获取(FORWARD)420和路由后源网络地址转换(POST_ROUTING SNAT)440三个功能点,本发明的数据获取点位于“转发(FORWARD)链过滤”中,即转发链过滤入侵检测数据获取420。
[0029] 为了简化说明,在此将协议栈的流程划分为路由前目标网络地址转换(PRE_ROUTING DNAT)400、转发链过滤入侵检测数据获取(FORWARD)420和路由后源网络地址转换(POST_ROUTING SNAT)440三个功能点,在这三个点上分别完成了不同的操作。在路由前目标网络地址转换400,完成数据包的DNAT操作,将其还原为内网数据包。在转发链过滤入侵检测数据获取420,首先完成过滤操作,随后才是入侵检测的数据获取处理,这样保证过滤掉的流量将不会出现在入侵检测的处理中。同时,由于在路由前目标网络地址转换400已经完成了DNAT操作,所以开启了NAT功能的流量也将可以实现入侵检测处理。而且,在IPsec的处理流程中,所有解密后的明文数据包将会流经转发链过滤入侵检测数据获取
420,因此也可以将加密后的IPsec数据包还原成明文进行入侵检测处理。
[0030] 在路由后源网络地址转换440,将会完成数据包的SNAT操作,这将改变原始的内网数据包,但由于在此之前已经在转发链过滤入侵检测数据获取420截获了原始的内网数据包,因此这里的改变不会对入侵检测处理带来任何影响。
[0031] 以下,将结合图5来描述通过socket通信方式获取数据的方法流程。首先,调用proto_register来注册SECPKT协议类型(步骤S500)。接着,调用sock_register来注册socket(步骤S502),其中sock_register注册了SECPKTsocket所需的全部处理函数,这些函数和用户态的标准socket系统调用相对应。此外,本发明还采用zero_copy的方式来减少用户态和内核态之间的数据复制数量,并且还提供了mmap函数。接下来,调用nf_register_hook在FORWARD点将socket注册为一个回调函数(步骤S504),从而确定了数据的获取位置。nf_register_hook注册secpkt_hook,以用于数据获取,获取的数据存入数据包循环缓冲区(packet buffer ring)。
[0032] 以上描述了socket模块的注册过程,而在进行模块卸载时,需要倒序地执行所有相反操作。
[0033] 完成上述步骤之后,用户态进程可以通过标准的socket系统调用来完成数据读取操作。以下提供了socket、close、poll、getsockopt、setsockopt和mmap的对应函数实现:
[0034] socket函数用于创建一个socket;
[0035] close函数用来关闭socket;
[0036] poll函数用来确定数据包循环缓冲区中是否有数据包,如果有,则进行读取;
[0037] getsockopt用来读取数据包统计信息;
[0038] setsockopt用来设置数据包循环缓冲区的大小;
[0039] mmap完成数据包循环缓冲区空间的映射,针对数据包循环缓冲区,内核态和用户态通过flag标志位来确定数据包循环缓冲区中一个槽的状态(即,有无数据包),接着内核态和用户态根据此标志位分别维护一个index指针,从而整体上完成一个生产者-消费者的读写功能。
[0040] 现在请参考图6,该图为本发明的通过字符设备的工作方式获取数据的步骤流程图。如图6所示,首先通过调用register_chrdev来注册字符设备(步骤S600),其注册了用户态操作此字符设备的全部处理函数,这些函数与用户态的标准的文件操作的系统调用相对应。在此,同样采用zero_copy的方式来减少用户态和内核态之间的数据复制数量,并且还提供了mmap函数。接下来,调用nf_register_hook在FORWARD点将字符设备注册为一个回调函数(步骤S602),从而确定了数据的获取位置。nf_register_hook注册secpkt_hook,以用于数据获取,获取的数据存入数据包循环缓冲区。
[0041] 以上描述了字符设备模块的注册过程,而在进行模块卸载时,需要倒序地执行所有相反操作。
[0042] 完成上述步骤之后,用户态进程可以通过标准的文件操作的系统调用来完成数据读取操作。以下提供了open、close、poll、ioctl和mmap的对应函数实现:
[0043] open函数用于打开字符设备;
[0044] close函数用来关闭字符设备;
[0045] poll函数用来确定数据包循环缓冲区中是否有数据包,如果有,则进行读取;
[0046] ioctl通过不同的命令字段来读取数据包统计信息和设置数据包循环缓冲区的大小;
[0047] mmap完成数据包循环缓冲区空间的映射,针对数据包循环缓冲区,内核态和用户态通过flag标志位来确定数据包循环缓冲区中一个槽的状态(即,有无数据包),接着内核态和用户态根据此标志位分别维护一个index指针,从而整体上完成一个生产者-消费者的读写功能。
[0048] 当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。