魏光杏,李 华,鲁顶芝
(滁州职业技术学院 信息工程学院,安徽 滁州 239000)
随着互联网行业的快速发展,互联网在人们的日常生活、学习、工作、娱乐等方面的影响越来越大,这就使得网络的安全管理问题变得尤为重要。当前学者们研究并开发出不少关于网络安全及入侵分析的工具[1],功能也比较强大,能够用来捕获多种数据包并且可以显示包的详细信息。
Libpcap是一个功能强大的函数库,以此为基础,学者们设计开发了较多网络分析工具。Libpcap最主要的优点是可以给系统提供独立的用户级别网络数据包捕获接口[2]。其工作原理可以解释为当有数据包到达接口,就会通过网络分接口将数据发给过滤器,最后过滤器会按照制定好的过滤策略对捕获到的数据包进行匹配,成功匹配的数据会同时写入内核和用户缓冲区,反之就直接抛弃[3]。本文采用基于Libpcap自带的强大函数库设计了一款简洁、方便的网络抓包分析工具,经过大量实验验证,取得了较好的应用效果,大大减少了病毒入侵网络的概率。
近些年,随着网络基础设施的不断完善,网络的普及率和用户数量逐年升高,不断增加的网络数据给运营商的管理带来了挑战。此外,来自网络世界的恶意攻击,给用户和运营商带来了很多损失,这些都让网络管理员头疼不已[4]。因此,能够对网络数据进行分析,识别网络世界的攻击,具有非常重要的意义。而且,网络管理员还能根据分析的结果,了解当前网络环境中的用户情况,以此来优化网络的管理[5]。例如,根据协议分析的结果,了解用户主要使用哪些应用,哪些应用使用率高。从而对部分应用限制带宽,防止发生网络拥塞现象,优化网络的运行环境。网络管理员还可以通过分析工具识别出网络入侵攻击,并尽早做出应对的策略,减少损失。这就要求一边对日常网络进行监视,一边能随时对数据包进行捕获分析。因此,入侵分析工具需要具备数据的捕获、分析、识别和显示的功能,如图1所示,具体需求如下。
图1 系统功能
(1)为了应对有多个网卡的网络设备,该系统需要能够查找到网络设备上的所有网卡,便于选择网卡,对选择的网卡进行捕获分析。
(2)能够对捕获到的数据进行分析,得到数据的五元组信息。
(3)能够通过与特征值对比,识别出应用层的协议。
(4)能够对识别出的应用层协议和计算出的数据流量进行统计。
(5)拥有交互性良好的UI界面,能够将五元组信息和协议分析的结果等展示出来。便于操作和管理。
为了完成对数据的分析识别功能,并结合模块化的设计思想,本网络入侵分析工具设计成4个模块:数据采集模块、数据分析识别模块、通信模块和信息显示模块。其中,数据采集模块是整个工具的基础,该模块不断捕获流过网络设备的数据流;信息识别模块则是整个设计的核心,能够通过对比特征值,对捕获的数据包进行应用层协议的识别;通信模块主要将数据识别模块获得的结果不断传递到信息显示模块中,并捕获数据包的五元组信息;显示模块通过UI界面向用户展示分析的结果。
此模块是整个设计的基础,主要将数据捕获并存储到文件中。设计的关键是顺利捕获到数据。根据有关需求分析可知,采用Libpcap的库函数完成数据捕获。Libpcap主要由两部分组成,分别是网络分接口和过滤规则。前者负责收集驱动中的数据,后者负责决定是否接收该数据包。Libpcap的数据包捕获大致分为3个部分:面向底层的数据包捕获、面向中间内核层的数据包过滤以及面向应用层的用户接口。Libpcap的数据包获得流程大致如下:网络接口层的网络分接口会从驱动程序中获取数据的备份,随后上交给内核,如果设置了过滤规则,就根据过滤规则进行过滤,随后将经过过滤的数据发送给内核缓冲区,最后发送给上层的应用程序;如果没有设置过滤规则,则将所有数据包直接上传到内核缓冲区,之后全部上交给用户缓冲区。Libpcap的捕获原理如图2所示。而交互界面则是基于QT设计,利用QT中的自带组件设计界面较方便,并且QT含有的信号槽机制便于各个模块之间的通信。
图2 Libpcap捕获原理
此模块是对捕获到的数据进行分析,再对分析后的数据进行识别。设计难点是如何识别出数据包协议、数据包的业务以及DOS攻击等。
对数据包协议的识别是对传输层协议的识别,先要将数据包解封装,基于端口去识别对应的网络协议[6]。TCP/IP协议数据包一般由应用层、传输层、网络层、数据链路层、物理层封装而成,因此要对数据进一步分析,需要从底层将数据包一步步拆封装。当数据到达时,先会交给数据链路层,数据链路层会与数据包的目的Mac地址匹配,如果成功就将Mac帧头解开,交给上层的网络层,网络层会查看数据的目的IP地址与自己是否相同,如果相同,去掉IP头交给传输层,传输层解开对应的头部后上传给应用层,最后当数据解封装后,再对信息进行识别。
根据前面的分析可知,当入侵数据量很大时,会在数据捕获和信息显示两模块之间产生较大时延,因此,如何降低数据捕获和信息显示两模块之间的时延也是需要考虑的问题之一。本模块设计中采用多线程开发技术,节省系统资源,降低时延。采用QT的信号与槽机制来完成对象之间的通信,信号和槽机制可以减少指针的使用,使程序更加简洁。在数据采集的对象中使用了QT中的信号函数,又在显示模块中使用了QT中的槽函数去接收信号。通过连接函数将两个函数连接起来,只要用户点击捕获选项,捕获线程会触发信号函数将信息发送出去,与其相关联的槽函数会接收到信息,并做出相应的处理。
系统设计的最终目的是提供给用户使用,因此需要拥有一个界面化窗口以实现用户可视化管理。本设计的信息显示模块以UI可视化界面向用户直观地展示捕获的数据包的相关信息。在信息显示模块中,会展示数据包的多种信息,包括数据包的五元组信息、数据流量的统计、协议识别的结果以及数据包应用层业务的统计结果等。通过展示数据包的多种信息,可以从多个角度反映网络的运行情况。
信息显示模块的功能包括网卡选择功能、开始捕获功能、停止捕获功能。网卡选择功能是将查找出的所有网络设备罗列出来,以供选择特定网卡进行数据包捕获,开始捕获功能是控制系统进行捕获,停止捕获功能是停止数据包捕获,并对捕获的数据包进行协议识别和结果统计。
运行入侵分析工具软件后,弹出主界面。主界面导航栏有选择网卡、开始捕获、停止3个选项。选择网卡选项是将网络设备上所有的网卡信息罗列出来,以供用户选择想要捕获的网卡。开始捕获选项,是控制捕获进程的选项,点击该选项,捕获进程就会被开启,随即开始捕获数据,并且在开启捕获进程的同时,捕获模块的信号函数也会被调用,完成捕获模块和显示模块之间的通信。停止选项,点击后会立刻停止捕获进程,开启分析识别进程,对捕获的数据进行协议识别、流量统计等操作。界面的左边会显示捕获的数据的时间、数据包标识、来源IP地址、目标IP地址、协议、发送长度等基本信息,右边使用图形化展示流量统计、业务统计、数据类型统计3块详细信息,状态栏中有相关操作的信息提示。
入侵分析工具的测试是在Linux系统下使用netstress模拟DDOS网络攻击目标主机。从测试过程看,当运行入侵分析工具软件时,用户根据需求选择系统中罗列的网卡进行检测及捕获数据。入侵分析工具对捕获的数据进行筛选,对不满足规则的数据进行隔离并实时跟踪,对隔离较多同一数据发出警报。另外,入侵分析工具系统会对同一目的地址的数据进行统计,若在极短时间内数量超过设定的最大值,入侵分析工具会自动判定为有木马攻击,并在状态栏给出警报提示,实现了对数据的实时检测与响应,起到了主动防御作用。
伴随着互联网的快速发展,能够迅速抓取分析数据包以及识别网络攻击成为网络日常管理的重要组成部分。网络管理员可以通过网络分析工具,及时了解当前所处网络环境的状态,及时发现问题,做出应对措施,降低损失。本文采用基于Libpcap自带的强大函数库设计了一款简洁、方便的网络抓包分析工具,经实验验证,该工具较好地实现了数据包抓包分析的功能,基本满足了小型网络分析的需求,效果较好,为下一步的网络入侵防御提供了依据。