DGA 域名检测研究
- Published on
文章提供了一些资源,帮助你开始进行域名生成算法(DGA)域名检测的研究。DGA 域名通常被恶意软件用作维持命令和控制(C2)的一种机制,使得防御者更难以阻止。在 DGA 域名出现之前,大多数恶意软件使用的是一个小的硬编码 IP 或域名列表。一旦这些 IP/域名被发现,防御者就可以阻止它们或因滥用而将其关闭。DGA 域名使得这一过程更加困难,因为 C2 域名频繁更换,枚举和阻止所有生成的域名可能会很昂贵。
数据:
本节列出了一些域名列表和 DGA 生成器,可能对创建“标记”DGA 域名列表有用。
DGA 数据:
- DGArchive:大型私人 DGA 相关数据集合。包含约 88 个按恶意软件家族组织的 DGA 域名 CSV 文件。DGArchive 是密码保护的,如果你想访问,需要联系维护者。
- Bambenek Feeds
- Netlab 360 DGA Feeds
DGA 生成器:
- baderj/domain_generation_algorithms(Github 上有 280+ 颗星)由 Johannes Bader 开发——用 Python 实现的 DGA 算法。
- andrewaeva/DGA(Github 上有 130+ 颗星)——较小的 DGA 算法和数据集合,但填补了 domain_generation_algorithms 的一些空白。
- pchaigno/dga-collection(Github 上有 40+ 颗星)
基于单词/字典的 DGA 资源:
以下是所有使用基于单词/字典 DGA 的恶意软件家族,这意味着它们的域名由从列表/字典中选择的两个或多个单词组成并连接在一起。我将它们分开,因为它们与大多数其他“经典”DGA 不同。
“良性”/非 DGA 数据:
本节列出了一些域名列表,可能对创建“标记”良性域名列表有用。在几篇学术论文中使用了一个或多个这些来源,但它们通常创建代表稳定 N 天前 X 个站点的衍生物(例如,稳定的 Alexa 30 天前 500k——意味着在过去 30 天内连续出现在 Alexa 前 500k 的域名——因为亚马逊只提供当天的快照,所以需要每天下载 Alexa 数据 30 天以上才能创建这个)。这过滤掉了可能在短时间内变得流行但随后消失的域名,这有时会发生在恶意域名上。
- Alexa Top 1M Domains
- Quantcast
- Cisco Umbrella Top 1 million
- The Majestic Million
- DomCop Top 1M
- Whitelisted Domains from maravento/blackweb
更多良性训练集策划的启发式:
良性样本是基于以下预定义的启发式收集的:
- 域名应仅包含有效的 DNS 字符(数字、字母、点和连字符)
- 域名必须在 2019 年 6 月 1 日至 2019 年 7 月 31 日期间每天至少解析一次。
- 域名应具有有效的公共后缀
- 域名中的字符不是全数字(去掉‘.’和‘-’后)
- 域名最多应有四个标签(标签是由点分隔的字符序列)
- 域名长度最多为 255 个字符
- 最长标签长度在 7 到 64 个字符之间
- 最长标签长度是 TLD 长度的两倍以上
- 最长标签长度超过所有标签组合长度的 70%
- 排除 IDN(国际分布网络)域名(如以 xn 开头的域名)
- 域名不得存在于 DGArchive 中
工具:
域名解析器:
在解析各种域名列表数据时,tldextract对于去除 TLD 或子域非常有帮助。我见过几个项目尝试使用“split(‘.’)”或“domain[:-3]”来解析域名。这并不太有效,因为域名的 TLD 可以包含多个“.”(例如,.co.uk)
安装:
pip install tldextract
import tldextract
e = tldextract.extract('abc.www.google.co.uk')
print(e) # 输出:ExtractResult(subdomain='abc.www', domain='google', suffix='co.uk')
print(e.domain) # 输出:'google'
print(e.subdomain) # 输出:'abc.www'
print(e.registered_domain) # 输出:'google.co.uk'
print(e.fqdn) # 输出:'abc.www.google.co.uk'
print(e.suffix) # 输出:'co.uk'
域名解析:
在研究过程中,你可能需要对大量 DGA 域名进行 DNS 解析。如果你这样做,我强烈建议在 Digital Ocean 或 Amazon 上设置你自己的 bind9 服务器,并使用adnshost
(来自 adns 的一个工具)。如果你从家里或办公室执行 DNS 解析,你的 ISP 可能会干扰 DNS 响应,因为它们看起来是恶意的,这可能会影响你的研究。如果你使用提供商的递归名称服务器,你可能会违反可接受使用政策(AUP),因为流量量大,并且提供商也可能会干扰响应。
Adnshost
允许高吞吐量/批量 DNS 查询异步执行。它比同步执行 DNS 查询(一个接一个)要快得多。
以下是使用adnshost
的示例(假设你从设置的 Bind9 服务器运行它):
cat huge-domains-list.txt | adnshost \
--asynch \
--config "nameserver 127.0.0.1" \
--type a \
--pipe \
----addr-ipv4-only > results.txt
这篇文章应该能帮助你大部分地设置 bind9 服务器。
模型:
本节提供了一些可用作基线比较的模型链接。
- dga_predict 的 LSTM 和 Bigram 模型来自 Endgame。
- snowman 的 CNN 模型来自 Keegan Hines。这不是专门为 DGA 设计的,但它适用于此。
- matthoffman/degas 使用深度学习模型进行 DGA 生成域名检测。
- Github 上的 dga-detection、dga 和 dga-domains ——这些标签提供了其他 DGA 相关项目(DGA 域名生成器、DGA 检测、DGA 域名列表)。
- BKCS-HUST/LSTM-MI
研究:
- EXPOSURE:使用被动 DNS 分析发现恶意域名
- From Throw-Away Traffic to Bots:检测基于 DGA 的恶意软件的兴起
- Detecting Algorithmically Generated Domain-Flux Attacks With DNS Traffic Analysis
- Clairvoyant Squirrel:大规模恶意域名分类(FloCon 2013)
- (DGArchive) A Comprehensive Measurement Study of Domain Generating Malware
- DeepDGA:对抗性调优的域名生成和检测
- A LSTM based Framework for Handling Multiclass Imbalance in DGA Botnet Detection 源代码
- Character Level based Detection of DGA Domain Names 源代码
- Dictionary Extraction and Detection of Algorithmically Generated Domain Names in Passive DNS Traffic
- An Evaluation of DGA Classifiers
- FANCI:基于特征的自动 NXDomain 分类和情报
- Deep Learning For Realtime Malware Detection(ShmooCon 2018)由 Domenic Puzio 和 Kate Highnam。
- A Novel Detection Method for Word-Based DGA
- A Survey on Malicious Domains Detection through DNS Data Analysis
- Detecting DGA domains with recurrent neural networks and side information
- CharBot:一种简单有效的规避 DGA 分类器的方法