袁泽宇 肖庆正
摘要:针对网络数据包的捕获,分析了基于libpcpap的网络数据包捕获应用流程,研究了网络数据分解与重构的工作流程:通过对实时/离线数据的分析,对各个应用层协议进行还原,并基于还原出的信息进行数据挖掘和行为回放。
关键词:libpcap;数据分析;协议还原1引言
当前的社会是一个信息的社会,网络信息是社会活动的重要资源,对政治、经济和文化有着深远影响。由于移动通信技术的不断发展,探索无线网络信息监听与还原技术有助于信息安全体系的发展,对于维护社会政治稳定和国家信息安全具有重要的现实意义。
无线网络数据分解与重构主要基于捕获到的无线局域网数据帧,采用分层协议还原技术,并基于各层的信息实现重点目标识别和网络行为威胁等级分析。在无线局域网中采用静默侦听和存储转发两种工作模式,实现监听、存储并自动准实时持续恢复网络用户的传输信息。
2libpcap应用流程
libpcap主要由两部分组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。网络分接头从网络设备驱动程序中收集数据拷贝,过滤器决定是否接收该数据包。Libpcap利用BSD Packet Filter(BPF)算法对网卡接收到的链路层数据包进行过滤。BPF算法的基本思想是在有BPF监听的网络中,网卡驱动将接收到的数据包复制一份交给BPF过滤器,过滤器根据用户定义的规则决定是否接收此数据包以及需要拷贝该数据包的那些内容,然后将过滤后的数据给与过滤器相关联的上层应用程序。
libpcap的包捕获机制就是在数据链路层加一个旁路处理。当一个数据包到达网络接口时,libpcap首先利用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器。BPF过滤器根据用户已经定义好的过滤规则对数据包进行逐一匹配,匹配成功则放入内核缓冲区,并传递给用户缓冲区,匹配失败则直接丢弃。如果没有设置过滤规则,所有数据包都将放入内核缓冲区,并传递给用户层缓冲区。
libpcap主要函数如下:
pcap_findalldevs()函数用查找机器的所有可用的网络接口,用一个网络接口链表示返回。
pcap_lookupdev()函数用于查找网络设备,返回可被pcap_open_live()函数调用的网络设备名指针。
pcap_open_live()函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的操作都要基于此网络设备描述字。
pcap_lookupnet()函数获得指定网络设备的网络号和掩码。
pcap_compile()函数用于将用户制定的过滤策略编译到过滤程序中。
pcap_setfilter()函数用于设置过滤器。
pcap_loop()函数或pcap_dispatch()函数用于捕获数据包,捕获后还可以进行处理,此外pcap_next()和pcap_next_ex()两个函数也可以用来捕获数据包。
pcap_close()函数用于关闭网络设备,释放资源。
3基于libpcap的数据包捕获流程
首先,调用Open_pcap函数对网卡进行初始化设置,使网卡工作在混杂模式,以监听网络上的所有数据包。当有数据包到达时,网卡上的DMA引擎将包放入到内核rx_ring空间,同时向CPU发起中断服务请求,进入中断服务程序,然后调用网卡驱动程序中的函数将数据包封装成sk_buff结构,并脱离驱动程序,转到通用的处理函数netif_rx中。netif_rx函数将数据包传入等待队列,并置软中断标志位,其目的是使上层的处理采用软中断(do_softirq)来提高CPU的处理效率。在软中断中调用net_rx_action()函数轮询backlog队列,调用ip_rev()函数对每个数据包做进一步处理,完成将数据传送到上层协议[1]。
4网络数据分解与重构流程描述
网络数据分解与重构的工作流程如下图所示:通过对实时/离线数据的分析,对各个应用层协议进行还原,并将还原出的信息存储至数据库和磁盘,并基于还原出的信息进行数据挖掘和行为回放。
4.1 数据流重组
数据流重组过程将原始的单个数据包重组为数据流。其主要是根据各报文的包序号、各个标识位的狀态,丢弃重传,处理乱序,将所有相关联的报文重组为有序的会话流。
TCP协议采用了大量的机制保证数据的可靠传输,但在实际采集到的数据包中,将会采集到一些无用的数据包,例如重传报文和乱序报文。因此,数据流重组模块必须对这类数据包进行处理。
4.1.1 将无序的数据片流有序化
为了方便应用层数据的还原,需要将无序的数据片流有序化,使其排序为一个有序的数据片流。在实现数据片有序化时,设置了一个缓冲队列,该缓冲队列的最大空间设置为滑动窗口的最大值。当接收到一个数据片段时。首先比较其数据片序号和应获得的数据片序号,假如两者相同,则将其归人已收的数据行列,并从缓冲队列中将满足出队条件的数据出队。若没有,将其纳人缓冲队列中,并比较应获得的数据片序号和已获得的数据片,判断还需要何种数据片。
4.1.2 判断应用数据的起始和结束数据包
为了确定一个应用层数据的起点和终点,必须研究对应的应用层数据格式。对于HTTP数据,其有两种数据内容,一种为请求数据(Request),一种为响应数据(Response)。对于请求数据来说,可以认为数据内容以“GET”、“POST”、“HEAD”、“HTTP”开头的即为起始数据片。对于请求信息结束的判定方法有两种情况:若请求信息中含有Content-Length域,则可根据其值依次取出规定数目的内容,即可确定结束数据片;若请求信息中不含Content-Length域,则可以以两个CRLF作为结束标志。对于响应数据来说,在设计时可以认为数据内容为“HTTP”的即为起始数据片。对于响应信息结束的判定方法同样也有两种情况:若响应信息中含有Content-Length域,则可根据其值依次取出规定数目的内容,即可确定结束数据片;若响应信息中不含Content-Length域,则可根据该数据片是否是FIN片来确定。
如图3展示了数据包重组的流程,数据流重组模块从数据采集模块的缓冲区读取数据报,如果该数据包是第一个数据报,则插入List结构体的第一个位置,否则逆序根据其报文序列号(Sequence Number)寻找插入位置。如果该序列号的报文已存在,则说明该数据报为重传,将其丢弃。
4.2 应用层协议还原
信息还原模块的主要职责是根据不同的应用层协议,按照特定的逻辑还原出数据流中负载的具体数据。
实现本模块时首先需要研究各种常见的应用层协议,整理其工作流程,然后还原出其中负载的数据。
4.2.1 HTTP
HTTP协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。此协议是Web的核心。HTTP还原模块还原了HTTP请求报文与响应报文,从报文中得到通信信息。
4.2.2 FTP
FTP协议是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。通过解析FTP控制流进而得到数据流,最终从数据流中还原出传输的文件。
数据存储负责存储重组及还原出的数据。此模块又分为两大子模块,分别是数据库存储模块和文件存储模块。其中,数据库存储模块负责将数据包信息、流信息、HTTP信息、FTP信息和MSN信息存入数据库;文件存储模块负责和文件相关的操作,如保存HTTP网页文件,FTP文件等。
5结束语
本文首先对基于libpcap的数据包捕获流程进行了分析,通过对TCP/IP协议栈进行研究,结合软件逆向技术,对HTTP、FTP语音协议进行分析,提出网络数据还原方法;与此同时,通过对机器学习方法的研究,实现了网络行为回放;根据理论研究并实际进行系统的研发和测试,实现了网络数据分解与重构。
[参考文献]
[1] 周照峰.高速网络数据包捕获技术方法研究[J].科技经济市场,2009.
[2]毕学尧.高速网络的数据获取与分析研究[J].北京;中国科学院高能物理,2003.
[3]汪世义,秦品乐.基于Linux的高速网络包捕获技术研究[J].微型电脑应用,2006.
[4]李芳馨,刘嘉勇.网络数据流还原重组技术研究[J].通信技术,2011.