网络数据包分析工具的设计与开发
摘 要
当前,随着信息化发展,网络安全问题日渐突出,网络攻击日益泛滥,所以网络信息安全就变的非常重要。网络主机必须有足够的安全措施,否则网络的价值就会贬值。本系统的开发就是为了给网络使用者提供一个有用的网络数据包分析工具。本系统有四个主要功能:数据包的捕获、数据包解析、数据包信息分析和数据包信息的显示。为了实现系统功能,本系统选择在ubuntu(Linux)、libpcap、apache、mysql和php的平台上开发,操作系统和软件开发包全部为开源免费的软件,这也是本系统的一个重要特点。本系统首先用libpcap捕获数据包,然后用C语言,并以TCP/IP协议为理论基础解析数据包,解析得到的信息存储到mysql数据库中。数据包信息分析模块从mysql数据库中读取数据,对信息进行统计分析,并对网络信息状况进行安全描述。最后通过apache和php技术来显示数据库信息。通过测试本系统实现了数据包捕获、解析、信息分析、信息显示,为使用者了解当前的网络数据包状况提供了很好的参考。
关键词:网络数据包;TCP/IP;数据包解析;数据包信息分析;攻击特征
The Design and Development of Tool about Network Packets Analysis
Abstract
Nowadays, with the development of information, the issue of network security is becoming prominent and the network attack is proliferation. Therefore, the security of network information is becoming very important. Network hosts must have adequate safety, or the value of the network would be devalued. The development of the system was to provide the users with a useful tool that analysis the network packets. The system has four main functions: capture the network packets, analysis the packet, analysis the information of packet and display packet information. To achieve the goal, I choose the system of ubuntu (Linux), libpcap. apache, mysql and php platform to develop the system. The operating systems and software development kits are free, this is one of the system's features. The system used libpcap to capture data packets firstly, and then use the C language, and TCP / IP protocol as the basis theoretical to analytic packets, the database of mysql stored the result of Analysising information. Module of packet analysis reads the information from the database of mysql, statistic and analysis the information, and then describes security conditions. Finally, use the apache and php technology to display database information. Through the test of the system to achieve the goal that capture and analysis data packet, information analysis, display information, it is a good reference for users to keep up on the current state of network.
Key words: Network packets; TCP/IP; Packet analysis; Packet information analysis; Attack characteristic
目 录
论文总页数:26页
1 引言
1.1 课题背景
如今,网络的飞速发展是有目共睹的,但是在这个飞速发展的过程中,也出现不安全的因素。网络攻击、病毒传播等迅速增长,利用网络进行盗窃、诈骗、敲诈勒索、窃密等案件逐年上升,严重影响了网络的正常秩序,严重损害了网络使用者的利益;面对网络安全的严峻形势,如何判断连入网络的主机是否安全就变的十分重要。选题的目的是积极认识当前网络安全的形式,对常见网络协议数据包进行解析,设计一个可以对网络数据包进行捕获、解析,并可查看数据包信息和进行数据统计分析的工具,深入理解网络协议及安全知识!
1.2 国内外研究现状
典型的网络数据包分析器能捕获数据包,解码各种不同协议,并提供人们易读的结果格式。大多数比较完善的分析器还包括一些统计报告功能。通过查看网络信息分布,了解网络利用以及接收连接动态等一系列行为,管理员可以很容易地判断引起故障的工作站点及其产生原因。
1.3 本课题研究的意义
网络安全问题已经不再是一个新鲜的课题了,也已不再是一个高深的课题了,对于网络数据包的分析,也已经有了比较成熟的结构设计,例如数据包的捕获,解析,提供易于查看的格式和简单的统计报告。但是网络的发展日新月异,安全要求也不断发展,论文主要进行个模块的紧密联系,并使用MySQL数据库加强了统计报告模块的功能。
1.4 本课题的理论基础
数据包的分析工具是在ubuntu+libpcap+apach+mysql+php的平台上进行设计。运用libpcap开发包进行网络设备的设置并进行数据包的抓捕,在解析模块中把获得的数据包按协议包头格式进行解析,并进行简单的解释,最后放到mysql数据库中等待后面统计分析模块的使用。统计分析模块中对数据库中的信息进行分类统计,获取所需要的数据信息,并与设定好的各种攻击特征进行比对,来对当前的主机安全状况进行简单的统计分析,另外,如果用户要进行手工分析,工具提供了可方便查询捕获数据包的包头信息页面。用户可通过这些数据进行手工分析来判断主机的状况。
整个系统的基础是建立在TCP/IP协议的基础上的。TCP/IP协议并不完全符合OSI的七层参考模型。OSI一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。[3]网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。另外还有TCP有连接协议,UDP,ICMP等协议。
2 网络数据包分析系统概述
2.1 网络数据包分析的意义
凡是看过经典电影《黑客帝国》并且使用过网络数据包分析工具的人,应该都会有像电影中那个坐在一大堆的控制面板前解码像水流一样从屏幕上连续滑落的信号的“操作者”一样的感觉。
电影中的操作者处理的是生死的问题,而在现实中,数据包分析工具的使用者们处理的也是同样重要的问题。其对数据包进行检修及侦测的能力,对网络及依托于网络的行业都是至关重要。
数据包分析工具的生存期还很长,这主要是因为对于那些需要有目的地进行7×24小时网络管理的行业来说,数据包分析工具可以提供令企业更容易接受和消化的网络分析数据。
2.2 网络数据包分析的核心技术基础
数据包分析是一TCP/IP协议为基础的。说到TCP/IP就不能不提OSI,TCP/IP协议并不完全符合OSI的七层参考模型。OSI是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了 4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。[3]这4层分别为:
应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
2.3 网络数据包分析系统的主要功能
软件都是为应用才设计的,所以软件能提供什么样的功能就很重要了。网络数据包分析工具要实现四个功能,数据包的捕获,数据包的解析,数据包信息分析,数据包的信息显示。数据包的捕获和解析是系统的基础部分,数据包信息的分析和显示是对数据的处理部分。四个模块相互协调共同对当前主机的网络数据包进行分析。
在网络数据包分析工具的设计过程中,网络速度是不可不考虑的。网络和网络速度的发展给网络监测带来了新的挑战。在普通PC上基于Linux实现的数据包分析相关的系统,在面临高速链路的情况下越显力不从心。所以如何快速的捕获数据包就十分重要。数据包解析技术是数据包分析的基础。对数据包进行解析,是基于数据包分析的工具要解决的核心问题,构造数据包的协议有很多种,要根据构造数据包的协议对该包进行处理,要正确理解在网络中传输的单元,进而才能很好地控制网络单元的传输,实现数据包的分析。网络数据包的分析是对捕获解码的数据包信息进行统计分析,是输出结果的部分。数据包信息的显示是提供的是人性化的辅助作用。
3 网络数据包分析系统的设计
整个网络数据报分析工具采用模块化的设计思想,原因是许多程序太长或太复杂,很难写在单一单元中。如果把代码分为较小的功能单元,将大大简化编程过程。模块化程序一般比单块程序容易编写、调试和修改。所以本系统采用模块化的设计思想。
模块化编程的优点如下:
(1)有效率的程序开发: 使用模块化方法可以更快地开发程序,因为较小的子程序比大程序更容易理解、设计和测试。定义好模块的输入和输出之后,程序员可以给模块提供需要的输入,通 过检测输出来判断模块的正确性。然后由连接器把分立的模块连接、定位,生成一个单一的绝对地址的可执行的程序模块。最后,测试整个模块。
(2)子程序可以重用:为一个程序编写的代码经常可以用于其它的程序。在模块化编程中,可以把这些部分保存起来,以备将来使用。因为代码可以被重定位,所以保存的模块可以连接到满足其输入和输出要求的任意程序中。而在单块程序编程中,这样的部分深埋在整个程序中,不易被其它的程序使用。
(3)便于调试和修改: 模块化程序一般比单块程序易于调试。因为精心定义了程序的模块接口,很容易把问题定位到特定的模块。一旦找到了有问题的模块,更正问题就相当容易了。
3.1 系统模块划分
网络数据包分析工具有四个模块组成:一是 数据包的捕获,实现从网卡获取数据包。二是 数据包的解析,这两个模块是整个分析工具的基础部分,在整个系统中有着重要的作用,三是 捕获信息的分析,此模块主要是对捕获的信息进行统计,并与设定的特征值进行比较,得出简单的分析结论,四是 显示捕获数据包的信息,目的是为使用者提供一个方便进行手工分析的方式。四个模块之间的调用关系如图1。
数据包捕获 |
数据包信息显示 |
数据包解析及存储 |
数据包信息分析 |
图1 系统模块及关系 |
|
3.2 数据包捕获模块设计
此模块是先从网卡获取各种数据包信息并复制到缓存,等待解析模块的调用。这个模块的关键部分是快速的捕获数据包,减少丢包的比率。
数据包捕获是以以太网为基础的。以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输。IEEE802.3标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。[1]
以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据 的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是的话,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给LLC 子层。[1]
3.3 数据包解析存储模块设计
在上一模块实现了数据包的捕获,并复制到缓存。解析模块主要是实现根据数据包的协议包头进行数据信息的解析,并做出适当的解释,最后把数据放入数据库中。等待分析模块读取数据。目前解析的协议有etnernet, LLC, arp/rarp, ip, tcp, udp, icmp, dns, dhcp协议包头进行了解析并把数据包信息存储到数据库中。
数据包头的解析主要是根据数据包协议的格式进行有意义字段的读取。下面以ARP协议报头来说明整个解析的过程。
首先,必须了解ARP/RARP协议的报头格式,格式如图2。
0 |
图2 ARP包头格式 |
16 |
32 |
|
字段含义
硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;发送方IP(0-1字节):源主机硬件地址的前2个字节;发送方IP(2-3字节):源主机硬件地址的后2个字节;目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;目的IP(0-3字节):目的主机的IP地址。[3]
根据协议的格式定义,报头数据结构体(具体定义在后面给出)。进行类型的转化后对数据进行读取,并进行必要的解释。在这里最重要的是数据包的协议格式的定义。如果定义的结构有问题,后面的数据提取将是无意义的。
数据包信息的存储,是把提取的数据包头信息存储到一个地方,等待后面数据包信息分析模块的查询。存储信息要求,存入和提取信息都必须迅速,同时,要提供强大的查询功能来满足分析模块对数据的需求。
3.4 数据包信息分析模块设计
本模块的功能是通过对捕获到的数据包信息,进行简单的统计分析,对当前的网络安全情况做出合理的评价。
通过对数据包的分析,我们可以判断数据包的大小,数据包的包头信息,协议信息,以及数据包的内容等等。对于研究网络安全的人来说,掌握这方面的知识是相当重要的。现在的网络通信中,大部分数据都没有加密,我们可以轻易地从数据包中提取账号,密码之类我们关心的数据。另外,对数据包整体的信息统计也是数据包分析的一个方面。在前面的模块中我们获得了大量的数据包信息,在这个模块中我们要利用这些信息进行分析。把从数据库中查询得到的数据与入侵特征数据进行比较得到现在的网络安全分析结果。
数据包信息分析流程如图3。
从数据库查询信息 |
与特征信息进行对比 |
文件输出分析结果 |
图3 数据包信息分析 |
|
3.5 数据包信息显示模块设计
数据包信息显示模块的目的是给使用者提供一个可以查看数据包信息的窗口,原则是尽力合理的显示数据包的有用信息。数据包信息将采用多种不同排列的信息显示方式,比如按IP归类,按端口归类等等。同时信息分析模块的分析结果将生成一个网页类型的文档,可以通过网页的形式来查看最后的分析结果,还应该具备安全特征的输入窗口。
信息的显示并不一定是数据库里的所有信息,主要是提供给使用者最想看的信息。信息的显示方式是表格形式,有利于使用者对数据包的信息有比较直观的了解,以便做出正确合理的判断。
4 网络数据包分析系统的解决方案
整个系统的开发平台是Ubuntu+Libpcap+Apache+Mysql+Php每一个组件都是Free or Open Source Software(免费或者开源软件)。选择这个开发平台是整个系统的一大特色,首先免费软件降低了开发成本,减少不必要的消耗。再次正版软件的使用是系统更加的稳定,具有更好的可靠性,同时也避免了侵权的问题。这种免费和开源的方式对于用户都具有很强的吸引力,无论企业和个人开发者,尤其是对想得到较好的技术支持但又没有足够的经济支持的开发人员。在互联网方面,不需要为软件的发布支付任何许可证费就可以开发和应用。同时开源社区的潜力更在于资源共享,上百万的志愿开发 者为开源软件贡献自己的力量,保证了技术的不断进步和升级。开源的特性也使企业和开发人员可以随意的修改源程序为我所用,提升专有软件或者商业软 件的限制中所没有的灵活性,放大了项目的衍生性。
系统设计采用模块化的设计思想。因为模块化有很多优点。有效率的程序开发:使用模块化方法可以更快地开发程序,因为较小的子程序比大程序更容易理解、设计和测试。子程序可以重用:为一个程序编写的代码经常可以用于其它的程序。便于调试和修改:模块化程序一般比单块程序易于调试。
Ubuntu操作系统有自己的优点,选择它的原因是:Ubuntu 永远免费,无需支付任何许可费用。可以下载、使用以及与人分享,而绝对无需任何代价。每6个月推出新的桌面版本和服务器版本,这意味着您总是能够享受开源世界所提供的最新、最好的应用程序。Ubuntu 十分注重安全。对于每个桌面和服务器版本,可以获得至少18个月的免费安全升级。如果使用的是长期支持版本(LTS),那么可以获得桌面版本3年、服务器版本5年的支持。LTS 版本并不收取额外的费用,Ubuntu将在相同的免费条件下为每个人提供我们最好的服务。Ubuntu 新版本的升级也总是免费的。
4.1 数据包捕获模块的解决方案
数据包捕获模块要采用libpcap开发包,libpcap是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,用于访问数据链路层。这个库为不同的平台提供了一致的编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由的跨平台使用。操作系统所提供的分组捕获机制主要有三种:BPF(Berkeley Packet Filter),DLPI(Data Link Provider Interface),及Linux下的SOCK_PACKET类型套接口。基于 BSD 的系统使用 BPF,基于 SVR4 的系统一般使用DLPI。从文献上看BPF比DLPI性能好很多,而SOCK_PACKET更弱。SCO OpenServer 虽然本身没有内核过滤模块 BPF,但有作为可压入内核的 STREAMS 模块 BPF,采用与伯克利 BPF 相一致的概念。但在 ioctl 操作上,SCO 的 BPF 并不完全提供伯克利 BPF 的所有功能。
libpcap 的结构是简单的。分析其结构能使我们对稍大的程序