AI安全初探:利用深度学习检测DNS隐蔽通道

DNS 隐蔽通道简介

DNS 通道是隐蔽通道的一种,通过将其他协议封装在DNS协议中进行数据传输。

由于大部分防火墙和入侵检测设备很少会过滤DNS流量,这就给DNS作为隐蔽通道提供了条件,从而可以利用它实现诸如远程控制、文件传输等操作,DNS隐蔽通道也经常在僵尸网络和APT攻击中扮演着重要的角色。

DNS隐蔽通道可以分为直连和中继两种模式。直连也就是Client直接和指定的目标DNS Server(授权的NS 服务器)连接,通过将数据编码封装在DNS协议中进行通信,这种方式速度快,但是限制比较多,很多场景不允许用户指定DNS Server。而中继模式的DNS通道则更为隐蔽,但同时也因为数据包到达目标DNS Server前需要经过多个DNS查询服务器,所以速度上较直连模式慢很多。中继模式的DNS通道原理如图1所示。

图1 中继模式下的DNS隐蔽通道原理

例如,前段时间著名的XShell DNS通道攻击,黑客在Xshell中植入恶意代码,通过DNS隐蔽通道外发用户敏感数据的示例如图2 所示,黑客将外发数据藏在nylalobghyhirgh.com子域名中。

图2 Xshell DNS隐蔽通道,黑客将外发数据藏在nylalobghyhirgh.com子域名中

DNS 隐蔽通道从提出到现在已经有了很多实现工具,历史比较早的有NSTX、Ozymandns,目前比较活跃的有iodine、dnscat2、dns2tcp,其他不太常见的还有DeNise、Heyoka等。不同工具的核心原理相似,但在编码、实现细节和应用场景方面存在一定的差异。

本文使用卷积神经网络(CNN)来检测DNS隐蔽通道。第一步工作是样本数据采集。

算法前的准备工作——数据采集

利用上述DNS隐蔽通道工具进行“黑”样本采集工作见另一篇博文《DNS隐蔽通道检测——数据收集,利用iodine进行DNS隐蔽通道样本收集》,其流程是先抓取DNS隐蔽通道工具攻击过程中的网络流量pcap包,然后利用wireshark工具将pcap包转换为机器学习算法能够识别文本文件。这是一个体力活,我收集到的业界流行的DNS 隐蔽通道工具的数据样本如图3所示。

图3 收集的DNS隐蔽通道工具示意样本

以dnscat2工具为例,其生成的一个样本见图4,可以看到DNS报文里包含了大量的较长子域名,而外发数据便藏在这些子域名中(我使用的主域名是friendsakka.xyz)。

图4 dnscat2工具生成的示意样本

至于“白”样本收集,我们使用的是某高校的校园网络流量。黑白样本收集好以后,就可以进入检测算法环节了。

利用深度学习进行DNS隐蔽通道检测

本文使用CNN(卷积神经网络)来检测DNS隐蔽通道,在介绍算法前,先简单介绍下CNN。

CNN(卷积神经网络)常用于图像识别并取得了极佳的效果。图5展示的是一个典型的卷积神经网络结构。该网络包含两个卷积层(convolution layer),两个池化层(pooling layer)和一个全连接层(fully connected layer)。

图5 典型的卷积神经网络结构

卷积神经网络的基本思想和我们人类大脑识别图像的机制是一致的。例如,当看到一张“喵星人”图像时,我们之所以认为它是“喵星人”,是因为我们看到它有萌萌的头、长长的尾巴、柔软光滑的皮毛等明显特征,通过组合(更高层次的抽象)这些特征,我们的大脑最终便可做出准确的判断。卷积神经网络的基本思想也是类似,核心理念包括:

· 局部感受野:这是通过卷积层来完成的,形象地说,就是模仿你的眼睛,想想看,你在看东西的时候,目光是聚焦在一个相对较小的局部吧? 比如喵星人的图像上有爪子或者萌头等明显的局部特征。而在卷积神经网络中,每个隐层节点只连接到图像的某些局部像素点上。 · 池化:形象地说,当你看向远方,然后闭上眼睛,你仍然记得看到了些什么,但是你能完全 记住你刚刚看到的每一个细节吗?答案是不能。同样,在卷积神经网络中,没有必要对原图像所有细节做处理,而是使用某种 “压缩”方法,这就是池化,也就是每次将原图像卷积后,都通过一个采样的过程,来减小图像的规模。 · 权值共享:在卷积神经网中,同一个卷积核内,所有的神经元的权值是相同的,从而大大减少需要训练的参数。之所以如此设计 ,就如同人类大脑的某个神经中枢中的神经细胞,它们的结构、功能是相同的,甚至可以互相替代。

如果你还没有理解的话,我们再看下面这个例子,专家们设计了包含10个卷积层,4个池化层和2个全连接层的卷积神经网络,见图6所示,该网络主要用于图像识别。专家们发现 ,在比较低的层,神经元倾向于学习一些简单的模式,比如图像边缘、颜色 、条带灯;而在比较高的层,神经元能够检测到一些更为高层次的抽象特征,比如整辆轿车等。

图6 专家构建的用于图像识别的卷积神经网络

CNN的诞生是为了解决图像处理问题。在安全界,瀚思科技开发出了基于深度学习的二进制病毒样本检测技术,可以做到沙箱同等水平的 99% 的检测准确率,而误报率低于 1/1000。

CNN检测的图像通常是二维数据,而作为DNS隐蔽通道传输的子域名虽是一维的文本数据,但同样可以用CNN进行处理。在本文的DNS隐蔽通道检测中,我们使用一维的卷积函数处理DNS子域名片段,以提炼高级特征进一步分析。 利用CNN进行DNS隐蔽通道检测的代码框架如下:

大致流程是先获取黑白样本数据,然后将80%的数据用于训练,剩下20%的数据用于CNN模型验证。

其中,get_cnn_model使用了python的TensorFlow库tflearn,其代码如下:

在上述模型中,为了进行数据降维先加入了embedding层,其本质和word2vec一样,因为在DNS 隐蔽通道的子域名中包含了大量的字符而导致数据输入维度过高,代码中output_dim=64表示将数据输入降低维度到64维。接下来我们使用一维的卷积函数 conv_1d处理DNS子域名片段,提炼高级特征进一步分析。由于典型的一维卷积函数处理文字片段的大小通常为3、4、5,我们也使用这些典型参数。此外,模型中加入了dropout,用于防止过拟合。

获取黑白样本数据的代码如下,其中包括对原始的子域名字符进行字典编码(先得到黑白样本所有子域名字符集合),并使用pad_sequences函数按照固定长度进行子域名长度对齐操作(因CNN要求各样本数据输入维度一致,而某些子域名很短,某些子域名很长, pad_sequences将短的子域名采用特殊数字进行填充补齐,使它们长度一致):

其中,get_local_data主要是从样本文件中提取DNS子域名。

核心代码讲解完毕,开始进行模型训练。在我的个人电脑上,算法运行时间大概17小时,最后的结果如下:

可以看到算法迭代了10次,每次训练时间一个多小时,最终的检测精度在99.53%,使用CNN进行DNS隐蔽通道的检测效果初步看来还不错。但是,因为训练样本和测试样本的内在数据分布规律是相同的,该精度再高也可能存在一定的过拟合风险。下面我们利用前段时间著名的XShell DNS隐蔽通道攻击来评估算法的检测能力。

验证XShell的检测效果

我们尝试用训练出的算法检测前段时间著名的XShell隐蔽通道攻击,其进行攻击的域名为nylalobghyhirgh.com,将包含该攻击的DNS样本加入到模型预测中:

运行后得到的检测准确率为97.3%,也就意味着nylalobghyhirgh.com下97.3%的子域名都可能是在利用DNS隐蔽通道传输数据。

上述验证表明,使用CNN可以有效地检测DNS隐蔽通道。当然,最终的检测准确率还需在真实而复杂的网络环境中长期运行观察而定。

结语

本文只是AI安全初探的一次尝试,大致说明了使用深度学习算法CNN进行安全检测的基本流程,文中有写得不明白的地方,欢迎大家留言一起探讨。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏图形学与OpenGL

实验四 二维几何变换

12120
来自专栏机器之心

教程 | 如何利用TensorFlow.js部署简单的AI版「你画我猜」图像识别应用

我们将使用卷积神经网络(CNN)来识别不同类型的手绘图像。这个卷积神经网络将在 Quick Draw 数据集(https://github.com/google...

40040
来自专栏专知

【前沿】见人识面,TensorFlow实现人脸性别/年龄识别

【导读】近期,浙江大学学生Boyuan Jiang使用TensorFlow实现了一个人脸年龄和性别识别的工具,首先使用dlib来检测和对齐图片中的人脸,然后使用...

1.9K60
来自专栏深度学习那些事儿

TensorFlow中滑动平均模型介绍

其中a的取值范围[0,1],具体就是:本次滤波结果=(1-a)*本次采样值+a*上次滤波结果,采用此算法的目的是:

57490
来自专栏文武兼修ing——机器学习与IC设计

harr特征加级联分类器的目标检测系统1.识别系统架构2.训练方法3.加速方法4.代码实践参考文献

21630
来自专栏ATYUN订阅号

在Keras中展示深度学习模式的训练历史记录

通过观察神经网络和深度学习模型在训练期间的表现,你可以得知很多有用的信息。 Keras是Python中强大的库,为创建深度学习模型提供了一个简单的接口,并包装了...

68390
来自专栏AI科技大本营的专栏

OpenCV特征提取与图像检索实现(附代码)

翻译 | AI科技大本营 参与 | 张蔚敏 审校 | reason_W “拍立淘”“一键识花”“街景匹配”……不知道大家在使用这些神奇的功能的时候,有没有好奇过...

81660
来自专栏人工智能头条

模仿人类智慧——“多任务学习”动手实践

11030
来自专栏云时之间

对于问题的简单定义

学习此部分的目的:发现在没有单独的行动可以解决问题的时候,机器如何找到一个行动序列达到他的目标;在这部分中,通过讨论一些无信息的通用搜索算法,来比较各部分算法的...

30950
来自专栏祥子的故事

tensorflow | 随机数

76180

扫码关注云+社区

领取腾讯云代金券