本文主要是介绍DGA - 研究内容整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
20200809 -
引言
DGA算法是一种生成域名的算法:以时间或者一些特定字符串作为种子,然后利用一定的算法(例如加密算法),来生成随机域名的方式。
恶意软件的制作者通过这种方式来迷惑安全工作者,传统的恶意软件利用硬编码的方式将CC域名保存在程序中,安全工作者可以对这部分域名进行封堵实现截断通信的过程。在DGA算法的帮助下,恶意程序会发出大量DNS请求(包含DGA生成的域名),而制作者利用同样的算法和同样的种子生成同样的列表,从中挑选任意个在DNS厂商进行注册,以此躲避封堵。
而针对DGA的研究,可以有以下几点:正常域名与DGA域名的分类,DGA域名的家族分类等。本篇文章将记录一些研究DGA的文章或者思路,还有自己的实验;为其他研究者提供一些思路,同时给自己做备忘。
文章及数据资源
- 样本数据(DGA域名、正常域名)
- Domain提取的第三方库
- 不错的文章
1. 样本数据(DGA域名、正常域名)
DGA域名获取的资源有很多,这里仅记录360 netlab的地址。
- 360 DGA
正常域名可以从AWS上获取。
- 正常域名(TOP-1M)
上述资源应该是随着时间更新的,如果有时候分析效果不一样,可能是因为时间不一致。
同时github上一位研究者收集了很多DGA家族生成算法的脚本,可以自己利用种子以及时间来生成大量样本[2]。
2. Domain提取的第三方库
关于域名的结构,专门的讲解,后续补充上。之前提取顶级域名,或者提取域名的时候都是自己用Python的split(’.’)分解。但是这种方法其实是很弱,无法应对复杂的情况。后来找到了一个库tldextract
;这个库[1]可以帮助提取这部分信息。
>>> import tldextract
>>> tldextract.extract('http://forums.news.cnn.com/')
ExtractResult(subdomain='forums.news', domain='cnn', suffix='com')
>>> tldextract.extract('http://forums.bbc.co.uk/') # United Kingdom
ExtractResult(subdomain='forums', domain='bbc', suffix='co.uk')
>>> tldextract.extract('http://www.worldbank.org.kg/') # Kyrgyzstan
ExtractResult(subdomain='www', domain='worldbank', suffix='org.kg')
>>> ext = tldextract.extract('http://forums.bbc.co.uk')
>>> (ext.subdomain, ext.domain, ext.suffix)
('forums', 'bbc', 'co.uk')
以上代码是从他pypi的网站上复制过来。按照他的提取结果,分为三个部分子域名,域名,后缀
后续研究也将按照这种方式来分析,就不按照什么三级域名、二级域名来说明了。
3. 不错的文章
3.1 Getting Started with DGA Domain Detection Research
该篇文章算是一个入门的文章,介绍了很多基础的内容;本篇博客前面的内容很多就是抽取了这部分信息。
3.2 使用生成对抗网络(GAN)生成DGA
这篇文章通过训练GAN来生成正常的域名,我之前的时候是思考能不能生成DGA域名,但是仔细想了想,还是这篇文章的意思对。如果是生成DGA域名,本身这种域名就具备一定的随机性,那么你生活生成的域名还是带有一定的随机性,这个没办法判断。特别是,如果模型学习的时候也学习了一种随机性,那么这个肯定能骗过GAN的判别器。
那么是不是说明,假设你完全用随机的字符串来生成域名,也算是DGA呢?
不过,我反过来想象,虽然他生成域名的时候是具备一定随机性的,但是实际上,根据你的种子,他每次生成的是时候,都是决定性的序列。所以,你想学习的是这种序列模式,如果从这个角度来思考就能理解了。
参考文章
[1]tldextract
[2]baderj/domain_generation_algorithms
这篇关于DGA - 研究内容整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!