域名生成算法
- Published on
什么是域名生成算法?
域名生成算法(Domain Generation Algorithm,DGA)是一个生成大量新域名的程序。网络犯罪分子和僵尸网络运营者使用域名生成算法频繁更换他们用来发起恶意软件攻击的域名。这种技术使得黑客能够避开那些阻止特定域名和静态IP地址的恶意软件检测解决方案。
为什么网络犯罪分子使用域名生成算法?
威胁行为者使用恶意软件感染企业IT环境中的大量计算机或设备。攻击者可以向这些被恶意软件感染的机器或僵尸发出命令,并使用命令和控制服务器(C2服务器)从中收集信息,C2服务器通常也是托管在受感染系统中的一台机器。这个僵尸网络可以用来传播垃圾邮件、窃取敏感数据或进行分布式拒绝服务(DDoS)攻击和其他网络攻击。
为了防止这些恶意活动,网络安全服务和解决方案尝试识别与C2服务器和受感染设备之间通信的机器和网站的IP地址,并根据来自网络安全提供商的威胁情报阻止任何进出这些IP地址的流量。为了继续他们的攻击,网络犯罪分子必须不断切换域名以避免被黑名单、签名过滤器、安全网关、声誉系统、入侵防御系统和其他安全技术检测到。
使用DGA生成大量域名,网络犯罪分子可以快速切换域名,使检测引擎难以跟上。
域名生成算法如何工作?

域名生成算法是使用字符序列快速生成数千个域名的应用程序,这些域名可以作为攻击者与C2服务器通信的集合点。这些算法每天可以生成数万个DGA域名——其中大多数未注册。黑客使用未注册的域名来隐藏已注册的域名,从而更容易逃避使用签名和IP声誉的检测引擎。该算法在客户端和源端都执行。它从一个攻击者和C2服务器都知道的种子开始,使得双方都知道将生成哪些域名以及哪个域名将被注册为恶意软件的通信渠道。如果该域名被安全系统识别并阻止,攻击者可以迅速切换到下一个域名,以保持与C2服务器的联系,遵循一个黑客和恶意软件或僵尸网络都理解的模式。
DGA的类型有哪些?
黑客开发了不同类型的DGA,以提高他们创建恶意域名并逃避检测的能力。
- 伪随机数生成器(PRNG)DGA是最常见的方法,使用随机种子(通常是系统日期和时间)生成攻击者和恶意软件都可以预测的域名序列。
- 基于字符的DGA使用随机种子生成带有字母或数字的域名。这些DGA最容易被检测到。
- 基于字典的DGA随机组合单词生成看似可读的域名,由于它们看起来像合法域名,因此更难被安全系统检测到。
- 高碰撞DGA设计成看起来像合法域名,并与顶级域名(TLD)如
.com
、.net
和.org
配对。使用高碰撞DGA,生成的域名更有可能已经注册,导致“碰撞”,这可以为检测过程增加一层混淆。
组织如何检测DGA域名?
组织采取的防止恶意软件的步骤也可能防止DGA。由于域名生成算法用于推进恶意软件,大多数反恶意软件解决方案将提供针对这些威胁的基本防御。最佳实践包括:
- 采用最佳的补丁节奏以保持软件更新,防止攻击者利用软件漏洞渗透防御并安装恶意软件。
- 进行安全意识培训,帮助用户识别可能的恶意链接、网站和可能是恶意软件攻击一部分的电子邮件。
- 使用URL过滤防止用户访问已知恶意的网站或点击链接。
- 部署安全解决方案以阻止用户打开恶意附件或在附加文档上启用宏。
- 选择DNS安全解决方案,帮助DGA检测,通过识别和阻止C2服务器与恶意软件之间的DNS流量通信,这些流量通常可以通过防火墙而不被检查。
- 部署使用机器学习和大数据的反DGA技术,以识别异常活动并关闭恶意网站。
常见问题解答(FAQ)
什么是域名生成算法的例子?
一个域名生成算法的例子是Conficker蠕虫的DGA,它用于为其命令和控制基础设施生成大量唯一域名。
域名生成算法中可以使用的三个因素是什么?
域名生成算法中可以使用的三个因素是时间、随机种子和数学计算。
为什么DGA对网络犯罪分子有用?
DGA对网络犯罪分子有用,因为它们允许他们不断更换用于与受感染机器通信的域名,使得安全研究人员和执法部门难以追踪和拆除他们的基础设施。
域名生成算法和词表有什么区别?
域名生成算法和词表的主要区别在于,DGA基于某些因素算法生成域名,而词表是一个静态的预定域名列表,可以被恶意软件或僵尸网络用于通信目的。与词表相比,DGA提供了更高的变异性和不可预测性。
总结
分类 | 子分类 | 描述 | 典型案例 | 示例 |
---|---|---|---|---|
种子特性 | 时间独立确定性 (TID) | 使用固定的种子生成域名,生成的域名固定不变,无论时间如何变化,生成的域名列表一致。 | Conficker | 生成固定域名:abc123.com |
时间依赖确定性 (TDD) | 使用基于时间的种子生成域名,生成的域名与时间相关,但算法确定性强,时间点一致时生成结果一致。 | Kraken, Zeus | 根据日期生成域名:20250101-dga.com | |
时间依赖非确定性 (TDN) | 使用基于时间的随机种子生成域名,生成的域名具有随机性,不同执行实例可能生成不同的域名,即使时间点相同。 | Banjori | 基于时间随机生成:xj43ka7-random.com | |
生成方案 | 算术型 (A) | 基于字符的 ASCII 码计算或使用索引从字符集中选择字符生成域名,通常是简单算法的产物,易于逆向分析。 | Conficker | 使用算法生成:a1b2c3.com |
哈希型 (H) | 使用加密哈希函数(如 MD5、SHA256)生成域名,将种子输入到哈希函数中,然后处理生成的结果作为域名字符,生成域名具有较强的不可预测性。 | Torpig, Necurs | MD5(seed) = 39a59b993a6b.com | |
词表型 (W) | 使用内置或外部词表,随机组合单词生成域名,生成的域名看起来可能更接近自然语言,可能包含多个真实单词。 | Gozi | 从词表选择:appleorange.com | |
排列型 (P) | 对初始域名或字符进行排列组合生成新的域名,可能通过插入、删除、替换等方式生成变种域名。 | Suppobox | 对example.com 排列:examp1e.com |
参考文献: A Comprehensive Measurement Study of Domain Generating Malware