论文部分内容阅读
〔关键词〕 网络安全;入侵检测系统;设计;思考
〔中图分类号〕 G434〔文献标识码〕 A
〔文章编号〕 1004—0463(2011)09(A)—0046—02
一、设计入侵检测系统需注意的问题
1. 确定检测需求和数据需求。不同的用户群有不同的检测需求,如有的用户只关心外来入侵者,而有的用户更关心内部入侵者,不同的检测需求决定了不同的数据需求。由检测需求确定数据需求时,既要求是充分的,也要求是必要的。
2. 选择数据源。现有的数据源包括主机数据源、网络数据源等。主机数据源又包括主机审计日志、系统日志、应用程序日志等。
3. 分析方案。首先,在什么地点(分布式或集中式)、什么时机(实时或周期的)进行数据分析。其次,采用什么样的方法(某种异常检测方法或特征检测方法)来表示和检测入侵者。其中后一个问题尤其重要,也尤为困难,它将关系到整个入侵检测系统的有效性。
4. 响应。当检测到入侵或可疑的活动时,采取什么样的响应措施?
二、一个分布式入侵检测系统的总体设计
1. 确定检测需求和数据需求。本文的目标是设计实现一个通用的入侵检测系统,既要检测外来入侵者,也要检测内部入侵者(包括内部人员冒用他人账号的行为),即检测一切危及系统安全的行为及企图。这就要求搜集全面的数据作为证据。
2. 选择数据源。基于网络的入侵检测系统对已知的探测和拒绝服务攻击较为有效,而基于主机的入侵检测系统对user-to-root攻击更有效,结合基于网络和基于主机的入侵检测系统有较好的综合性能。所以,本文设计的入侵检测系统采用了基于网络和基于主机的入侵检测相结合的方案。
基于网络的入侵检测系统都无一例外地将网络数据包作为唯一的数据源,而没有把网络域知识、主机知识利用起来,这将导致基于网络的入侵检测系统很容易遭到攻击。本文设计的基于网络的入侵检测系统将网络数据包和网络域知识、主机知识作为数据源,从而增强了入侵检测系统自身的安全性。
基于主机的入侵检测系统一般采用主机系统的审计迹作为数据源。许多入侵检测专家认为以入侵检测为目的的操作系统审计迹优于其他常见的主机信息源,主要有两个原因:一是操作系统为审计子系统和审计迹提供了保护;二是审计迹很详细地揭示了系统事件,也就是说审计迹为入侵检测系统提供了丰富的证据。所以,本文设计的基于主机的入侵检测系统也将操作系统的审计迹作为数据源。
3. 分析方案。首先,本文采用实时、分布的分析策略。分布式入侵检测系统是指数据分析在n个位置执行(n为变量),它随所监视的主机数量的增长而增长,分布式入侵检测系统是相对于集中式入侵检测系统而言的。集中式入侵检测系统是指数据分析在确定的一个或多个(通常是一个)位置执行。分布式入侵检测系统较集中式入侵检测系统有以下优点:(1)利用分布式计算,提高了系统的处理能力。(2)可扩展性好,当原有网络扩展时,只需增加几个网络检测单元或主机检测单元。(3)系统重新配置或升级较容易。
在分析方法的选择上,网络检测单元采用模式匹配的特征检测方法,主机检测单元采用人工神经元网络的异常检测方法。在中央控制台,把来自网络检测单元和主机检测单元的信息进行关联分析,发现其中的联系。
三、网络检测单元的设计与实现
网络检测单元按照指定的安全规则检测网络数据包,发现网络攻击和用户自定义的网络行为,并根据用户设置作出适当的响应。
1. 设计思想。网络检测单元就是一个基于网络的入侵检测系统,本文在网络检测单元的设计中采用的方法是通过将主机知识、网络域知识结合到网络检测单元的信息源中,解决基于网络的入侵检测系统易受攻击的问题。
2. 网络包的捕获。(1)网络监听原理:在一般情况下,数据帧到达一台主机的数据链路层时,数据链路层读入数据帧进行检查,如果数据帧中的目的地址与自己的物理地址一致,则将数据帧交给上层协议层,否则丢弃这个数据帧。但是,如果将网络适配器(网卡)设置为混杂模式,则无论数据帧中的目的地址是什么,主机都将接受。(2) 网络包的协议分析:协议分析的主要任务是完成对网络包的语义识别,即从网络包中找出源IP地址、源端口、目的IP地址、目的端口等信息,以便在规则匹配时引用。另外一个重要任务是要完成对IP分片的重组、TCP流的组装,因为狡猾的黑客可以利用IP分片、TCP流将攻击特征分散在多个网络包中,从而躲过只执行简单的单包分析的入侵检测系统。(3)规则库的数据结构:规则库以文本文件的形式由中央控制台传递给网络检测单元,因为文本文件的可读性好、易于扩展,但是不能作为直接的数据结构提供给检测引擎使用。规则库可以存在数据库中,供检测引擎随时查询,但是数据库查询涉及频繁的I/O操作,而且缺少优化的搜索策略,必然难以满足入侵检测的实时性要求。所以,本文决定在每次系统启动时,将规则库以链表形式组织起来,这样检测引擎可以直接访问内存中的规则链表,省略了耗时的I/O操作。规则库的数据结构如下:
①协议链表节点
typedef struct_ProtocolNode
{ U_int8_protocol;//IP包头中的协议字段值
PortNode *pportnode://指向端口链表的头节点的指针
ProtocolNode *next;//指向下一个协议节点的指针
}ProtocolNode;
②端口链表节点
typedef struct_ PortNode
{u_intl6_tport;//TCP/UDP包头中的目的端口字段值
RuleHeader *pruleheader; //指向规则链表的头节点的指针
PortNode *next;//指向下一端口节点的指针
}PortNode;
③规则头节点
typedef struct_RuleHeader
{ IpAddrSet *sip;//源IP地址及其掩码
IpAddrSet *dip;//目的IP地址及其掩码
U_short sport;//源端口号
U_int8_t acttype;//响应类型
HeaderFpList *hdr_func//处理函数列表
RspFpList *rsp_func//响应函数列表
RuleHeader *right;//指向下一个规则头节点的指针
RuleOption *down; //指向规则选项节点的指针
}RuleHeader;
④规则选项节点
typedef struct_ RuleOption
{ int ruleid;//规则ID
void *opt-arg[32]; //选项参数的指针数组
OptFpList *opt_func; //处理函数列表
RuleOption *next; //指向下一个规则选项节点的指针
RuleOption *rtn; //指向对应的规则头节点的指针
}RuleOption;
⑤规则库的匹配过程
a.首先提取当前数据包中的协议号protonum。
b.然后沿协议链表的横向进行查找,如果当前节点的协议号小于protonum,则继续向后查找;如果当前节点的协议号大于protonum,则匹配失败返回;如果搜索到末尾还没有相同协议号的节点,则匹配失败返回;如果找到相同协议号的节点,转到③。
c.提取出该数据包中的目的端口值,并沿协议节点中的端口链表指针找到端口链表,沿端口链表的横向进行查找。如果当前节点的端口值小于,并dport,则继续向后查找;如果当前节点的端口值大于dport,则匹配失败返回;如果搜索到末尾还没有相同端口值的节点,则匹配失败返回;如果找到相同端口值的节点,转到④。
d.提取出该数据包中的源IP、源端口号、目的IP,沿端口节点中的规则链表指针找到规则链表,并沿规则链表的横向进行查找。如果没有相同内容的规则链表的头节点,则匹配失败返回;如果找到相同内容的规则链表的头节点,转到⑤。
e. 纵向搜索规则选项节点,如果没有匹配的规则选项节点,则匹配失败返回;如果发现有匹配的规则选项节点,则判断为一次攻击,这时沿ret指针返回到对应的规则链表的头节点,根据规则链表的头节点中的规则动作作出相应处理。
编辑:张昀
〔中图分类号〕 G434〔文献标识码〕 A
〔文章编号〕 1004—0463(2011)09(A)—0046—02
一、设计入侵检测系统需注意的问题
1. 确定检测需求和数据需求。不同的用户群有不同的检测需求,如有的用户只关心外来入侵者,而有的用户更关心内部入侵者,不同的检测需求决定了不同的数据需求。由检测需求确定数据需求时,既要求是充分的,也要求是必要的。
2. 选择数据源。现有的数据源包括主机数据源、网络数据源等。主机数据源又包括主机审计日志、系统日志、应用程序日志等。
3. 分析方案。首先,在什么地点(分布式或集中式)、什么时机(实时或周期的)进行数据分析。其次,采用什么样的方法(某种异常检测方法或特征检测方法)来表示和检测入侵者。其中后一个问题尤其重要,也尤为困难,它将关系到整个入侵检测系统的有效性。
4. 响应。当检测到入侵或可疑的活动时,采取什么样的响应措施?
二、一个分布式入侵检测系统的总体设计
1. 确定检测需求和数据需求。本文的目标是设计实现一个通用的入侵检测系统,既要检测外来入侵者,也要检测内部入侵者(包括内部人员冒用他人账号的行为),即检测一切危及系统安全的行为及企图。这就要求搜集全面的数据作为证据。
2. 选择数据源。基于网络的入侵检测系统对已知的探测和拒绝服务攻击较为有效,而基于主机的入侵检测系统对user-to-root攻击更有效,结合基于网络和基于主机的入侵检测系统有较好的综合性能。所以,本文设计的入侵检测系统采用了基于网络和基于主机的入侵检测相结合的方案。
基于网络的入侵检测系统都无一例外地将网络数据包作为唯一的数据源,而没有把网络域知识、主机知识利用起来,这将导致基于网络的入侵检测系统很容易遭到攻击。本文设计的基于网络的入侵检测系统将网络数据包和网络域知识、主机知识作为数据源,从而增强了入侵检测系统自身的安全性。
基于主机的入侵检测系统一般采用主机系统的审计迹作为数据源。许多入侵检测专家认为以入侵检测为目的的操作系统审计迹优于其他常见的主机信息源,主要有两个原因:一是操作系统为审计子系统和审计迹提供了保护;二是审计迹很详细地揭示了系统事件,也就是说审计迹为入侵检测系统提供了丰富的证据。所以,本文设计的基于主机的入侵检测系统也将操作系统的审计迹作为数据源。
3. 分析方案。首先,本文采用实时、分布的分析策略。分布式入侵检测系统是指数据分析在n个位置执行(n为变量),它随所监视的主机数量的增长而增长,分布式入侵检测系统是相对于集中式入侵检测系统而言的。集中式入侵检测系统是指数据分析在确定的一个或多个(通常是一个)位置执行。分布式入侵检测系统较集中式入侵检测系统有以下优点:(1)利用分布式计算,提高了系统的处理能力。(2)可扩展性好,当原有网络扩展时,只需增加几个网络检测单元或主机检测单元。(3)系统重新配置或升级较容易。
在分析方法的选择上,网络检测单元采用模式匹配的特征检测方法,主机检测单元采用人工神经元网络的异常检测方法。在中央控制台,把来自网络检测单元和主机检测单元的信息进行关联分析,发现其中的联系。
三、网络检测单元的设计与实现
网络检测单元按照指定的安全规则检测网络数据包,发现网络攻击和用户自定义的网络行为,并根据用户设置作出适当的响应。
1. 设计思想。网络检测单元就是一个基于网络的入侵检测系统,本文在网络检测单元的设计中采用的方法是通过将主机知识、网络域知识结合到网络检测单元的信息源中,解决基于网络的入侵检测系统易受攻击的问题。
2. 网络包的捕获。(1)网络监听原理:在一般情况下,数据帧到达一台主机的数据链路层时,数据链路层读入数据帧进行检查,如果数据帧中的目的地址与自己的物理地址一致,则将数据帧交给上层协议层,否则丢弃这个数据帧。但是,如果将网络适配器(网卡)设置为混杂模式,则无论数据帧中的目的地址是什么,主机都将接受。(2) 网络包的协议分析:协议分析的主要任务是完成对网络包的语义识别,即从网络包中找出源IP地址、源端口、目的IP地址、目的端口等信息,以便在规则匹配时引用。另外一个重要任务是要完成对IP分片的重组、TCP流的组装,因为狡猾的黑客可以利用IP分片、TCP流将攻击特征分散在多个网络包中,从而躲过只执行简单的单包分析的入侵检测系统。(3)规则库的数据结构:规则库以文本文件的形式由中央控制台传递给网络检测单元,因为文本文件的可读性好、易于扩展,但是不能作为直接的数据结构提供给检测引擎使用。规则库可以存在数据库中,供检测引擎随时查询,但是数据库查询涉及频繁的I/O操作,而且缺少优化的搜索策略,必然难以满足入侵检测的实时性要求。所以,本文决定在每次系统启动时,将规则库以链表形式组织起来,这样检测引擎可以直接访问内存中的规则链表,省略了耗时的I/O操作。规则库的数据结构如下:
①协议链表节点
typedef struct_ProtocolNode
{ U_int8_protocol;//IP包头中的协议字段值
PortNode *pportnode://指向端口链表的头节点的指针
ProtocolNode *next;//指向下一个协议节点的指针
}ProtocolNode;
②端口链表节点
typedef struct_ PortNode
{u_intl6_tport;//TCP/UDP包头中的目的端口字段值
RuleHeader *pruleheader; //指向规则链表的头节点的指针
PortNode *next;//指向下一端口节点的指针
}PortNode;
③规则头节点
typedef struct_RuleHeader
{ IpAddrSet *sip;//源IP地址及其掩码
IpAddrSet *dip;//目的IP地址及其掩码
U_short sport;//源端口号
U_int8_t acttype;//响应类型
HeaderFpList *hdr_func//处理函数列表
RspFpList *rsp_func//响应函数列表
RuleHeader *right;//指向下一个规则头节点的指针
RuleOption *down; //指向规则选项节点的指针
}RuleHeader;
④规则选项节点
typedef struct_ RuleOption
{ int ruleid;//规则ID
void *opt-arg[32]; //选项参数的指针数组
OptFpList *opt_func; //处理函数列表
RuleOption *next; //指向下一个规则选项节点的指针
RuleOption *rtn; //指向对应的规则头节点的指针
}RuleOption;
⑤规则库的匹配过程
a.首先提取当前数据包中的协议号protonum。
b.然后沿协议链表的横向进行查找,如果当前节点的协议号小于protonum,则继续向后查找;如果当前节点的协议号大于protonum,则匹配失败返回;如果搜索到末尾还没有相同协议号的节点,则匹配失败返回;如果找到相同协议号的节点,转到③。
c.提取出该数据包中的目的端口值,并沿协议节点中的端口链表指针找到端口链表,沿端口链表的横向进行查找。如果当前节点的端口值小于,并dport,则继续向后查找;如果当前节点的端口值大于dport,则匹配失败返回;如果搜索到末尾还没有相同端口值的节点,则匹配失败返回;如果找到相同端口值的节点,转到④。
d.提取出该数据包中的源IP、源端口号、目的IP,沿端口节点中的规则链表指针找到规则链表,并沿规则链表的横向进行查找。如果没有相同内容的规则链表的头节点,则匹配失败返回;如果找到相同内容的规则链表的头节点,转到⑤。
e. 纵向搜索规则选项节点,如果没有匹配的规则选项节点,则匹配失败返回;如果发现有匹配的规则选项节点,则判断为一次攻击,这时沿ret指针返回到对应的规则链表的头节点,根据规则链表的头节点中的规则动作作出相应处理。
编辑:张昀