基于多任务多通道的入侵检测系统*
2012-07-11王旭辉康晓凤
王旭辉 王 涛 康晓凤
(徐州工程学院信电工程学院 徐州 221000)
1 引言
随着互联网的发展,不管是在企业中还是家庭里,计算机都是办公娱乐必不可少的工具,每时每刻都有人在上网、办公,同样每时每刻也都存在着黑客入侵等危险,为了更好的保护用户的计算机安全,我们编写了这套个人计算机的入侵检测系统,本系统智能、绿色、耗费资源小,能够在Windows 7x86/x64、Vista x86/x64,Windows XP sp1/sp2/sp3等不同平台完美运行,本系统利用原始套接字对流经网卡的数据包进行捕获分析,并没有借助第三方开发包。具有易操作的界面,描述的攻击行为简单直观,用户能够自己定义规则,并且能够查看本机应用程序的网络连接,使之能够清晰的意识到危险的网络连接,防止木马、后门的侵扰[1~3]。
2 系统整体设计方案
为了使系统能够小巧,稳定的运行,我们选择了VC++作为开发环境,它有强大的开发库,为底层的Windows程序提供了便捷的方法,本系统包含数据包检测、流量监控图、规则管理、网络连接、帮助,六大模块组成,为了使普通用户方便、容易的使用本系统,本系统每个模块都采用了图形化界面设计,并且不需安装,即拷即用,方便的在笔记本电脑上使用[4]。
本系统核心模块是对数据包的捕获分析,检测广度为TCP、UDP、ICMP包,检测深度为TCP和UDP的payload部分。根据数据包的数据部分和规则进行匹配来确定是否是危险数据包,就像杀毒软件用病毒和病毒库进行匹配一样[5]。本系统总体框架如图1所示。
图1 系统总体框架图
3 系统的实现
3.1 数据包检测模块
在数据包检测模块,我们用RichEdit控件设计了一个实时数据包显示的界面,用ListControl控件设计了一个显示警告信息的界面,并将警告信息自动记录在日志文件中,用户可以自己控制是否开启数据包监控。
在本模块包含数据包捕获、数据包检测和日志记录三个子模块,数据包检测模块将数据包解封之后与规则库中的规则进行对比匹配如果匹配吻合,那么就认为这个数据包为一个攻击数据包,然后交给日志记录模块进行处理,日志记录模块记录该数据包的来源以及该包存在的攻击行为的类型加以记录并及时显示在警告信息的界面上提醒用户,日志以日期形式命名保存在log目录下[6]。数据报检测过程如图2所示,数据包检测模块运行界面如图3所示[3~5]。
图2 数据包检测过程图
图3 数据包检测模块运行界面
3.2 数据包捕获子模块
在数据包捕获模块我们利用原始套接字将网卡设置为混杂模式,从而捕获流经网卡的所有数据包,然后将数据包交给数据包检测模块进行检测。
本模块在监控网络数据包功能中,使用多线程、多通道技术,首先先获得本地所有网卡所有IP地址,根据IP数目创建多个线程,线程处理函数主要进行数据包捕获以及数据包分析、对比。并将捕获到的数据包信息显示在实时数据包界面中。所要显示的数据包信息格式为:日期、协议、源IP地址:源端口、目的IP地址:目的端口、数据包大小。数据包监控整体流程图如图4所示,数据包捕获流程如图5所示[5~7]。
图4 数据包监控模块整体流程图
图5 数据包捕获检测线程流程图
3.3 数据包分析模块
本模块接受从数据包捕获模块传递来的数据包,将数据包进行解包操作,然后根据数据包信息进行数据包分类,分为TCP包、UDP包和ICMP包三类,然后与规则库中的规则进行对比,如果与规则匹配,则认为这个数据包为危险数据包,进行报警并日志记录。
在报警信息界面,使其显示出数据包流经网卡时间、源地址、目的地址以及包信息描述。用户可以复制这条警告信息,并能右击查询IP归属地,查询IP归属地功能使用QQWry.dat编程技术实现。数据包分析与规则匹配流程如图6所示[6~8]。
图6 数据包分析与规则匹配流程图
3.4 规则管理模块
本模块分为添加规则和删除规则两个子模块,在本模块,我们创建了一个模态对话框,在此对话框中放置了一ListControl控件用来显示已经添加到规则库中的规则,用户可以在此界面上选择添加规则和选定一条规则来删除。为了方便的读写规则,我们采用了xml文件来存储所有的规则,并采用了第三方的CMarkup类来对xml文件进行读写操作,规则保存在程序根目录下rules.xml文件中。用CMarkup类的Open()、Save()方法打开和保存xml文件,用IntoElem()、FindElem()、GetData()、OutOfElem()可实现遍历xml文件读取规则。用RemoveElem()方法可以删除一条规则[7]。
一条规则主要由proto(协议)、srcip(源地址)、dstip(目的地址)、srcport(源端口)、dstport(目的端口)、payload(特征)、direction(单双向)、msg(消息)等组成。读取规则文件流程如图7所示[8~9]。
图7 CMarkup类遍历文件读取规则流程图
3.5 网络连接模块
本模块枚举出计算机中存在网络连接的进程,将该进程的PID、进程名、协议、本地IP地址、本地端口、远程IP地址、远程端口、远程IP归属地、连接状态以及进程程序所在的路径显示出来,由于不同的操作系统iphlpapi.dll版本不同,本模块针对不同的操作系统从iphlpapi.dll中的不同的扩展函数来枚举这些进程,在Windows xp、2003操作系统中使用 AllocateAndGetTcpExTableFromStack()和 AllocateAndGetUdpExTableFromStack()函数,在 windows 7、server 2008、vista等中使用InternalGetTcpTable2()和InternalGetUdpTableWithOwnerPid()函数大大提高了与各种系统的兼容性。运行界面如图8所示[10,14]:
图8 网络连接查看模块运行界面
4 结语
本系统的设计思想来源于Snort入侵检测系统,设计过程中涉及到 Windows GDI、Socket、多线程、文件操作、定时器等编程技术,是一个集多种编程技术为一体的系统,在设计编写过程中,极大地锻炼了我们的编程能力以及编程思想,使我们对IDS这门技术有了更深的了解,本系统的设计编写经验对我们今后从事网络安全相关的工作起到了很大的帮助作用。
[1]卡斯维尔.Snort2.0入侵检测[M].北京:国防工业出版社,2004(01):22.
[2]陈伟.Snort轻量级入侵检测系统全攻略[M].北京:北京邮电大学出版社,2009:31.
[3]韩东海.入侵检测系统及实例剖析[M].北京:清华大学出版社,2002:54.
[4]孙鑫.VC++深入详解[M].北京:电子工业出版社,2006:155.
[5]唐正军.网络入侵检测系统的设计与实现[M].北京:电子工业出版社,2002:87.
[6]梁洋洋.Visual C++黑客编程揭秘与防范[M].北京:人民邮电出版社,2009:237.
[7]罗军舟.TCP/IP协议及网络编程技术[M].北京:清华大学出版社,2004:86.
[8]安东尼·琼斯.Windows网络编程技术[M].北京:机械工业出版社,2000:64.
[9]百度文库.CMarkup类的使用方法[EB/OL].http://wenku.baidu.com/view/a9c27eed0975f46527d3e15d.html,2011.
[10]陈坚,陈伟.Visual C++网络高级编程[M].北京:人民邮电出版社,2001:149.
[11]杜海娟.网络入侵检测系统中动态克隆选择算法的优化[J].计算机与数字工程,2010(7).
[12]沈艳,方湘艳,韩威,等.基于四层过滤的网络入侵检测系统模型[J].计算机与数字工程,2011(6).
[13]孙大朋.改进的模糊聚类算法在入侵检测中的研究[J].计算机与数字工程,2010(3).
[14]哈特.Windows系统编程[M].北京:机械工业出版社,2006:117.