使用LSTM检测DGA域名

2017-11-14 +24 137443人围观 ,发现 20 个不明物体 网络安全

0×01 为什么要发现DGA域名

DGA(Domain generation algorithms)域名生成算法经常被用作恶意软件连接C2中控。恶意软件定期使用DGA算法生成为随机域名,有效绕过黑名单检测,尝试连接,寻找C2中控。如果一个生成的域名无法连接,便生成下一个DGA为随机域名进行连接尝试。这样即使中控机的IP地址发生变化,或一个中控域名被干掉,一定时间后肉鸡仍能寻找到C2中控继续工作。

比如今年爆发的几次恶意软件感染事件均使用了DGA域名:

  • Wannacry(iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com)
  • xshell(xmponmzmxkxkh.com)
  • ccleaner(ab3d685a0c37.com)

如果能从流量中快速检测DGA域名,在一定程度上能够快速发现、评估恶意软件的感染情况。包括使用越来越多的Passive DNS,其很大一部分工作也是致力于发现DGA恶意域名。

israbye FreeBuf.COM

0×02 尝试机器学习

在机器学习、AI这么火爆的当下,当然要尝试将机器学习方法引入攻防对抗。Nominum的一篇ppt尝试将word2vec引入DGA随机域名的检测。尝试了下有效果,问题是无监督聚类后不太好找到为随机域名被分类到了哪里,作图应该是会炫酷。

从正常域名拼写符合一定拼写规律,DGA域名伪随机性来看,ngram、hmm、lstm应该有一定效果。

参考 Predicting Domain Generation Algorithms with Long Short-Term Memory Networks

LSTM应该能达到比较理想的效果。

0×03 LSTM

这里引用一些网上的介绍,了解一循环神经网络与LSTM端下概念。

人类看到一段文字不是不是从头开始思考,而是会根据已经阅读过的内容来对后面的内容进行理解,传统的神经网络做不到这一点。然而循环神经网络可以做到这一点,它允许信息持续存在。

israbye FreeBuf.COM

 一个循环神经网络可以被认为是同一个网络的多个副本,每一个都传递一个消息给后继者, 将循环展开如图:

israbye FreeBuf.COM

在相关信息和需要该信息的距离较近的时候,RNN能够学会去利用历史信息。例如:试图预测“the clouds are in the ( )”的最后一个单词,下一个单词显然是sky。

israbye FreeBuf.COM

不幸的是,随着距离的增加,RNN无法有效的利用大跨度历史信息。

israbye FreeBuf.COM

所以在RNN在算法大牛的改进下诞生了LSTM(Long Short Term Memory),解决了长距离信息使用的问题。

israbye FreeBuf.COM

检测DGA域名正好利用LSTM对前后文理解优势,利用域名的前后字符判断域名的拼写特征、随机特征,达到检测DGA域名的目的。

0×04 LSTM建模

参考文章中的论述,将要搭建的模型如下:

israbye FreeBuf.COM

  • embedding层将编码后的样本向量转换为固定大小,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]
  • lstm层是训练模型的核心,将从样本中学习特征
  • dropout层是为了训练的神经网络过拟合,随机断开一定比例的神经元连接
  • dense层是为了将学习到的特征映射到样本空间
  • activation激活层将权值转换成二分类结果

简单的模型代码:

model = Sequential()
model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(LSTM(128))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

训练数据采用了Alexa-top 50W作为正样本,从公开威胁情报收集到的50W DGA域名作为负数样本进行训练。

样本包括了42个家族:

madmax、blackhole、tofsee、bamital、gspy、pykspa_v2_real、fobber_v1、fobber_v2、conficker、pykspa_v2_fake、matsnu、dyre、cryptolocker、shifu、virut、necurs、symmi、pykspa、ccleaner、xshellghost、vidro、suppobox、fobber、proslikefan、simda、ranbyus、gameover、chinad、locky、padcrypt、vawtrak、nymaim、dircrypt、qadars、tempedreve、ramnit、pykspa_v1、tinba、murofet、rovnix、emotet、banjori

0×05 搞起~

稍微调整下模型,TensorFlow跑起来

Epoch 1/12771968/839071 [==========================>...] – ETA: 780s – loss: 0.2202

。。。

。。。

。。。

Mac air跑了一天两晚训练出的模型AUC达到了0.995579,准确率在97%~98%之间。将深度学习引入到基础安全的检测还是有十分显著的效果,跑到线上实时监测已经达到了初步可用,只是可怜了Mac air的计算能力。

模型搞到了线上,服务器太小,师傅们别打死

request: 
GET http://xbear.me/api/dga?d=test.com

response:
json
{
    "domain": "test.com",
    "err_msg": "",
    "ret": 0,
    "score": "2.96137e-05"
}

DGA黑样本源抽样自360netlab公开DGA数据,感谢360netlab的数据开放!

*本文作者:xbear,转载请注明来自FreeBuf.COM

这些评论亮了

  • xxx 回复
    作者博客挂了挖矿代码 :evil:
    )18( 亮了
发表评论

已有 20 条评论

取消
Loading...
css.php