logo

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 生成器:

基于单词/字典的 DGA 资源:

以下是所有使用基于单词/字典 DGA 的恶意软件家族,这意味着它们的域名由从列表/字典中选择的两个或多个单词组成并连接在一起。我将它们分开,因为它们与大多数其他“经典”DGA 不同。

“良性”/非 DGA 数据:

本节列出了一些域名列表,可能对创建“标记”良性域名列表有用。在几篇学术论文中使用了一个或多个这些来源,但它们通常创建代表稳定 N 天前 X 个站点的衍生物(例如,稳定的 Alexa 30 天前 500k——意味着在过去 30 天内连续出现在 Alexa 前 500k 的域名——因为亚马逊只提供当天的快照,所以需要每天下载 Alexa 数据 30 天以上才能创建这个)。这过滤掉了可能在短时间内变得流行但随后消失的域名,这有时会发生在恶意域名上。

更多良性训练集策划的启发式:

良性样本是基于以下预定义的启发式收集的:

  • 域名应仅包含有效的 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-detectiondgadga-domains ——这些标签提供了其他 DGA 相关项目(DGA 域名生成器、DGA 检测、DGA 域名列表)。
  • BKCS-HUST/LSTM-MI

研究: