李佳静 高润智 孙阳阳 杨功江 赵彦
摘 要:应用层会话分析可以用来反应网络状态、掌握用户习惯以及发现潜在的安全威胁。该文提出了一种网络应用层会话分析系统的设计和实现方法,给出了应用层协议包括固定端口和可变端口协议的分析算法。实验表明,该文的方法能够有效地在对局域网内的会话进行识别和统计。
关键字:计算机网络 协议分析 端口 数据库
中图分类字:TP319 文献标识码:A 文章编号:1674-098X(2012)12(a)-00-03
当前政府、银行、企业等机构纷纷连接到互联网中,越来越多的核心业务在互联网上完成。网络为人们提供了极大的便利,已经逐渐成为很多用户完成相关业务的非常重要的、不可或缺的手段。然而,网络的不断普及也带来了其安全问题。各种各样的后门、代码攻击、蠕虫等无时无刻不在对用户的网络进行着攻击,造成网络用户的服务被拒绝、企业或个人机密信息被窃取等等一系列损失。因此对网络的监测和管理成为一个急需解决的问题。
应用层会话分析是网络状态监测和管理的一个重要组成部分。应用层会话分析具有如下的意义。
(1)应用层会话分析的结果能够反映网络的状态。根据应用层会话的统计信息,能够得知传输中断、VoIP语音质量及应用服务的响应时间等,从而提供更好的网络服务;
(2)应用层会话分析的结果可以用来掌握用户的爱好和习惯,进而进行网络的监控等管理;
(3)应用层会话分析能够发现潜在的安全威胁,比如蠕虫和网络入侵,在没有造成更大的危害之前进行响应。
目前,网络的监测和管理有多种方式可以实现,主要分为简单网络管理SNMP,FLOW和Sniffing。简单网络管理协议(SNMP)是应用最广泛的网关协议。SNMP构架中包含若干个被管理的网络接点设备以及至少一个管理工作站。工作站通过轮询或者中断的方法从被管理的网络设备中收集数据信息。Flow技术采用集中式的管理,由核心交换机或路由器提供信息。Sniffer技术可以截取完整的数据包,因此得到的信息最为完整,甚至可以还原和重现原始的网络通信内容。
该文在Sniffer技术的基础上,提出了网络应用层会话分析系统的设计和实现方法。该方法给出了应用层会话分析的工作流程,以及在应用层会话分析中各种关键问题的算法。基于这些算法,该文实现了一个网络应用层会话分析系统,并给出使用该系统在真实的网络中进行实验的结果和分析。
1 网络应用层会话分析系统的设计
根据TCP/IP模型,网络协议可以分为链路层、网络层、传输层和应用层。为了实现应用层会话分析,需要程序能够获得链路层的报文,并对链路层、网络层和传输层的协议进行解析,并在此基础上识别应用层协议类型并确定会话的建立和结束;同时为了方便用户查询,需要建立会话信息的数据库表。对应于以上的四个功能,将网络应用层会话分析系统设计为如下四个模块:数据包捕获模块,基本协议解码模块,应用层协议分析模块和数据库管理模块。下面分别给出这些模块的设计:
1.1 数据包捕获模块
数据包捕获库模块实现链路层数据帧获取,从网卡中直接获取数据链路层数据包,对数据包进行一定的解析,提供一套自己的内存管理机制,并向上层应用提供一套接口,使上层应用程序可以很简便的完成数据包获取。在实现数据包捕获的时候,还应该考虑到效率的问题,尽量减少丢包情况的发生。
1.2 基本协议解码模块
基本协议将数据包捕获模块监听到的数据包进行协议解码,并将标志了各个字段的数据包上传给应用层协议分析模块。基本协议解析模块模拟操作系统中的协议栈处理过程,按照链路层、网络层、传输层的顺序以此将数据包的包头各字段进行标记,同时对数据进行校验和检查。
1.3 会话分析模块
会话分析在基本协议解析的基础上,以会话为单位进行网络流量的分析。该文利用网络报文中的如下字段来判定它所属于的会话:源IP地址、目的IP地址、源端口、目的端口和应用层协议的类型。即同一个会话中的数据报文具有的以上字段具有相同
的值。
因此,分析一个网络报文的应用层协议的类型,是进行会话分析的基础。应用层的协议种类繁多,在进行分析的时候要针对不同的协议采用不同的方法。例如对于固定端口的协议,如http协议等,可以根据服务的端口80或8080来识别;对于一些服务端口需要经过协商确定的协议,如bittorrent协议和skype协议等,端口匹配的方法不再适用。
这时需要根据报文数据的某些特征,例如包含一些特殊的字符串来进行识别。例如在bittorrent协议的报文数据中通常包含一个长度为19字节的字符串“bittorrent protocol”。
因此需要适当的方法对可变端口的协议特征进行描述,使用并行模式匹配算法,对报文数据进行匹配。应用层协议分析模块同时还要对每个会话中的网络报文数目和数据字节数进行统计。
另外,为了避免网络会话数量的急剧增长,应用层协议分析模块还要给出判断会话结束的策略。会话结束分为两种情况:正常结束和非正常结束。例如,经过TCP协议的两次握手,完成会话就是正常结束的情况;对于一段时间内没有新数据包到来的会话,从数据库中删除。
1.4 数据库模块
数据库模块要完成数据库的连接,以及插入新会话、更新会话的信息以及删除会话记录的相应操作。
2 网络应用层会话分析工具的实现
基于以上的设计思路,该文实现了一个网络应用层会话分析工具。下面分别介绍各模块实现时的要点。
2.1 数据包捕获模块的实现
为了捕捉到链路层上的所有通信,该文将监控主机上的网卡设置为混杂模式。在非交换式网络中,这将是整个网络的通信。对于交换式网络,需要在交换机上设定端口镜像,使监控主机可以截取到广播之外的网络包。考虑到效率问题,该文中使用MMAPed pcap完成数据包捕获工作。MMAPed pcap中使用一个环状的缓冲内存管理机制,减少了内存拷贝的次数,防止在突发大流量数据时丢包情况的发生。
2.2 基本协议解析模块的实现
基本协议解析模块的工作分成以下三个步骤。
(1)根据pcap_datalink函数的返回值,得到链路层协议的类型,例如以太网或点到点网络;然后根据各链路层协议的格式,标识出其中每个字段的范围;并根据nProtocolType值,得到网络层协议的类型,例如IP协议,将报文传递给网络层协议分析函数;
(2)根据网络层协议的包头结构,标志出网络层协议的各个字段;根据报文头部的nIpProto值,得到传输层协议的类型,并传递给传输层协议分析函数;
(3)根据传输层各协议的包头结构,标志出传输层协议的各个字段,将数据报文传递给应用层会话分析模块。
图1 网络应用层会话分析系统的工作框架
2.3 会话分析模块的实现
程序初始化时,将应用层协议的正则表达式从文件中读入,每个正则表达式要进行编译和预处理,以便能够进行匹配。
图2中给出了应用层会话分析模块的工作流程。对于每个到来的数据包,检查是否是新的会话;如果是新建的会话,则新建一个会话,填写它的修改时间为当前时间,数据包个数为1,字节数为该数据包的字节个数;否则更新会话的修改时间为当前时间,数据包个数加1,字节数增加该数据包的字节个数。如果已经识别该会话的协议,则处理下一个数据包;否则,若该会话的数据包个数已经超过8,则认为该会话使用了未知的协议,将协议字段填写为“unknown”。对于数据包个数没有超过8的协议,首先判断端口是否为已知服务,若为已知服务则填写协议。若不为已知服务,则对报文数据部分进行正则匹配,匹配成功则填写协议字段。
对于会话结束该文采用如下判断方法:对于连接的双方A和B,当A向B发送了一个FIN包,B回复一个ACK包,之后B向A发送一个FIN包,A回复一个ACK包,即经过了两次握手则认为TCP连接正常结束。该文为每个会话增加了如下四个数据项:srcFIN,dstACK,dstFIN,srcACK来分别表示两次握手时的数据包,它们的初始值为FALSE,当该会话接收到相应的数据包时,将对应的数据项值更改为TRUE。当一个会话的(srcFIN&&dstACK&&dstFIN&&srcACK==TRUE)成立时,则认为该会话正常结束。在一段时间内没有新数据包到来则认为该会话非正常结束,在目前的系统中超时设置为300 s。
2.4 数据库模块的实现
数据库模块首先连接数据库,然后根据应用层会话分析模块的请求,对数据库进行操作。比如,根据应用层会话分析模块的新建会话请求,将新建会话的信息转化为正确的mysql语句,在数据表中插入新的表项。为了提高系统的可扩展性,数据库模块以插件实现。
图2 会话分析模块的工作流程
3 实验和讨论
见表1。
基于以上方法,该文实现了一个应用层会话分析系统。该系统使用C语言实现,在Ubuntu 10.10版本下运行,网络环境为包含两台主机的小型局域网,控制主机配置为Inter Celeron CPU 1.8 GHZ,2.0G RAM。系统运行10 min之后,统计得到了159个会话,其中ID是系统为每个会话分配的,作为主键;srcIP,dstIP,srcPort和dstPort分别表示源IP,目的IP,源端口和目的端口,Protocol表示应用层协议,count表示该会话中的报文个数,datas表示该会话中的数据字节数,firstTime是当接收到第一个数据包时调用gettimeofday得到的当前时间。由于会话过多,省略一些相似的会话,给出部分实验结果。
以上数据表明,该文的方法可以捕获局域网内部的全部数据包,并且以应用层会话为单位,进行数据包的统计和分析。
4 结语
应用层协议种类繁多,不同的应用层协议数据具有不同的格式,很难找到一种通用的模式来适用于各种应用协议的分析。该文提出了一种对网络应用层会话分析系统的设计和实现的方法,针对应用层会话分析中的一些关键问题给出了解决办法。通过在真实网络中的实验,证明该文的方法能够有效地在对局域网内的会话进行识别和统计。在应用层会话分析的基础上,可以进一步进行网络的故障管理、性能管理和安全管理等。
参考文献
[1] 谢希仁.计算机网络[M].5版.北京:电子工业出版社,2008.
[2] 矫健.基于WinPcap网络数据包捕获程序的设计与实现[J].计算机与网络,2008:163-165.
[3] 平震宇.Libpcap数据包捕获机制剖析与研究[J].信息网络安全,2008(8):37-39.
[4] 谢柏林,余顺争.基于应用层协议分析的应用层实时主动防御系统[J].计算机学报,2011,34(3):452-463.
[5] 牟乔.准确高效的应用层协议分析识别方法[J].计算机工程与科学,2010(8):39-45.