APP下载

基于Deep-IndRNN的DGA域名检测方法

2020-04-10刘伯成王浩宇李向军肖聚鑫肖楚霁

南昌大学学报(理科版) 2020年6期
关键词:域名字符准确率

刘伯成,王浩宇,李向军,*,肖聚鑫,肖楚霁,孔 珂

(南昌大学a.软件学院,江西 南昌 330047;b.计算机科学与技术系,江西 南昌 330031)

随着互联网技术的快速发展,网络已经服务于在各个行业,域名的数量更是与日俱增,恶意域名的检测变得愈来愈困难且更加重要。域名生成算法(Domain Generation Algorithm,DGA)常常被恶意软件利用,以提高其与C&C服务器的通信可靠度,从而避免常规的黑名单检测。由此可见,DGA域名是恶意软件的重要特征之一,通过对这一特征的有效分析、检测,及时准确地确定恶意软件也成为保证C&C服务器正常通信的重要环节。通信安全检测能力的提升对于构建稳定、安全的网络空间也极具现实意义。

DGA检测初期,安全工作人员通常采用的方法是基于黑名单过滤[1],机器学习、特征统计[2-8]等方法。这些方法往往存在一定的弊端,黑名单过滤方法虽准确率较高,但需要人工对黑名单之外的DGA域名补充,难以解决DGA域名飞速增长带来的问题;机器学习检测需通过技术人员实验构造特征值,采用相应的机器学习方法设计检测算法,实现对未知DGA域名的检测,但存在人工提取特征工程量大且无法准确提取所需全部特征、检测速度慢、检测率低等问题。针对以上问题,研究人员采用深度学习[9]的方法对DGA域名检测,深度学习具有训练数据量大、无需人工提取特征,在图像识别、语音识别、自然语言处理等多种应用场景都有显著的成效。

基于深度学习的DGA域名检测成为一种新的主流方法[10-15],研究者大多选择循环神经网络(Recurrent Neural Network,RNN)用于DGA域名检测,例如长短期记忆网络(Long Short-Term Memory,LSTM)、双向长短期记忆网络(Bi-directional Long Short-Term Memory,BiLSTM)等,这些方法可将域名序列化分类。对于LSTM而言,随着网络层数的增加,检测准确率随之增高,但训练与检测速度会大幅降低。独立循环神经网络[16](Independently Recurrent Neural Network,IndRNN),在能够解决传统 RNN 时间步长过长时的梯度消失和梯度爆炸问题基础上学习长期依赖关系[17],因其独立神经元的结构,当堆叠多层IndRNNs形成深度IndRNN (Deep Independently Recurrent Neural Network,Deep-IndRNN)时也可进行端到端的训练。基于此,本文提出一种基于Deep-IndRNN的DGA域名检测方法。

本文主要贡献:将IndRNN用于DGA域名检测,充分利用Deep-IndRNN的特点并结合单步处理拼接后单向量的方式,提出一种基于Deep-IndRNN的DGA域名检测方法。方法包括域名分析、域名向量化、上下文信息提取、分类输出等四个步骤。首先采用词袋模型对域名向量化,然后通过Deep-IndRNN提取域名字符上下文信息特征,同时将Deep-IndRNN多序列输入拼接为单向量输入,以单步处理代替循环处理,最后,使用Sigmoid分类函数对域名分类检测。平衡数据集和非平衡数据集上的实验结果表明,本文方法在保证DGA域名检测准确率和精确度较高的前提下,训练和检测速度有显著提高。

1 相关工作

DGA恶意域名的检测问题已经上升到国家安全层面,国内外研究人员从最初的黑名单筛选,分析DNS查询数据,机器学习特征分类到现如今的基于深度学习的神经网络模型预测等,提出了众多的检测方法。其中Sato等[1]设计了一种使用DNS流量数据和黑名单检测未知恶意域名方法。Lee等[2]提出DNS失败图概念,检查访问已知恶意域名的客户端的DNS查询信息,通过与已知恶意域名的顺序关系和统计共性找到未知的恶意域名。Bilge等[3]基于决策树算法,通过提取DNS流量中的时间属性、request及response信息、TTL信息、DNS域名信息等15个特征判别僵尸网络[18]。Grill等[4]提出一种统计算法,用收集来的NetFlow/IPFIX统计数据来检测DGA域名。Antonakakis等[5]发现具有相同的DGA算法的域名产生类似的NXDomain,提出一种基于NXDomain特性聚类和分类的检测算法,聚类算法根据域名构成和相似性对域名聚类,分类算法利用生成的簇给已知DGA域名分类检测,对于未被分到已知簇的域名,可以推测为一种新型的DGA恶意域名。相比于整个DNS查询流量,NXDomain流量要小很多,因此轻量级的NXDomain特性检测算法的检测速度更快,但是该算法在实际应用时需要一个较大时间窗口的统计信息,无法做到实时检测。

为方便记忆,通常选择英文单词作为合法域名的主体,如“youtobe.com”,“weiko.com”等,而DGA域名为了避免与合法域名冲突,域名字符明显带有随机性。利用DGA域名与合法域名之间的语言特征来分类域名成为检测DGA域名的新研究方向[15]。Yadav等[6]分析了域名中字母数据unigrams和bigrams分别的信息熵,通过将训练集分为DGA生成集和合法域名集,计算两个集合中unigrams和bigrams的分布,再通过比较两个集合的KL达到分类效果。Tong等[7]利用n-gram出现的频率、熵和分类得到的马氏距离等域名自身的语义统计测度对DGA域名进行检测。张维维等[8]提出一种轻量级检测算法,通过提取域名字符蕴含的词素特征,在降低内存开销的基础上能够快速准确锁定可疑域名。上述的研究均需要手工提取特征,对于不同类型的DGA要提取不同特征,否则就会存在统计信息不显著的问题。特征工程是一项十分困难的工作,并且很难保证提取的特征是确切需要的,所以上述的检测方法准确率也是相对较低。

近几年,随着DGA生成算法的不断改进,生成的恶意域名也不再是一串简单错乱的随机字符,反而越来越“像”合法域名,而上述的检测方法都是基于恶意域名和合法域名之间存在较明显的语言特征差异,故无法有效检测现阶段恶意域名。深度学习在计算机视觉,自然语言处理等方面取得了显著的效果,从自然语言角度展开对DGA域名检测成为热门的检测方法。Woodbridge等[11]利用词嵌入技术将域名字符转换为向量,然后再使用长短期记忆神经网络LSTM对域名进行分类。LSTM可以很好的学习到字符间前后信息(要在一串字符完全输入情况下),因此Woodbridge所提出方法无需人工提取特征,便可准确的对DGA域名分类。林思明等[12]提出一种基于BiLSTM的检测方法,BiLSTM同时考虑域名的过去特征和未来特征,通过将两个LSTM的正反向序列提取的上下文信息结合来分类检测DGA域名,进一步提高分类检测准确度。刘洋等[13]提出一种基于深度学习的快速DGA域名分类算法,利用多层一维卷积网络提取域名局部信息特征,再与LSTM提取到域名上下文信息特征融合,将LSTM多序列输入转化为单向量输入,进一步提高训练和检测速度。

2 基于Deep-IndRNN的DGA域名检测方法

基于Deep-IndRNN的DGA域名检测方法包括域名分析、域名向量化、上下文信息提取、分类输出等四个步骤。方法实现过程将Deep-IndRNN多序列输入拼接为单向量输入,以单步处理代替循环处理,并充分利用Deep-IndRNN能保留长期记忆、有效解决梯度爆炸、多层IndRNNs可有效堆叠并与剩余连接性能较好等优势,从而保证检测准确率较高的基础上,提升训练、检测速度。

2.1 域名分析

完整的域名通常由两个或者两个以上的部分组成,各个部分以英文字符‘·’分隔开。例如“www.csdn.net”、“www.taobao.com”中“net,com”是顶级域名,“csdn,taobao”是二级域名,以此类推在其他域名中还会存在三级、四级域名。DGA域名主要是作为除顶级外的其他级别域名使用,所以将除顶级外其他级别域名作为本文方法的训练数据(如无特别说明,后面所指域名均为除顶级外其他级别域名)。

2.2 域名向量化

将域名作为模型输入前需将域名向量化,常见的向量化方法包括词袋模型(Bag-of-Words,BoW)、独热(One-Hot)编码、n元语法(n-gram)等多种编码方式。n-gram在早期的自然语言处理中常见,但在使用较大的n时会导致向量空间过大,无法使用的同时会造成数据稀疏等问题。BoW[19]可以理解为一种直方图统计,只记录了字符串中出现的字符,而忽略字符串中的语法和语序等要素,只是作为若干词汇的集合。本文研究中通过统计数据集所有的字符生成字符字典,以键值对(字符:数字)形式存储,如表1所示:

使用字符字典将域名字符串转换为L长的字符向量,L是数据集中最长域名长度,本文设置为59。对于向量长度不足L的在向量前填充 0,以保证模型输入形状统一,字符向量化结果如表2所示:

2.4 上下文信息提取

合法域名和DGA域名都是由n个字符组成的字符串,也是自然语言的一种表现形式。形式虽然自由,但从合法域名和DGA域名在字符排列有序性上的差异可以看出其结构上仍存在上下文关系,在大量数据的比对下能够很准确的发现两者存在语言特征差异[20]。

将转化后的字符向量输入词嵌入层(Embedding)映射输出字符向量序列w1:L=w1,w2,w3,…,w4其中wL∈Rd,d为嵌入层维度,本文研究中设置d为128以保留足够的上下文信息,便于后续提取信息特征。

表1 字符字典

表2 字符向量化结果

经典的RNN在自然语言处理中能够很好的做到保留上下文信息,但RNN在训练学习时随着时间增加、输入数据的增多,对已往信息感知能力下降,产生梯度消失或者梯度爆炸问题[21]。IndRNN不仅可以解决经典的RNN存在的上述问题,同时使用非饱和激活函数ReLU,训练之后的性能表现良好[17]。

IndRNN中哈达玛积(Hadamard)信息流处理具体计算公式如式(1)所示:

ht=σ(Wxt+u⊙ht-1+b)

(1)

其中xt∈RM和ht∈RN分别代表时间步长为t时的输入和隐藏状态;循环权重u是一个向量;⊙表示Hadamard乘积;σ为激活函数。在t时刻,每个神经元只接受此刻的输入以及将t-1时刻自身的状态作为输入。对于第n个神经元,hn,t隐藏状态计算公式如式(2)所示:

hn,t=σ(wnxt+unhn,t-1+bt)

(2)

其中wn和un分别是第n行的输入权重和循环权重。处于同层的神经元相对独立,通过堆叠多层的IndRNNs来实现神经元之间的连接,因其特殊的结构使得每个神经元仅在前一时间步从输入和它自己的隐藏状态中接收信息,这是一种每个神经元相对独立的信息处理时空模型。

对于每一层的梯度反向传播,一个IndRNN的梯度可以独立计算每个神经元,因为它们之间没有相互作用。在忽略第n个神经元hn,t中偏置的情况下,假设其在时间步长T最小的目标是Jn,梯度反向传播到时间步t为:

(3)

基础的IndRNN结构如图1所示:

其中Weight和Recurrent+ReLU表示每一步处理输入的循环过程,ReLU是激活函数。另外,在激活函数之前或之后也可采用批标准化BN。通过堆叠这种基础结构,可以创建一个深层IndRNN网络,同一层中的神经元彼此独立,神经元之间的相互依赖可以靠层间交互来完成。即下一层的神经元会接受上一层所有神经元的输出作为输入(相当于全连接层)。随着时间步的增加,提取到的信息在多层IndRNNs之间高效传播,从而保留更长时间的上下文信息,且输入(Wxt+b)的处理在不同的时间步上是独立的,可以扩展到一个卷积的IndRNN,通过卷积运算处理(W*xt,*为卷积运算符),而不是使用全连接的权重(Wxt)来处理每个时间步骤的输入。

由上述分析以及文献[16]中实验结果可知,IndRNN解决了梯度随时间推移而爆炸和消失的问题,可以在不同的时间步长上有效地传播梯度,因此,Deep-IndRNN能够提取到更长时间的上下文信息。

hf,t=σ(WfXt+uf⊙hf,t-1+bf)

(4)

hs,t=σ(Wshf,t+us⊙hs,t-1+bs)

(5)

hd,t=σ(Wdhs,t+ud⊙hd,t-1+bd)

(6)

随着时间步长t的增加,Deep-IndRNN不断将当前输入及上一时刻的自身状态同时作为输入,得到的信息在多层IndRNNs之间传播保留,从而提取到丰富的上下文信息特征,以实现域名分类。

2.4 域名分类

基于Deep-IndRNN的DGA域名检测方法是一种通过提取域名字符间特征来实现域名分类的检测方法。域名分类过程如图2所示:

由图2可见,基于Deep-IndRNN的DGA域名分类主要步骤包括:

(1) 域名向量化:根据数据集中所有域名包含的字符生成字符字典,利用此字典将域名转换为字符向量作为训练输入,具体操作见2.2节。

(2) Embedding层:嵌入层,利用字符字典对字符向量编码,映射成字符向量序列w1:L,生成式如式(7)所示:

w1:L=w1,w2,w3…,wL

(7)

L是输入向量长度,本文为59;w1,w2,w3…,wL是域名中每个字符映射的字符向量,其中wL∈Rd,d为嵌入层维度,本文设置为128;嵌入层输出w1:L是根据字符字典生成大小为(L,d)的字符向量序列。同时,本层在学习训练时可设置屏蔽字符向量因长度不足而填补的0值。

(3) Flatten层:将嵌入层映射得到的w1:L拼接成单向量X,拼接过程如式(8)所示:

X=⊕(w1:L)

(8)

⊕是拼接操作符,将w1:L转换为大小(1,L*d)的单向量,使得Deep-IndRNN在提取上下文信息时采用单步处理,提高训练、检测速率。

(4) IndRNNs层:多层IndRNN堆积而成的Deep-IndRNN,本文方法堆积3层IndRNN,隐层大小均为128,默认使用ReLU激活函数。IndRNN的输入是三维张量(单个数据必须是二维),因此无法将Flatten层输出直接作为本层的输入,于是采用Keras中的Lambda方法对上层输出增维,增维公式如式(9)所示:

X=Lambda(expand_dims(X))

(9)

最后通过隐藏层提取域名上下文信息特征以式(10)形式输出,具体提取过程见2.3节。

ht=Deep-IndRNN(Xt)

(10)

Xt表示时间步长为t时的Deep-IndRNN输入;ht表示时间步长为t时的Deep-IndRNN输出。

(5) Dense层:全连接层,与Deep-IndRNN中第三层的全部神经元连接,实现特征的非线性组合。同时,在Dense与Deep-IndRNN之间使用正则化方法-随机失活(Dropout),暂时丢弃一部分神经元及其连接来控制过拟合问题,本文将神经元被丢弃概率设置为0.5[14]。

(6) 输出:最终模型的输出是从全连接层直接输入到二分类函数Sigmoid。模型输出如式(11)所示,分类函数Sigmoid如式(12)所示:

(11)

(12)

在模型训练过程中使用二元交叉熵作为评价分类结果的损失函数,二元交叉熵计算公式如式(13)所示:

(13)

向量y为实际目标值,DGA恶意域名为1、合法域名为0。同时,使用Adam优化算法最小化损失函数,提高模型性能。

给定n个长度为L的域名,d为嵌入层维度,h为隐层大小,本文方法的时间复杂度分析如下:

(1) 域名向量化:此阶段将域名转换成固定长度L=59的向量,故T(n)=O(n*L)=O(n);

(2) Embedding层:将域名向量映射成向量序列,映射方式为矩阵相乘且仅进行一次,其中d=128,故T(n)=O(n*1*L*d)=O(n);

(3) Flatten层:将大小为(n,L,d)向量序列拼接成单向量,T(n)=O(n*L*d)=O(n);

(4) IndRNNs层:n个单向量通过三层的IndRNN,每一层的计算方式与输入、隐藏及输出大小有关,且仅进行一次,其中h=128,故T(n)=O(n*(8h2+(L*d)h))=O(n);

(5) Dense层以及输出:将每个输入都执行h*1次公式(10),故T(n)=O(n*h*1*Sigmoid)=O(n);

除域名向量化外,其他过程均属于神经网络的前向传播过程,且模型参数均已设定为常数,在不考虑机器的计算能力影响下,本方法的计算复杂度仅和样本数量n相关,最好情况最坏情况的时间复杂度T(n)=O(5n)=O(n);

综上,本文提出方法只需要将域名转化为固定长度的向量后作为模型输入,再依据训练后模型中保存的权重计算便可得到分类检测结果,相比传统的检测方法更为合理。

3 实验结果与分析

3.1 实验环境

本文使用Python作为开发语言,深度模型基于Keras、Tensorflow框架搭建。具体实验环境如表3所示:

3.2 实验数据

本文研究中,从Netlab360(http://data.n-etlab.360.com/feeds/dga/dga.txt.)获取90 wDGA域名,从Alexa(https://www.alexa.com /topsites)获取90 w合法域名,将DGA域名标记为1,合法域名标记为0,共180 w域名及标签形成平衡数据集其中训练集与测试集比例4:1非平衡数据集合法域名与DGA域名比例5:1,共60w,也按4:1比例划分训练集与测试集。数据集中部分合法域名、DGA域名样例如表4所示:

表3 实验环境

表4 数据集部分样例

3.2 评价指标

根据实验目标设计,选取了准确率(Accuracy)、精确度(Precision)、召回率(Recall)、综合评价(F1)、ROC(Receiver Operating Characteristic)曲线、AUC(Area Under Curve)值、训练时间(Train Time,TT)、测试时间(Predict Time,PT)等8个评价指标检验方法的有效性和性能,采用了均值(Mean Value,简记为M)与方差(Variance,简记为S2)2个统计指标来分析实验数据。相关指标的计算公式如式 (14)~(20) 所示。

True Positive(TP):预测为正例,实际为正例。

False Positive(FP):预测为正例,实际为负例。

True Negative(TN):预测为负例,实际为负例。

False Negative(FN):预测为负例,实际为正例。

(14)

(15)

(16)

(17)

(18)

(19)

ROC曲线是假正率(FPR)和真正率(TPR)为轴的曲线,实现了对FPR和TPR的权衡度量。其中TPR=Recall,计算公式如式(16)所示,FPR计算公式如式(20)所示:

(20)

ROC是通过分类器返回分数在不同阙值下计算TPR和FPR进行评估而产生的。将一系列的点对连接成平滑的曲线,就是ROC曲线。AUC是比较ROC曲线的常用度量,常用于二分类评价,其数值是ROC曲线下面积。AUC=1时表示完美分类,AUC=0.5时表示随机分类,一般的AUC值都是介于0.5~1之间的。

3.4 实验参数

参数的选择对于DGA域名检测的效果是十分关键的,本文在大量实验基础上得到效果最优参数,如表5所示:

除上述参数外,训练过程中监督验证集的损失函数值,若训练迭代两次后损失函数值仍未下降,将学习率衰减为原来的0.8倍;若迭代三次后损失函数值仍未下降,提前终止训练以得到最优模型。

表5 参数设置

3.5 平衡数据集上实验结果与分析

3.5.1 DGA域名检测效果比对分析

本文将IndRNN用于DGA域名检测,为验证本文方法的有效可行性,在平衡数据集上设计实施了三组比对实验,分别构建单一IndRNN方法(以下简记为IndRNN)、不含Flatten层的Deep-IndRNN方法(以下简记为无F深度IndRNN)以及本文方法,从准确率、精确度、召回率、综合评价F1、训练时间、测试时间等方面进行了DGA域名检测效果的比对分析。实验结果皆是在相同参数控制下反复实验15次得到。

三种方法的准确率随训练迭代的变化情况如图3所示。由于平衡训练集共144w数据,使得三种方法在初次训练迭代时就具有较高的准确率。同时,由于实验过程中设置了监督函数,IndRNN的损失值迭代8次时就已不再下降,提前停止训练。为与其他两种方法达到最优迭代次数时的准确率相比较,选取其迭代8次时的准确率作为迭代9~12次时的准确率。

由图3可见,本文方法的准确率高达99.47%,比IndRNN、无F深度IndRNN分别提高5.3个百分点和0.77个百分点。

为更好分析三种方法的性能,本文从Precision、Recall以及综合评价F1等方面进行了验证分析,并根据多次在平衡数据集上训练后测试的数据计算出均值和方差,通过方差分析各类指标的离散程度。表6给出了三种方法各评价指标实验结果,其中,综合评价指标F1通过计算精确度和召回率的均值得到。由表6分析可见,本文方法召回率的均值优于IndRNN、无F深度IndRNN,方差略高于无F深度IndRNN。在精确度方面,IndRNN的方差最小,均值却明显小于其他两种方法,本文方法的均值与无F深度IndRNN的均值相当,但方差略高于后者。在综合评价指标F1上,本文方法比IndRNN提高3.6个百分点,比无F深度IndRNN提高0.02个百分点。这说明,本文方法采用Flatten层将向量序列拼接成单向量并不会造成大量信息在提取过程丢失的问题,反而在准确率、F1等方面表现更好。

表6 3种方法性能比较

同时,对3种方法训练和测试所耗费的时间进行了实验比较,具体实验结果如表7所示,其中,TT表示在训练集上单次迭代时间,PT表示在测试集上单次测试时间(无特别说明外,训练与测试过程均在有GPU加速的环境下进行)。由表7可知,本文方法的训练、测试速度最稳定且最快,比IndRNN快3.8倍以上;比无F深度IndRNN快10倍以上。

表7 3种方法运行时间比较

以上实验结果与分析表明,相比于另两种方法,本文方法在保证高准确率和精确度的前提下,显著提高了训练、检测速度,具有较好的DGA域名检测效果。

3.5.2 同类方法性能比对分析

在相同实验环境下,使用平衡数据集作为实验数据,将本文方法与其他五种代表性的同类DGA域名检测方法进行了性能对比分析。首先对域名数据使用字符字典转换成实数向量;再将向量作为DNN方法、CNN方法、LSTM方法、BiLSTM方法、CNN-LSTM-Concat方法和本文方法的输入;最后分别按照如下方式构造DNN、CNN、LSTM[11]、BiLSTM[12]、CNN-LSTM-Concat[13]及本文方法:

(1) DNN:首先利用嵌入层将字符向量映射成字符向量序列;然后利用DNN提取域名信息特征;最后使用Sigmoid函数对域名分类。

(2) CNN:首先利用嵌入层将字符向量映射成字符向量序列;然后利用三层CNN提取局部信息特征;最后使用Sigmoid函数对域名分类。

(3) LSTM[11]:首先利用嵌入层将字符向量映射成字符向量序列;然后利用单一LSTM提取上下文信息特征;最后使用Sigmoid函数对域名分类。

(4) BiLSTM[12]:首先利用嵌入层将字符向量映射成字符向量序列;然后利用BiLSTM提取上下文信息特征;最后使用Sigmoid函数对域名分类。

(5) CNN-LSTM-Concat[13]:首先利用嵌入层将字符向量映射成字符向量序列;然后利用CNN提取局部信息特征,利用LSTM提取上下文信息特征,并融合特征;最后使用Sigmoid函数对域名分类。

(6) 本文方法:首先利用嵌入层将字符向量映射成字符向量序列;然后将序列拼接成单向量后再利用堆叠三层IndRNN的Deep-IndRNN提取上下文信息特征;最后使用Sigmoid函数对域名分类。

图4~5为本文方法与同类检测方法在平衡训练集上的准确率、损失值随训练迭代的变化情况,实验结果是反复实验15次的平均值。由图4~5可见,4种方法在平衡训练集上都能够很好的拟合,收敛的速度也都相对较快。相比之下,四种方法中,CNN- LSTM-Concat最先收敛,且准确率、损失值达到最优分别为99.52%、0.0142;本文方法在训练初期表现良好,在最优参数控制下最终准确率高达99.47%,损失值为0.015 0。在准确率方面,本文方法比DNN、CNN、LSTM分别提高3.42个百分点、0.65个百分点、0.27个百分点,与BiLSTM、CNN-LSTM-Concat的准确率相当。

图6给出了6种方法的ROC曲线及AUC值,从图中可见,本文方法、CNN-LSTM-Concat以及BiLSTM的ROC曲线几乎重合,最靠近左上方的是本文方法的ROC曲线,其TPR最先达到99%以上,最右下方的是DNN的ROC曲线,LSTM、CNN的ROC曲线位于中间。6种方法除DNN外的AUC值均达到0.995以上,分类效果都很良好。

表8给出了6种方法在平衡数据集上的性能比较结果,表中数据是在训练后在测试集上实验15次的结果。由表8可知,在召回率方面,本文方法的均值优于DNN、CNN、LSTM、BiLSTM、CNN-LSTM-Concat,方差略高于CNN、LSTM、BiLSTM。在精确度方面,本文方法的均值比DNN、CNN、LSTM、BiLSTM分别提高2.65,0.3,0.18,0.03个百分点,仅比CNN-LSTM-Concat低0.03个百分点,相差非常小;由精确度方差比较可知,本文方法的精确度稳定性略低于CNN、LSTM和BiLSTM。在综合评价F1方面,本文方法比DNN、CNN、LSTM、BiLSTM、CNN-LSTM-Concat分别提高3.5,0.63,0.2,0.05,0.01个百分点。

综合比较6种方法的均值和方差,可以看出本文方法、BiLSTM以及CNN-LSTM-Concat在平衡测试集上的性能大体相同,但各有优劣,导致这种情况原因可能为:本文方法没有考虑域名字符局部信息特征的影响,在准确率、精确度方面要略差于CNN-LSTM-Concat;LSTM、BiLSTM仅考虑域名字符的上下文信息特征,由于BiLSTM通过堆叠正向LSTM与反向LSTM双向循环处理向量序列,既考虑上文对下文的影响、也考虑下文度上文的影响、所以能比LSTM获取到更多的信息特征;本文方法堆叠IndRNN形成深层网络,通道间的信息会随时间在多层IndRNNs之间传播探索,从而保留更长时间的上下文信息,在提取特征上较优于LSTM、BiLSTM。因本文方法使用Flatten将向量序列进行拼接,难免会造成少量信息丢失,所以在性能稳定性上略差于结构较为简单的CNN、LSTM、BiLSTM。

表8 平衡数据集下6种方法性能比较

由图4~6以及表8可以看出,除DNN外,本文方法与其他同类方法的分类检测效果都很良好,虽在部分评价指标上各有优劣,但整体差距非常小,无法做出确切比较。为体现本文方法较同类检测方法更好的实用性,又设计了6种方法在平衡数据集上训练和测试所耗费时间的实验,实验结果如表9所示。

表9 6种方法运行时间比较

考虑到检测方法需应用于实际环境,所以PT需在普通用户环境测试,TT仍为存在GPU加速环境的实验数值。由表9可知,DNN的TT最少,为27.7s。本文方法的PT表现最优,为21.1s,在实际环境中测试速度最快。同时,根据方差可以看出本文方法PT的离散程度也是最小,测试速度最稳定。本文方法在训练速度上比CNN、LSTM、BiLSTM、CNN-LSTM-Concat分别快1.15,6.90,18.92,1.69倍;在测试速度上要明显优于其他5种方法,分别快1.64,4.63,3.54,14.08,5.89倍。

为验证本文方法在测试速度上优势真实有效,从平衡数据集中分别抽取500,5 000,50 000,500 000个域名作为测试数据,比较本文方法与同类方法在不同数量级数据上检测速度,比较结果如表10所示,其中PT在数值上等于普通用户环境测试15次平均值。从表10可以直观的看出本文方法在不同数量级数据的测试时间均表现最优,检测速度提高幅度显著,比另外5种同类方法更具实用性。

分析其原因为:DNN结构最简单,故训练、检测速度较快且最稳定;本文方法与CNN-LSTM-Concat在使用RNN时都将向量序列拼接成单向量后输入,以单步处理代替循环处理,所以在速度上要快于LSTM和BiLSTM;CNN和CNN-LSTM-Concat等在模型中使用卷积神经网络CNN,在普通用户环境(无GPU)是无法被加速运行的,因此在测试速度上明显不如本文方法。

表10 6种方法在不同数量级数据的测试时间比较

经测试本文方法在普通用户环境下每秒钟大概可检测17 000多个域名,超过校园级流量的实时监测恶意域名的速度标准,能够完成更高级别流量的实时监测任务。

3.6 非平衡数据集上实验结果与分析

为模仿合法域名数量远远超过DGA域名数量的真实环境,本文在平衡数据集中抽取50w合法域名与10 wDGA域名组成非平衡数据集,并按照4:1比例划分训练集与测试集。

在非平衡数据集下对本文方法与同类方法中性能表现较好的LSTM、BiLSTM、CNN-LSTM-Concat设计相关实验,实验过程除使用的数据集与3.5.2节不一样,其他条件都一致。选择Precision、Recall、F1以及ROC曲线作为评价指标,以下图表中数据均是在非平衡数据集下反复实验15次得到。

表11给出了4种方法在非平衡数据集上的性能比较结果,与在平衡数据集实验结果相似,本文方的召回率均值和综合评价F1优于其他3种方法。在精确度方面,本文方法的方差最优,均值比LSTM、BiLSTM分别提高0.26,0.02个百分点,仅比CNN-LSTM-Concat低0.04个百分点,相差非常小。在综合评价F1方面,本文方法分别比其他3种方法分别高1.3,0.13,0.06个百分点。

表11 非平衡数据集下4种方法性能比较

图7是4种方法在非平衡数据集上的ROC曲线及AUC值,由图中可以看出,4种方法在非平衡数据集上也都能表现出较好的分类效果,本文方法的ROC曲线在BiLSTM、LSTM之上,仅在拐点处比CNN-LSTM-Concat的ROC曲线稍偏下一点,其他部分几乎与CNN-LSTM-Concat重合;在AUC值方面,本文方法比BiLSTM、LSTM分别提高0.004 2、0.007 8,与CNN-LSTM-Concat的AUC值相当,仅差0.001,几乎可以忽略不计。

实验总结:平衡数据集和非平衡数据集下实验结果与分析表明,一方面,本文方法能有效进行DGA域名检测且检测效果优良。另一方面,相比于DNN、CNN、LSTM、BiLSTM、CNN-LSTM-Concat等同类DGA域名检测方法,本文方法能在保证高准确率和精确度的前提下,有效释放深度学习时占用的GPU、CPU等系统资源,显著提高训练、检测速度,实用性较强且能更好地完成实际分类检测任务。

4 结语

本文提出了一种基于Deep-IndRNN的DGA域名检测方法。该方法将嵌入层映射得到的向量序列拼接成单向量,以向量单步处理代替向量序列循环处理,并充分利用多层IndRNNs可以有效堆叠,梯度在不同时间步都能有效传播等优势,在能够提取到丰富的域名上下文信息特征的同时减少方法运行时间,从而更好地快速准确检测DGA域名,更具实用性。实验结果表明,在相同实验环境和数据集下,与同类DGA域名检测方法中性能表现较好的LSTM、BiLSTM、CNN-LSTM-Concat相比,本文提出的方法在准确率、精确度、召回率、F1、ROC等评价指标不低于同类检测方法的前提下,在TT、PT等评价指标方面的表现明显更优,显著提高了训练、检测速度,方法是有效可行的,且在实际应用中能快速准确完成检测任务。在今后的工作中,可以考虑提取域名字符局部信息特征并与上下文信息特征融合,在保证方法具有高训练、检测速度的前提下,更准确的检测DGA域名,以适用于更高流量级的实际应用。

猜你喜欢

域名字符准确率
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
一种优化的手写字符自动分割算法
2015—2017 年宁夏各天气预报参考产品质量检验分析
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
论高级用字阶段汉字系统选择字符的几个原则
《江苏教育研究》官方网站域名变更公告
《江苏教育研究》官方网站域名变更公告
字符代表几
图片轻松变身ASCⅡ艺术画