一、 概述
隐蔽信道是指允许进程以危害系统安全策略的方式传输倍息的通信通道。隐蔽信道在公开的信道掩盖下,采用特殊的编码方式,传输非法或私密的信息而不被人发现。其广泛存在于操作系统、网络系统和应用系统中。对网络信息系统的安全构成了严重威胁。
在网络安全领域通常将隐蔽信道称为隐蔽通道,主要是利用网络协议设计中存在的一些缺陷,通过某种算法,将隐蔽信息嵌入到合法的网络数据流中。传统隐蔽通道主要依靠传输层和网络层协议实现。由于防火墙和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域名较少使用数字,而经过编码的DNS域名会有很多数字,因此可以通过域名中数字字符占比进行DNS隐蔽信道检测;
下传数据非典型记录类型检测:上文提到DNS隐蔽信道下传数据通常使用TXT记录,也可以作为DNS隐蔽信道检测指标;
DNS信道中FQDN检测;
特征匹配法:某些DNS隐蔽信道也会含有特征字符串,可以使用DPI技术进行检测;
3.2 统计分析法
由于DNS报文的长度限制,为了传输非法数据,通常需要大量DNS请求及响应报文通过DNS隐蔽信道进行通信,可以对以下几个方面进行统计分析来检测DNS隐蔽信道。
不同IP的DNS流量总量:可以通过检测单个IP的DNS流量总量是否超过正常数量进行DNS隐蔽信道检测;
不同域名的DNS流量总量:检测方式与上一种类似,不过由于DNS隐蔽信道可能配置多个域名进行传输,因此可能存在识别率低问题;
DNS流速率及持续时间检测:DNS隐蔽信道的数据流通常持续时间较长、速率较快,也可以作为一个检测指标;
不存在关联的DNS请求检测: 正常的DNS请求通常在另一个请求之前,例如,HTTP请求,而DNS隐蔽信道通常没有与之关联的其他请求,因此也可以作为一个检测指标;
上面给出的几种DNS隐蔽信道检测方法,通常要多种检测指标一起使用,来弥补单一方法的不足。
3.3 总结方法
由于检测设备的限制、平台的实现方式、以上方法的总结(经测试),提出一套综合实现方法。根据目前应用审计日志的现况,更改了原始方法(下面只介绍现行的方法)。
根据2.1DNS有效载荷分析和2.2统计分析法归纳总结,搭建DNS隐秘隧道工具分析流量报文(目前比较活跃dns2tcp、iodine、dnscat2),抓取正常DNS流量报文对比分析。根据对DNS隧道工具分析,得到其原理相似结论,总结和验证了2.1和2.2方法特征。
具体的工具原理实现是基于DNS域名查询方式,具体见图2所示:
注册域名com
客户端Client B在内网环境下发起com,在本地服务器进行递归查询
查询不到,转各个顶级域名查询,寻找目标主机
需注意:减小注册域名影响、设备syslog日志还原DNS域名
图2 拓扑图
根据以上DNS隧道查询原理和先平台的特性,总结出:可用于域名进行区别的方法,对于提到的关于域名的区分特征如下:熵值、数字占比、词频等都可以用CNN方法获取其特征,并且还可以对深层次的特征和未知特征进行提取,具体实现过程参考实施案例。
四、 CNN深度学习方法
根据第三节进行实际方法论证,获取公开平台和本机的DNS正常流量报文,搭建DNS隐秘隧道获取流量报文,同时获取公开DNS隧道流量报文(人工验证)。验证2.1和2.2原理是否可行,叙述新方法可行性和实验过程。
4.1环境搭建
列举iodine、dns2tcp隧道工具进行分析。首先进行dns隧道环境搭建并抓包(此处省略)。图3和图4表示在使用工具时抓的流量报文,标黄部分表示请求域名。
列举抓取的正常DNS流量包,如图5和图6所示(qq和baidu)。
图3 Iodine流量报文
图4 dns2tcp流量报文
图5 qq流量报文
图6 baidu流量报文
正常设备出现的问题整理如下:
实际域名内容:
paayk1va.abdcd.com
syslog日志显示: