基于网络安全开发包的网络监听检测系统的研究与实现
2016-12-19陆奎,王海
陆 奎,王 海
(安徽理工大学计算机科学与工程学院,安徽 淮南 232001)
基于网络安全开发包的网络监听检测系统的研究与实现
陆 奎,王 海
(安徽理工大学计算机科学与工程学院,安徽 淮南 232001)
网络安全是研究与计算机网络相关联的安全问题,随着网络监听造成的安全问题日益严重,对网络监听、检测和防范的研究显得十分重要。本文首先对网络监听检测技术的概念和原理进行了描述,然后着重对Libpcap和Winpcap两种常用的网络开发包技术进行研究,采用网络数据包捕获开发包Libpcap,对Libpcap的核心数据结构,其定义方式进行探讨,基于Winpcap捕获技术使用网络安全开发包对网络监听进行检测,最后对网络监听检测系统进行了设计与实现。
网络安全;网络监听;网络安全开发包;Libpcap;Winpcap
传统的计算机网络虽然提供了高速的信息传输,却忽略了对信息内容的保护。为了实现安全的网络通信,目前主流解决方案采用数据加密来提升通信安全。虽然采用加密机制有效提升了数据安全,但是由于网络监听依然存在,网络通信安全仍然不能得到彻底保障。因此对网络监听检测技术的研究变得十分重要。络监听也称为网络嗅探(sinff),即将网络上传输的数据包捕获并进行分析的行为。网络监听器也叫做嗅探器(sinffer),它是利用计算机的网络接口捕获目的地为其他计算机数据包的一种工具,sinffer就是网络上的“窃听器”。它工作在网络的底层,能够记录网络中传输的全部数据。网络监听系统的优势是可以为网络管理人员方便查找网络漏洞、检测网络性能、分析网络流量,不足是它是一种在他方无法察觉的情况下,捕获网络信息的。
1 网络监听的危害性及工作原理
网络监听是黑客们常用的工具,当信息以明文形式在网络传输的时候,就可以使用网络监听的方式进行攻击。在局域网中,数据几乎都是以明文形式传输的,这就就给网络监听提供的可趁之机。通常监听造成的危害有:
1) 捕获口令;网络嗅探器可以捕获明文形式的密码或口令;
2) 捕获专用或者机密的信息,包括用户姓名、口令、信用卡密码、个人帐号和pin码;
3) 偷窥机密敏感信息,通过拦截数据包,可以窃听整个Email会话全过程;
4) 获取更高级别的访问权限。一旦入侵者得到用户密码和帐号,必然可以通过信任关系危害整个网络安全,从而获取更高级别的访问权限。
一般来说网络监听分为主动监听和被动监听两种监听模式。所谓主动监听一般多采用于公共机房,重要用于一个机房中的终端机对各工作站实行监听。所有的主机连接到SWITCH,对于发送给某个特定主机的数据包会被SWITCH从特定的端口送出,而不是想HUB一样广播给网络中的所有主机。这种传播形式使得以太网的性能大大提高,但是却破坏了监听的第一条件:网络上的的数据能到达监听主机。
网络监听的工作原理:每个网卡厂家得到一段地址,然后用这段地址分配给其生产的每个网卡一个地址。在硬件地址和IP地址间使用ARP和ARP协议进行相互转换。在正常的情况下,一个网络接口应该只响应这样的两种数据帧:① 与自己硬件地址相匹配的数据帧。② 网络上的广播数据帧。在一个实际的系统中,数据的收发是由网卡来完成的。当收到网络上传输来的数据时,首先由网卡对数据帧的目的MAC地址进行检查,如果目的MAC地址与本地的MAC地址相匹配,则认为应接收该数据并产生相应的中断信号通知CPU;如果不匹配,则直接丢弃该数据帧,本地计算机将根本不知道有数据帧的到来。在得到中断信号后,CPU产生中断,操作系统调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。对于网卡来说一般有四种接收模式:
广播模式、多播模式、直接模式,这三种模式统称为普通模式(Normal model);混杂模式(Promiscuous model)。
而对于网卡来说,接受帧的目的MAC地址是以下几种地址之一:
1) 本机的MAC地址是目的地址;
2) 本机的MAC地址不是目的地址;
3) 组播地址是目的MAC地址,多播列表中本机此时已注册;
4) 组播地址是目的MAC地址,多播列表中本机此时没有注册;
5) 广播地址是目的MAC地址;
针对不同MAC地址不同的网卡工作模式的过滤方式如表1所示。
表1 网卡工作模式的过滤方式
从上表可以看出,“√”表示网卡工作可以接受的过滤方式,“×”表示网卡工作不可接受的过滤方式。通常网卡工作在normal model模式下只接受以下几种类型的数据:目的MAC地址是本机的、目的MAC地址是组播地址,本机此时在多播列表中已注册以及目的MAC地址是广播地址。而对于不属于以上类型的数据包均做丢弃处理。而网卡处于Promiscuous model的主机,网卡根本不检查MAC地址,只要是网络上传输的数据包,无论类型全部接受。这样就实现了对网络上所有数据包接受的效果,达到网络全监听的条件。
由此可见,要实现网络监听必须满足两个条件:
1) 网络上传输的数据包可以到达监听主机;
2) 监听主机的网卡设置为Promiscuous model。
2 网络安全开发包对网络监听进行检测
网络安全开发包是指用于网络安全研究和开发的一些专业开发函数库。它的目的是提供用于网络安全研究的基本功能实现,为研究者和开发者提供进一步研究和开发网络安全提供编程接口,为网络安全的实现提供便利。
网络安全开发包的种类非常多,其实现的功能也不一样。新的网络安全开发包不断涌现,很多原先不成熟的网络安全开发包也在日趋完善,在实际应用上使用比较多的网络安全开发包包括:网络数据包捕获开发包Libpcap、Windows平台专业数据包捕获开发包WinPcap、网络数据包构造和发送开发包Libnet、网络入侵检测开发包Libnids、通用网络安全开发包Libdnet。
一个网络安全开发包是针对特定的网络安全技术而开发的,它可能实现某一个网络安全技术,也可能实现某一类网络安全技术,网络安全开发包的最大功能就是设计网络安全系统,其直接功能是实现部分网络安全技术,如网络数据包捕获技术、网络数据包生成技术等,利用它们可以很快的实现网络安全系统的基本功能。下面对两种比较常见的网络安全开发包进行解析。
1) Libpcap分组捕获函数库。Libpcap(the Packet Capture Library)是一个平台独立的网络数据包捕获技术。由于Libpcap与操作系统平台无关,能够独立访问网络链路层,并读取链路层数据,所以也是使用最多的网络数据包捕获技术。Libpcap是一个高层的编程接口,隐藏了操作系统的细节,可以捕获网络上的任何数据包,包括到达其他主机的数据包。 pcap数据结构是Libpcap的核心数据结构,其定义为
struct pcap{
#ifdef WIN32
ADAPTER*adapter; /*网络接口*/
LPPACKET Packet;
int timeout; /*时间*/
int nonblock; /*非阻塞模式参数*/
#else
int fd;
int selectable-fd;
#endif/*WIN32*/
int snapshot;
int linktype; /*链路层类型*/
int tzoff; /*时间域*/
int offset; /*偏移*/
int break-loop; /*循环结束标志*/
struct pcap-sf sf;
struct pcap-md md;
int bufsize; /*缓冲区大小*/
u-char buffer; /*缓冲区*/
u-char *bp;
int cc;
u-char *pkt;
int (*read-op) (pcap-t*,int cnt, pcap-handler,u-char*);
int (*setfilter-op) (pcap-t*,struct bpf-program*);
int (*set-datalink-op) (pcap-t*,int);
int (*getnonblock-op) (pcap-t*,int,char*);
int (*stats-op) (pcap-t*,struct pcap-stat*);
void (*close-op) (pcap-t*);
struct bpf-program fcode;
char errbuf [PCAP-ERRBUF-SIZE+1]; /*错误信息*/
int dlt-count; /*链路层个数*/
int dlt-list; /*链路层类型列表*/
struct pcap-pkthdr pcap-header;
};
typedef struct pcap pcap-t;
此数据结构表示的是Libpcap句柄的数据结构,是Libpcap的内部数据结构,在Libpcap内部实现过程中经常用到。一般使用人不会与它直接打交道,而一般是通过函数进行操作。Libpcap使用了BPF过滤机制,支持DLPI和SOCK PACKET,基于内核的过滤模块。它可以过滤网络上不需要的数据包,而捕获用户感兴趣的数据包[4]。使用Libpcap可以将网络上捕获的数据包存储到特定的文件中,也可以随时从该文件中读取数据包的信息,且读出数据的结果和从网络上捕获的数据包数据完全一致。Libpcap具体的工作流程如图1所示,它是通过调用相应的函数库来实现的。
Pcap lookupdev( ) /*扫描有效网络设备端口*/
Pcap lookupnet( ) /*获得网络地址及网络掩码*/
Pcap open live( ) /*打开网络设备*/
Pcap compile( ) /*过滤字符串编译到过滤程序中*/
Pcap setfilter( ) /*设置网络过滤器*/
Pcap dispatch( ) /*捕获数据包进行中*/
Pcap close( ) /*数据包捕获退出*/
图1 Libpcap捕获函数库的工作流程
在未设定可监视的网络端口而进行有效网络端口扫描时,如果发现几个网络端口的时候,Libpcap将选择序号最小的端口进行操作。 若指定了网络接口,系统会把网络接口直接传递给应用程序。利用Libpcap捕获数据包功能,可以实现其他很多功能。例如,对传输的网络数据包进行分析,读出所有网络数据包的详细信息。
2) Winpcap捕获技术。Winpcap(Windows Packet Capture),是为Libpcap在Windows平台下实现数据包的捕获而设计的。它们具有相同的接口,使用者只需要调用相应函数即可。Winpcap主要有三部分组成[5]:
第一部分是内核层的数据包过滤模块NPF(Netgroup Packet Filter)这也是Winpcap的核心部分,它相当于Libpcap使用的BPF过滤模块,它的主要作用是捕获数据包,同时发送数据包、存储数据包以及对网络进行统计分析,实现了内核层的统计功能,完成了高效的的网络数据包捕获和过滤。NPF与前文所提的BPF的工作原理基本一致,它就是BPF变形而得到的一种捕获机制。此过滤模块实际是一个驱动程序。
第二部分是动态链接库packet.dll。它是提供给开发者的一个接口,使用它可以直接调用Winpcap的函数,它只是一个较低层的开发接口。
第三部分是动态链接库wpcap.dll。它同样是提供给开发者的一个接口,但它是一个更高层的开发编程接口,其调用与系统无关,因为是基于Libpcap而设计的,所以使用此编程接口其函数调用几乎和Libpcap完全一样,函数名称和参数定义也是一样。
Winpcap的捕获数据包结构如图2所示。
图2 Winpcap的捕获数据包结构
网络驱动程序直接从网络链路层取得数据包,且在不修改的情况下完成数据包的统计、存储、过滤最终传递给用户层的应用程序,而低级的动态链接数据在用户层直接和内核层隔离开,这样使得应用程序在不加修改的情况下在不同的Windows系统下运行。
3 网络监听检测系统的设计与实现
为了实现在局域网络内实施监听主机的检测,首先要获得工作主机的所有地址信息,包括IP和MAC地址,其次以本机工作为发起点对网段内所有主机进行扫描,获取网段 内所有主机活动列表,然后采用ARP包对这些主机的网卡的工作模式进行探测,从而发现有无混杂模式工作的主机网卡,最后生成检测报告。依照此工作步骤,系统大体可以划分为以下几个模块。
1) 捕获本机信息模块:使用winpcap提供的pcap-if-t结构描述网卡和pcap-findalldevs-ex函数获取本机网卡信息,获取本机ip和子网掩码。然后使用pcap-sendpacket和Pcap-next-ex函数,通过给自己发送arp request包,接收reply包获取本机MAC地址。也就是通过arp包对本机进行一次欺骗,从而获得了本机的所有地址信息。
2) 扫描主机模块:主机扫描通过两个线程实现:发送arp request包和处理arp reply获取活动主机列表。其中发送arp request线程根据本机ip和子网掩码,计算本网段ip地址的范围,依次发送arp request包。处理 arp reply线程则接收arp响应包,提取其中的ip和mac地址,生成活动主机地址列表(采用链表存储)。最后输出地址列表。
3) 监听检测模块:这是本程序的核心部分,该部分针对活动主机链表中的每个地址,调用Pcap-Sendpaeke函数发送arp-request包(帧的目的地址仅以oxff开头的伪广播地址,其它的信息均正确),然后等待,使用pcap-next-ex函数接收数据包,如果收到对应的arp reply,则将其混杂标志置1。
4) 检测报告模块:得出检测结论,生成报告文件。整个系统的设计过程如图3所示。
图3 网络监听检测系统的设计
通过对学校其中一个公共计算机实验室进行随机测试,可以检查出计算机被监听情况,下面是一次测试的结果如图4所示。
图4 实验结果图
4 结束语
本文在介绍了网络监听的基本概念及原理之后,着重探讨了如何使用(采用)网络安全开发包对网络监听进行检测,并对相关的技术进行了分析,最后在基于网络安全开发包的网络监听检测技术研究的基础上对网络监听检测系统的设计。本系统运行的结果可以检测出局域网网段中所有计算机网卡的工作模式,借此判断计算机是否被监听。
同时程序中存在几点不足:(1)没有考虑到不同操作系统可能产生的软件过滤。(2)程序仅从网卡的工作模式进行检测,存在不准确因素;(3)如果监听行为仅针对本机,而不对网卡设置修改,那么这种方法就无法检测出监听行为。
[1] 姚小兰.网络安全管理与技术防护[M].北京:北京理工大学出版社,2002:47-99.
[2] 曾光裕,薛莹莹,徐冰,等. 基于ARP协议的网络监听技术研究[J].计算机工程,2010 (6):58-60.
[3] 胡滨.基于Windows平台的底层网络数据包捕获技术[J].计算机工程与设计,2011(11):337-338.
[4] 杜建亮,计算机网络安全隐患与主动防御[J].山西财经大学学报,2012(2):78-81.
[5] 向昕,李志蜀. 基于ARP欺骗的网络监听原理及实现 [J] 四川大学学报(自然科学版),2011(1):89-95.[6] 陈国震. 网络监听在基于网络流量计费中的应用[J]计算机科学,2011,8(2):101-105.
[7] 宋政斌. 网络监听技术在飞行试验机载测试中的应用与研究[J] 计算机测量与控制,2009,17(10): 1 917-1 919.
(责任编辑:李 丽,范 君)
Research and Implementation of Network Monitoring System Based on Network Data Packet
LU Kui,WANG Hai
(School of Computer Science and Engineering ,Anhui Univercity of Science and Technology, Anhui Huainan 232001 ,China)
Network safety is the security problem of the research and computer network. As the security of the network monitoring becomes more and more serious, it is very important to study the network monitoring, detection and prevention. Firstly, this paper described the concept and principle of network monitoring technology, and then focuses on the research of Libpcap and Winpcap, two kinds of commonly used network safety data packet technology. By using Libpcap of network safety data packet, the core data structure of Libpcap and the definition of the method were discussed. Finally, the network monitoring system were designed and realized based on Winpcap capture technology and using network safety packet.
network safety; network monitoring;network safety packet;Libpcap; Winpcap
2015-03-11
陆奎(1963-),男,安徽怀远人,教授,博士,研究方向:计算机网络与监控。
TP393
A
1672-1098(2016)05-0041-05