论文部分内容阅读
[摘要] 本文设计的基于Linux2.6内核桥模式的入侵检测系统,有别于传统网络入侵检测系统旁路监听的方式,它使用了桥模式的入侵检测方式,对数据包的检测在数据链路层进行,以此达到数据包检测快速、高效的目的。对该系统在真实网络环境下进行的正常访问及入侵测试试验表明:本文设计的基于Linux桥模式的入侵检测系统达到了无漏报、快速、高效的效果,可以有效的检测入侵,同时保障了对正常访问的响应。
[关键词] 入侵检测系统 Linux 网络安全 桥模式
一、引言
入侵检测作为一种积极主动地安全防护技术,提供了对内部攻击、外部攻击和误操作的实时保护,在网络系统受到危害之前拦截和响应入侵。常见的有基于网络的入侵检测和基于主机的入侵检测系统:基于主机的入侵检测系统HIDS(HOST Intrusion Detection System)实时监视可疑的连接、非法访问的闯入等;基于网络的入侵检测系统NIDS(Net Intrusion Detection System)在關键的网段或交换部位侦听。在实际的部署中,传统NIDS是并接在网络中,通过旁路监听的方式实时地监视网络中的流量,判断其中是否含有攻击的企图。
传统NIDS工作在应用层和网络层。所抓的数据包由底层向上传,经过分析判断后再向下送,有较长的网络延迟。而且特征代码库中特征代码的匹配的计算量大,计算速度慢,容易形成网络瓶颈。当攻击者向被保护网络发送大量的数据,超过NIDS的处理能力,从而使被监听的端口流量总和超过监听端口的上限,会发生丢包的情况,而可能导致入侵行为漏报“false negative”。还有,当Web 服务器已超载,不能够再处理更多的连接请求时, NIDS会以为该服务器正在受到拒绝服务的攻击,容易出现假警报“false positive”(误警),将良性流量误认为恶性的。
据统计,目前NIDS的告警信息中,仅有10%是有用的,因此需要提高NIDS的检测速度,无遗漏的检测数据包,进行快速处理以适应高速网络通信的要求。
二、基于Linux内核桥模式的网络入侵检测系统的改进思想
1.传统NIDS是旁路接入一个网络(或与集线器连接,或接入交换机的SPAN端口),通过旁路监听的方式实时地监视网络流量。基于Linux环境下桥模式的NIDS改进了旁路连接,使其成为网络的一部分,将它部署到网络的必经之处,使数据包必须经过该NIDS,以此来强制完成对网络中所有流经的数据包的检测,从而避免了入侵的漏报(false negative),达到数据包的无遗漏检测,这是网桥模式NIDS优于传统NIDS的一个重要特点。
2.由于一个网桥更像一段网线,将一个网络的两个部分连接在一起。一个透明NIDS像网桥一样工作,检测通过它的数据包而不被两端设备发现。一个桥模式的NIDS的网卡不分配任何IP地址,对于现有网络拓扑结构透明,丝毫不影响网络管理人员的路由分析,减轻了网络管理人员的负担。由于系统结构的透明性,可以在网络中添加一个IDS而不需要修改网络中任何设备的参数。桥模式有效的把NIDS本身隐藏起来,使其成为用户攻击的一个盲点,解决了NIDS自身的安全性问题。
3.传统NIDS是在应用层和网络层完成客户端的显示,数据包的分析与检测,特征码的存储等任务,在做数据包截取和分析时,所抓的数据包由底层向上传送到应用层,然后解开包头,读取相关信息进行分析匹配,经过分析判断后重新包装包头,再向下送,把它从应用层送到数据链路层通过网卡传送出去,大大增加了网络延迟。而且特征代码库中特征代码匹配的计算量大,计算速度慢,容易形成网络瓶颈。
这种基于底层的NIDS对数据包的获取、分析与处理都不在网络层和应用层,而在链路层,通过网桥模式来完成,由内核直接处理数据包,根据桥检测模块的判断,让数据包通过或是丢弃。对于不能在数据链路层明确判断的数据包,传送到上层,在网络层进一步通过特征代码库进行高级匹配,这样的工作方式可以加快数据包的处理速度,节省数据包的处理的时间,减小网络延迟。同时采用了内核包检测分析原理,使NIDS在遭到攻击时检测并以不同的方式向系统报警,以保证合法数据包的正常通过。
4.Linux的稳定性、可靠性和安全性,给NIDS提供了稳定的运行环境。Linux的开放性及模块设计技术,使Linux内核功能更容易扩展,能够灵活的把IDS桥检测程序模块加载到内核。
三、基于Linux内核桥模式的网络入侵检测系统的设计和实现
1.桥模式的建立
在本课题的研究中,将多块网卡变成一个桥接设备,从而搭建起网桥,每一个网卡就是桥的一个端口,在桥的端口之间完全透明的转发数据包。采用Linux2.6内核下的bridge桥接模块来实现,在linux系统将网卡设置成网桥的工作模式,网卡接收到数据包后,经过的网络协议层次如图:
2.内核IDS检测模块的实现
为提高内核处理效率,将实现在驱动程序之后,在调用网桥模块的时候进行数据包检测,选择的位置在调用netif_receive_skb函数前调用入侵检测处理函数。自定义包检测钩子函数,在网桥模块中加入钩子函数,调用点放到process_backlog函数的调用netif_receive_skb语句之前。通过模块机制,将桥入侵检测模块的处理函数和数据结构注册到内核中。这样用bridge和netfilter/iptables构建对于用户和外界均透明的NIDS,实现了把桥入侵检测模块加载到内核网络接口层向网络层衔接处。
整个桥入侵检测的处理模块通过init_module将该机制定义的函数和数据结构注册到内核中去,它进行初始化,为包检测处理模块的实现分配内存、初始化指针等模块与内核之间的连接操作,而检测处理模块所提供的函数通过系统调用packet-_detect_register_hook将这些函数和数据结构注册到内核中去。将检测模块处理函数注册到内核的数据结构是packet_detect_hook_
ops,在模块中生成该结构体的实例,将检测处理函数作为回调函数,赋值给内核中自定义的钩子函数指针。
在同一目录下编写Makefile文件,编译生成 .ko(kernel object,内核目标文件)模块,用insmod命令将模块插入,内核就会在数据包从数据链路层送往网络层之前调用桥IDS模块的处理函数,从而对流经的所有数据包进行检测。把IDS桥检测程序模块加载到内核后数据包流程如图所示。
3.IDS检测模块程序设计伪代码
首先,生成packet_detect_hook_ops结构体的实例。
static struct packet_detect_hook_ops _filter=
{
IDS_module, //packet_detect_hookfn类型的指针钩子hook指向ids模块处理函数IDS_module
};
其次,通过系统调用module_ init将定义的函数和数据结构注册到内核中去的,module_ init调用一个初始化函数init,为状态机制的实现分配内存、初始化指针等操作,并将定义的结构体实例注册到内核。
int init(void)
{
初始化各种链表表头
packet_detect_register_hook(&IDS_Module);// 登记钩子函数
return 0;
}
最核心部分是IDS检测模块部分。
int IDS_module(struct sk_buff *skb)
{
If(查询特征跟踪链表,有匹配项)
return PACKET_DROP; //通知内核数据包是入侵包,丢掉
else if(网络状态异常)
{
记录数据包信息;
送入高级匹配模块;
return PACKET_DETECT; //通知内核数据包需进一步检测
}
else {
return PACKET_NOMAL;//通知内核数据包是正常包
}
}
最后,通过系统调用module_exit,在模块卸载时,释放内存,注销过滤钩子函数。
void cleanup(void)
{
释放链表空间
packet_detect_unregister_hook(&IDS_Module);//注销钩子函数
return;
}
module_init(init);//加载ids检测模块入口
module_exit(cleanup);//卸载ids检测模块出口
四、实验
1.实验环境
实验环境一:11号交换机和10号主机相连模拟内网,1至9号主机与13号交换机相连模拟外网。10号主机使用IIS做Web发布,成为一个Web Server服务器,外网客户端(1~9号主机)可以向其发送Web请求,Web 服务端(10号主机)提供Web网页。基于Linux网桥模式NIDS系统系统安装在12号主机,它工作在网桥模式下,所以可以通过12号NIDS系统的两块网卡分别与11号交换机与13号交换机相连,这样内网外网中间有了一道检测防御系统,保护Web Server服务器,防止其受到外网的攻击。实验环境一的网络拓扑结构如图3。
实验环境二:14号机为传统NIDS系统,以旁路模式安置在网络中,其它均同环境一。
2.实验结果
环境一实验结果:当网络存在正常访问和入侵扫描时,在不同强度的攻击下,桥模式NIDS系统的性能,包括:监测系统主机CPU(即12号主机)及内存消耗程度。实验结果如下图所示:
图中1号兰色线表示当网络存在正常访问、入侵扫描时,用1号机进行SYN攻击时桥模式NIDS系统消耗的CPU/内存情况,2号红色线表示相同条件下,同时用1、2号机进行SYN攻击时桥模式NIDS系统消耗的CPU/内存消耗情况,3号绿线表示相同条件下,同时用1、2、3号机进行SYN攻击时桥模式NIDS消耗的CPU/内存消耗情况。
环境二实验结果:
图中1号兰色线表示用1号机进行SYN攻击时某公司A系列LND-100NIDS系统消耗的网络带宽/CPU,2号红色线表示1、2号机同时进行SYN攻击时该系统消耗的网络带宽/CPU,3号绿线表示1、2、3号机同时进行SYN攻击时该系统消耗的网络带宽/CPU。
从实验的结果表明,入侵扫描、Syn攻击器等工具的扫描和攻击在传统的NIDS系统下,因流量过大数据包过多,检测系统无法检测拦截攻击包,并在其系统资源消耗过多情况下无法拦截检查有害信息,造成黑客嗅探入侵成功。而改进后的基于Linux下桥模式的NIDS系统,采用数据链路层检测分析,以较少的CPU消耗为代价,拦截到了攻击包并检测出了黑客的入侵扫描行为,同时保证了网络的正常访问请求。但两者网络带宽的消耗几乎相同。
五、结论
基于Linux2.6内核开发改进的桥模式NIDS系统工作在Linux系统内核网络协议栈的底层,随内核启动而工作,真正的做到了内核底层检测拦截黑客扫描攻击的效果。用多种攻击工具进行黑客攻击和入侵扫描,该系统都能无遗漏的将数据包抓取并检测,较好地解决了对入侵扫描以及黑客攻击行为的检测和抵御。目前该系统的不足之处是内存资源消耗较多,存在着部分内存泄露的问题。这是是造成系统不稳定的潜在因素,也是以后的开发过程中要对该系统逐渐加以完善的地方。
参考文献:
[1]Robert Graham. NIDS-Pattern Search vs. Protocol Decode[J],Computers& Security, 2001. 20:37~41
[2]StevenMcCanne,Van Jacobson.The BSD Packet Filter;A New Architecture for User-level Packet Capture[J].Lawrence Berkeley Laboratory One Cyclotron RoadBerkeley, 1992
[3]Stephen Northcutt. 网絡入侵检测分析员手册[M].人民邮电出版社,2000
[4]Love,R著.Linux内核设计与实现[M].北京:机械工业出版社,2006.1
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
[关键词] 入侵检测系统 Linux 网络安全 桥模式
一、引言
入侵检测作为一种积极主动地安全防护技术,提供了对内部攻击、外部攻击和误操作的实时保护,在网络系统受到危害之前拦截和响应入侵。常见的有基于网络的入侵检测和基于主机的入侵检测系统:基于主机的入侵检测系统HIDS(HOST Intrusion Detection System)实时监视可疑的连接、非法访问的闯入等;基于网络的入侵检测系统NIDS(Net Intrusion Detection System)在關键的网段或交换部位侦听。在实际的部署中,传统NIDS是并接在网络中,通过旁路监听的方式实时地监视网络中的流量,判断其中是否含有攻击的企图。
传统NIDS工作在应用层和网络层。所抓的数据包由底层向上传,经过分析判断后再向下送,有较长的网络延迟。而且特征代码库中特征代码的匹配的计算量大,计算速度慢,容易形成网络瓶颈。当攻击者向被保护网络发送大量的数据,超过NIDS的处理能力,从而使被监听的端口流量总和超过监听端口的上限,会发生丢包的情况,而可能导致入侵行为漏报“false negative”。还有,当Web 服务器已超载,不能够再处理更多的连接请求时, NIDS会以为该服务器正在受到拒绝服务的攻击,容易出现假警报“false positive”(误警),将良性流量误认为恶性的。
据统计,目前NIDS的告警信息中,仅有10%是有用的,因此需要提高NIDS的检测速度,无遗漏的检测数据包,进行快速处理以适应高速网络通信的要求。
二、基于Linux内核桥模式的网络入侵检测系统的改进思想
1.传统NIDS是旁路接入一个网络(或与集线器连接,或接入交换机的SPAN端口),通过旁路监听的方式实时地监视网络流量。基于Linux环境下桥模式的NIDS改进了旁路连接,使其成为网络的一部分,将它部署到网络的必经之处,使数据包必须经过该NIDS,以此来强制完成对网络中所有流经的数据包的检测,从而避免了入侵的漏报(false negative),达到数据包的无遗漏检测,这是网桥模式NIDS优于传统NIDS的一个重要特点。
2.由于一个网桥更像一段网线,将一个网络的两个部分连接在一起。一个透明NIDS像网桥一样工作,检测通过它的数据包而不被两端设备发现。一个桥模式的NIDS的网卡不分配任何IP地址,对于现有网络拓扑结构透明,丝毫不影响网络管理人员的路由分析,减轻了网络管理人员的负担。由于系统结构的透明性,可以在网络中添加一个IDS而不需要修改网络中任何设备的参数。桥模式有效的把NIDS本身隐藏起来,使其成为用户攻击的一个盲点,解决了NIDS自身的安全性问题。
3.传统NIDS是在应用层和网络层完成客户端的显示,数据包的分析与检测,特征码的存储等任务,在做数据包截取和分析时,所抓的数据包由底层向上传送到应用层,然后解开包头,读取相关信息进行分析匹配,经过分析判断后重新包装包头,再向下送,把它从应用层送到数据链路层通过网卡传送出去,大大增加了网络延迟。而且特征代码库中特征代码匹配的计算量大,计算速度慢,容易形成网络瓶颈。
这种基于底层的NIDS对数据包的获取、分析与处理都不在网络层和应用层,而在链路层,通过网桥模式来完成,由内核直接处理数据包,根据桥检测模块的判断,让数据包通过或是丢弃。对于不能在数据链路层明确判断的数据包,传送到上层,在网络层进一步通过特征代码库进行高级匹配,这样的工作方式可以加快数据包的处理速度,节省数据包的处理的时间,减小网络延迟。同时采用了内核包检测分析原理,使NIDS在遭到攻击时检测并以不同的方式向系统报警,以保证合法数据包的正常通过。
4.Linux的稳定性、可靠性和安全性,给NIDS提供了稳定的运行环境。Linux的开放性及模块设计技术,使Linux内核功能更容易扩展,能够灵活的把IDS桥检测程序模块加载到内核。
三、基于Linux内核桥模式的网络入侵检测系统的设计和实现
1.桥模式的建立
在本课题的研究中,将多块网卡变成一个桥接设备,从而搭建起网桥,每一个网卡就是桥的一个端口,在桥的端口之间完全透明的转发数据包。采用Linux2.6内核下的bridge桥接模块来实现,在linux系统将网卡设置成网桥的工作模式,网卡接收到数据包后,经过的网络协议层次如图:
2.内核IDS检测模块的实现
为提高内核处理效率,将实现在驱动程序之后,在调用网桥模块的时候进行数据包检测,选择的位置在调用netif_receive_skb函数前调用入侵检测处理函数。自定义包检测钩子函数,在网桥模块中加入钩子函数,调用点放到process_backlog函数的调用netif_receive_skb语句之前。通过模块机制,将桥入侵检测模块的处理函数和数据结构注册到内核中。这样用bridge和netfilter/iptables构建对于用户和外界均透明的NIDS,实现了把桥入侵检测模块加载到内核网络接口层向网络层衔接处。
整个桥入侵检测的处理模块通过init_module将该机制定义的函数和数据结构注册到内核中去,它进行初始化,为包检测处理模块的实现分配内存、初始化指针等模块与内核之间的连接操作,而检测处理模块所提供的函数通过系统调用packet-_detect_register_hook将这些函数和数据结构注册到内核中去。将检测模块处理函数注册到内核的数据结构是packet_detect_hook_
ops,在模块中生成该结构体的实例,将检测处理函数作为回调函数,赋值给内核中自定义的钩子函数指针。
在同一目录下编写Makefile文件,编译生成 .ko(kernel object,内核目标文件)模块,用insmod命令将模块插入,内核就会在数据包从数据链路层送往网络层之前调用桥IDS模块的处理函数,从而对流经的所有数据包进行检测。把IDS桥检测程序模块加载到内核后数据包流程如图所示。
3.IDS检测模块程序设计伪代码
首先,生成packet_detect_hook_ops结构体的实例。
static struct packet_detect_hook_ops _filter=
{
IDS_module, //packet_detect_hookfn类型的指针钩子hook指向ids模块处理函数IDS_module
};
其次,通过系统调用module_ init将定义的函数和数据结构注册到内核中去的,module_ init调用一个初始化函数init,为状态机制的实现分配内存、初始化指针等操作,并将定义的结构体实例注册到内核。
int init(void)
{
初始化各种链表表头
packet_detect_register_hook(&IDS_Module);// 登记钩子函数
return 0;
}
最核心部分是IDS检测模块部分。
int IDS_module(struct sk_buff *skb)
{
If(查询特征跟踪链表,有匹配项)
return PACKET_DROP; //通知内核数据包是入侵包,丢掉
else if(网络状态异常)
{
记录数据包信息;
送入高级匹配模块;
return PACKET_DETECT; //通知内核数据包需进一步检测
}
else {
return PACKET_NOMAL;//通知内核数据包是正常包
}
}
最后,通过系统调用module_exit,在模块卸载时,释放内存,注销过滤钩子函数。
void cleanup(void)
{
释放链表空间
packet_detect_unregister_hook(&IDS_Module);//注销钩子函数
return;
}
module_init(init);//加载ids检测模块入口
module_exit(cleanup);//卸载ids检测模块出口
四、实验
1.实验环境
实验环境一:11号交换机和10号主机相连模拟内网,1至9号主机与13号交换机相连模拟外网。10号主机使用IIS做Web发布,成为一个Web Server服务器,外网客户端(1~9号主机)可以向其发送Web请求,Web 服务端(10号主机)提供Web网页。基于Linux网桥模式NIDS系统系统安装在12号主机,它工作在网桥模式下,所以可以通过12号NIDS系统的两块网卡分别与11号交换机与13号交换机相连,这样内网外网中间有了一道检测防御系统,保护Web Server服务器,防止其受到外网的攻击。实验环境一的网络拓扑结构如图3。
实验环境二:14号机为传统NIDS系统,以旁路模式安置在网络中,其它均同环境一。
2.实验结果
环境一实验结果:当网络存在正常访问和入侵扫描时,在不同强度的攻击下,桥模式NIDS系统的性能,包括:监测系统主机CPU(即12号主机)及内存消耗程度。实验结果如下图所示:
图中1号兰色线表示当网络存在正常访问、入侵扫描时,用1号机进行SYN攻击时桥模式NIDS系统消耗的CPU/内存情况,2号红色线表示相同条件下,同时用1、2号机进行SYN攻击时桥模式NIDS系统消耗的CPU/内存消耗情况,3号绿线表示相同条件下,同时用1、2、3号机进行SYN攻击时桥模式NIDS消耗的CPU/内存消耗情况。
环境二实验结果:
图中1号兰色线表示用1号机进行SYN攻击时某公司A系列LND-100NIDS系统消耗的网络带宽/CPU,2号红色线表示1、2号机同时进行SYN攻击时该系统消耗的网络带宽/CPU,3号绿线表示1、2、3号机同时进行SYN攻击时该系统消耗的网络带宽/CPU。
从实验的结果表明,入侵扫描、Syn攻击器等工具的扫描和攻击在传统的NIDS系统下,因流量过大数据包过多,检测系统无法检测拦截攻击包,并在其系统资源消耗过多情况下无法拦截检查有害信息,造成黑客嗅探入侵成功。而改进后的基于Linux下桥模式的NIDS系统,采用数据链路层检测分析,以较少的CPU消耗为代价,拦截到了攻击包并检测出了黑客的入侵扫描行为,同时保证了网络的正常访问请求。但两者网络带宽的消耗几乎相同。
五、结论
基于Linux2.6内核开发改进的桥模式NIDS系统工作在Linux系统内核网络协议栈的底层,随内核启动而工作,真正的做到了内核底层检测拦截黑客扫描攻击的效果。用多种攻击工具进行黑客攻击和入侵扫描,该系统都能无遗漏的将数据包抓取并检测,较好地解决了对入侵扫描以及黑客攻击行为的检测和抵御。目前该系统的不足之处是内存资源消耗较多,存在着部分内存泄露的问题。这是是造成系统不稳定的潜在因素,也是以后的开发过程中要对该系统逐渐加以完善的地方。
参考文献:
[1]Robert Graham. NIDS-Pattern Search vs. Protocol Decode[J],Computers& Security, 2001. 20:37~41
[2]StevenMcCanne,Van Jacobson.The BSD Packet Filter;A New Architecture for User-level Packet Capture[J].Lawrence Berkeley Laboratory One Cyclotron RoadBerkeley, 1992
[3]Stephen Northcutt. 网絡入侵检测分析员手册[M].人民邮电出版社,2000
[4]Love,R著.Linux内核设计与实现[M].北京:机械工业出版社,2006.1
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。