基于windows入侵检测系统的研究与设计—检测模块设计—免费毕业设计论文内容摘要:

制。  与其他网络安全部件的协作、与其他安全技术的结合 随着黑客入侵手段的提高,尤其是分布式、协同式、 复杂模式攻击的出现和发展,传统的单一、缺乏协作的入侵检测技术已经不能满足需求,需要有充分的协作机制。 此外,单一的入侵检测系统并非万能,因此需要结合身份认证、访问控制、数据加密、防火墙、安全扫描、 PKI 技术、病毒防护等众多网络安全技术,来提 供完整的网络安全保障。 3 基于 Windows 入侵检测系统的设计 本系统的全称为《基于 Windows 入侵检测系统的设计与实现》,系统的开发环境为 Windows 操作系统。 本系统实际上是一个小型的基于 Windows 的网络入侵检测系统,虽然只需要安装在整个共享网段的 某台机器上,但能够对整个网段提供入侵检测的保护。 整个系统分主要分为两个模块,即检测模块和响应模块。 检测模块主要是通过监听共享网段,捕获该网段上的数据包并对其进行分析,从而剥离出一些与入侵特征相关的标志。 响应模块则负责将检测模块剥离出的标志与现有的入侵特征进行模式匹配,从而侦测出存在于网络中的入侵活动,并且利用一些响应手段向网络管理员发出告警信息并采取相应的行动。 除了这两大模块以外,本系统还有一个中央控制台模块,该模块主要是给系统的使用者提供方便的操作界面,以及显示系统输出的各项数据。 本论文将重点讨论检测 模块的设计与实现。 系统总体结构如图 31 所示: 图 31 系统总体结构图 基于 Windows入侵检测系统 检测模块 响应模块 数据捕获 数据分析 规则库 规则匹配引擎 响应单元 日志库 本系统所采用的开发语言是 C/C++,下表 31为系统开发所用到的相关部件: 表 31 系统开发软体环境 部件名称 软体 系统平台 Microsoft Windows 开发工具 VC++ 编译环境 VC++ 运行环境 Microsoft Windows 数据库 MYSQL 开发包 winpcap、 libnids 4. 检测模块的设计与实现 检测模块是任何一个网络入侵检测系统都必须具备的模块之一,它主要实现了数据提取的功能,和对提取到的数据进行简单的分析,从而提取一些与入侵特征相关的标志。 简单的说,可以将其分为两个部分,即数据包的捕获和数据包的分析。 由于本系统是基于 Windows操作系统的,所以数据包捕获功能是在 Winpcap软件开发包的基础上实现的。 Winpcap 软件开发包简介 Winpcap(windows packet capture)是 windows 平台下一个 网络数据包捕获开 发包,是为 Libpcap 在 Windows 平台下实现数据包的捕获而设计的。 在设计Winpcap 时参照了 Libpcap,使用方法与 Libpcap 相似。 它的使用非常广泛,几乎所有在 Windows平台下要使用数据包捕获功能的软件都可以使用 Winpcap开发包。 开发 winpcap这个项目的目的在于为 win32应用程序提供访问网络底层的能力 ,其核心功能是捕获网络数据包,其他功能包括数据包过滤、数据包发送、流量统计和数据包存储等。 使用 Winpcap 有很多好处,主要体现在以下几个方面。 1. Winpcap 给程序员提供了 一套标准的网络数据包捕获的编程接口,并且与 Libpcap 兼容,使得原来许多 Linux 平台下的网络安全程序可很快地移植到Windows 平台下。 2.使用 Winpcap 可以提供很高的应用效率。 它充分考虑了各种性能和效率的优化,在内核层实现了数据包的捕获和过滤。 3. Winpcap 还提供了发送数据包的能力。 BPF 过滤机制简介 BPF(Berkeley Packet Filter)是由洛仑兹伯克利实验室的研究人员Stevern McCanne 和 VanJacobson 于 1993 年提出,背景是当时在 UNIX 网 络功能使用中出现了对网络监控工具的强烈需求,用来分析和排除网络故障。 而网络监控程序都运行在用户态空间,数据包必须从内核中复制到用户空间后再进行处理,这种重复的复制工作对实质的功能实现毫无意义。 BPF 在内核态对数据包进行预处理,因而大大提高了运行性能。 当一个数据包到达网络接口设备时,链路层设备驱动器通常把它传送给系统协议栈进行处理。 但是,当 BPF 也在该网络接口上截获时,驱动器将会首先调用BPF。 BPF 负责将数据包传递给每个监控进程的过滤器。 这些用户自定义的过滤器将决定一个数据包是否被接受以及数据包中的那些内 容应该被保存下来。 对于每一个用于接受数据包的过滤器, BPF 将所需的数据复制到与之相连的缓存中,然后设备驱动程序重新获得控制权。 网络数据包捕获机制 网络数据包捕获机制是网络入侵检测系统的基础。 一般指通过截获整个网络的所有信息流量,根据信息源主机、目标主机、服务协议端口等信息简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更上层的应用程序进行分析。 其工作流程图如 41 所示: 图 41 数据包捕获流程图 网络数据包捕获可以通过两种机制实现,一种是利用以太网的广播特性,另一种方式是通过设置路由器的监听端口实现。 两种方式分别适用于不同的情况。 本系统是利用以太网络的广播特性进行捕获数据包的。 数据包捕获的具体实现 网卡有以下几个工作模式;广播模式 (broadcast module)、多播模式(multicast module)、直接模式 (direct module)和混杂模式 (promisc module)。 网卡在设置为广播模式时,它将会接受所有目的地址为广播地址的数据包,一般所有的网卡都会设置为这 个模式;网卡在设置为多播模式时,当数据包的目的地网络信息 数据截获 数据过滤 应用程序(响应模块) 址为多播地址,而且网卡地址是属于那个多播地址说代表的多播组时,网卡将接纳此数据包;网卡在设置为直接模式时,只有当数据包的目的地址为网卡自己的地址时,网卡才接受它;网卡在设置为混杂模式时,它将接受所有经过的数据包。 由于基于网络的入侵检测系统的数据源是整个共享网段上的数据包,因此只要将该网段内某一台主机的网卡设置为混杂模式,就可以监听本网段内所有的数据包进行分析和判断。 具体的数据包捕获流程图如下: 图 42 数据包捕获流程图 数据包捕获核心代码及主要函数说明如下: void DecodeProcess_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const u_char *pkt)。 pcap_t * pcap_handle。 /*Libpcap 句柄 */ char error_content[PCAP_ERRBUF_SIZE]。 /*存储错误内容 */ 查找有效的网络设 备( eth) pcap_lookupdev() 获得网络地址及网络掩码( IPamp。 MASK)pcap_lookup() 打开网络设备 pcap_open_live() 用户编译过滤规则 pcap_pile() 设置过滤规则 pcap_setfilter() 循环捕获网络数据包 pcap_loop() 显示分析捕获的数据 display() 缓冲满。 结束 开始 char *_interface。 /*网络接口 */ struct bpf_program bpf_filter。 /*BPF 过滤规则 */ char bpf_filter_string[]=。 /*过滤规则字符串,此时为空,表示捕获所有的网络数据包,而不是捕获特定的网络数据包 */ unsigned int _mask。 /*网络掩码 */ unsigned int _ip。 /*网络地址 */ _interface=pcap_lookupdev(error_content)。 /*获得可用的网络接口 */ pcap_lookup(_interface,amp。 _ip,amp。 _mask,error_content)。 /*获得地址 */ pcap_handle=pcap_open_live(_interface,BUFSIZ,1,1,error_content)。 /*打开网络接口 */ pcap_pile(pcap_handle,amp。 bpf_filter,bpf_filter_string,0,_ip)。 /*编译 BPF 过滤规则 */ pcap_setfilter(pcap_handle,amp。 bpf_filter)。 /*设置过滤规则 */ if(pcap_datalink(pcap_handle)!=DLT_EN10MB) return。 /*由于在解码的代码中只有以太网,所以这里检测链路是否为以太网,否,则退出 */ pcap_loop(pcap_handle,1,DecodeProcess_callback,NULL)。 /*注册回调函数,循环捕获网络数据包,然后调用回调函数对捕获的网络数据包进行分析 */ pcap_close (pcap_handle)。 本段代码的功能是循环捕获以太网数据包,其中调用了网络接口函数、规则函数和数据包捕获函数。 主要的函数功能说明如下: ( 1)选择监听网络接口 函数原型: Char * pcap_lookupdev (char*errbuf) 功能:用于寻找本机可用的网络接口,调用成功就返回指向网络接口的指针。 其中 errbuf 为调用失败时返回的错误信息字符串。 ( 2)建立监听会话 函数原型: pcap_open_live (char*device,int snaplen,int promis,int to_ms,char*ebuf) 功能:用于获取一个捕获器描述符,调用成功就返回监听会话句柄。 其中device 为指向网络接口的指针, snaplen 定义了监听程序所所捕获的最大字节数, promisc 定义了是否将网卡设置为混杂模式, to_ms 表示度操作等待的毫秒时间, ebuf 为函数调用失败返回的错误信息字符串。 ( 3)编译过滤器 函数原型: int pcap_pile(pcap_t * p,struct bpf_progrm * fp,char*str,int optimize,bpf_u_int32 mask) 功能:将字符串形 式的过滤要求编译成二进制形式存储在 bpf_program 结构中。 从而实现通过设置过滤器来捕获感兴趣的数据包。 其中, p 为监听会话句柄指针, fp 为指向结构 bpf_program 的指针,用于存放编译后的 BPF 程序, str为 tcpdump 表达式字符串指针, optimize 为优化标志, mask 为子网掩码。 ( 4)设置过滤器: 函数原型: char * pcap_setfilter(pcap_t*p,struct bpf_program*fp) 功能:通过调用本函数,设置内核过滤器使得编译了的过滤生效。 其中, p为指 向监听会话句柄的指针, fp 为指向结构 bpf_program 的指针,一般为函数pcap_ple 编译后的结果,也可以用手工编 BPF 代码。 ( 5)捕获并处理数据包: 函数原型: int pcap_loop(pcap_t*,int t,pcap_handler callback,u_char*user) 功能:捕获并处理数据包。 其中 p 为指向监听会话句柄的指针, t 为指向函数返回前所处理数据包的最大值,值为负时表示处理缓冲区所有的数据包,为0 时处理所有的数据包,直到产生读取到 EOF 错误为止, callback 参数指定带有3 个参数的回调函数, user 为用户传递给回调函数的指针,通常设置为 NULL。 ( 6)用户自定义的回调函数 函数原型: void callback(u_char* args,const struct pcap_pkthdr* header,chonst u_char* packet) 功能:在 pcao_loop 函数没捕获到一个数据包后被自动调用,用于对捕获到的数据包进行用户自定义的处理。 其中, args 为从 pcap_loop 函数传递过来的u_char 指针, pheader 为指向 pcap_pkthdr 结 构指针, packet 是指向所有捕获的数据包的指针。 ( 7)关闭监听会话句柄 函数原型: void pcap_close(pcap_* p) 功能:关闭监听会话句柄,并释放资源。 通过 Winpcap 函数库,我们得到了网络中传输的原始网络数据包,为了从中 得到有用的数据信息,接下来就要对原始数据包进行分析,也就是进行网络协议的解析工作。 网络数据包分析模块的实现 当完成对数据包的捕获之后 ,接下来要完成的是数据包的分析过程。 对所有网络数据包的分析,必须从链路层开始分析,然后分析网络层,再分析传输层,最后分析 应用层。 这是由于捕获到的数据包是一个数据帧,其中最。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。