基于Snort系统的局域网P2P流量识别系统

2011-07-13 06:02林国庆陈汝伟
电子设计工程 2011年20期
关键词:端口号链表数据包

林国庆, 王 静, 陈汝伟

(1.长安大学 汽车学院,陕西 西安 710064;2.长安大学 信息学院,陕西 西安 710064;3.桂林电子科技大学 数学与计算科学学院,广西 桂林 541004)

P2P(Peer to Peer)技术实现了网络节点的地位平等,每个节点既接受服务也提供服务,而且节点间可以直接进行信息交互,这样充分利用网络、节点上的空闲资源,提供了一个高效的信息共享平台。P2P网络体现的“人人为我,我为人人”的理念也非常符合互联网开放、平等的设计理念。

但是在当前网络环境中,以BT为代表的P2P下载软件流量以及以PPlive为代表的P2P流媒体软件占用了宽带接入的大量带宽,据统计已经超过了60%,这造成了网络带宽的巨大消耗,甚至会引起网络拥塞,大大降低了网络性能,劣化了网络服务质量,妨碍了正常的网络业务的开展和关键应用的普及,严重影响了用户使用正常的Web、E-mail等业务,因此在必要时,运营商、企业用户以及教育等行业的用户需要对这类流量进行限制;另一方面,对于企业用户来说,员工利用内部网进行BT下载会占用大量的内部网带宽,同时通过并不安全的网络环境获得的应用程序和P2P软件的使用,将可能为企业安全防护打开一扇后窗,使得病毒和恶意代码得以躲过安全审查潜入企业内部网络。因此实现分类、标识和控制P2P流量越来越成为企业、网络运营商急需解决的问题。对运营商或企业来说,简单的扩容无法满足容量增长的需要,对P2P流量进行识别、管理和控制是解决目前网络状态的根本途径。

文中借助Snort系统的链表结构,设计了一种局域网P2P流量识别系统,该系统综合使用端口识别和特征匹配两种方法来提高检测的效率。首先介绍了P2P流量识别的传统方法;然后提出了一种基于Snort[1-7]系统的局域网P2P流量识别系统P2PSnort.

1 传统的P2P流量识别方法

1)端口识别法 端口识别法是根据TCP数据包或UDP数据包首部的源端口号或目的端口号识别一些常见业务的流量,如 HTTP,SMTP,Telnet,HTTPS 等。 多数 P2P 流量也可通过端口号进行识别.在P2P发展早期,P2P的应用都是使用固定的端口号[8]进行通信的。而目前多数P2P用户也是使用程序的默认端口.如 BitTorrent使用 6881,6882,6884,6886等TCP端口,eDonkey使用 4371和 4662作为 TCP端口,使用4672作为UDP端口等。所以,最早的P2P识别方法[8]就是基于P2P应用的特征端口号的。只需简单比对端口号就可以直接识别出是何种具体的P2P协议(如eMule、BitTorrent等),也可以直接排除知名的非 P2P应用(如 FTP,mail,www等)。该方法原理简单,技术成熟,一些对准确性要求不高的流量监测系统主要使用特征端口号识别作为P2P流量识别手段。

2)数据包负载识别法 由于P2P软件可采用动态端口,只能通过扫描P2P数据包的高层协议来探知。以BitTorrent为例,其原理为:当两台应用了BitTorrent协议的主机试图共享文件信息时,他们首先需要通过3次握手来建立连接。在这些数据包中,payload(应用层用户数据)部分便会包含BitTorrent协议的特征字段—“0x13Bit”。识别出包含特征字段的数据包之后,提取并记录下源和目的的IP地址及端口号。之后出现的与此四元组相匹配的数据包即为两主机间进行具体文件数据传输的数据包通过数据包负载识别法可识别多数等主流P2P软件。

2 基于Snort的P2P流量识别系统

本节综合了端口识别法和数据包负载识别法的优点,利用Snort系统的链表结构和预处理器扩展功能,设计了一种新的P2P流量识别系统P2PSnort.

2.1 P2PSnort检测规则

1)端口识别规则 将正常业务端口和常用P2P端口以Snort规则形式表达。如eDonkey2000常使用4672作为UDP端口,其对应的Snort规则为:

alert udp$HOME_NET 4672<->$EXTERNAL_NET any(msg:”GetIP(SrcIP, DstIP) eDonkey! ”;)

该规则的含义是如果一个达到主网某地址的或由网内某地址使用4672端口收发UDP数据包,则报警并屏显收发地址和eDonkey2000字样。

当P2PSnort启动时,所有P2P端口识别规则被解析为P2P端口识别链表,与其他Snort规则相同,每个P2P端口识别规则对应一个链表节点.P2P端口识别链表。先解析正常端口规则,再解析常用P2P端口规则。P2P端口识别链表。形成后正常端口规则节点在链表前部,常用P2P端口规则节点在链表后部。如图1所示。

2)负载识别规则 将各个P2P类型的应用层特征以Snort规则的形式表达.如eDonkey2000的应用层特征是含有字符串0xc53f010000,则其对应的Snort规则就是:

alert tcp$HOME_NET any<-> $EXTERNAL_NET any(content:”|0xc53f010000|/bin/sh”; msg:” GetIP (SrcIP, DstIP)eDonkey2000! ”;)

图1 端口识别链表Fig.1 Chain for port identification

该规则的含义是如果一个达到主网某地址的或由网内某地址发出的TCP数据包含有0xc53f010000字段,则报警并屏显收发地址和eDonkey2000字样。

当P2PSnort启动时,所有P2P流量识别规则被解析为P2P特征识别链表,与其他Snort规则相同,每个P2P特征识别规则对应一个链表节点。每个链表节点对应一个索引节点.所有索引节点生成对应P2P特征识别链表的可动态调整的索引节点链表.P2P特征识别链表如图2所示。

图2 P2P特征识别链表Fig.2 Chain for P2P feature matching

2.2 P2PSnort的工作流程

P2PSnort的检测过程如下:

1)捕获数据包 系统利用libpcap库函数[1]采集到一个数据包后,随即送往数据包解码器。

2)数据包解码 利用各层解码器将数据包层层解码。所有解析结果存入Packet数据结构[1]的相应字段中。

3)将数据包端口部分按照链表顺序依次匹配端口识别链表。若源端口号或目的端口号为常见业务的端口号,则转4)。否则继续匹配端口识别链表后部的常用P2P端口规则节点。若源端口号或目的端口号是某P2P软件的常用端口则直接输出报警,并丢弃该数据包。否则,转4)。

4)将该数据包负载部分与P2P识别链表的各个节点依次匹配(按照对应索引链表顺序),若不存在匹配,则认为该数据包为非P2P流量包,丢弃.否则转5)。

5)若存在匹配节点,则将该节点的索引节点放置到索引链表的最上端,并输出相应报警信息,即提示使用P2P的主机地址和P2P的类型,丢弃数据包。

整个检测过程如图3所示。由于P2P流量在某一时段会发生大量相同特征数据包的传输,所以对P2P识别链表进行动态调节,在发现某一匹配特征的数据包后将相应节点位置前移,可以减少后续数据包的链表节点匹配次数,从而提高检测效率。所以,在5)中对索引链表进行动态调节。

图3 P2PSnort的工作流程图Fig.3 Work flow chart of P2PSnort

3 系统性能测试

3.1 测试环境

具体网络环境如图4所示。3台工作站通过交换机组成局域网,交换机上行端口通过防火墙连接到Internet.P2P流量识别系统P2PSnort连接在交换机测试端口上.交换机内网网关 IP:192.168.1.1; 工作站 A 内网 IP地址:192.168.1.10;B:192.168.1.20; C:192.168.1.60。

图4 测试网络Fig.4 Test network

3.2 测试过程与测试结果

启动P2PSnort,在工作站A上运行下载程序BitTorrent并下载某个AVI文件,在B上运行下载程序eMule并下载某个ZIP文件,在C上运行程序PPLive,并在线播放某个流媒体文件。

在各个下载程序开始工作后,P2PSnort迅速输出报警,准确提示了所有P2P程序的种类和下载的IP地址。

4 系统性能分析

P2PSnort系统综合了两种传统的P2P流量识别方法,利用模式匹配的方式可以有效的识别出已知的有特征值的各种P2P软件,系统采用端口识别法将数据包分类,对常见P2P端口的数据包直接报警,对其他端口的数据包则顺次匹配检测规则链表。同时在发现特征链表有相匹配的情况后动态调整索引链表以提高检测效率。这样的设计大幅度减少了检测模块的工作量,提高了检测效率和准确性,降低了漏检的可能性。

同时,该系统也存在一些缺陷,包括:

1)采用端口识别法可能会漏掉一些采用正常业务端口的P2P流量数据包,尽管只有某些特权用户才能做到这一点.因此在网络流量不大时可以不开启端口识别预处理器而直接检测所有数据包。

2)与Snort系统相同,该系统在面临较大的网络流量时可能会出现漏检的情况,但由于在P2P软件工作时它的数据包数量很大,因此在相同网络环境下该系统较Snort系统漏检的可能性要低得多。

3)不能检测加密的数据流和未知的P2P数据流。

5 结 论

文章借助入侵检测系统Snort的检测原理和其规则的链表组织形式,设计了一种局域网P2P流量识别系统,该系统综合使用端口识别和特征匹配两种方法来对数据包进行检测。该系统完全由自由软件Snort改造而来,降低了成本。与Snort系统相同,P2PSnort可在各类操作系统下运行,通用性好.适用于各类学校和中小企业网络。

[1]潘振业,李学干.基于模式匹配和协议分析的入侵检测系统设计[D].西安:西安电子科技大学,2005.

[2]李春梅,李学干.基于网络的入侵检测系统的研究及实现[D].西安:西安电子科技大学,2005.

[3]康振勇,田玉敏.网络入侵检测系统Snort的研究与改进[D]西安:西安电子科技大学,2006.

[4]严书亭,刘佳新,王新生.Snort规则链表结构的分析与改进[J].燕山大学学报,2006, 30(3):272-275.

YAN Shu-ting, LIU Jia-xin, WANG Xin-sheng.Analysis and improvement of structure of snort rule chain[J].Journal of Yanshan University, 2006, 30(3):272-275.

[5]高平利,任金昌.基于Snort入侵检测系统的分析与实现[J].计算机应用与软件,2006, 23(8):134-138.

GAO Ping-li,REN Jin-chang.Analysis and realization of snort-based intrusion detection system[J]. Computer Applications and Software,2006, 23(8):134-138.

[6]张悦连,郭文东.Snort规则及规则处理模块分析[J].河北科技大学学报, 2003,24(4):44-47.

ZHANG Yue-lian,GUO Wen-dong.Analysis of the rule of snort and the module of snort rule process[J].Journal of Hebei University of Science and Technology, 2003,24(4):44-47.

[7]唐谦,张大方.基于Snort的入侵检测引擎比较分析[J].计算机工程与设计,2005,26(11):2884-2886.

TANG Qian,ZHANG Da-fang.Intrusion detection engine comparison based on Snort[J].Computer Engineering and Design, 2005,26(11):2884-2886.

[8]Internet Assigned Numbers Authority (IANA)[EB/OL].(2002-08-16)[2003-10-04]http://www.iana.org/assignments/port-numbers.

猜你喜欢
端口号链表数据包
二维隐蔽时间信道构建的研究*
基于Jpcap的网络数据包的监听与分析
在Docker容器中安装应用程序
基于二进制链表的粗糙集属性约简
跟麦咭学编程
SmartSniff
基于链表多分支路径树的云存储数据完整性验证机制
浅谈以java为基础的Socket通信简介及实现
Winsock编程在《计算机网络基础》教学中的应用
基于Android系统的互动展示APP的研究与设计