APP下载

基于神经网络的DNS 隐蔽信道检测*

2022-05-10黄文培

通信技术 2022年4期
关键词:域名报文信道

姜 雄,黄文培

(西南交通大学 信息科学与技术学院,四川 成都 611756)

0 引言

域名系统(Domain Name System,DNS)是现代互联网的一项重要的基础设施和资源,其主要功能是提供不适合记忆的长IP 地址与由字符组成的可读域名之间相互映射的服务。借助DNS,网络用户可以通过记忆可读域名来连接网络。因此本地主机与互联网之间的通信,除了利用静态网络互联协议(Internet Protocol,IP)通信,都依赖于DNS 服务。一方面,由于DNS 协议在网络中的普遍应用和重要性,DNS 协议报文基本不会被防火墙的出站规则所屏蔽;另一方面,用户一般更注重对受到攻击的流量进行监控,而忽略了利用DNS 协议进行信息传输的隐蔽行为。这两点使得DNS 成为数据传输和泄露的隐蔽信道的良好选择对象[1]。

DNS 隐蔽信道(DNS Covert Channel),又称DNS 隧道,其主要目的有以下两点:一是绕过认证和检测实现网络连接;二是突破防护墙的出站规则和流量检测,实现恶意代码远程控制功能,或者传输敏感信息,窃取重要数据。现在许多攻击者在对目标主机植入恶意代码后,借助DNS 隐蔽信道传输数据与信息,破坏系统数据完整性和机密性。新型后门木马PlugX 远控变种[2]就结合了DNS 隐蔽信道与PlugX 远控程序,使得该木马可以有效穿透防火墙。2017 年3 月一起DNSMessenger 的攻击事件中的所有命令都通过DNS 隐蔽信道传输,以此来躲避检查[3]。

目前对于DNS 隐蔽信道的检测主要包括对DNS 报文和DNS 通信行为进行分析并提取特征。Qi 等人[4]提出了一种利用Bigram 对查询域名进行评分以进行二分类实时检测DNS 隧道的方法。Aiello 等人[5]提出先提取报文大小、时间间隔等特征,然后进行多数投票监督学习的检测方法。Liu等人[6]提出了一种基于行为特征的二分类方法,主要对DNS 隐蔽信道的通信行为进行特征提取。单康康等人[7]提出了基于多种机器学习算法构建混合分类模型,通过分配权重综合检测结果来检测DNS隐蔽信道。王琪等人[8]将DNS 服务器日志作为数据来源进行特征提取,使用机器学习分类模型进行检测。Yang 等人[9]在使用随机森林对DNS 隧道检测时,主要关注DNS 隧道的会话行为特征。Lai 等人[10]提出了一种无须提取特征的检测方法,该方法直接以DNS 应答报文字节数据训练前馈神经网络。Liu 等人[11]使用DNS 查询报文作为数据,对报文进行编码,并使用卷积神经网络进行训练,自动对报文提取特征,但未去除受控域名对数据的影响。张猛等人[12]对DNS 网络分组设定并提取大量特征数据,还探索了多种卷积神经网络结构的训练测试效果。

基于以上分析,目前的DNS 隐蔽信道检测方法,都比较倾向于分析并提取特征;但在面对巨大的DNS 流量时恐难以应对。在无须提取特征的检测方法中,只对单一的查询或应答报文进行检测识别,也难以覆盖全面。近期,深度学习中的卷积神经网络(Convolutional Neural Networks,CNN)和长短期记忆神经网络(Long Short-Term Memory Neural Network,LSTM)分别在计算机视觉领域和文本领域取得了良好的性能,充分展示了其自动提取特征的能力。因此,本文提出了无须提取大量特征且不区分查询与应答报文的基于CNN 和基于LSTM 的检测方法,并通过实验验证,以期达到理想的效果。

1 DNS 隐蔽信道分析

1.1 DNS 隐蔽信道工作原理

利用DNS 协议建立的隐蔽信道一般通过两种方式实现:一种是利用域名系统,通过域名解析,与域名系统中的某一特定的域名服务器建立连接,这里称为中继模式;另一种是指定该解析域名的域名服务器,通过服务器的IP 地址直接建立连接,不经过域名系统,这里称为直连模式。其中,常用中继模式将DNS 隧道报文隐藏在大量的DNS 流量中,并经过域名系统传递到目标服务器。

对于采用中继模式构建的DNS 隐蔽信道,作为数据隐藏的载体,DNS 查询报文和应答报文都经过域名解析到达目标主机。以example.dnstunnel.com 为例,解析DNS 进行域名解析的流程如下:

(1)客户端本地DNS 缓存如没有查询域名的查询结果,则向本地DNS 服务器发送查询请求;

(2)本地DNS 服务器如没有相应的缓存,则向根服务器发送查询请求,根服务器返回com 的域名服务器IP 地址;

(3)本地DNS 服务器再向com 的域名服务器发送目标域名的查询请求,com 的域名服务器则返回dnstunnel.com 的域名服务器IP 地址;

(4)本地DNS 服务器再向dnstunnel.com 的域名服务器发送目标域名的查询请求,该DNS 服务器返回example.dnstunnel.com 的查询结果,本地DNS服务器再将查询结果返回给客户端。

攻击者如要构建中继模式的DNS 隐蔽信道,需要一台能完全控制的DNS 解析服务器和一个已注册的域名,并将该解析服务器设置为该域名的授权服务器,域名系统就会将对该域名及其子域名的查询转发到控制的服务器上,从而在其控制的客户端与域名服务器之间,使用注册的域名构建DNS 隐蔽信道。

客户端在向服务端发送数据时,首先将需要发送的数据采用Base64、Base32 等编码后放在子域名部分,也就是替换上面距离域名的example 部分;其次经过DNS 查询将该子域名部分传递给服务端。服务端将需要回传的数据编码后,放在应答报文的资源记录区域,通过DNS 系统回传给客户端。

1.2 DNS 隐蔽信道检测特征分析

对于DNS 查询报文来说,一般除了DNS 协议头部信息,就只有查询区域。DNS 隐蔽信道的查询报文与常规的查询报文之间的显著区别是查询域名与查询类型。因为查询域名时,DNS 隧道是传递数据的载体,为了提高传输的效率,在域名数据中使用二进制数据是一种有效提高传输效率的方法[13]。现有的大多数工具建立的DNS 隐蔽信道使用了Base32、Base64 等对数据编码,因此会使用非常规的字符。例如在实验环境中,dns2tcp 在与C&C(Command and Control)服务器通信的过程发送的查询域名为778A8QD/BA.dnstunnel.com。因此在子域名中蕴藏许多能表征DNS 隐蔽信道的特征,例如域名长度、字符频率特征、信息熵等[14]。

为了让服务端在DNS 应答报文中有足够大的空间填充数据,常用TXT、CNAME、MX 等查询类型,使其中能嵌入字符,而常规查询报文为了获得查询域名的IP 地址,常用A 类型。

对于DNS 应答报文来说,其查询区域与其对应的查询报文的查询区域相同,因此查询报文中的检测特征在应答报文中依然存在。并且在常规的DNS 应答报文中,很多时候应答资源区域不止一条资源记录,因为大型网站会有多个服务器。而DNS隐蔽信道的应答报文,通常只有一条应答资源记录,这是为了节省应答报文的空间而避免多条资源记录占用头部信息的空间。因此,应答资源记录数、应答资源区域及其中的查询类型也都是隐藏在应答报文中的检测特征。

以上是对DNS 报文所隐藏特征的分析,在通信行为方面,DNS 隐蔽信道的查询报文与常规的查询报文也有较大不同。其中DNS 隐蔽信道在传输大量数据时,需要在短时间内产生大量DNS 报文[15],并且由于为了传输数据而导致产生查询的速度过快,因此在一段时间的DNS 流量中查询与应答报文数量并不接近。

本文主要问题是判断某个DNS 报文是否是由DNS 隐蔽信道产生。可以将这个目标表述为一个二分类的任务,如{(P1,y1),…,(PN,yN)},其中Pn,n=1,2,…,N为一个DNS报文,yn∈{0,1}标记该DNS 报文是否是DNS 隐蔽信道的报文,其中1 为DNS 隐蔽信道的报文,0 为常规DNS 报文。对DNS流量数据进行数据规范化处理,然后基于CNN 和LSTM 建立检测模型并训练,利用神经网络对数据自动提取特征,实现对DNS 隐蔽信道的检测。

2 基于CNN 的检测方法

2.1 数据规范化

根据前面的分析,针对每一条DNS 流量报文,以字节为单位转换为0~255 之间的整数。例如一条DNS 报文,其字节数据为[71,254,1,0,…,0,16,0,1],其长度为252,即该DNS 报文有210 个字节。由于DNS 协议在传输时,当封装的DNS 应答的长度超过512 字节时,DNS 协议就会在传输层采用传输控制协议(Transmission Control Protocol,TCP),而绝大多数DNS 报文使用用户数据包协议(User Datagram Protocol,UDP)。

查询域名部分由于不同的DNS 隐蔽信道会使用不同的已控制域名,例如由DNS 隐蔽信道工具dns2tcp 产生的DNS 隧道报文+Z8BRQFUBA.dnstunnel.com,其中的dnstunnel.com 是攻击者自定义的受控域名,不具有特征,因此为了避免自定义已控制域名对模型的影响,使得训练的模型有更好的普适性,只对查询域名的第一段域名部分作为数据进行训练。

因此DNS 报文中查询域名只保留第一段子域名,并且去除无意义的会话标识,使用0 填充到623 字节,或者截断至623 字节,再以50 个报文为一组统计DNS 报文速率与查询报文占比这两个数据填充至末尾,最后将其转换成25×25的二维矩阵:

这个二维矩阵数据中分为报文数据与通信行为特征。再将该二维矩阵转换成单通道灰度图片,如图1 所示。DNS 报文中的每一个字节都是图片中的一个像素点,将该图片作为卷积神经网络的输入。

图1 CNN 输入灰度

2.2 模型结构与训练过程

本文研究的问题是利用CNN 检测DNS 隐蔽信道,来判别一个DNS 报文是否是DNS 隐蔽信道产生的DNS 报文,这是一个二分类问题,因此在经典的CNN 模型结构LeNet-5 的基础上进行改造。

整体结构:C1 卷积层,采用6 组1×6×6 的卷积核;S2 池化层,采用2×2 的采样窗口;C3 卷积层,采用16 组6×5×5 的卷积核;S4 采样层,采用2×2 的采样窗口;F5 全连接层,采用96 个神经元;F6 全连接层,采用10 个神经元;F6 全连接层softmax 分类器,采用2 个神经元。

卷积神经网络模型的训练过程主要采用反向传播算法来传递误差并计算梯度,然后使用梯度下降的优化算法来计算并更新神经元之间的连接权重。通过不断地训练,使得利用CNN 模型中的参数计算出的结果与目标误差达到最小。其训练过程中的前向传播、反向传播及参数更新的表示方法如下文所述。

(1)前向传播。其计算方法可以表示为:

式中:*为卷积操作;l为当前的卷积层数;z和x分别为该层卷积操作后的输出及经过激活函数ReLU 后的输出;W为该层的卷积核参数矩阵;b为该层的偏置参数。

(2)反向传播。结合优化算法,更新模型的参数,采用交叉熵损失函数作为目标函数,可以表示为:

式中:a为样本预测为正类的概率;y为样本标签值为正类的概率;n为样本大小;E为目标函数。

(3)参数更新。为了使得模型达到目标函数的结果,需要根据预测值与目标的差距,反向传播之后更新参数。其中权重的更新为偏置的更新为,其中η为学习速率,∂为求偏导符号。

在C1 卷积层针对单通道灰度图,即1×25×25的输入,使用卷积核进行步长为1 且无填充的卷积,输出6 张20×20 的特征图像。在S2 采样层,采用2×2 尺寸的采样窗口,对C1 卷积层输出的特征图进行最大池化下采样,输出6×10×10 的特征矩阵。在C3 卷积层,进行步长为1 且无填充的卷积,输出16 张6×6 的特征图。在S4 采样层中,同样采用2×2 的采样窗口进行下采样,输出16×3×3 的特征矩阵。在F5 全连接层中,将S4 采样层中输出的特征数据拉成一维数据,即144 个特征作为输入,输入到96 个神经元中,输出96 个数据。在F6 全连接层中,使用10 个神经元,输出10 个数据。在F7全连接层中使用2个神经元利用soft-max分类器,输出结果为2 类。选取其中概率更大的数的索引作为判别结果,分别是0 或1,其中1 表示DNS 隐蔽信道报文,0 表示常规DNS 报文。

3 基于LSTM 的检测方法

根据之前的分析,DNS 隐蔽信道在传输数据时,其手段是将传输的数据进行编码后放在已控制域名的子域名部分,然后通过DNS 查询将数据通过DNS 系统传送到服务端。域名中隐含大量检测特征,可以只将查询域名作为使用神经网络提取特征的对象,然后对长序列数据有良好性能的LSTM 建立模型并训练,构建对DNS 隐蔽信道的检测模型。

3.1 数据规范化

将上文举例的DNS 隐蔽信道查询域名的第一段域名+Z8BRQFUBA 转换成0~255 之间的整数。由于DNS 协议中查询域名采用ASCII,所以可以将这一段域名的字节数据,每个字节转换成十进制的整数,其范围为0~255。得到一维矩阵输入为[43,90,56,66,82,81,70,85,66,65]。

为了给LSTM 模型输入相同格式的数据,将该矩阵使用0 在前面填充,填充后长度为20。在数据末尾添加0 或1,作为数据标签。因此每条DNS 报文处理后,得到长度为21 的数据为[0,0,…,66,65,1]。

3.2 模型结构与训练过程

3.2.1 模型结构

模型整体结构:嵌入层,词空间大小为256,嵌入到128 维向量中;LSTM 层,隐藏元(hidden state)的维数为256;两个全连接层,一个是输入隐藏元维数256 个数据,输出是词空间大小256 个数据,另一个是输入词空间大小256,输出是1×2的矩阵。

(1)嵌入层。它可以把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间。这样不仅可以减少离散变量的空间维数,而且可以有意义地表示变量。

(2)LSTM 层。它是一种特殊的循环神经网络(Recurrent Neural Network,RNN),它有两个传输状态,分别是cell state 和hidden state。它可以将序列前面部分计算的信息保留在两个传输状态中传递给当前输入的数据,使得在当前数据输入后,可以根据当前输入和前面序列的信息,预测输出的值。

(3)全连接层。由于每个数据输入到LSTM层之后,根据两个传输状态,可以预测关于该数据的输出,而该输出则是在词空间范围内,所以实质上每个预测输出都是一个分类问题。因此使用全连接层将其分类,神经元个数为词空间的大小。

3.2.2 训练过程

其训练过程也分为前向传播、反向传播和参数更新。在前向传播阶段,分为两个阶段:

(1)每条数据长度为20,将训练数据的前19个数据依次输入构建的LSTM 模型中。在输出层,只使用第一个全连接层,将输出映射到词空间大小的0~255 上,因为前19 个数据,通过模型的输出,都应当是词空间中的某个数据。此外,将当前数据计算出的隐藏元,在下一个数据输入时,作为输入的参数,在下一个数据进行计算时更新隐藏元。

(2)第20 个数据输入时,此时输入的隐藏元,将隐含前19 个数据的信息,再结合第20 个数据,LSTM 模型就提取出整个域名序列所含有的特征。在其经过第一个全连接层运算后,输出256 个数据,作为第二个全连接层的输入,最后通过soft-max 分类器输出判别结果0 或1。利用LSTM 提取整个序列的特征的能力,对DNS 报文进行检测。

反向传播与参数更新的方式与CNN 的一样,只是LSTM 模型的反向传播和参数更新,发生在每条数据的第20 个元素输入时,并通过两层全连接层得到两类结果,再与目标值计算交叉熵损失函数,利用梯度更新算法和优化算法,进行参数更新。

4 实验测试与结果分析

4.1 数据集

本文实验中的常规DNS 报文数据一部分为local-dns 数据,该数据来源于通过监控网络接口的方法,在真实校园网络环境中,在一周内采集的应用层协议为DNS 协议的帧数据,并将其存储在pcap 格式文件中。为了数据的完整性,另一部分数据采用加拿大维多利亚大学ISOT 实验室收集并公开的数据集ISOT HTTP Botnet Dataset 中的DNS 报文数据,称为isot-dns 数据。

DNS 隐蔽信道报文样本数据除了使用3 个典型且常用的DNS 隧道工具搭建DNS 隧道产生之外,还使用了低速DNS 隧道工具dnsteal 和伊朗黑客组织APT34 使用并泄露出的Glimpse。3 个典型工具为DNSCat2、Iodine 和dns2tcp,它们使用不同的查询类型和编码方法,以及不同的通信行为与报文平均长度。例如,Iodine 能使用的查询类型的种类最多,如SRV 和NULL,其他DNS 隧道工具很少使用这些类型,dns2tcp 常用Base64 编码。dnsteal 只用于数据泄露,并且无需客户端,DNS 报文速率与常规DNS 流量几乎一致。Glimpse 作为在真实攻击被黑客组织中使用的隧道工具,它所产生的数据能使得训练的检测模型更具普遍性和代表意义。

关于实验环境,在一台主机上部署CentOS7 和Windows7 主机作为受控主机,并部署Ubuntu16.04搭载Bind9 作为本地DNS 服务器;在另一台主机上部署CentOS7 作为控制端。

DNS 隐蔽信道主要有作为C&C 传输的通道、作为绕过网络认证的通道、实现网页浏览及文件秘密传输的通道这3 种工作状态。前3 个隧道工具通过使用ssh 远程登录命令以及搭建socks 代理服务器和nc 命令的方式分别工作在这3 个状态,并收集其工作时与空闲时产生的DNS 报文数据。dnsteal则通过传输文件收集数据,Glimpse 可以实现命令控制和数据传输。收集的数据如表1 所示,并分配20%为测试数据集。

表1 DNS 隐蔽信道检测数据集

4.2 评估指标

为了验证模型对DNS 隐蔽信道的检测效果,这里设立3 个评测指标,分别是准确率ACC、误报率FPR、精确率PRE,具体计算公式为:

式中:TP为实际正类且预测为正类的样本数量;FN为实际正类且预测为负类的样本数量;FP为实际负类且预测为正类的样本数量;TN表示实际负类且预测为负类的样本数量。

4.3 结果分析

为了与提取特征的机器学习方法进行对比,使用逻辑回归(Logistic Regression,LR)、支持向量机(Support Vector Machine,SVM)和决策树(Decision Tree,DT)构建检测模型,与本文所提方法进行对比。共提取12 个特征,分别是查询请求报文字节数、UDP 载荷字节数、第一段域名长度、整体域名长度、域名中大写字母的个数、域名中小写字母的个数、域名中数字的个数、域名中非法字符的个数、域名信息熵、查询类型、对应的DNS 应答报文的字节数、单位时间内发出DNS 请求的个数。

这5 种检测模型在测试数据集上的测试结果如表2 所示。

表2 测试结果 %

从表2 可以看出,本文的基于CNN 和基于LSTM 的DNS 隐蔽信道检测方法,在3 个指标上好于传统的提取特征的基于机器学习方法。其中CNN方法的表现最好,因为它的训练数据包含的特征最全面,包括了报文特征与通信行为特征。LSTM 方法在整体效果上不如CNN 方法,因为其只能自动提取到隐含在子域名中的特征,但LSTM 方法相较于CNN 方法则更加简便,只需提取报文中的查询域名的第一段域名的字节数据,就能进行检测识别,更适合在流量出入口进行快速检测。

5 结语

本文针对在网络攻击中越来越常见的DNS 隐蔽信道进行了分析,提出了基于CNN 和LSTM 这两种神经网络的检测方法,利用神经网络对隐含特征的数据进行自动提取特征,实现了对DNS 隐蔽信道的有效检测。该方法无须进行大量的特征设定和提取,也无须对DNS 查询和应答报文进行区分。此外,本文数据集来源于DNS 隐蔽信道常用的3 种状态和网络攻击中黑客组织使用的Glimpse,使得数据集更加全面,且更具代表意义。

猜你喜欢

域名报文信道
基于J1939 协议多包报文的时序研究及应用
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
如何购买WordPress网站域名及绑定域名
ATS与列车通信报文分析
基于导频的OFDM信道估计技术
一种改进的基于DFT-MMSE的信道估计方法
腾讯八百万美元收购域名
基于MED信道选择和虚拟嵌入块的YASS改进算法
一种基于GPU的数字信道化处理方法