基于深度学习的恶意DGA域名检测

2021-03-23 09:38王志强李舒豪池亚平张健毅
计算机工程与设计 2021年3期
关键词:域名字符卷积

王志强,李舒豪,池亚平+,张健毅

(1.北京电子科技学院 网络空间安全系,北京 100070;2.国家信息中心 博士后科研工作站,北京 100045;3.公安部第三研究所 信息网络安全重点实验室,北京 100741)

0 引 言

Yu B等[1]指出,黑客通过域名产生算法(domain gene-ration algorithm,DGA)产生DGA恶意域名,窃取用户主机上的个人信息和商业机密。目前主要使用深度学习来检测DGA域名。如Woodbridge J等[2]和Bharathi B等[3]使用了循环神经网络(recurrent neural network,RNN)中的长短期记忆网络(long short-term memory,LSTM)对域名进行检测。Saxe J等[4]使用了卷积神经网络(convolutional neural network,CNN)结构进行检测。Dhingra B等[5]同时使用双向LSTM检测。Vosoughi S等[6]和刘洋等[7]将层叠CNN结构与LSTM结构进行结合。Zhang X等[8]单独使用了层叠CNN结构。裴兰珍等[9]将CNN结构与门控循环单元结合。基于深度学习的检测方法使用深度学习网络进行特征的自动提取。但是缺乏对词组信息的分析,无法提取更深层次的信息。左雯[10]设计了基于关键词的恶意域名检测模型,结合词嵌入技术与GRU模型进行检测。杨路辉等[11]改进了检测算法,在CNN结构上增加了提取深层字符级特征的卷积分支。该类方法在提取域名特征方法存在不足,难以同时提取字符和词组中包含的特征。Le H等[12]结合了字符嵌入与词嵌入技术,在向量嵌入阶段改进了词嵌入方式,同时提取域名的字符与词组的特征。其使用固定的CNN结构对域名进行检测,无法根据输入向量的维度调整模型参数,很难在大范围内提取深层特征。在此基础上,本文研究域名的嵌入表示方法,提取域名携带的深层次信息,并且设计检测网络结构,旨在根据输入数据动态调整网络参数,从而获得更优的检测效果。

1 域名检测研究

在当前网络空间安全形势下,黑客往往使用域名产生算法获取大量恶意域名,通过这些恶意域名与命令控制中心进行通信,从而窃取受感染主机的信息,导致用户财产受到损失。随机产生的恶意域名有效避开了基于“黑名单”的传统检测方法,传统的检测方法难以及时维护,在当前网络空间形势下不再适用。因此,如何有效地识别和检测此类恶意域名成为网络安全领域的研究重点。目前针对恶意域名的检测方法大致可以分为两类,分别是传统机器学习检测方法和基于深度学习的检测方法。传统机器学习方法需要对特征进行人工选取,依赖于专家的经验,黑客可以巧妙地修改域名中某些字段的信息来规避该检测方法。并且该方法在更新维护方面存在局限性,难以适用于当前复杂多变的网络场景。

针对上述问题,本文在现有的深度学习架构上,提出了基于动态卷积算法(dynamic convolutional neural network,DCNN)的检测方法。深度卷积模型是指将经典的卷积层进行层叠排布,使用多层卷积对数据进行处理,挖掘深层次的有用信息。本文使用的基于DCNN的检测模型整体架构如图1所示。因为待检测域名中包含的字符数较少,区别于文本信息,因此本文适当缩减了卷积层的个数,在整个检测模型中使用了两层卷积层。这样做一方面可以简化检测模型,另一方面可以缩减模型训练时间。首先,输入的域名经过预处理后,输入到嵌入层,得到适合的向量表示。然后,这些向量在动态卷积层中训练。动态卷积层包含两层卷积层以及折叠层和池化层。最后,数据经过一层全连接层,得到检测结果。本章将介绍实验中涉及到的数据预处理和向量嵌入方案。

图1 基于DCNN的检测模型

1.1 数据预处理

基于深度学习的检测技术无需手动提取特征,仅以域名作为输入。域名在训练之前,需要经过以下预处理过程:首先移除整个数据集中重复的域名和非法域名,其次将域名中包含的字符串转换为小写字母。对每条域名的标签使用“独热编码”,即恶意域名编码为“10”,正常域名编码为“01”。对于域名中包含的字符串,根据嵌入方式的不同,进行不同的后续处理。

如果采用字符嵌入作为向量嵌入方法,则需要将每个字符替换为相对应的ASCII码(American standard code for information interchange)。如果采用词嵌入的方式,需要对域名中的字符串进行分词,用分割后的单词建立一个字典,最后将域名字符串中包含的单词替换为字典中相对应的索引。上述步骤完成以后,需要对得到的域名向量进行填充或者截短,使每条代表域名的向量保持相同的长度。

1.2 嵌入方式

(1)字符级别嵌入与单词级别嵌入

嵌入方式是自然语言处理中的一个基本概念,是指将域名中包含的原始字符串通过特定的方式,映射为多维向量,深度学习模型使用嵌入后得到的向量进行训练。本文使用了卷积神经网络,卷积神经网络从域名的字符级别或单词级别的嵌入向量中学习有用信息。

如果使用字符级别的嵌入方式,需要先识别域名中包含的所有字符,不妨设每条域名包含长度为L1的字符,对于长度不足或超过L1的域名使用0进行填充或截短,每个字符转换成一个k维的向量。每个字符的向量表示使用随机数进行初始化,在训练的过程中学习得到。字符的向量表示存储在字符嵌入矩阵EMc∈RM×k,其中M表示训练数据集中出现的所有字符数,字符嵌入矩阵中每行表示一个字符的向量表示。通过上述操作,一条包含L1个字符的域名d转换成一个L1行k列的矩阵,即d→DNc∈RL1×k。

如果使用单词级别的嵌入,首先需要识别域名中包含的所有单词,单词的个数取决于数据集的大小。不妨设每条域名包含L2个单词,对于长度不足或超过L2的域名,使用进行填充或截短。和字符嵌入类似,每个单词将被转换成一个k维的向量。每个单词的向量表示使用随机数进行初始化,随后在训练的过程中学习得到。单词的向量表示存储在单词嵌入矩阵EMw∈RM′×k,M′表示训练数据集中出现的所有单词数,单词嵌入矩阵中每行即是一个单词的向量表示。通过上述操作,一条包含L2个单词的域名d转换成一个L2行k列的矩阵,d→DNw∈RL2×k。

(2)基于字符嵌入的高级词嵌入

本文借鉴了Le H等[12]的研究方法,使用了高级词嵌入技术,其结合了字符嵌入和词嵌入的优点,在此基础上进行了改进,主要体现在两方面。

1)将域名包含的特殊字符视为一个单词进行处理。这样做的原因是,域名中频繁出现的特殊字符,往往包含一些有用信息,这些信息可以用作判断域名是否恶意。

2)上述词嵌入方法在遇到训练集之外的新词时无法进行嵌入,因此无法获得训练集中新词的信息。为了解决这个问题,基于字符嵌入的高级词嵌入除了获取词嵌入表示,另外获取了每个词中包含的字符嵌入表示。具体来说,高级词嵌入方法获取词嵌入矩阵EMw∈RL2×k和字符嵌入矩阵EMc∈RL1×k,获取矩阵EMc是为了更有效提取单词中包含的有用信息。当对一条域名进行检测时,首先通过EMw获取该域名的词嵌入表示DNw∈RL2×k。 不妨设每个单词包含L3个字符,使用EMc将每个单词表示为一个L3×k的矩阵,将这个矩阵逐行相加,得到1×k的向量。上述操作应用到域名包含的L2个单词上,最终得到该域名字符级别的词嵌入表示DNcw∈RL2×k。 域名的最终表示为两个矩阵之和,即DNw+DNcw。 基于字符嵌入的高级词嵌入的示例如图2所示,为说明问题,此处设每条域名包含8个词,每个词包含5个字符,1个字符嵌入后得到1×5的向量,1个词嵌入后同样得到1×5的向量。高级词嵌入包含两个分支。第一个分支是词嵌入,通过词嵌入矩阵,每条域名经嵌入后得到8×5的矩阵。第二个分支是字符嵌入,因为词包含5个字符,每个词经字符嵌入矩阵得到 5×5 的矩阵。又因为一条域名中包含8个词,所以得到 8×5×5 的矩阵。通过将5个矩阵对应行相加,得到8×5的基于字符的词嵌入矩阵。最后将词嵌入矩阵和基于字符的词嵌入矩阵相加,得到最终表示。高级词嵌入方法有助于获取测试集中新词的有用信息,有效提升检测效果。

图2 基于字符嵌入的高级词嵌入示例

2 神经网络模型

2.1 卷积神经网络

卷积神经网络原本被用于图像处理领域,用来处理输入的像素信息,识别图像模式。后来一维卷积网络被用于字符级别的文本分类问题。研究人员提出了用于处理自然语言信息的卷积神经网络结构。该网络结构包含6个层叠排布的卷积层。因为相对于自然语言,域名长度较短,并且不包含完整语法结构,因此本文将层叠的卷积层结构缩短至2层,减少每层卷积包含的卷积核数量。

2.2 动态卷积神经网络

本小节描述本文使用的动态卷积算法,用于DGA恶意域名的检测。本文对传统的深度卷积结构进行改进,新增加了折叠层,并且将池化层替换为动态k值池化和最大ktop值池化。动态卷积算法由以下几个部分组成,分别是卷积层、折叠层、动态k值池化层、最大ktop值池化层、全连接层。动态卷积神经网络的结构示例如图3所示,为便于说明,设嵌入层维度是4,该网络包含两层卷积,每层卷积有两个特征映射。第一层卷积使用宽度为3的卷积核,第二层卷积使用宽度为2的卷积核。两个池化层中的k值分别取5和3。

图3 动态卷积网络结构示例

(1)卷积层

卷积层对输入的数据进行卷积运算,从中提取出有用的信息。输入矩阵u∈Rd×s,其中s代表每条域名的长度,d代表每个单词嵌入后的维度。若使用一维卷积,需训练的参数矩阵为v∈Rd×m,m代表卷积核宽度。输出矩阵c的维度是d×(s+m-1)。 若使用二维卷积,需训练的参数矩阵为v′∈Rd×m,m代表卷积核宽度。输出矩阵c′的维度是d×(s+m-1)×n,n代表卷积核数目。

(2)折叠层

折叠层对上一层输出的稀疏矩阵进行处理。本文使用一种简单的方法,将矩阵进行折叠。具体来讲,就是将矩阵的相邻两行进行相加,原本d行的矩阵通过折叠后变为d/2行。这种方法无需引入参数,缩减了矩阵的大小,将稀疏矩阵变为稠密矩阵。

(3)动态k值池化

动态k值池化中,k值是一个函数,与输入字符串长度和网络深度有关。本文选取以下函数对k值进行计算

(1)

(4)最大ktop值池化

对一个长度为p的序列q∈Rp,最大ktop值池化选取序列q中最大的ktop个值为子序列,子序列中元素的顺序对应原序列q中的顺序。ktop值是固定的超参数,按照经验,ktop值取为4。最大ktop值池化提取出不同位置的ktop个最具代表性的特征,并且保持特征的顺序不变。最大ktop值池化应用于动态卷积神经网络的最后一层,使得动态卷积网络的输出与输入的字符串长度无关。卷积处理完毕后,将数据输入全连接层进行训练,最后输出结果。

3 实验结果与分析

本文收集了Bambenek网站2019年5月16日当天约83万条DGA恶意域名,这些恶意域名来源于现实网络。由于这些恶意域名中包含部分被错误判断的正常域名,可能影响模型训练效果,因此本文从中选取了前30万条高可信度DGA恶意域名用于训练,另外选取7.5万条恶意域名用于验证与测试。另外,本文收集了Alexa网站2019年5月17日公布的排名前100万的域名作为正常域名。Alexa从网站访问量及访问次数等方面对域名进行综合排名,其中包含了该网站的顶级域名和次级域名。在实验中,本文从中挑选了与恶意域名数目相当的前30万条正常域名用于训练,另外选取7.5万条正常域名用于验证与测试。本文随机划分收集到的数据集,将80%的数据用于训练,10%的数据用于训练过程中进行验证,10%的数据用于最终测试。数据集划分见表1,本文总共使用75万条域名进行训练。其中训练集占80%。验证集和测试集各占10%。本次实验所使用环境配置见表2。

表1 数据集划分

表2 实验环境配置

在以下实验中,本文将数据集分为多个批次进行训练,每个批次包含100条域名,总共训练10轮。其它的实验参数分别是:根据不同的实验,每条域名填充后的长度设为75,向量嵌入维度设为32。第一层卷积核的宽度设为3,第二层卷积核的宽度设为2。另外,本文使用了Adam(adaptive moment estimation)算法进行学习和计算网络结构的各层参数。

为了说明基于DCNN的检测方法的检测效果,本文使用了常规的深度卷积方法作为对比实验。深度卷积方法使用常规的词嵌入方法,以及层叠CNN结构。本文以精度(accuracy)、F1度量(F1-score)、查准率(precision)、查全率(recall)作为衡量训练模型的指标,各个指标的计算见式(2)~式(5)。其中,TP(true positive)指测试集中被预测为正例,实际为正例的样本总数;FP(false positive)指测试集中被预测为正例,实际为反例的样本总数;TN(true negative)指测试集中被预测为反例,实际为反例的样本总数;FN(false negative)指测试集中被预测为反例,实际为正例的样本总数。为了直观的对实验进行比较,本文绘制了ROC曲线(receiver operating characteristic)进行对比,并且计算了AUC值(area under ROC curve)。ROC曲线以FPR(false positive rate)为横轴,TPR(true positive rate)为纵轴,曲线整体越靠近坐标(0,1)点,代表检测的效果越好。AUC值代表ROC曲线下的面积,AUC值越大,说明分类器效果更好

(2)

(3)

(4)

(5)

本文提出的基于DCNN的检测方法使用了高级词嵌入和动态卷积网络,其实验结果见表3。改进前的深度卷积方法作为对比,其实验结果见表4。从实验结果中可以看出,基于DCNN的检测方法的各方面性能指标均优于现有的深度卷积方法,检测精度从0.826提升至0.957。另外,为直观的阐述基于DCNN的检测方法的优势,本文对比了两种方法的ROC曲线和AUC值,如图4所示。实验结果表明,相较于现有的深度卷积方法,基于DCNN的检测方法AUC值有所提高,并获得了较好的检测效果。

表3 基于DCNN的检测方法实验结果

表4 改进前的深度卷积方法实验结果

图4 ROC曲线与AUC值对比

4 结束语

本文基于深度学习网络研究了DGA恶意域名检测,在现有的研究基础上,提出了基于DCNN的DGA域名检测方案,并使用现实网络中收集的70余万条域名,在此基础上对模型进行训练与测试。实验结果表明,基于动态卷积算法的检测方法能够达到95.7%的精度,验证了方案的可行性。综上,本文的主要贡献如下:①在检测DGA域名的向量嵌入阶段,本文采用了基于字符嵌入的高级词嵌入方法,与单一的词嵌入方法相比,高级嵌入方法可以更有效表示域名,有助于提取域名中的信息;②在深度学习架构的基础上,本文借鉴自然语言处理中的动态卷积思想,针对DGA域名检测重新设计了动态卷积算法,该算法能够更有效识别恶意域名;③本文使用现实网络中收集的大量域名数据对模型进行了训练,对比了现有深度学习方法与本文使用的基于DCNN的检测方法的性能,分析了两种方法的多个检测指标,直观地阐述了基于DCNN的检测方法具有的优势。实验结果表明,相较于现有的深度学习方法,基于DCNN的检测方法能够提升DGA恶意域名的检测效果。

实验结果表明,相较于现有的深度学习方法,基于DCNN的检测方法可以获得更好的检测指标,提升检测效果。通过实验,可以得出如下结论,一方面对于类似域名的短小字符串,高级词嵌入方法能够更好进行向量表示;另一方面,动态卷积网络中的参数是根据输入字符串长度和网络深度动态选择得到,这样有利于在更大范围内提取更深层的特征,提升模型训练效果。

本文未来的工作将集中于域名检测的多分类问题。另外,DGA域名仅仅包含顶级域名和二级域名,具有少量的字符,基于词嵌入的复杂网络结构未能充分发挥其提取深层次特征的优势。相对于DGA域名,URL包含丰富的字符和词组,深度学习可以充分提取有用信息。检测DGA恶意域名的方法可以应用于检测恶意URL。所以,对恶意URL的检测也是本文未来的一个研究方向。

猜你喜欢
域名字符卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
字符代表几
一种USB接口字符液晶控制器设计
从滤波器理解卷积
HBM电子称与西门子S7-200系列PLC自由口通讯
Combosquatting域名抢注的测量研究
消失的殖民村庄和神秘字符
基于傅里叶域卷积表示的目标跟踪算法
如何购买WordPress网站域名及绑定域名
一种基于卷积神经网络的性别识别方法