徐海东
[摘要]入侵检测技术在网络安全防护中所起的作用是至关重要的。详细研究基于winpcap库的网络入侵检测系统模型的实现,分析主要功能的实现,涉及到数据包捕获、协议解析以及检测等,为网络安全又提供一道屏障。
[关键词]入侵检测协议解析检测分析日志报警
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0920016-01
一、引言
随着计算机及网络的飞速发展,网络技术的应用也日益普及。由于入侵检测技术在网络安全防护中所起的作用至关重要,因此国内外各科研机构非常重视对IDS(Intrusion Detection System)技术的研究。
二、网络入侵检测系统模型的框架设计
本文基于网络的入侵检测系统模型是在WINDOWS环境下实现的,它基于标准Winpcap库的应用,使用其来捕获数据包并触发检测过程。数据收集模块从网络上获得所有的网络数据包,进行过滤等简单的处理后交给报文解码模块,进行报头值检查。检查过后的报文经过预处理之后,全部交给攻击检测模块(包含模式匹配和协议分析)。其中部分报文将传一份拷贝给扫描攻击检测模块,扫描攻击检测模块对网络段中主机的连接报文进行分析并作统计记录,当统计值超过阈值时就报警[1]。
在循环检测过程中,系统模型通过Winpcap接口从网络中抓取数据包,然后调用数据包解析函数根据数据包的类型和所处的网络层次对数据包进行协议解析。解析后的结果存放在一个Packet结构中。根据特征数组,对Packet的有效载荷部分进行区间划分,同时合弃长度小于特征串的区间。对于划分好的区间,计算每个区间的哈希特征值,在哈希空间中按照存储规则进行搜索,查看是否有匹配记录。如果存在,则进一步进行精确匹配;否则,进行下一个区间的哈希值计算。对于精确匹配成功的数据包,进行相应的报警响应操作。
三、网络入侵检测系统模型主要功能的实现
(一)系统模型的数据包捕获。本文入侵检测原型系统使用的抓包库是Winpcap,它是Windows平台下应用最为广泛的数据包截取库,它所使用的主要函数说明如下:
Char * pcap_lookupdev ( char * errbuf )
此函数用于得到一个抓获包的描述信息,以便分析网络层中的数据包信息,将在其它函数中用作实参调用。主要参数含义如下:device即为上一函数返回的网络接口设备指针;snaplen定义了捕获的最大字节数;promisc定义了是否将网卡设为混杂模式,本系统中将其设为1,以便接收所有流经该网卡的数据包;to_ms确定读取包的时间限制;errbuf返回的错误信息。
Int pcap_compile ( pcap_t *p, struct bfp_program *fp, char *str, int optimize, bpf_u_int32 netmask )
该函数用于解析过滤规则串,填写bpf_program结构,str为字符串形式的过滤表达式,过滤规则表达式可以为空,表示抓取所有通过的数据包。在编译了过滤器后必须调用pcap_loop函数设置内核过滤器才能使之生效。
(二)系统模型的协议解析。协议解析模块的主要函数是DecodeData
Link,它从数据捕获模块获得网络上的数据流,首先判断是否是数据链路层的类型,接着根据不同的链路层类型以及协议树进行第二层的协议解码,然后继续根据协议树进行第三层以及更高层的协议解码,最后将解码的结果填充到Packet数据结构中,该过程中使用到的数据结构如下描述:
Typedef struct_Packet
{
Struct pacp_pkthdr *pkth; //BPF形式的结构数据指针
EtherARP *ah; //ARP/RARP协议报头
IPHdr *iph, *orig_iph; //IP协议报头
TCPHdr *tcph, *orig_tcph; //TCP协议报头
UDPHdr *udph, *orig_udph; //UDP协议报头
ICMPHdr *icmph, *orig_icmph; //ICMP协议报头
……
Options ip_options[40]; //用于IP协议选项解码的结构数组
u_int32_t ip_option_count; //报文中包含IP选项的数目
Options tcp_options[40]; //用于TCP协议选项解码的结构数组
u_int32_t tcp_option_count; //包含TCP选项的数目
……} Packet;
(三)系统模型的检测分析。检测分析模块是检测引擎的核心,本模块所采用的检测算法是协议分析与哈希算法相结合的方法。当数据包解码之后.首先根据协议标准进行协议分析,将不同类别的报文分派给不同的协议分析模块,如果检测到异常,就进行日志报警。对于未检测到协议使用异常的,以及那些没有对应的协议分析模块的报文分派给特征匹配模块,利用哈希算法的快速查找性能进行多模式的匹配,从而达到快速检测入侵的目的[2]。
哈希空间使用的数据结构用于在检测进行之前将规则库中的相关内容存入哈希空间,并在检测过程中用于匹配报文的哈希值。它包含以下三个部分:一对表示哈希空间的数组S61和S62(为6字节特征字符串设置),每个数组大小为64K。为每种类型的攻击各维护一个1*256的特征数组T,数组元素中的数据表示此类攻击中是否存在该字符。每种攻击的特征数组用于在检测进行前将规则库中此类攻击所含有的字符信息保存,以便于数据包的区间划分。使用区间划分方法优化后的哈希检测方法为每种类型的攻击字符串各维护一个表示扫描区间的链表partition,数组数据域有两个数据分别表示区间的起点和终点。partition的数据结构:
typedef struct_partition{
u_intl6_t head; //表示区间的头位置
u_intl6_t tail; //表示区间的尾位置
struct_partition *next; //指向下一个该结构的指针
}partition; //表示所有需扫描的区间
四、小结
总之,在网络安全问题日益突出的今天,由于传统的基于防火墙、身份认证以及加密技术的网络安全防御体系本身存在的缺陷和不足,使得入侵检测技术成为当前网络安全方面研究的热点和重要方向。它改变了以往的被动防御的特点,能够主动地实时跟踪各种危害系统安全的入侵行为,并做出及时的响应,尤其是在抵御网络内部人员的入侵攻击时,更有独到的特点,成为防火墙之后的又一道安全防线。
参考文献:
[1]李健、李成忠,分布式网络入侵检测系统研究与实现[M].西南交通大学出版社,2003.5.
[2]张丽、康占成,计算机网络入侵检测实现疗法的教学研究[J].中国计算机报.2005,6(5):35-38.