APP下载

Linux下采用Libpcap实现IDS的网络数据包监测

2015-09-25周永福曾志

现代计算机 2015年9期
关键词:报文数据包模块

周永福,曾志

(1.河源职业技术学院电子与信息工程学院,河源 517000;2.惠州学院计算机科学系,惠州 516007)

Linux下采用Libpcap实现IDS的网络数据包监测

周永福1,曾志2

(1.河源职业技术学院电子与信息工程学院,河源517000;2.惠州学院计算机科学系,惠州516007)

0 引言

网络的飞速发展,使得信息安全问题日渐突出和复杂,其安全防护技术也逐渐成为当前面临的重要技术领域。传统的安全技术更多的是一种基于被动的防护,而如今的攻击和入侵要求我们主动地去检测、发现和排除安全隐患[1]。入侵检测系统(IDS,Intrusion Detection System)作为一种较为稳定的安全手段,逐渐受到重视,已经成为当前网络安全技术领域内的一个研究热点,受到越来越多的研究人员和工程技术人员的关注。IDS在网络分析、核心检测技术领域已历经三代:第一代的主机日志分析、模式匹配技术;第二代的网络数据包截获、主机系统的审计数据分析技术;以及第三代的协议分析、行为异常分析技术等[2]。围绕数据包的捕获与分析技术,文献[3~4]网络数据包采集与报文捕获技术进行了详细的描述与分析。文献[5]详细分析了入侵检测系统的模型和分类,指出了研究方向。文献[6]开发了开放源代码的轻量级Snort入侵检测系统,Snort的优点是报警机制很丰富,代码简洁、短小,易于扩充,准确性和效率较高,其他的很多商业化的入侵检测系统的产品中也使用其规则描述语言。缺点是存在解码和TCP重组的浪费,对分布式的协同功能欠考滤。

本文在已有研究的基础上,借鉴文献中提到的Libpcap函数库思路[7~8],从软件角度实现了在Linux环境下构建一个简易IDS,重点探讨了数据包捕获模块与分析模块的相关流程与核心代码两大关键技术的实现。

1 网络IDS总体设计

网络入侵检测系统根据网络流量、网络协议和网络数据包来分析入侵行为,基本原理如图1所示。

图1 网络入侵检测系统原理

图1中的数据包捕获模块首先根据一定的捕获规则,获取数据包,然后交给入侵检测分析引擎模块,执行安全分析和判断,把分析后的检测结果上传给系统管理模块。系统管理模块将分析结果有效地告知网络管理员进行入侵检测标签的维护。

当入侵检测系统工作的时候。首先,入侵检测系统的数据包捕获模块在网络捕获数据包,通过底层的数据包监听驱动和BPF过滤器按一定规则过滤,符合条件的数据包被抓取。然后送交协议分析程序进行分析,在数据检测模块,结合入侵检测的规则库,匹配规则,不符合匹配规则的数据包将被丢弃。最后,符合匹配规则的数据包送往输出组件,结合规则库,按照一定的规则通过系统管理器显示给用户或发送报警信息。入侵检测系统的大致工作流程如图2所示。

图2 入侵检测系统工作流程

2 采用Libpcap实现网络数据包捕获和分析

2.1数据包捕获

数据包捕获是实现网络数据包分析、检测系统高效工作的基石。在混合工作模式(即截获所有未知目的物理地址的数据包)下,在网络上按照过滤机制截获网络数据包。在Linux系统的root权限即uid=0条件下,采用Libpcap数据包捕获函数库来实现数据包捕获模块。数据包捕获过程首先监视与端口设备,扫描并获取数据链路层的数据包,在此基础上,可以用一个回调函数callback对捕获到的数据包进行分析,然后交给上层缓冲区进行处理。图3所示为数据包捕获基本流程。

依据上述流程,数据包捕获模块核心代码见如下5个子过程:

(1)用pcap_lookupdev()检查获取设备名称

图3 数据包捕获流程图

(2)用pcap_open_dev()打开设备

(3)利用pcap_compile()设置过滤条件

(4)设置回调函数进行数据监听捕获

(5)结束时调用pcap_freecode()和pcap_close()清理并关闭

2.2协议分析

本模块将获取到的链路层协议循环反复地进行分析,从包头开始判定是否符合各类型数据包,并作相应的数据包处理分析。主要检查数据包是否符合当前传输数据的特征,数据上下行的IP地址等。协议分析流程见如图4所示。

依据上述流程,下面引用数据包捕获开发包Libpcap实现协议分析模块的核心代码[9]:

程序中分别通过如下代码对以太网帧头、IP 数据包头、UDP 数据包头和TCP 数据包头的起始位置进行定位。

一旦确定了各包头的起始位置,根据定义好的各个包头的数据结构,可以准确地定位各个协议字段的位置,实现对数据包包头的识别,从而获取数据包信息,对数据包进行分析。为了便于入侵检测系统的后续工作,经过分析后的数据包结果不再保存在缓存中,而是存储到入侵检测系统的数据库中,以便下一步入侵检测引擎做相关的其他检测工作。

图4 协议分析模块流程图

3 应用实例

启动本检测系统后程序开始检测网卡数据包动态,用浏览器打开任意网页,可以观察到程序开始在屏幕上输出抓取到的数据包信息,包括源地址、目的地址、协议类型、源端口、目的端口、数据包接收时间和数据内容等信息。

●捕获到的TCP报文如图5所示:

从运行结果可以看到,程序抓取到了在访问网页时接收到的TCP数据包,是从115.239.210.27主机的43706端口发送到本主机10.0.2.15的80端口的。该结果可以看到接收该数据包的时间戳,通过ctime((const time_t*)&header->ts.tv_sec)来获取数据包时间戳。最后对TCP包的数据内容部分(共207字节)按照16进制和字符串格式进行分别输出,其中有些数据是二进制值,故用点号代替。

●捕获到的UDP报文如图6所示。

图5 TCP报文数据

图6 UDP报文数据

在运行结果中还捕获到了UDP数据包,结果显示UDP数据包从本主机10.0.2.15的34557号端口发送到目的主机192.168.193.1的53号端口。该数据包的时间戳为Sat Apr 20 10:08:43 2013,携带了31字节的数据内容,数据内容同样地用十六进制和字符串格式进行输出,从字符串部分可以看到我们访问的网址。

●捕获到的ICMP报文如图7所示:

图7 ICMP报文数据

从结果中还可以看到,ICMP数据包也被捕获。ICMP报文传递差错报文以及其他需要注意的信息。可以看到ICMP数据包是从主机10.0.2.2发往目的主机10.0.2.15的。ICMP协议包头是4个字节。

4 结语

本文在Linux下通过Libpcap数据包捕获函数库编程实现了数据包的检测功能,而后通过协议分析对数据包进行分析检测。其检测程序不仅能够捕获以太网数据链路上的数据帧 (包括发给主机和发往其他机器的),还可以提取TCP/IP协议的首部,实现对TCP/IP族数据包进行检测分析。将该程序融入到网络入侵检测系统的应用中,为入侵检测系统提供有效的数据保障。网络数据包检测还可以为网络性能分析、网络流量分析、网络安全和监控、防火墙、用户计费等工具软件提供必要的数据支持,具有较大的参考价值。

[1]邹蕾.分布式网络入侵检测系统研究与实现[D].吉林大学,2005

[2]李海雁,李凯佳.入侵检测技术研究综述.陕西师范大学学报(自然科学版)2005(S1):205~207

[3]周福岩.面向Linux的入侵检测系统数据包采集模块的研究与实现[J].黑龙江科技信息,2009(2):78~80

[4]时翠霞,吴刚,张信杰.网络数据报文捕获技术分析和研究[J].微计算机信息,2009(21):105~107

[5]余兆力.基于Snort的网络入侵检测系统研究[D].浙江工业大学,2005

[6]隋新,杨喜权,陈棉书等.入侵检测系统的研究[J].科学技术与工程,2012,12(33):8971~8977

[7]寇应展,杨素敏,陈利军等.基于Libpcap网络数据包捕获技术的改进[J].军械工程学院学报,2011,23(3):49~51

[8]周玮.基于Libpcap的网络流量监控系统设计思想与技巧的探讨[J].科技信息,2009(5):75~76

[9]Van Jacobson,Craig Leres,Steven McCanne.Manual Reference Pages-PCAP(3)[OL].http://www.tcpdump.org/pcap3_man.html,2014

Linux;Network Data Packet;Packet Caption Library(Libpcap);IDS

Implementation of Network Data Packet Monitoring Using Libpcap for IDS under Linux

ZHOU Yong-fu1,ZENG Zhi2
(1.Institute of Electronic and Information Engineering,Heyuan Ploytecnic,Heyuan 517000;2.Department of Computer Science,Huizhou University,Huizhou 516007)

1007-1423(2015)09-0067-06

10.3969/j.issn.1007-1423.2015.09.017

周永福(1981-),男,江西贵溪人,硕士,研究方向为网络应用与安全、对等网络计算

曾志(1971-),男,江西赣县人,博士,讲师,高级工程师,研究方向为大规模网络计算与GIS应用等收稿日期:2014-12-25修稿日期:2015-02-05

计算机入侵检测已经成为安全领域中一个越来越重要的技术。入侵检测系统(IDS)通过收集和分析计算机网络系统的关键信息,并将违反安全策略的标志事件或攻击通知系统作出响应。据此,本文从入侵检测系统的基本框架出发,讨论基于网络的数据包捕获技术与分析技术,详细阐述入侵检测系统的总体设计过程,以及在Linux环境下采用Libpcap库函数提供的网络数据包捕获与分析函数实现数据包监测功能,并从代码的角度重点分析数据的捕获和处理方式,通过实验验证本文提出的关于网络数据包监测方法的可行性。

Linux;网络数据包;包捕获函数库(Libpcap);入侵监测(IDS)

河源市社会发展科技项目(No.2013-113)

Intrusion detection technology for computer has become a more and more important technic in fields of security.IDS can collect and analyze the key information of computer network system,and make response for the violation of security policy on marking the incident or attacks to notify system.Therefore,starts from the basic framework of IDS,discusses the capture technology and analysis technology based on network data packets.Also starts from the design process of IDS in details,and performs network data packet monitoring using the data packet captured and analysis function of Libpcap Library under the environment of Linux,then from the view of code analyzes data captured and the processing method.Experiments show that this method is feasible and available.

猜你喜欢

报文数据包模块
基于J1939 协议多包报文的时序研究及应用
28通道收发处理模块设计
“选修3—3”模块的复习备考
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
C#串口高效可靠的接收方案设计
ATS与列车通信报文分析
集成水空中冷器的进气模块