2023年7月8日发(作者:)
第28卷 第10期Vol.28
№ 10・
安全技术・
计 算 机 工 程Computer Engineering文章编号:1000—3428(2002)10
—0150—03文献标识码:A
2002年10月 October 2002中图分类号: TP393.08
网络入侵检测系统中网络实时监听程序的设计与实现袁春阳,柴乔林,柳忠光(山东大学计算机科学技术系,济南250061)摘
要:主要介绍了如何在Win32环境中利用Winpcap开发包开发网络入侵检测系统中的网络实时监听程序,并给出了具体的设计与实现方法。对怎样提高监听程序的效率也提出了一些见解。这种网络实时监听程序的设计与实现方法不仅在网络入侵检测系统中,而且在其他网络监控管理系统中都有广泛应用。关键词:监听程序;Winpcap;混杂模式;网络入侵检测Design and Implementation of Real Time Network Sniffer in Network Intrusion Detection SystemYUAN Chunyang, CHAI Qiaolin , LIU Zhongguang( Department of Computer Science and Technology,Shandong University,Jinan 250061)【Abstract】This paper discusses how to develop the sniffer of the system of network intrusion detection in the Win32 environment using Winpcap
development kit and presents the specific method of design and some opinions on how to increase the efficiency of sniffer is method of design and implementation of sniffer is not only used in the system of network intrusion detection but also is widely used in other
systems of network monitor.
【Key words】Sniffer;Winpcap;Promiscuous mode;Network intrusion dectection
随着网络技术的发展和网络应用的普及,越来越多的信库()和高级系统无关性库()。息资源放在了互联网上,网络的安全性和可靠性越发显得重要,各种安全产品应运而生。基于网络的入侵检测系统
(NIDS)就是其中的一种。网络入侵检测系统通过实时检测网络状态,把捕获的数据包进行重组、分析,成为能够被用户识别的信息,从而发现在其中是否包含不合理或非法的数据,判断出是否存在网络入侵行为,并及时做出有效的处理。对数据的采集是检测系统的基础和核心部分之一。网络入侵检测系统常用的数据采集方法是利用以太网介质共享的特征,将探针(Probe)放在局域网中,通过将网络适配器设置为混杂模式检测系统将能接收到所有在该网段上传图1
在Win32环境下实现监听程序的原理图UnixLinux
输的数据包。和通常都提供了用户级别的网络监
听功能,允许用户程序通过系统调用直接访问未经高层协议Winpcap数据包捕获程序将虚拟设备驱动增加在程序处理的原始网络流量数据。可在Windows环境下由于其Windows的内核中,可以捕获和发送通过原始套接口的原始自身的封装性,我们很难直接对其网络底层进行编程。本文数据包(Raw Packet)。它的核心部分是包过滤驱动程序NPF介绍的监听方法就是利用现有的开发包Winpcap来实现在(Netgroup Packet Filter)。NPF过滤器负责将监听到的所有数Windows中的网络监听,简化了编程手段,提高了编程效据包进行过滤,只把用户关心的数据包提交给用户程序。率。由于当前局域网的网络传输方法大多采用以太网标准,NPF有两个主要部件Network Tap和Packet Filter。NPF将因此本文中涉及的程序是在以太网环境下实现的。Network Tap放在了网卡驱动程序和NDIS之上。当一个数据1 Winpcap实现监听技术的基本原理和的基本结构包到达网络接口时,链路层驱动程序将其交给Network
在Windows环境中网络驱动接口标准NDIS(Network
Tap,Network Tap会把数据包发送给Packet Filter,Filter将符[1]Driver Interface Specification)定义了通信协议程序和网络设合过滤条件的数据包过滤掉后,将未过滤掉的数据包提交给备驱动程序之间相互通信的Windows规范。VxD(Virtual
与过滤器直接相连的核心缓冲区。然后等待系统缓冲区满Device Driver)驱动程序和WDM (Win32 Driver Mode)驱动程后,再将数据包拷到用户缓冲区中。监听程序可以直接从用序是Windows Win32提供给用户的环境下的NDIS
与用户监户缓冲区中读取捕获的数据包。提供了用来直接访听程序之间的接口。如图1。在Windows下要想实现网络监问NPF驱动程序的一些API函数,则是在听必须通过它们。[2]Winpcap中就包含了VxD/WDM驱动程序。Winpcap支作者简介:袁春阳(1979~),男,硕士生,研究方向为网络安全与持Win32平台上信息包的捕获和网络分析。它包括内核级的网络性能检测;柴乔林,教授;柳忠光,硕士生包过滤驱动程序NPF(Netgroup Packet Filter)、低级动态连接—150—界面线程和3个工作线程。其中一个工作线程用来接收Winpcap捕获的原始数据包,称之为接收线程;一个工作线程对捕获的原始数据包进行拆分并按一定的存取格式存入数据库,称其为处理线程;另一个工作线程从数据库中取出经分解后的数据包,并对数据包重组,从而根据入侵检测的判定规则发现网络入侵行为,及时采取相应措施,称其为检测线程。界面线程主要负责接收用户控制数据,发出是否终止接收数据包等一些控制信息,称之为控制线程。在接收线程中,开辟了4个用户接收缓冲区,其中有1个主接收缓冲区,3个次接收缓冲区。当主接收缓冲区满后,
的基础上开发的与系统无关的高级系统函数库。Winpcap的结构如图2。图2 Winpcap结构图2
利用Winpcap开发网络监听程序的基本步骤在利用Winpcap
开发网络实时监听程序时,主要是调用和中提供的API函数。设计程序的一般步骤是首先得到网络适配器的设备句柄,根据设备句柄打开网卡并将其置为混杂接收模式,这样网卡就可以收到任何在网络中传输的数据包。在开始接收数据包之前,我们还应该开辟一个用户缓冲区用来存放接收到的原始数据包,并将其初始化为数据包结构体。当完成这些工作以后,就可以开始接收数据包了。在接收数据包时一般使用一个无限循环条件语句,将接收函数放在该循环体中。接收函数具有某种“阻塞式I/O特性”,即在没有数据到达的时候它会暂时挂起等待。当用户接收缓冲区满后,接收函数便立即返回。我们也可以设置一个时间值,在这个给定的时间间隔内若无数据到达,接收函数也会马上返回,以防止空等。由于我们在NIDS中设计监听程序时,需要监听网络中传输的所有数据包,由此在此不必设置对数据包的过滤参数。接收到数据包后,我们可以根据网络协议中定申请接收数据包结构义的各种类型数据包的格式对数据包进行拆分或重初始化接收数据包结构组。这也是在NIDS中的一个重要工作。在停止接收过程后,首先释放接收缓冲区,再将网卡恢复为正常接收状态,释放网卡设备句柄。开发网络实时监听程序的流程图见图3[3]。图3
开发网络监听程序的流程图3
网络实时监听程序的具体实现方法在实际开发网络入侵检测系统的监听程序时,我们选择了Windows 2000 Server VC++6.0作为系统平台,利用进行开发,后台数据库是SQL Server2000,在以太网环境中实施网络监听。考虑到入侵检测系统的处理能力,在程序中使用了一个就把接收到的数据包放到第一个次接收缓冲区。下次再来数据后,首先将数据放到主接收缓冲区,再将主接收缓冲区的数据拷贝到第二个次接收缓冲区中。这样数据包到达后,总是放在主接收缓冲区中,只有当主接收缓冲区满后再将其中的数据拷贝至次接收缓冲区。同样,在处理线程中,首先处理第一个次接收缓冲区中的数据,再处理第二个缓冲区中的数据。接收线程和处理线程之间的同步问题可以使用多线程间的互斥信号量来解决。具体结构见图4。这样,就充分利用了多线程多缓冲区技术[4],大大提高了入侵检测系统的实时检测能力。
图4
开发监听程序的实现图(1)接收线程接收原始数据包的实现方法1)第一步要声明两个结构体,一个是关于网卡的结构体lpAdapter,一个是存放接收到的数据包的结构体RecvPacket。并开辟一个接收缓冲区Receivebuf和存放网卡名称的缓冲区AdapterNameBuf及其长度Adapter-NameLength。
LPADAPTER lpAdapter;LPPACKET RecvPacket;UCHAR Receivebuf[1514];TCHAR AdapterNameBuf[256];ULONG AdapterNameLength = 256;2)第二步调用Winpcap提供的API函数PacketGetAdapterNames得到网卡的名称,用PacketOpenAdapter打开该网卡设备。再利用PacketSetHwFilter函数将网卡设置为混杂接收模式。然后,申请数据包、初始化结构体。将接收数据包的函数PacketReceivePacket放在循环体中,并开始接收数据包。接收函数会把接收到的原始数据包放到结构体RecvPacket中。这里可以定义一个bool
型变量,控制线程的开始和结束。—151—PACKET_TYPE_DIRECTED是在Winpcap中定义的两种不同的网卡接收模式,分别是混杂模式和直接模式(即正常模式)。(2)处理线程对原始数据包的拆分方法处理线程的主要工作是将接收到的原始数据包进行分解,能够分析出数据包的种类及其各种参数。在分解过程中,拆分的主要依据是在网络协议中定义的各种包的类型和包的格式,尤其是TCP/IP协议。监听程序接收到的数据包都是原始数据包,它们的格式一般先是以太网数据帧的头部,接着是ARP或IP数据包的头部。IP数据包头后紧跟着TCP或UDP、ICMP的头部,最后才是真正要传输的数据。于是,在拆分IP数据包时,先提取以太网数据帧的头部,再取IP数据包的头部,然后分析TCP或UDP、ICMP数据包的头部。最后,从数据包中取出需要的数据。下面是处理线程拆分IP报头的部分源程序:struct bpf_hdr *hdr;buf = (char *)RecvPacket->Buffer; //存放接收的数据包的用户//缓冲区packet=*buf;pEtherHead=(struct EtherPacketHead *)packet; //取帧的以太包头smac=&(pEtherHead->SourEther ); //取帧中的源mac地址dmac=&(pEtherHead->DestEther ); //取帧中的目的mac地址switch (swaps(pEtherHead->ServType))//判断帧的类型 iIphLen = sizeof(unsigned long) * (pIPHead->VerHLen & 0xf); //计算IP包头的长度 iProtocol = pIPHead->Proto ; //协议类型 switch(iProtocol) //分析下一级包类型 { case IPPROTO_TCP ://拆分TCP包3)第三步结束接收线程时,释放接收缓冲区将网卡恢复, DecodeTcpPack(packet+ETHER_HEAD_LEN+iIphLen);到正常接收状态,关闭网卡设备。
break;PacketFreePacket(RecvPacket);//释放接收缓冲区
case IPPROTO_UDP ://拆分UDP包//将网卡置回正常接收状态
DecodeUdpPack(packet+ETHER_HEAD_LEN+iIphLen);PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_ break;DIRECTED);
} PacketCloseAdapter(lpAdapter);//关闭网卡 case ETHER_PROTO_ARP:
其中NDIS_PACKET_TYPE_PROMISCUOUS,NDIS_ //对于ARP包的处理 }PacketGetAdapterNames(AdapterNameBuf,&AdapterNameLength);lpAdapter = PacketOpenAdapter(AdapterNameBuf);
PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_PROMISCUOUS);
RecvPacket = PacketAllocatePacket();PacketInitPacket(RecvPacket, Receivebuf, 1514);
//循环接收数据包,将接收到的数据包放在RecvPacket
结构体中PacketReceivePacket(lpAdapter, RecvPacket, TRUE);{case ETHER_PROTO_IP://IP数据包 pIPHead=(struct IPPacketHead *)(packet+ETHER_HEAD_LEN);
//取IP数据包的包头4
总结我们利用Winpcap开发包已经成功地开发了在Win2000下的入侵检测系统模型。当然本文提及的网络监听程序的开发和实现方法不仅可以用在网络入侵检测系统中,也可以用在流量监测、网络监控和网络计费等系统的开发中。在这种监听方式中,效率问题尤显重要。提高监听程序对数据包的截获效率的方法,主要有两种:一是提高监听主机的性能,给监听主机配置更大容量的缓冲区;二是采用分布式技术,在各个网段上建立多个监听点,同时采集各网段上传输的数据包,多个监听主机协同处理采集到的数据。由于对监听主机性能的提高是有限的,所以在流量特别大的网络中一般应该采用第二种方法。
参考文献1 Microsoft Corporation,3Com Network Driver
Interface Specification.1998-052 /winpcap/甘勇,李
霞利用网络侦听技术实现网络监控小型微型计算机3
..系统增刊) ,2001,22(4 Young M J.邱仲潘译.Visual C++6.0从入门到精通北京电子工业出.:版社 ,1999-01☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆(上接第98页)参考文献1 Karol M, Hluchyj M,Morgan Versus Output Queuing on a
Space Division Trans Communications,1988-12:13472 Anderson T,Owicki S,Saxe J,et Speed Switch Scheduling for
Local Area Transactions on Computer Systems,1993-
11: 319-3523 Tamir Y,Frazier Performance Multi-queue Buffers for VLSI
thCommunication of 15 .,1988 -06:343-3544 Mckeown ling Cells in an Input-queued Switch[Ph.D Thesis]. University of California Berkeley,1995-055 Mckeown Paper:A Fast Switch Backplane for a Gigabit
Switched ss Communication Review,1997,27(12)6 Serpanos D N,Antoniadis P :A Class of Distributed Scheduling
Algorithm for High Speed ATM Switches with Multiple Input Queues.
Infocom,20007 Roudet T P,Walters S Network Architecture for Crossbar
Switch Circuits and Systems,1991-01:38—152—
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688820631a173166.html
评论列表(0条)