基于流量特征DNS隐蔽信道分析方法总结
基于流量特征DNS隐蔽信道分析方法总结
DNS隐蔽信道是一种利用DNS协议的特性来传输非法或私密信息的隐蔽通信方式。它通过将数据编码封装在DNS查询请求中,利用DNS服务器作为中转节点,实现隐蔽的数据传输。本文将详细介绍DNS隐蔽信道的工作原理、编码方式以及检测方法。
一、 概述
隐蔽信道是指允许进程以危害系统安全策略的方式传输倍息的通信通道。隐蔽信道在公开的信道掩盖下,采用特殊的编码方式,传输非法或私密的信息而不被人发现。其广泛存在于操作系统、网络系统和应用系统中。对网络信息系统的安全构成了严重威胁。
在网络安全领域通常将隐蔽信道称为隐蔽通道,主要是利用网络协议设计中存在的一些缺陷,通过某种算法,将隐蔽信息嵌入到合法的网络数据流中。传统隐蔽通道主要依靠传输层和网络层协议实现。由于防火墙和IDS等网络安全设备的存在,单纯利用这两层构造的隐蔽通道很容易被检测出来。因此HTTP、 DNS、FTP等网络协议开始被隐蔽信道利用。
DNS协议是互联网最为关键的基础协议,也是互联网大部分服务和应用正常运转和实施的基础。 正是因为DNS协议的广泛性和不可替代性,基于DNS协议的隐蔽信道对网络安全构成了严重威胁。
二、DNS隐蔽信道基本原理
DNS信道主要由被控端和控制端两部分组成,其基本思想是,利用1台伪装的DNS服务器作为中转节点,利用DNS査询过程建立除蔽通道,实现数据传输。其基本结构如下图所示:
DNS隐蔽信道基本结构
DNS Tunneling可通过通信的方式分为直接和中继两种模式,直连指客户端直接和指定的DNS服务器地址直接通信,通过将数据编码封装在DNS协议中,特点:速度快,但限制较高(很多场景不允许指定DNS Server)。
中继指有DNS迭代查询的过程,特点较为隐蔽,但由于数据包到达目标DNS Server前需要经过多个节点,所以速度上较慢。
图1 DNS隐蔽信道基本结构
假设目标主机IP为1.1.1.1,并在顶级域名服务器中将域名temp.com注册为该IP。内部主机(被控端)与目标主机(控制端)通过DNS隐蔽信道通信基本过程如下:
1、内部主机把要发送的数据作为主机名构造一个域名解析查询请求,例如,上传数据update,查询请求:updata. temp.com;
2、査询请求通过本地的DNS服务器,向顶级域名服务器查询得到temp.com域名对应的IP地址1.1.1.1;
3、本地的DNS服务器向1.1.1.1发送DNS査询请求: updata. temp.com;
4、目标主机(控制端)1.1.1.1从查询请求中,得到内部主机上传的数据;
5、目标主机将要传送给内部主机的非法数据作为DNS查询请求的响应信息发送给本地DNS服务器;
6、本地的DNS服务器将包含非法数据的查询结果返冋给内部主机。从而实现内部主机与外部控制主机间的双向通信。
2.2 DNS隐蔽信道编码
DNS隐蔽通道将上传的数裾作为DNS查询的主机名字段。在有关DNS协议的标准中规定单个域名的最大长度为253 Byte,域名的各部分之间用“.”分隔,各部分最大长度为63 Byte,毎个字符可以是字母(不区分大小写)、数字或连接符。
因此,在一个DNS查询报文中,最多可以携带242个字符,每个字符可以有37个不冋的取值。如果使用DNS隐蔽通道传递数据,则必须先对要传输的数据进行编码,使其满足标准的要求。
BASE-32、BASE-64、BASE-128编码
一种常用的编码策略是使BASE-32编码,每个字节编码5个比特的原始数据。在此编码方式下,一个DNS查询拫文最多可携带数据显为151 Byte.
DNS隐蔽信道通常使用TXT类型的数据记录来携带下传数据,TXT记录主要用来保存域名的附加文本信息,为了方便传输通常使用BASE-64编码对下传传输的数据进行编码,每个字节编码6个比特的原始数据。
BASE-128编码是基于BASE-64编码的一种编码方式。
二进制编码
在较新的RFC标准文档RFC 2181和RFC 4343中规定域名记录的各个部分都可以使用任何二进制字符,而不再局限与RFC 1034所规定的有限字符集合。使用二进制方式编码数据可以显著提高DNS隐蔽通道的效率,但在使用前必须在控制端和被控制端间协商确认双方都能够支持二进制编码,否则扔使用BASE-32等编码方式编码数据。
三、DNS隐蔽信道可行性检测方法
由于受到DNS协议规范的限制, DNS数据包长度有限,无法携带较多数据。若要满足文件传输、远程桌面控制等需求,则需要进行大量DNS报文传输。因此,可以通过对一个或多个DNS的请求和响应报文的有效载荷分析,检测DNS隐蔽信道;或者持续对多个DNS报文的大小、频率等属性进行统计分析进行DNS隐蔽信道检测。
3.1 DNS有效载荷分析
DNS隐蔽信道传输时,为了传输数据,控制端会在DNS请求和响应报文中放入尽可能多的数据,并且编码后的数据通常会含有较多的数字,因此,可以通过以下几方面进行检测:
主机名长度检测:通常DNS隐蔽隧道用上传数据作为主机名,所以DNS隐蔽信道的主机名一般较长,通常建议将主机名超过52个字符的DNS请求作为DNS隐蔽信道检测的一个指标;
利用域名的熵值:正常的DNS域名常常使用字典中的单同或其他有意义的字符串。而DNS隐蔽信道编码的域名一般具较高的熵,并会很均匀地使用字符集的各种字符。因此,可以把较高熵的 DNS域名作为识別DNS隐蔽信道的一个指标;
域名中数字占比及词频检测:合法的DNS域名较少使用数字