01 · DGA算法的基本构成
1.1 四元结构:种子—PRNG—映射—输出
无论实现细节如何变化,几乎所有DGA都可以分解为四个构件:①种子(seed)——算法的共享秘密输入;②伪随机数生成器(PRNG)——如线性同余发生器(LCG)、乘法进位发生器(MWC)等廉价算法,以种子为初值产生随机数流;③字符映射——将随机数映射为域名标签字符(如模26映射到a-z,或按词典索引拼接单词);④输出组装——拼接二级域名、选择TLD,形成候选域名列表。形式上可记为 Dt = G(seedt) = M(P(seedt)),其中种子可随时间变化(如按UTC日期),也可为常量。防御方的核心目标,就是恢复G或seed——一旦成功,即可预先计算未来全部候选域名,将检测转化为确定性封锁。
1.2 种子是攻防博弈的焦点
种子的设计直接决定DGA的可防御性,按“是否依赖时间”与“是否确定可复现”两个维度,可形成经典的三类(Vranken等人2022年综述采用的分类框架):
| 类型 | 判定 | 代表家族 | 防御含义 |
|---|---|---|---|
| TDD 时间依赖确定性 | 种子 = f(日期),算法公开即可复现 | Conficker、Murofet、Necurs备选DGA | 可预先计算未来域名,预注册与黑名单有效——但需跨上百个TLD协调(Conficker.C教训) |
| TDN 时间依赖非确定性 | 种子依赖外部不可预测数据 | 晚期Torpig(Twitter趋势)、Bedep(欧洲央行外汇牌价) | 无法预计算,只能依赖行为检测与实时发现 |
| TID 时间独立确定性 | 种子为硬编码常量,域名序列固定可枚举 | Kraken、Suppobox | 域名集合有限且已知,黑名单与模式匹配最有效 |
设计启示:TDD家族的防御最优解是“种子重建+批量预注册”,TDN家族的最优解是“解析器侧行为检测”,TID家族的最优解是“已知集合匹配”。混淆三种类型而采用统一处置策略,是DGA治理中最常见的资源错配。
02 · 经典家族机理剖析
以下家族档案均整理自公开逆向分析报告与同行评审论文(见本篇参考来源),是理解DGA设计取舍的最佳样本:
| 家族 | 出现时间 | 种子类型 | 输出特征 | 产量与规模 |
|---|---|---|---|---|
| Kraken | 2008 | 早期为静态种子,后期引入日期 | LCG式PRNG,可复现性极高,是最早被完整逆向的DGA之一(Paul Royal分析) | 曾被报道为当时规模最大的僵尸网络之一(数十万台受控主机量级) |
| Conficker.A/B | 2008 | TDD:UTC日期 | 每日250个候选,8—11字符;A版横跨5个TLD(biz/info/org/net/com),B版扩展至7个(新增cc/cn/ws) | 250个/日;域名空间之大使黑名单失效,成为DGA对抗的标志性样本 |
| Conficker.C | 2009(4月1日生效) | TDD:UTC日期 | 每日50,000候选域名、4—9字符,横跨110个TLD(按后缀计116个);主机每日仅查询其中约500个;候选与合法域名每日碰撞约150—200个 | 倒逼Conficker工作组(CWG)跨国预注册与sinkhole协同;ICANN 2010年官方复盘将其列为多利益相关方协同处置典范 |
| Torpig(Mebroot/Sinowal) | 2009 | 早期TDD(日期);后期TDN(Twitter热门话题) | 日期种子时代域名完全可预测——研究者于2009年直接接管其C2域名长达10天(CCS 2009);转向Twitter种子后预测失效 | 接管期间观察到大规模受控主机与海量窃取数据,凸显“种子可预测=致命弱点” |
| Murofet(Zeus变种) | 2010前后 | TDD:日期 | 每日800个候选域名 | Zeus家族为规避域名封锁引入DGA的样本 |
| Gameover Zeus(GOZ) | 2011—2014 | P2P主信道+TDD备用DGA | 备用DGA每周生成1,000个候选域名(顶级域含biz/com/info/net/org/ru等),P2P失效时启用 | 2014年5月30日Operation Tovar国际执法行动剿灭;其后以newGOZ复活,按地区生成每日1,000(美国)/10,000(乌克兰、白俄罗斯)个域名 |
| Suppobox | 2010年代 | TID:硬编码魔数 | 词典型DGA:将内置英文词典中的单词两两拼接,生成可读、可发音的域名 | 对熵/n-gram检测构成经典挑战,催生词典型DGA专项检测研究 |
| Pykspa | 2013前后活跃至今 | TDD:日期+版本演进(v1/v2) | 经Skype消息传播的蠕虫;v2起按国家/语言选择性生成域名 | Akamai 2019年追踪显示其感染主机长期维持每日万级规模 |
| Necurs | 2012—2021 | 多层策略:rdtsc随机源→16个硬编码→日期+魔数 | 第一层用4个随机域名做沙箱探测(不可预测、不可回连);第二层16个硬编码域名;第三层备选DGA每4天一批2,048个候选域名、7—21字符、横跨43个TLD | 2020年3月微软联合BitSight、Shadowserver等机构实施sinkhole:处置前已可向前计算未来25个月、约610万个潜在C2域名(覆盖42个TLD+.bit),Shadowserver通过Registrar of Last Resort(RoLR)在22个ccTLD注册局协同封锁;sinkhole峰值观测约16.3万台唯一感染主机IP(2020-03-11),其后稳定在约15.5万台/日 |
2.1 候选域名规模对比
03 · 逆向工程方法论
算法与种子的获取是一切预测性防御的前提。主流逆向流程如下:
3.1 三类种子获取手段的成熟度
| 手段 | 适用类型 | 成熟度与局限 |
|---|---|---|
| 人工逆向 | TDD/TID | 准确可靠但成本高;DGArchive的43个家族即以此方式建立 |
| 自动提取 | TID为主 | 波恩大学研究已能从当前样本自动提取部分DGA逻辑,但对混淆与外部种子支持有限 |
| 种子重建 | TDD | Open SESAME(NDSS 2021)证明可从被动DNS观测自动重建种子与PRNG,并将家族覆盖从43个扩展到99个 |
04 · 衍生问题:域名碰撞与合法流量误伤
Conficker.C的历史教训表明,大规模预注册策略存在副作用:其每日50,000个候选域名中约有150—200个与合法已注册域名碰撞。当全球数百万台Conficker受感染主机同时探测这些域名时,合法域名持有者会遭遇大量无效访问——这是一种事实上的分布式拒绝服务。处置因此必须建立碰撞排除清单:预注册或sinkhole前先与现存注册数据库比对,对碰撞域名采取豁免。这一教训对今天任何"批量域名处置"动作(包括sinkhole与注册局暂停解析)依然有效。
05 · DGA分类学与命名规范
除TDD/TDN/TID种子分类外,实践中还常用以下维度刻画DGA:
- 输出形态:字符随机型(Conficker)、单词拼接型(Suppobox)、十六进制型(部分GoZ配置)、长短交替型等;输出形态直接决定检测特征的选择。
- 激活条件:主信道失效后备启用(GOZ)、周期性例行回连(Conficker)、沙箱探测层(Necurs第一层)——激活条件影响在DNS流量中的观测形态。
- 家族命名:学术界以DGArchive命名为准;安全厂商内部代号需在情报共享时映射到公共命名,避免同一DGA多套名称造成的协作混乱。
06 · 样本获取与实验伦理
实验安全要求:①恶意样本 detonation 必须在无生产数据、无外联白名单控制的隔离沙箱中进行,DNS探测流量应镜像至内网模拟解析器,严禁真实回连C2;②从公共样本库(DGArchive、Malpedia等)获取样本需遵守其使用条款与出口管制规定;③逆向产出的生成器代码仅用于防御研究,不得用于构建或改进恶意基础设施;④涉及真实网络观测数据时,遵守数据来源方协议与个人信息保护要求。
本篇参考来源(第2篇)
家族参数均出自下列公开逆向分析、同行评审论文与官方处置报告。
Plohmann D. 等:A Comprehensive Measurement Study of Domain Generating Malware,USENIX Security 2016(DGArchive,43个家族):usenix.org会议页
ICANN:Conficker Summary and Review(2010年5月):icann.org官方PDF
HKCERT:Information security impact arising from Conficker.C worm(2009年3月):hkcert.org
Stone-Gross B. 等:Your Botnet is My Botnet(Torpig接管与日期种子可预测性),ACM CCS 2009:ACM Digital Library
Schiavoni S., Maggi F., Zanero S., Cavallaro L.:Phoenix: DGA-based Botnet Tracking and Intelligence(GOZ每周1,000个DGA域名等家族追踪方法),DIMVA 2014:Springer
微软:Necurs僵尸网络处置公告(2020年3月,sinkhole观测约15.5万唯一感染IP/日,子僵尸网络5/7/9/11/13/15):blogs.microsoft.com Shadowserver sinkhole数据复盘(峰值约16.3万、稳定约15.5万唯一感染IP/日)
Vranken H., Daniele L., Aharon D. 等:Detection of DGA-Generated Domain Names with TF-IDF,Electronics 2022, 11(3):414(种子TDD/TDN/TID分类框架):mdpi.com全文
Akamai:Pykspa v2 DGA updated to become selective(2019年):akamai.com博客
Wichmann A., Wächter G. 等:Automatic Extraction of Domain Name Generation Algorithms from Current Malware(波恩大学,方法PDF):net.cs.uni-bonn.de
Open SESAME,NDSS 2021(从被动DNS自动重建种子,公开家族覆盖43→99):ndss-symposium.org