您的当前位置:首页正文

个人入侵检测系统的实现(有源程序代码)

2021-06-18 来源:V品旅游网


个人入侵检测系统的实现(有源程序代码)

源程序代码等全套设计联系 174320523 各专业都有

分类号:TP393 U D C:D10621-408-2007 5862-0

密 级:公 开 编 号:20038>031288

成都信息工程学院

学位论文

个人入侵检测系统的实现

论文作者姓名: 金国强

申请学位专业: 计算机科学与技术

申请学位类别: 工学学士

指导教师姓名(职称): 熊淑华(副教授)

论文提交日期: 2007年6月9日

个人入侵检测系统的实现

摘 要

入侵检测系统(IDS)可以对系统或网络资源进行实时检测,及时发现闯入系统或网络的入侵者,也可预防合法用户对资源的误操作。本论文从入侵检测的基本理论和入侵检测中的关键技术出发,主要研究了一个简单的基于网络的windows平台上的个人入侵检测系统的实现PIDS,Personal Intrusion Detection System。论文首先分析了当前网络的安全现状,介绍了入侵检测技术的历史以及当前入侵检测系统的关键理论。分析了Windows的网络体系结构以及开发工具Winpcap的数据包捕获和过滤的结构。最后在Winpcap系统环境下实现本系统设计。本系统采用异常检测技术,通过Winpcap截取实时数据包,同时从截获的IP包中提取出概述性事件信息并传送给入侵检测模块,采用量化分析的方法对信息进行分析。系统在实际测试中表明对于具有量化特性的网络入侵具有较好的检测能力。最后归纳出系统现阶段存在的问题和改进意见,并根据系统的功能提出了后续开发方向。

关键词:网络安全;入侵检测;数据包捕获;PIDS

Implementation of Personal Intrusion Detection System

Abstract

The Intrusion Detection System IDS can detect the system or the network resources on the real-time, discover the intruder who intends to enter into a system or a network without warrant in time and prevent users from wrong operation. Based on the basic theory of the intrusion detection and the core technology of intrusion detection, a way of the realization of a simple Personal Intrusion Detection System PIDS, which based on Windows platform, is well

researched. The current security status of the network is analyzed firstly, and then the history of intrusion detection technology and the current core theory of the intrusion detection system are introduced. At last, the network architecture on Windows as well as the structure of capturing and filtering data packets by Winpcap, a tool on development is introduced. After that, the system is realized under the Winpcap system environment. The abnormal detection technology is used in the system. After catching data packets with Winpcap in real-time, extracting probabilistic information about events from the intercepted IP packets and sending them to the intrusion detection module, information is analyzed by method of quantitative analysis. In actual system testing, the system shows a good ability on detecting the quantitative characteristics of network intrusion. Finally, the existed problems and our suggestion during this stage is summed up and according to the function of the system, the proposition is given about the future direction.

Keywords: Network security, Intrusion detection, Package catching, PIDS

目 录

论文总页数:24页

1 引言 1

1.1 网络安全概述 1

1.1.1 网络安全问题的产生 1

1.1.2 网络信息系统面临的安全威胁 1

1.1.3 对网络个人主机的攻击 2

1.2 入侵检测技术及其历史 3

1.2.1 入侵检测(IDS)概念 3

1.2.2 入侵检测系统的分类 4

1.2.3 入侵检测模型 5

1.2.4 入侵检测过程分析 6

1.2.5 入侵检测的发展历史 6

1.3 个人入侵检测系统的定义 1.4 系统研究的意义和方法 7

2 个人入侵检测系统的设计 7

2.1 数据包捕获模块 7

7

2.2 数据解析模块 11

2.3 数据分析模块 12

2.4 分析结果记录 13

2.5 报警处理模块 13

3 个人入侵检测系统的实现 13

3.1 系统的总体结构 13

3.2 数据包捕获模块实现 14

3.3 解码数据包模块实现 15

3.4 分析数据包模块实现 16

3.5 分析结果记录并告警 20

4 个人入侵检测系统的应用实例分析 21

结 论 22

参考文献 22

致 谢 23

声 明 24

引言

网络安全概述

网络安全问题的产生

可以从不同角度对网络安全作出不同的解释。一般意义上,网络安全是指信息安全和控制安全两部分。国际标准化组织把信息安全定义为“信息的完整性、可用性、保密性和可靠性”;控制安全则指身份认证、不可否认性、授权和访问控制。

互联网与生俱有的开放性、交互性和分散性特征使人类所憧憬的信息共享、开放、灵活和快速等需求得到满足。网络环境为信息共享、信息交流、信息服务创造了理想空间,网络技术的迅速发展和广泛应用,为人类社会的进步提供了巨大推动力。然而,正是由于互联网的上述特性,产生了许多安全问题:

1信息泄漏、信息污染、信息不易受控。例如,资源未授权侵用、未授权信息流出现、系统拒绝信息流和系统否认等,这些都是信息安全的技术难点。

2在网络环境中,一些组织或个人出于某种特殊目的,进行信息泄密、信息破坏、信息侵权和意识形态的信息渗透,甚至通过网络进行政治颠覆等活动,使国家利益、社会公共利益和各类主体的合法权益受到威胁。

3网络运用的趋势是全社会广泛参与,随之而来的是控制权分散的管理问题。由于人们利益、目标、价值的分歧,使信息资源的保护和管理出现脱节和真空,从而使信息安全问题变得广泛而复杂。

4随着社会重要基础设施的高度信息化,社会的“命脉”和核心控制系统有可能面临更大的威胁。

网络信息系统面临的安全威胁

目前网络信息系统面临的安全威胁主要有:

1非法使用服务:这种攻击的目的在于非法利用网络的能力,网络上的非授权访问应该是不可能的。不幸的是,用于在网络上共享资源及信息的工具、程序存在许多安全漏洞,而利用了这些漏洞就可以对系统进行访问了。

2身份冒充;这种攻击的着眼点在于网络中的信任关系,主要有地址伪装IP欺骗和用户名假冒。

3数据窃取:指所保护的重要数据被非法用户所获取,如入侵者利用电磁波辐射或搭线窃听等方式截获用户口令、帐号等重要敏感信息。

4破坏数据完整性:指通过非法手段窃得系统一定使用权限,并删除、修改、伪造某些重要信息,以干扰用户的正常使用或便于入侵者的进一步攻击。

对网络个人主机的攻击

对方首先通过扫描来查找可以入侵的机器,即漏洞探测;接着确定该机器的IP地址;然后利用相应的攻击工具发起某种攻击。

网络嗅探,嗅探器是一种网络监听工具(如:sniffer),该工具利用计算机网络接口可以截获其他计算机的数据信息。嗅探器工作在网络环境的底层,它会拦截所有正在网络上传送的数据,并且通过相应的软件实时分析这些数据的内容,进而明确所处的网络状态和整体布局。在合理的网络中,嗅探器对系统管理员而言至关重要,通过嗅探器可以监视数据流动情况以及网络传输的信息,从而为管理员判断网络问题、管理网络提供宝贵的信息。然而,如果黑客使用嗅探器,他可以获得和系统管理员同样重要而敏感的信息,(如:在某局域网上,嗅探器可以很轻松地截获在网上传送的用户姓名、口令、信用卡号码和帐号等从而对网络安全构成威胁。其工作原理是:在一个共享介质的网络中如以太网,一个网段上的所有网络接口均能访问介质上传输的所有数据。每个网络接口的硬件地址与其他网络接口的硬件地址不同,同时每个网络至少还有一个广播地址。广播地址并不对应于某个具体的网络接口,而是代表所有网络接口。当用户发送数据时,这些数据就会发送到局域网上所有可用的机器。在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据的硬件地址不予响应。换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据。当发送者希望引起网络中所有主机操作系统的注意时,他就使用“广播地址”。因此,在正常情况下,一个合法的网络接口应该只响应这样两种数据帧:一是帧的目标区域具有和本地网络接口相匹配的硬件地址,二是帧的目标区域具有“广播地址”。在接收到上面两种情况的数据帧时,主机通过CPU产生硬件中断,该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统作进一步处理。而嗅探器就是一种能将本地计算机状态设成“混杂Promiscuous”状态的软件,当本机处于这种方式时,该机具备“广播地址”,它对所有遭遇到的每一个帧都产生硬件中断以便提醒操作系统处理流经该网段的每一报文包。在该方式下,网络接口就可以捕获网络上所有数据帧,从而可以达到监听的目的。

拒绝服务攻击Denial of Service,简称DoS,是指占据大量的共享资源(如:处理器、磁盘空间、CPU、打印机),使系统没有剩余的资源给其他用户,从而使服务请求被拒绝,造成系统运行迟缓或瘫痪。其攻击目的是为完成其他攻击做准备。其攻击原理是:在拒绝服务攻击中,恶意用户向服务器传送众多要求确认的信息,使服务器里充斥着这种无用的信息。所有这些请求的地址都是虚假的,以至于服务器试图回传时,却无法找到用户。服务器于是暂时等候,有时超过一分钟,然后再切断连接。服务器切断连接后,攻击者又发送新一批虚假请求,该过程周而复始,最终使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。典型的DOS攻击技术,如TCP/SYN攻击,该攻击作为一种拒绝服务攻击存在的时间己经有20多年了。但是,随着技术的不断进步,SYN攻击也不断被更多黑客所了解并利用。其原理是基于连接时的三次握手,如果黑客机器发出的包的源地址是一个虚假的IP地址,ISP主机发出的确认请求包ACK/SYN就找不到目标地址,如果这个确认包一直没找到目标地址,那么也就是目标主机无法获得对方回复的ACK包。而在缺省超时的时间范围内,主机的一部分资源要花在等待这个ACK包的响应上,假如短时间内主机接到大量来自虚假IP地址的SYN包,它就要占有大量的资源来处理这些错误的等待,最后的结果就是系统资源耗尽以致瘫痪。

特洛伊木马来源于希腊神话,讲述的是通过木马血屠特洛伊城的故事。这一故事形象地说明了木马程序的特点。在计算机安全学中,特洛伊木马指的是一种计算机程序,它表面上具有某种有用的功能,实际上却隐藏着可以控制用户计算机系统,危害系统安全的破坏性指令,特洛伊木马代表了一种程度较高的危险。当这种程序进入系统后,便有可能给系统带来危害。在特洛伊木马程序中插入的代码在别的程序中依然能存在,但只在藏身的程序中进行破坏性活动。代码能够在主程序的特权范围内从事任何破坏行为,使用自身或者其他程序进行操作。其工作原理实质是,特洛伊木马只是一个网络客户/服务程序。网络客户/服务模式的原理是一台主机服务器提供服务,另一台主机客户机接受服务。作为服务器的主机一般会打开一个默认的端口并进行监听,如果有客户机向服务器这一端口提出连接请求,服务器上的

相应程序就会自动运行,来应答客户机的请求,此程序称为守护进程。对于木马来说,被控制端是一台服务器,控制端则是一台客户机。黑客经常用欺骗手段引诱目标对象运行服务器端程序,黑客一旦成功地侵入了用户的计算机后,就会在计算机系统中隐藏一个会在Windows启动时悄悄运行的程序,采用服务器/客户机的运行方式,从而达到在用户上网时控制用户计算机的目的。

入侵检测技术及其历史

入侵检测(IDS)概念

1980年,詹姆斯?安德森(James P.Anderson)第一次系统阐述了入侵检测的概念,并将入侵行为分为外部?透、内部?透和不法行为三种,还提出了利用审计数据监视入侵活动的思想。

Anderson将入侵尝试或威胁定义为:潜在的、有预谋的、未经授权的访问信息、操作信息、致使系统不可靠或无法使用的企图。而入侵检测的定义为:发现非授权使用计算机的个体(如“黑客”)或计算机系统的合法用户滥用其访问系统的权利以及企图实施上述行为的个体。执行入侵检测任务的程序即是入侵检测系统。入侵检测系统也可以定义为:检测企图破坏计算机资源的完整性,真实性和可用性的行为的软件。

入侵检测系统执行的主要任务包括:监视、分析用户及系统活动;审计系统构造和弱点;识别、反映已知进攻的活动模式,向相关人士报警;统计分析异常行为模式;评估重要系统和数据文件的完整性;审计、跟踪管理操作系统,识别用户违反安全策略的行为。入侵检测一般分为三个步骤:信息收集、数据分析、响应。

入侵检测的目的:1识别入侵者;2识别入侵行为;3检测和监视以实施的入侵行为;4为对抗入侵提供信息,阻止入侵的发生和事态的扩大。

入侵检测系统的分类

现有的IDS的分类,大都基于信息源和分析方法。为了体现对IDS从布局、采集、分析、响应等各个层次及系统性研究方面的问题,在这里采用五类标准:控制策略、同步技术、信息源、分析方法、响应方式。

按照控制策略分类

控制策略描述了IDS的各元素是如何控制的,以及IDS的输入和输出是如何管理的。按照控制策略IDS可以划分为,集中式IDS、部分分布式IDS和全部分布式IDS。在集中式IDS中,一个中央节点控制系统中所有的监视、检测和报告。在部分分布式IDS中,监控和探测是由本地的一个控制点控制,层次似的将报告发向一个或多个中心站。在全分布式IDS中,监控和探测是使用一种叫“代理”的方法,代理进行分析并做出响应决策。

按照同步技术分类

同步技术是指被监控的事件以及对这些事件的分析在同一时间进行。按照同步技术划分,IDS划分为间隔批任务处理型IDS和实时连续性IDS。在间隔批任务处理型IDS中,信息源是以文件的形式传给分析器,一次只处理特定时间段内产生的信息,并在入侵发生时将结果反馈给用户。很多早期的基于主机的IDS都采用这种方案。在实时连续型IDS中,事件一发生,信息源就传给分析引擎,并且立刻得到处理和反映。实时IDS是基于网络IDS首选的方案。

按照信息源分类

按照信息源分类是目前最通用的划分方法,它分为基于主机的IDS、基于网络的IDS和分布式IDS。基于主机的IDS通过分析来自单个的计算机系统的系统审计踪迹和系统日志来检测攻击。基于主机的IDS是在关键的网段或交换部位通过捕获并分析网络数据包来检测攻击。分布式IDS,能够同时分析来自主机系统日志和网络数据流,系统由多个部件组成,采用分布式结构。

按照分析方法分类

按照分析方法IDS划分为滥用检测型IDS和异常检测型IDS。滥用检测型的IDS中,首先建立一个对过去各种入侵方法和系统缺陷知识的数据库,当收集到的信息与库中的原型相符合时则报警。任何不符合特定条件的活动将会被认为合法,因此这样的系统虚警率很低。异常检测型IDS是建立在如下假设的基础之上的,即任何一种入侵行为都能由于其偏离正常或者所期望的系统和用户活动规律而被检测出来。所以它需要一个记录合法活动的数据库,由于库的有限性使得虚警率比较高。

按照响应方式分类

按照响应方式IDS划分为主动响应IDS和被动响应IDS。当特定的入侵被检测到时,主动IDS会采用以下三种响应:收集辅助信息;改变环境以堵住导致入侵发生的漏洞;对攻击者采取行动(这是一种不被推荐的做法,因为行为有点过激)。被动响应IDS则是将信息提供给系统用户,依靠管理员在这一信息的基础上采取进一步的行动。

入侵检测模型

美国斯坦福国际研究所(SRI)的//.ning于1986年首次提出一种入侵检测模型,该模型的检测方法就是建立用户正常行为的描述模型,并以此同当前用户活动的审计记录进行比较,如果有较大偏差,则表示有异常活动发生。这是一种基于统计的检测方法。随着技术的发展,后来人们又提出了基于规则的检测方法。结合这两种方法的优点,人们设计出很多入侵检测的模型。通用入侵检测构架(Common Intrusion Detection Framework简称CIDF)组织,试图将现有的入侵检测系统标准化,CIDF阐述了一个入侵检测系统的通用模型(一般称为CIDF模型,如图1所示)。它将一个入侵检测系统分为以下四个组件:

事件产生器(event generators),用e盒表示;

事件分析器(event analyzers),用a盒表示;

响应单元(responseunits),用r盒表示;

事件数据库(event databases),用d盒表

它将需要分析的数据通称为事件,事件可以是基于网络的数据包也可以是基于主机的系统日志中的信息。事件产生器的目的是从整个计算机环境中获得事件,并向系统其它部分提供此事件。事件分析器分析得到的事件并产生分析结果。响应单元则是对分析结果做出反应的功能单元,它可以做出切断连接、修改文件属性等强烈反应。事件数据库是存放各种中间和最终数据的地方的通称,它可以是复杂的数据库也可以是简单的文本文件。

图1 CIDF入侵检测模型

入侵检测过程分析

过程分为三部分:信息收集、信息分析和结果处理。

1信息收集:入侵检测的第一步是信息收集,收集内容包括系统、网络、数据及用户活动的状态和行为。由放置在不同网段的传感器或不同主机的代理来收集信息,包括系统和网络日志文件、网络流量、非正常的目录和文件改变、非正常的程序执行。

2信息分析:收集到的有关系统、网络、数据及用户活动的状态和行为等信息,被送到检测引擎,检测引擎驻留在传感器中,一般通过三种技术手段进行分析:模式匹配、统计分析和完整性分析。当检测到某种误用模式时,产生一个告警并发送给控制台。

3结果处理:控制台按照告警产生预先定义的响应采取相应措施,可以是重新配置路由器或防火墙、终止进程、切断连接、改变文件属性,也可以只是简单的告警。

入侵检测的发展历史

1980年James P Anderson在给一个保密客户写的一份题为《计算机安全威胁监控与监视》的技术报告中指出,审计记录可以用于识别计算机误用,他把威胁进行了分类,第一次详细阐述了入侵检测的概念。1984年到1986年乔治敦大学的Dorothy Denning和SRI公司计算机科学实验室的Peter Neumann研究出了一个实时入侵检测系统模型? IDES Intrusion Detection Expert Systems入侵检测专家系统,是第一个在一个应用中运用了统计和基于规则两种技术的系统,是入侵检测研究中最有影响的一个系统。1989年,加州大学戴维斯分校的Todd Heberlein写了一篇论文《A Network Security Monitor》,该监控器用于捕获TCP/IP分组,第一次直接将网络流作为审计数据来源,因而可以在不将审计数据转换成统一格式的情况下监控异种主机,网络入侵检测从此诞生。

个人入侵检测系统的定义

个人入侵检测系统(PIDS),以网络数据包作为分析数据源,采用异常检测分析方法。它只分析处理与个人主机有关的IP数据包,它保护的是个人主机系统。

系统研究的意义和方法

综上,当个人用户接入Internet时,个人机的安全就将面临着攻击威胁。因此,个人用户的重要数据、机密文件等需要安全保护。静态的防御措施,如个人防火墙等,已不能满足个人用户的需求,个人用户需要一个更全面的个人安全防范体系。如果把入侵检测技术应用到个人机的安全防范中,它将与个人防火墙一起为个人用户提供一个更安全的动态防范体系。

本文阐述的就是在Windows下实现个人入侵检测系统PIDS。本系统采用基于网络的异常检测方法的入侵检测技术,使用量化分析的方法来检测用户的行为。在总结出的正常行为规律的基础上,检查入侵和滥用行为特征与其之间的差异,以此来判断是否有入侵行为。

个人入侵检测系统的设计

数据包捕获模块

网络入侵检测系统要分析的对象是网络中的数据包。所以我们就需要对流经网络的数据包捕获并加以分析,这样才能得到实现入侵检测的功能。对于不同的操作系统有许多不同的数据包捕获方法。在本系统中,采用了windows下的 Winpcap网络驱动开发包,它是Windows平台下的一个免费、公共的网络驱动开发包。开发Winpcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:

1、捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报

2、在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉

3、在网络上发送原始的数据报

4、收集网络通信过程中的统计信息

Winpcap由三个模块构成:NPF, packet.dll, wpcap.dll。前一个工作在内核层,后两个工作在用户层。第一个模块是内核部分NPF Netgroup Packet Filter,在Win95/98中它是一个VXD(虚拟设备驱动程序文件)文件,在WinNT/Win2000下是一个SYS文件。它的主要功能是过滤数据包,并把这些数据包原封不动地传给用户态模块。当然也添加了一些系统特定的标志比如时间戳管理。这个过程中包括了一些操作系统特有的代码。第二个模packet.dll用来在不同的Win32平台下提供一个通用的公共的包驱动接口。事实上,不同版本的Windows平台在内核层模块和用户进程之间的接口不完全相同,packet.dll用于解决这些不同。提供了一套系统独立的API,调用packet.dll的程序能够运行在不同版本的Windows平台上而无需重新编译。packet.dll还有一些附加的功能。它可执行一些低层操作:如:获得网卡名字,动态装载驱动,得到比如机器的网络掩码、硬件冲突等一些系统特定的信息。Packet.dll和NPF都是系统相关的,在Win95/98和WinNT/2000等不同系统架构Packet.dll会相应有些变化。第三个模块wpcap.dll是系统无关的,它提供了更高层、抽象的函数。它包括了一些比如过滤器生成、用户级缓冲等其它的高层函数,增加了比如统计和包发送等更高级的特性。因此程序员能处理两种类型的API:一套原始函数集,包含在packet.dll中,直接与内核层调用匹配;另一套高层函数由wpcap.dll提供,便于用户调用,功能更强大。程序员能随意使用wpcap.dll,但只能在受限的环境中直接使用packet.dll.

总的说来,Packet.dll直接映射了内核的调用。Wpcap.dll提供了更加友好、功能更加强大的函数调用。Winpcap的具体结构图2所示:

图2 Winpcap的具体结构

正如在Windows网络体系结构中所阐释的,Win32网络架构基于NDISNetwork Drive Interface Specification网络驱动程序接口标准。NDIS工作在Windows内核网络部分的最底层。捕获进程核心必须工作在内核层,先于协议栈之前处理包。BPF被网卡驱动程序直接调用,要求NIC设备驱动程序遵从一些所谓的“BPFBerkeley Packet Filter驱动规范”。换句话说,它需要设备驱动可以直接调用BPF Tap函数,能控制所有经过网卡的包发送或接收,能对过滤后的包进行复制。当使用Winpcap进行捕获时,这种方法明显不行。因为Windows与BPF驱动规范有些不同:Windows不允许为了增加捕获功能而改变操作系统和NIC驱动。因此,Winpcap把Network Tap作为协议驱动放置在NDIS结构的上方。NDIS没有从NPF中完全分离出底层,不能自动支持不同的介质类型,故需要以这种方式构建。与NDIS的交互使NPFNetGroup Packet Filter比原始的BPF更加复杂,BPF通过一条简单的回调函数与系统交互;在另一方面,NPF是协议栈的一部分,就同其它网络协议一样与操作系统交互。然而,NPF获得了更好的执行效果,其Tap比BPF还要运行得快。同BPF一样,当包静止时NPF把过滤器放入NIC驱动内存中。另一个优化措施是NPF的同步操作。异步调用不支持,因此用户级存取经常被阻塞。NPF不需要设置用户级访问缓冲队列,这使驱动运行得更快。

图3显示了NPF在NDIS结构中的位置:

可以看出Winpcap也是用的NDIS,它将自己注册为一个协议处理驱动。在原代码的driverentry里面能看到。NPF是Winpcap中的核心部分,它完成了大部分的工作:将数据

包发送到网络中并导出捕获的数据包,交由用户程序分析处理。

图3 NDIS内NPF

Winpcap中NPF的实现由于是以协议驱动程序的模式来实现的,虽然从性能上看来并不是最始数据的完全访问。不同的Windows系统有不同的NDIS版本,NPF兼容Win2K及其后续的WinXP版本下的NDIS5,也兼容其他Windows平台下的NDIS3版本。NPF与操作系统之间的通信通常是异步的,NPF提供了一系列的回调函数供操作系统在需要时调用。NPF提供了应用程序所有I/O操作的回调函数,如:open,close,read,write等。

NPF与NDIS之间的通信也是异步的.一些事件如当数据包到达时是通过回调函数通知NPF这个例子中是Packetes tapo,并且,NPF与NDIS和NIC驱动之间的通信是非阻塞函数来实现的。当NPF调用NDIS函数时,调用立即返回;当处理完毕时,NDIS再调用一个特定的函数通知NPF.NPF对所有的底层操作都提供了回调函数。 图4显示了NPF的基础结构及其在Winpcap中的工作模式。

图4 NPF协议驱动

Winpcap中过滤进程由用户级部分开始。它能接收一组用户定义的过滤规则例如接收所有的UDP数据包,把它编译成一套伪指令(例如,如果是IP包且协议类型等这些指令等于17.就返回“True\"),把这些指令发送到内核层过滤器,最后激活代码。内核层过滤器必须能够执行这些指令;此外,它需要一个“BPF虚拟机”来执行伪代码从而对所有到来的包进行操作。这个核心层和BPF兼容的过滤器是Winpcap获得良好性能的关键。NPF不同于BPF的一个重要的结构差别就是选择了一个环形缓冲区作为核心缓冲区.这有利于数据包快的复制。但这种机制更难于管理。因为复制的数据不再有固定的大小Libpcap中,用户缓冲区和核心

缓冲区都是32K。当数据从内核缓冲区传送到用户缓冲区时,相同数量的包被复制到内核缓冲区中。它们是同步更新的,而不是在之后。由于内核部分较之缓冲区传送有更高的优先级,能独占CPU时,故复制过程从用户层开始能释放掉缓冲区已传送的部分。环形缓冲区允许所有的容量来存放数据包,前面谈到的一对BPF交换缓冲区只能用一半的容量。整个缓冲区可以用一条简单的Read 指令读取,肯定减少了系统调用和在用户、内核模式之间上下文切换的次数。因为一次上下文切换需要保护现场仅CPU描述符和任务状态段的开销就接近数百个字节,大批的传送会减少进程的开销。但是一个太大的用户缓冲区不会带来任何好处。当可分配内存太大时,上下文切换的开销反而可忽略不计了。Winpcap的核心缓冲区比BPF的大,通常为1M。一个小缓冲区会影响捕获进程。尤其在一段时间里应用进程读取数据的速度不如捕获进程,而且数据要被传送到磁盘,网络流量在激增。内核缓冲区和用户缓冲区都能在运行时间里改变。

数据解析模块

在本模块的设计中,主要涉及了三方面的知识:windows网络体系结构、TCP/IP协议,数据的封装和分用过程。

TCP/IP参考模型与ISOInternational Standards Organization的OSIOpen Systems Interconnection Reference Model参考模型相比,要简单实用得多,也是目前广泛使用的网络参考模型。在TCP/IP参考模型中没有明确的数据链路层和物理层,而是将它们合为较为抽象的“网络设备互连”作为硬件基础,随主机和网络的不同而不同。这种模型的应用范围较广,既可用于广域网.也可用于局域网。TCP/IP协议族,有很多协议。

当应用程序用TCP传送数据是,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层

对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报。通过以太网传输的比特流称作帧Frame。这就是通常说的数据的封装过程。

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing)。

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP提供不可靠、无连接的数据报传送服务。

IP各域的含义如下:

版本:当前IP协议的版本号,本论文采用的版本号为4;

首部长度:以32bit为单位的包头长度;

服务类型:规定对本数据报的处理方式,比如优先权等;

总长:以Byte为单位的整个IP数据报长度;

标识:信源主机赋予每个IP数据报的唯一标识符号,用于控制分片及其重组;

标志和片偏移:同样用于控制分片及其重组;

生存时间:设置本数据报的最大生存时间,以秒为单位;

协议:表示创建本IP数据报数据区数据的高层协议的类型,如TCP,UDP等;

头标校验和:用于保证头标数据的完整性;

源IP地址和目的IP地址: 分别指发送本数据报的主机IP地址和接受本数据报的主机的IP地址;

选项:用于控制和测试,是IP数据报中可选的部分,包含“源路径”、“路径记录”、“时间戳”等几种类型。

TCP协议是网络中应用最为广泛的协议,许多的应用层协议都是在建立在TCP协议之上的。

TCP协议头部信息如下:

源端口:发送端TCP端口号;

目的端口:接收端TCP端口号;

序号:指出段中数据在发送端数据流中的位置;

确认号:指出本机希望下一个接收的字节的序号;

头标长度:以32bit为单位的段头标长度,针对变长的“选项”域设计的;

码位:指出段的目的与内容,不同的各码位置位有不同的含义;

窗口:用于通告接收端接收缓冲区的大小;

校验和:这是可选域,置0表示未选,全1表示校验和为伍;

紧急指针:当码位的URG置位时,指出紧急指针的序号;

UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。UDP数据报各域的意义与TCP段中相应的域相同。只有校验和有些不同,除UDP数据报本身外,它还覆盖一个附加的“伪头标”。这个伪头标来自于IP报头,包括:源IP地址、信宿IP地址、协议类型、UDP长度及填充域。

数据分析模块

本系统采用异常检测量化分析方法,把检测规则和属性以数值形式表示。在检测中,采用计数方法来描述用户和系统行为某种属性,这些计数值只能在一定范围内变化。例如:系统允许有限的不成功注册次数、一种特定类型的网络连接数、企图访问文件的次数、访问文件或目录次数和访问网络系统次数。这个数值检测以一个相对固定的时间间隔例如1小时来度量用户的行为。在本系统中,分析器对解析的数据包计算每一个包的异常值,一旦发现异常值越限,则认为发生了异常攻击,就将该包信息存入数据库中。异常值由用户的行为的历史情况来决定。基本思想是,一般情况下,同一个用户在一定时间内连接本机的端口数较少,如果这个连接数突然增大,这个地址的异常值就增高。应当说,这并不是网络人侵的严格定义,它只是反映出被检测的数据包的“异常”程度。例如因网络问题而使来自同一个IP地址的数

据突然增多时,这种检测方法可能会认为对方有异常行为。

分析结果记录

用数据库记录异常数据包信息,用于以后的分析与检查。

报警处理模块

将数据库中的信息及时响应,确定入侵的类型并进行报警。

个人入侵检测系统的实现

系统的总体结构

PIDS总体设计如图5:

图5 PIDS总体设计

系统捕获网络中的数据包,解码IP、TCP、UDP的头部各字段的信息,然后对解码后的数据进行分析统计,并对其做出判断。

系统将入侵信息记录入数据库,并通过告警窗口显示。

数据包捕获模块实现

PIDS的数据包捕获是通过调用Winpcap中的动态库函数实现的。使用

pcap_findalldevs函数获取网络设备链表。获取失败终止程序并打印出错误报告,成功就打印出所有网络设备信息以供选择。在选择好进入的网络设备后,对该网络设备进行相应的配置,然后使用pcap_loop函数捕获数据包。

首先获得网卡信息:

/* 返回网络设备的链表,以供选择 */

ifpcap_findalldevs&alldevs, errbuf -1

fprintfstderr,\"Error in pcap_findalldevs: %s\\n\

exit1;

/* 选择列表 */

fordalldevs; d; dd-next

printf\"%d. %s\\n\

if d-description

printf\" %s\\n\

else

printf\" No description available\\n\";

ifi0

printf\"\\nNo interfaces found! Make sure WinPcap is installed.\\n\";

return -1;

printf\"Enter the interface number 1-%d:\

scanf\"%d\

接下来根据所选择的数据进入该网卡:

fordalldevs, i0; i inum-1 ;dd-next, i++;

对选择的网卡进行属性定义:

adhandle pcap_open_lived-name, // 网卡名字

65536, // 65536表示对所有数据捕获

0, //网卡为混杂模式

1, // 抓包时间间隔

errbuf // error buffer

设置过滤规则 packet_filter[] \"ip||udp\"; 连接并设置过滤器:

pcap_compileadhandle, &fcode, packet_filter, 1, netmask;

pcap_setfilteradhandle, &fcode;

最后使用回调函数捕获并解析数据包:

pcap_loopadhandle, 0, packet_handler, NULL;

解码数据包模块实现

Winpcap捕获到数据包后,根据对packet_handler函数的操作可以对IP、TCP、UDP协议各字段的信息进行分析。数据结构如下:

/* IPv4 头 */

typedef struct ip_header

u_char ver_ihl;// 版本 4 bits + 首部长度 4 bits

u_char tos; // 服务类型

u_short tlen; // 16位数据报的长度 (字节)

u_short identification; // 16位标识

u_short flags_fo;// 标志 3 bits + 片偏移 13 bits

u_char ttl; // 8位生存时间

u_char proto; // 协议

u_short crc; // 16位首部检验和

ip_address saddr;// 32位源IP地址

ip_address daddr;// 32位目的IP地址

u_int op_pad;// 可选择使用

ip_header;

/* UDP 头*/

typedef struct udp_header

u_short sport; // 16位源端口号

u_short dport; // 16位目的端口号

u_short len; // 16位UDP长度

u_short crc; // 16位UDP检验和

udp_header;

/*TCP 头*/

typedef struct tcphdr

USHORT th_sport;// 16位源端口号

USHORT th_dport;// 16位目的端口号

ULONG th_seq;//32位序列号

ULONG th_ack;//32位确认号

UCHAR th_x2:4;

UCHAR th_off:4; //保留

UCHAR th_flags;

#define TH_FIN 0x01

#define TH_SYN 0x02

#define TH_RST 0x04

#define TH_PUSH0x08

#define TH_ACK 0x10

#define TH_URG 0x20

#define TH_ECE 0x40

#define TH_CWR 0x80

#define TH_FLAGS TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR

USHORT th_win;//16位窗口大小

USHORT th_sum;//16位TCP检验和

USHORT th_urp;//16位紧急指针

tcphdr;

分析数据包模块实现

系统采用异常检测分析方法。对每一个进入的源IP地址作时间溢出判定,如果时间没有溢出,根据捕获信息,更新记录信息。否则,清空记录信息并重新记录。当记录信息中的规则变量超过规定值时,推测有异常行为。本系统实现了端口扫描和SYN洪水攻击的检测。

typedef struct tagrule // SYN洪水攻击的数据结构

struct ip_address keyword;// 记录源IP地址

time_t t1_tmpbuf_com;// IP地址进入时间

int count; // 记录某人连接我时SYN1的次数

synrule;

typedef struct tagrule2// 端口扫描的数据结构

struct ip_address keyword; // 记录源IP地址

time_t t2_tmpbuf_com; // IP地址进入时间

int count[NUM2]; // 记录某人当前扫描我的端口

int k;

scnrule;

int scanportip_header *ih,int dport,int timeout,time_t t_tmpbuf_now,rule2 scanrule[]//检测端口扫描的规则函数

int h;

int m;

h0;

iftimeout0

forh0;hi&&hNUM2;h++//查询进入的IP是否曾经出现

if ih-saddr.byte1scanrule[h].keyword.byte1&&

ih-saddr.byte2scanrule[h].keyword.byte2&&

ih-saddr.

因篇幅问题不能全部显示,请点此查看更多更全内容