网络隐蔽通道检测技术研究
2018-12-22贾丛飞
贾丛飞
摘要:网络隐蔽通道技术具有灵活性强、隐蔽性高等特点,利用隐蔽通道,可以有效规避防火墙等系统防护软件的检测。木马等黑客工具通常结合网络隐蔽通道技术,实现网络数据的隐蔽传输。该文提出一种基于协议异常的隐蔽通道检测方法。该方法通过分析网络数据包中各标志位的数据,检测是否存在协议的异常使用情况,从而进一步检测隐蔽通道。
关键词:网络隐蔽通道;协议异常;隐蔽通道检测
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)32-0035-03
网络隐蔽通道是一种违反安全策略,秘密传输信息的机制。通过将有效数据嵌入到数据报文中,借用正常数据包的传播途径,达到在不同主机之间传输秘密信息的目的。
网络隐蔽通道技术通常采用计算机常用的通信端口进行数据传输,如80端口。由于该类端口通常被安全策略所允许,可有效规避防火墙和入侵检测系统的检测,具有很强的隐蔽性,因此网络隐蔽通道已成为木马在控制主机与被控主机之间进行信息传输的主要方式。
1 基本概念
随着人们对可信信道检测技术研究的不断深入,木马通过可信信道传输数据时,很容易被防火墙等检测工具拦截,于是就产生了隐蔽通道技术。一般来说,所有利用非正常通信手段来实现信息传输的方式都可以作为隐蔽通道。网络隐蔽通道利用网络协议存在的一些缺陷,以可信信道为载体,通过某种算法将隐蔽信息嵌入到合法的网络数据流中进行数据传输。
2 基于协议异常的隐蔽通道检测
基于协议异常的隐蔽通道检测方法就是针对以协议字段为载体的隐蔽通道。原理如图 1所示。
捕获网络数据包后首先对其进行协议分析,根据不同的网络协议、不同的协议字段选择不同的数据包检测方法。下边着重介绍协议分析和数据包检测两部分。
2.1 协议分析
通常隐蔽信息的载体是网络协议中的某些字段。在原始协议开发出来时每个字段都有其固定的意义和使用方法,还预留了部分保留字段。随着协议的演进,有些字段的用途发生了改变,有些字段变成无用字段,为了保证兼容性,这部分字段依然保留,形成冗余位。还有一些字段只有在特殊情况下才会使用,而且使用概率很低。网络隐蔽通道就是利用这两种字段作为载体进行数据传输的。协议分析就要对数据包的协议进行逐层分析,并對不同层次的协议进行字段解析,如网络层(IP、ICMP、IGMP),传输层(TCP、UDP),表示层(SSL),应用层(DNS,HTTP,SMTP,FTP)。
2.2 数据包检测
根据不同的协议和协议字段,数据包检测使用不同的字段分析模型。在先验知识中,通过分析标准协议中每个字段的应用方法,得到协议字段的应用模型。在检测时,发现某个协议字段的使用方法超出了应用模型范围,说明该数据包中存在协议异常使用情况,即网络中存在隐蔽通道。
以TCP协议中的紧急窗口位为例。当TCP报头中的URG标志位为0时,通常紧急窗口的区域数值为0。但是在利用该位实现隐蔽通道时,通常会将URG位设置为0,在紧急窗口的位置填充需要发送的信息。
这种依托于协议创建的隐蔽通道技术通常也受到协议本身的制约。例如TCP紧急窗口在被利用时,URG必须为0,如发送数据时,将URG置为1,会导致紧急窗口部分成为有效数据,操作系统的网络驱动在检测数据包时,会检查紧急窗口位数据是否有效,如果数据不符合协议规范,则会被判定为无效,操作系统会直接将数据包丢弃。所以网络隐蔽通道在利用紧急窗口位时,只能将URG标志位设为0,紧急窗口填充为需传送信息或加密信息。
3 原型系统设计
3.1 系统总体结构
3.1.1 系统原理图
系统首先选择需要捕获数据的网卡,对数据解包之后进行协议分析,再根据不同的协议,将数据包交给对应的数据检测模块进行检测。已捕获的原始数据存放在本地目录以备历史查询,检测结果推送到前端向用户报警。数据检测的各个模块是以插件的形式存在的,插件是存放在plugin目录下的dll链接库文件,系统启动时会将这些插件加载进系统中,在数据检测过程中按需调用这些检测模块。如图 2。
3.1.2 功能结构图
本系统可分为七个模块,数据捕获后交给数据处理部分对数据进行拆包检测和协议分析,并将数据存放到本地文件中方便历史查询,一旦发现异常信息,就通过异常报警模块报警。系统还包含日志记录模块,负责记录系统运行日志、报警或错误信息等。系统配置模块负责配置系统报警方式以及日志文件存放位置等。如图 3。
3.1.3 数据流图
用户通过交互界面将控制信息传递给系统配置模块。系统运行时,系统配置模块将控制信息传送到数据包捕获模块,控制数据包捕获的来源以及数据包类型。捕获到数据包后,将数据进行数据存储,同时将网络数据的报头信息交给数据包检测部分。在历史查询时,存储的本地数据也可以将数据的报头信息传递给数据包检测模块。检测到异常信息后,将异常数据包信息发送给异常报警模块。异常报警模块将报警信息传输给日志部分以及交互界面。如图 4。
3.2 交互界面设计
网络隐蔽通道检测系统主界面如图 5。系统启动时会将本地可用网卡的信息全部列举出来供用户选择,如需查看历史记录,可点击“历史记录”按钮,历史记录界面如图 6。如果用户需要对系统进行配置,可点击 “系统配置”按钮,系统设置界面如图7。
3.3 关键功能模块实现
3.3.1 数据采集
数据采集模块需要从系统网卡处得到数据,并将数据存放在缓冲区中,是系统的数据入口点,本系统采用Winpcap实现数据采集功能。
在网络通信时,操作系统会根据不同的目的网络选取不同的网卡进行通信,所以监听网络数据包前也应该首先选择需要监听的网卡。在这里使用int pcap_findalldevs(pcap_if_t **, char *)函数。调用该函数后,成功返回时,就得到一个描述网卡信息列表的指针,在这个列表中可以得到网卡的名称、详细描述信息以及网卡的IP地址等。
捕获数据包前,需要用户选择需要监听的网卡,然后对该网卡进行配置。设置一个消息循环,当网络中没有数据到来时,系统阻塞等待数据写入缓冲区;有数据到来时,进入消息循环中,执行自定义的协议分析和数据包检测操作。
配置网卡首先需要打开指定的网卡,并设置网卡过滤器。打开选定的网卡需要使用pcap_t *pcap_open_live(const char * device, int snaplen, int promisc, int to_ms, char ebuf *)函数。设置过滤器时需要首先编译过滤器,用到的函数为 int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize,bpf_u_int32 netmask)。过滤器编译完成之后,需要用 int pcap_setfilter ( pcap_t *p, struct bpf_program * fp )函数来设置过滤器。
接收数据使用函数int pcap_next_ex(pcap_t* p,struct pcap_pkthdr** pkt_header,const u_char** pkt_data)。pkt_header和pkt_data存储着接收到报文的信息。pkt_header型结构体,存储着数据包的接收时间和包长度。而pkt_data存储着数据包的内容。程序在调用pcap_next_ex后,系统会分配默认大小为500KB的内存供其存放报文,pkt_data指针指向该内存中存储报文的位置。
3.3.2 数据处理
通过pcap_next_ex函数得到的数据包信息存放在pkt_header和pkt_data中。pkt_header中存储的是数据包的长度,时间戳等信息。这里提到的数据包的长度指的是pkt_data指针指向的内存空间的有效长度,该长度与数据包中IP包的长度等含义不同。
对数据包进行解析主要用到的是pkt_data指针。pkt_data指向的内存数据包是以数据链路层的MAC报头为起始位置的,MAC报头长度为14字节,所以定位IP报头时,需要将pkt_data指针增加14字节的偏移量。
ip_header *ih = (ip_header *) (pkt_data + 14);
这样就可以通过ih指针直接调用IP报头的每一位数据。由于IP数据报头长度不固定,但是其长度存放在报头中,所以定位TCP报头时需要用到IP报头中的报头长度。那么定位TCP报头时采用如下方法:
u_int ip_len = (ih->ver_ihl & 0xf) * 4;
tcp_header *uh = (tcp_header *) ((u_char*)ih + ip_len);
這样就定位到了TCP数据报头,再根据TCP报头中的标准信息进行字段定位和报文内容定位。
数据包检测的模块是以插件形式提供的,而每个模块可检测协议中的一位或者几位字段。由于输入缓冲区格式是固定的,所以检测模块在对相应的协议字段进行定位时,需要如上述所讲根据协议报头长度以及字段位的相对偏移量进行计算,得到每个检测字段的位置和内容,再进行对应的模型检测。
如果检测出数据包存在异常,立即将异常信息反馈给主系统。主系统会将数据包的接收时间、源/目的IP地址、源/目的端口等,连同得到的异常信息显示到用户界面上。
4 小结
网络的不断普及,暴露在互联网中的用户隐秘信息越来越多,入侵技术的不断进步促使网络隐蔽通道实现技术的进步。本文下一步还需要提高插件式数据处理模块检测速度、增加针对协议异常算法检测的检测模型、增加针对新型网络隐蔽通道实现技术的检测方法。
【通联编辑:代影】