DGA生成与检测 - 论文《DeepDGA: Adversarially-Tuned Domain Generation and Detection》阅读

20200827

0. 引言

DGA检测在网络安全中非常重要,通过检测DGA能够及时发现恶意软件;本博客中针对DGA检测的内容进行了简单的整理,见《DGA - 研究内容整理》。本身对GAN应用于安全领域有着极大的兴趣,所以本篇文章对使用GAN进行DGA域名的论文《DeepDGA: Adversarially-Tuned Domain Generation and Detection》进行记录。

1. 论文简单概要

本篇论文发表于2016年,内容并不算多,总计10页PDF,但是个人觉得,有些地方读起来比较晦涩,感觉作者的思路可能有所跳跃,也可能是我没有完全理解的作者的思路。经过了多次阅读也算是大致了解了具体的流程,但还是有很多细节部分产生了疑惑。下面先来从实验的角度总结一下这篇论文干了什么事情。


作者使用的深度学习网络结构是以自编码器为模板,然后将其融入到GAN中。

  1. 利用Alex Top1M域名作为输入来训练自编码器
  2. 将自编码器进行拆解,其中编码器将作为后续GAN的判别器,解码器作为GAN的生成器,当然在实际组成GAN的过程中是需要添加一定的网络层的。
  3. 查看自编码器能够生成的域名列表;查看GAN所生成的域名逃避随机森林模型检测的结果;通过将GAN生成的域名混入随机森林的训练集中来查看模型加强效果。

在实验结果的展示中,最后一个部分我不是很理解,可能这里作者的阐述也不是非常完整,我能明白他是要加强模型的判别能力,但是他的实验细节没看懂;同时我个人感觉,好像最后这里也没有提升很多。这部分是后续继续学习时应该关注的重点。


总的来说,整体论文的主体部分就是分为两个部分(暂时不考虑实验结果部分),自编码器及自编码器延伸为GAN。下面分别来从这两部分进行介绍。

2. 论文所使用的网络模型

本篇论文中,主要使用的深度学习网络模型,按照自编码器作为模板,通过在这个部分进行延伸来生成后续的GAN生成部分。

2.1 自编码器部分(按照正常域名进行训练)

图2-1 自编码器模型
 

文章这一点做的比较好,关于模型的结构部分,专门进行了解释,加上之前也有了解过这部分内容,所以理解起来比较容易。
1)输入层,这部分文章没有体现,这里要说明一点的是,感觉这部分输入的域名已经去掉TLD了,也就是只有真正跟域名相关的内容,当然也未必,这个要从源码的角度来理解;
2)嵌入层,文中指明,嵌入层的输出维度每个字符20维,当然这个数字是可变的,文中说出选择这个大小的原因一方面是选择较小的模型,另一方面是本身就没有想着完全重构域名,只是为了能够得到这个生成的模型而已;
3)卷积层,这里使用了两个卷积层,分别针对了2-gram和3-gram,利用这种方式也是希望能够捕获2-gram和3-gram在域名中组合的出现;
4)池化层,maxpool我是知道的,但是感觉他这里好像不太一样,这个要从源码中得到结论
5)highway,一种专门针对字符级别语言模型的优化
6)LSTM层,从论文的描述来看,好像输出的内容应该是最后的状态。
整体来看,这个网络结构不是很复杂,不太清楚的东西,就是他说的这个maxpool和highway,其余的部分因为已经做过相关的实验,还是比较容易理解的。

这里多说两句这个嵌入层和卷积层。

    text_input = Input(shape = (maxlen,))
    x = Embedding(output_dim = 128, 
            input_dim= max_features, 
            input_length=maxlen)(text_input)

    conv_a = Conv1D(15,2, activation='relu')(x)
    conv_b = Conv1D(15,4, activation='relu')(x)
    conv_c = Conv1D(15,6, activation='relu')(x)

上述代码是之前的使用做实验借鉴别人的代码,基本作用应该是跟图2-1中模型前面的部分一致的。这里要多聊两句的原因也是因为一开始我有些误解。最大的问题就是conv1d这个卷积层,我本能的以为这个1D是针对一维向量,那么这种想法的基础也就导致了只有嵌入层是逐个输出的才能解释,但是这又解释不通。看了文章[1]之后,解决了前面的疑惑。首先并不是说2d就是2d的向量,1d就是1维的向量。我在阅读完文章[1]之后,最大的感觉就是这个1d应该是卷积窗口的滑动方向。

图2-2 Conv1d示意图(来自文章[1])
 

从上图2-2中可以看出,其实窗口是包含了整个向量的,一句话的向量本质上是二维的(句子长度,嵌入层输出大小)。所以按照这样的理解就能明白了。

下面来说一说解码器。解码器在网络结构上是编码器的反序。但是为了适应一些时序上的维度问题,需要稍加调整,这部分在文中也有所说明。重点就是两个部分:timerepeatedtimedistributed,一个是用在输出的部分,将解码器生成的向量转化为时序数据,另外一个部分,就是分别在每个时间步上进行后续的操作,以此来满足后续的整个域名的输出。

2.2 GAN模型(由自编码器修改)

图2-3 GAN模型
 

关于GAN部分,它的网络结构承载了大部分的自编码器部分的结构,但是为了实现判别器和生成器的功能,对这部分稍微做了修改,添加了一些辅助层。下面分别来介绍。

1)判别器部分,判别器模型直接使用了自编码器的编码器部分,没有任何修改,只是在最后的部分添加了一个回归层,估计应该就是一个softmax层(具体需要到源码中确认)
那么判别器的流程就是,输入一个域名,然后经过编码器的处理后,再进行一个分类
2)生成器部分,生成器也是直接使用自编码器的解码器部分,没有任何修改,在输出的部分添加了个生成层。

根据作者的说法,比较关键的步骤:为了降低生成器部分学习的复杂性,他在生成器部分做了一个限制,限制的数值的取值范围也是从训练数值的部分来获取的。不过,这个部分也是没有说的很明白。

还有一个部分要说明的就是自编码器权值的冻结部分。在上文中提到,GAN使用了自编码器的全部模型,而权值冻结的部分就是这些模型的全部。从这个角度来说,就是完全借用了自编码器的网络部分。

上面两个技术,按照论文的说法, 前面提到的两个部分,是作者提出的优化。1)GAN部分的网络结构使用了训练好的自编码器2)对新添加的生成层进行了输出限制。

3. 论文的实验结果

3.1 实验具体细节

这里的具体细节不再展开,可以从论文中看详细的内容,大致上的训练过程都已经描述清楚了。不过,从他的描述中来看,训练时间挺长的,训练自编码器用了14个小时。
同时,在这里也有一个数字比较关键,那就是20作为了随机数产生的维度,这个20在前文中出现过,就是嵌入层输出的维度,但是因为中间还经过了很多层,而且生成器部分还添加了自己的东西,所以不能直接说他就是最终的域名长度。


另外一个要说明的信息是,他采用的普通机器学习模型的对比模型,是随机森林,而使用的特征是一些人工设计的特征,这部分特征包括n-gram,还有一些类似可读性的分数,都是其他论文使用过的。

3.2 实验结果

本篇论文的实验分为三个部分展开:
1)查看自编码器产生的域名结果
2)GAN逃避随机森林模型检测的效果
3)利用GAN产生的域名对机器学习模型的加强。

1)产生域名的结果
从结果上来看, 因为前文中论文自己也提到,并不是为了能够完整复现原始域名,而仅仅是为了能够由这样一个模型来生成域名,所以结果上来看,能够大致复原。
2)GAN逃避随机森林模型检测的结果
首先要树立一个观念,这篇论文要的事情,就是将这个生成器生成的域名当成了一种DGA,这一点比较关键。而且, 因为他模拟的是正常域名的分布,所以一开始阅读的时候就有点不理解。
这部分效果比较明显,能够明显从二分类的ROC面积上看出来非常高的效果。
3)提高机器学习模型的性能
这部分也是我最疑惑的地方,就是说,他说将这部分数据作为训练数据来掺杂进去,然后来提高机器学习的模型的效果,我时不理解,这里作为后续研究。

4. 个人阅读论文的几点启发与见解

  1. 论文中使用自编码器作为GAN的生成部分对我来说挺新鲜的,可能其他的地方经常利用,但我是第一次见到;而且我之前的时候也发现,就是说GAN的训练过程是挺麻烦的,虽然你看各种教程使用MNIST数据都能复现出来结果,但是你拿到自己的想法中来实现,即使是一个简单的sin信号都复现的不好,当然大概率是我自己的原因,但这里反馈出来的信号就是GAN的训练过程挺麻烦
  2. 这篇论文的立意是否正确,从其前文的整个实验过程来看, 这个东西是要学习正常域名的分布(当然,最后在实验结果上来看,分布的确是能有较高的拟合度),然后将这个域名作为DGA。可能是一开始的时候有些思想没有扭过来,觉得既然你学习的是正常的域名,那么你肯定生成的也是正常的域名。但是,如果是顺着作者的思路,因为这个模型虽然是利用随机数来产生,但是文中已经提到这个数据是可以复现的,那么,任何人都可以利用自己的种子来生成一个新的DGA列表。所以,也是可以理解的。但是可能还有一些问题,就是因为深度学习模型在很多地方都有一定的随机性,那么这些考虑了吗?真的就是可以完全复现的吗,这也是问题。也就是说,如果真的能够按照作者的思路来说, 这些生成的域名都是可以复现的,那么这个模型的确实是一种生成DGA的方式。

5. 小节

本篇文章记录了阅读利用GAN来生成域名的论文,虽然有些细节地方理解不是很清楚,但是大致上能够理解作者的思路。后续,还是需要通过源码来复现一下。

参考

[1]keras-conv1d-working-1d-convolutional-neural-networks-keras

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值