在安全圈里泡久了,会慢慢对“域名”产生一种条件反射式的警惕。*.com 未必可信,但看到xddns.kdcdn、ddns.net、changeip.com这类动态域名解析服务商的后缀时,不少同行的第一反应大概率是:查一下本地告警平台,或者看看威胁情报平台里这个域名的信誉分。我自己的经验里,这种警惕不是神经过敏。过去几年大大小小的应急响应中,DDNS(动态域名解析服务)被滥用的案例占了相当大的比例,而且很多攻击根本不需要多高深的技术——一台被控的摄像头、一个免费注册的 DDNS 域名,就能把远控、钓鱼、病毒分发全串起来。这篇文章就把我这些年和 DDNS 攻击“交手”的过程整理一下,说说这类攻击到底是怎么产生的、危害点在哪,以及我们在实际防守中是怎么一步步把它拦下来的。
先说清楚一个背景:DDNS 本身是完全合法的技术服务,它给动态 IP 环境下的远程访问、视频监控、家庭 NAS 提供了很大便利。但正因为它的设计逻辑是“让任何人都可以快速把一个固定域名指向一个不断变化的 IP 地址”,这个能力被攻击者盯上后,就成了天然的恶意基础设施。接下来我从技术原理、攻击链路、实战排查和分层防御四个角度展开,最后补充几个容易被忽略的实操细节。
1. 为什么 DDNS 域名成了攻防演练里的“常客”
1.1 从“方便”到“风险”:DDNS 的技术本质
先快速过一遍 DDNS 的原理。普通 DNS 需要域名与静态 IP 绑定,而 DDNS 服务商维护一条记录:客户端定期把本机当前 IP 上报给服务商,服务商同步更新对应的 A 记录。用户在任意网络环境下访问一个固定域名,永远能解析到最新的 IP。这就是家庭宽带用户不买固定 IP 也能远程访问家里设备的原因。
但把视角换到攻击者那边,这个机制有三个特征极具吸引力。
第一,零成本和高可塑性。注册一个 DDNS 域名通常免费或几块钱,而且不需要像正规域名那样进行复杂的实名审核。攻击者可以在几分钟内生成一个子域名,指向自己的 VPS,用完就换,甚至一批一批地注册。这个成本低到可以支持“一次性基础设施”的打法——每个恶意活动用独立的域名,用完就废弃,安全设备上的域名黑名单根本追不上。
第二,动态 IP 掩盖了服务器真实位置。攻击者的 VPS 如果挂在云上,IP 是相对固定的,容易被打标记。但用 DDNS 域名指向自己的 VPS,再把 C2 流量走域名而非 IP,分析人员看到的是一串“域名→IP→域名→新IP”的解析跳跃,溯源难度上升了好几个层级。入侵检测设备如果只看 IP 维度,就抓不到这种动态变化的关联关系。
第三,合法服务商带来了“信任背书”。很多企业内网的白名单策略只封禁已知恶意 IP,很少封禁整个 DDNS 服务商域名。攻击者恰恰利用这种信任缝隙,让恶意程序在防火墙允许的域名流量里悄悄外联。我见过不少防守团队在事件复盘时说“早知道就把所有 DDNS 域名列进封锁名单了”,但这类话说出来往往已经晚了。
1.2 攻击者如何用一条 DDNS 记录构建完整链条
举个最常见的利用场景。攻击者先通过漏洞或弱口令控制一台企业边缘设备,植入远控木马。木马的配置里写着一个 DDNS 域名,比如support-log.ddns.net。攻击者的 VPS 地址每次启用前都在变化,但域名不变,这样木马程序只需要在启动时查询一次 DNS,就能拿到当前 VPS 的 IP 并建立通信隧道。
整个过程有三个节点是缺一不可的:一个合法的 DDNS 域名作为“遥控器”,一个动态变化的 IP 作为“中继”,一台被控设备作为“落脚点”。我处理过的最典型的一次案例里,攻击者甚至把整个 C2 架构都建立在某 DDNS 服务商旗下——主控域名、备用域名、心跳域名全部使用同一家免费服务,仅仅为了提高编码效率。这样一来,防御方只要没有第一时间识别出域名的属性,整个攻击周期可以持续数月不被发现。
另一个被忽视的用途是钓鱼。由于 DDNS 支持“任意字符串作为三级域名”,攻击者可以构造出apple-verify.dynamic-dns.net这类看起来带点官方感的地址。配合上伪装页面,受害者往往只会瞟一眼“这域名里有 apple”,而不会注意到真正的根域名是 DDNS 服务商。这类钓鱼的上当率非常高,而且因为使用的是动态域名,浏览器自带的基于静态信誉库的拦截机制很难第一时间生效。
1.3 一刀切封禁是偷懒,不是防住
不少安全设备提供“封禁所有动态域名”的开关,我也在不少企业的策略里见过这种配置。但我必须明确说:这是一种成本最低也最容易误伤的方案。原因在于,同一家 DDNS 服务商上既有攻击者注册的恶意域名,也有大量合法用户的设备域名——包括你自己单位远程运维时可能注册的绑定域名。直接把整个服务商的域名全封掉,后果往往是远程办公系统突然连不上、视频监控掉线,甚至生产环境的堡垒机失联。
真正有效的做法不是封服务商,而是要能识别“服务商域名上的哪些二级/三级域名是恶意的”,并且结合威胁情报动态更新。这个思路会贯穿后面所有的防范措施。安全工作的本质是平衡:既要拦住攻击,又不能把自己的业务链切断。
2. DDNS 攻击的四种典型危害形态
2.1 僵尸网络 C2:动态域名当“遥控器”
在僵尸网络的运作模式里,控制端基础设施的稳定性是关键。传统静态 C2 域名一旦被标记,整个节点就废了。而 DDNS 的设计天然适合“换地址不换门牌”的操作。2016 年前后爆发的一个物联网僵尸网络,就大量使用了一家知名 DDNS 服务商的免费域名作为 C2 节点。被感染的摄像头和路由器每天向这些域名发起连接,频繁切换的 IP 让全球多家安全厂商的 IP 黑名单难以奏效。
对防守方来说,这种 C2 的隐蔽性还体现在流量特征上。木马往往把心跳流量伪装成 HTTPS 的 Web 请求,而且间隔时间随机,每次解析出的 IP 都不相同。如果你只用“出口 IP 异常”作为检测维度,很容易漏掉。我们应该养成的习惯是:把“域名维度”的异常检测也放进常态化监控里。只要内网出现访问 DDNS 域名的行为,哪怕流量本身看起来正常,都要先打一个高危标记,再确认业务合理性。
2.2 钓鱼诈骗与恶意链接分发
钓鱼攻击对域名的需求是“短时间、批量、可变”。DDNS 在这一点上几乎完美契合。攻击者可以在云函数、对象存储等平台托管钓鱼页面,再用一堆 DDNS 子域名分别绑定到同一站点,通过短信、邮件、社交平台把不同域名链接发给不同人群。即便某个域名被举报了,服务商下线它,攻击者手中还有几十个备用域名,断了一个补一个。
我参与过一次针对教育行业的钓鱼事件分析,攻击者使用某知名 DDNS 服务商注册了超过 300 个子域名,模仿学校教务系统登录页。安全团队在截获第一批链接后进行了封堵,但第二天又出现新一轮域名。后来我们和域名服务商的安全团队建立联系,提交了完整的恶意样本和流量截图,对方在一小时内批量删除了这几个子域名及对应账号。这个过程让我深刻体会到:对付 DDNS 滥用,和上游服务商建立高效协作渠道,比单靠本地封堵有效得多。
2.3 恶意软件分发与数据回传
恶意样本的分发地址同样大量使用 DDNS 域名。一个典型的“供水链攻击”思路里,攻击者通过钓鱼邮件诱导用户下载一个伪装成 Office 插件的压缩包,压缩包内的恶意程序会自动从update-check.duckdns.org下载后续载荷。由于这个域名对应的 IP 每天都在变,受害者的威胁情报平台如果只对 IP 进行信誉评分,这个文件就会被判定为“未知”而不是“恶意”。
数据回传场景就更普遍了。泄露信息从内网向外运送时,木马为了避免多个受害目标共用同一个 IP 被抓取关联,会选择为每一台被控主机分配独立的 DDNS 域名。比如受害主机的主机名是pc-07,木马就注册pc-07-cache.ddns.net。这在流量侧很难看出异常,因为每个域名的流量都极小,而且都走 443 端口。但如果我们把内网主机名和域名绑定关系做成一维映射去比对,往往能发现规律——很多被控主机的回传域名前缀带有人机名称、工号、部门缩写等特征,这在正常业务通信中极少出现。
2.4 对 DDNS 服务商本身的攻击
除了把 DDNS 当作工具,DDNS 服务商本身也可能成为攻击目标。攻击者会对大型免费 DDNS 服务商的注册流程进行批量脚本化,注册大量恶意域名后集中做解析,导致服务商整体域名被多家安全厂商拉黑,殃及该服务商上的所有合法用户。这种“一件拉黑、全网遭殃”的连带效果,在国内外都曾出现过。防护的重点在于服务商侧要建立“快速熔断 + 申诉恢复”机制:对恶意子域名实施秒级冻结,同时提供便捷的合法用户申诉通道。
作为安全从业人员,我们在做威胁情报运营时也要特别留意这类连带风险——不要把“该服务商的域名全部拉黑”作为长期策略,否则一旦误伤,后续的客户投诉和业务受损会让你十分被动。
3. 一次真实拦截:DDNS 攻击的完整排查链路
下面这段内容,是我从一次企业内网安全事件中提炼出来的排查思路。事件本身不复杂,但整个过程非常有代表性,值得完整记录下来。
3.1 告警触发:内网主机频繁查询可疑域名
某天早上,SOC 平台推送了一条中级告警:研发网段一台 Windows 主机在非工作时间段频繁解析xray-update.dnsalias.net,单小时内查询了 50 多次。值班同事查了一眼威胁情报平台,显示该域名“存在未知风险,疑似动态解析域名”,于是把事件转给我进行深入调查。
我没急着下结论。第一步是确认这台主机的业务属性——它是一台负责自动化测试的虚拟机,负责人反馈说应该不会自行安装需要外部动态域名的服务。于是我在防火墙上看它的流量记录,发现主机除了 DNS 查询之外,还向这个域名发起了 443 连接,且 TLS 证书是自签名的。这个组合在正常业务里几乎不可能出现。
3.2 溯源:解析记录的变化轨迹
第二步,我去威胁情报平台调取了这个域名的历史解析记录。结果很有说服力:过去 30 天内,这个域名先后解析到过 18 个不同的 IP,分布在 6 个不同的国家。正常企业业务域名不可能频繁变更解析 IP,这个特征基本指向“动态域名 + 攻击者自有基础设施”的组合。
我又把这个域名在威胁情报平台的关联样本拉了出来,发现有一个近期活跃的恶意样本家族报告里,确实关联过类似的域名特征字段。这就完成了从“可疑”到“恶意”的闭环。
3.3 定性:动态域名 + 可疑样本的历史关联
接着做交叉验证。我提取了主机上连接该域名的进程哈希,在沙箱环境里跑了一遍动态分析。样本的行为摘要显示,它会先查询xray-update.dnsalias.net获取 IP,再向该 IP 发送系统指纹、剪贴板内容和键盘记录数据。同时,样本尝试在注册表创建持久化项,设置为开机自启。
到这一步,恶意行为已经十分明确。整个链接现在变成了:DDNS 域名作为 C2 的前端调度器 → 动态 IP 作为实际接收节点 → 进程回传敏感数据 → 持久化确保重新上线。威胁情报平台的多个证据点相互印证,案件从“待观察”升级为“确认事件”。
3.4 处置:隔离主机、封禁域名、保留证据
处置过程不复杂,但必须按顺序做扎实:
- 在终端管理平台将目标主机从网络隔离,但保持系统运行状态,避免远程进程很快意识到异常并自毁痕迹。
- 在边界防火墙上封禁目标 DDNS 域名,注意是“仅封该域名”,不要动整个服务商。
- 从主机上提取内存镜像、进程快照和 TCP 连接记录,保存 90 天以上备查。
- 在内网 DNS 解析策略中加入一条“对已知恶意 DDNS 域名的 sinkhole”规则,即解析请求直接指向一个内部黑洞设备。
- 通知同一网段的其他主机管理员,排查是否存在同样的感染迹象,确认无横向扩散后才恢复该段业务。
整个过程中,最需要的耐心不是“封禁”而是“溯源”。很多团队在拿到一个可疑域名后,第一反应是封掉然后结束,但这样做往往丢失了背后的攻击者基础设施信息。域名是完全可以更换的,只有把它的关联样本、解析规律和回传目标摸清楚,才有机会顺藤摸瓜找到真正的 C2 节点。
4. 分层防御:在不同环节把 DDNS 攻击拦下来
4.1 出口 DNS 过滤:把动态域名纳入信誉评分
对于企业网络,最直接有效的第一道防线是改造 DNS 出口解析链。不要直接放行所有 DNS 请求,而是将出口 DNS 指向一台支持威胁情报联动的过滤设备。这样,内网任何主机解析域名时,设备先查询本地缓存,若命中恶意域名则直接返回黑洞地址,同时记录告警。
我建议的策略是把动态域名信誉分分为三档:
| 信誉档位 | 判定条件 | 处置动作 |
|---|---|---|
| 高危险 | 解析记录变化异常频繁 + 关联恶意样本 | 直接 sinkhole,阻断全部协议 |
| 可观察 | 正常解析但属于知名 DDNS 服务商 | 放行并保留全量 DNS 日志,标记监控 |
| 白名单 | 业务运维明确申报的动态域名 | 放行并加入长期白名单备案 |
这里的难度在于“频繁解析”这个阈值怎么定。我实际用过的参数是“7 天内解析 IP 变化超过 5 个”,这个阈值对不同行业可能偏严或偏松,需要结合各自业务特征做调整。关键是不要拍脑袋,而是先统计一周内的正常动态域名解析基数,再确定一个合理的浮动范围。
4.2 终端行为检测:不只看流量,还要看发起者
在终端层面,DDNS 攻击的真正痕迹往往藏在“发起连接的程序”里。正常的远程运维工具连接动态域名时,发起者是系统服务或明确安装的软件;恶意程序则往往隐藏在临时目录、内存里或者伪装成系统进程名。
我过去排查时有一个小技巧:把终端行为审计的重点从“网络层”转到“进程层 + 网络层”的结合。当检测到某个进程发起对动态域名的外联时,自动提取该进程的可执行文件路径、数字签名、编译时间,并和 SIEM 中该主机近期的行为基线做比对。如果发现异常,比如一个从未有过外联行为的办公软件进程突然访问 DDNS 域名,直接升级告警等级。
这种检测思路的准确率比我原先单纯依靠流量规则要高很多。因为它能够识别出“域名合法但使用方式非法”的情况——很多时候攻击者用的域名本身就是正规服务商注册的,没有恶意标签,仅在行为侧能看出问题。
4.3 上游协作:和 DDNS 服务商建立快速通报机制
很多人容易忽略的一点是:我们完全可以直接向 DDNS 服务商提交恶意域名举报。多数主流服务商都有滥用反馈渠道,并且响应速度比想象中要快。我在实践中发现,比起在本地封堵,上游删 domain 的效果可以做到“根治”——域名一旦被服务商冻结,攻击者在该服务商的所有关联子域名都会失效,持久化进程也会失去连接的支点。
具体的操作方法往往不难:进入到服务商的域名管理控制台或滥用举报页面,提交包含恶意样本哈希、解析记录截图、连接时间线的报告。报告写得好,处理速度会快很多。建议在报告中包含以下关键信息:
- 完整的恶意域名和子域名列表;
- 关联的恶意文件哈希(MD5/SHA256);
- 指向受害主机回连服务商的时间戳和端口;
- 威胁情报平台的关联报告链接或编号。
这个协作机制的建立应当提前做,而不是等遭遇攻击时再临时找人。有条件的企业可以关注那些提供“安全应急联系方式”的服务商,加入其可信报告者计划。有了这个联系人,下次遇到 DDNS 滥用时,一个邮件就能在几小时内让恶性域名下线。
4.4 自保与策略最小化:运营者和管理员都要注意
如果你是使用 DDNS 做正规远程访问的管理员,同样要注意安全风险。DDNS 账号一旦被攻击者窃取,可能被改写成恶意解析记录,把业务流量导向攻击者服务器。这在国内被称为“域名劫持”的一种变体。应对措施说起来很简单:
- 验证码和异常登录告警一定要打开;
- 不要为了图省事使用“记住登录”功能在公用电脑上长期保持会话;
- 定期检查当前解析记录是否与预期IP匹配;
- 为 DDNS 域名配置 DNSSEC 或者使用支持 TSIG 的服务商——尽管免费 DDNS 服务不少不提供,但至少要有意识。
而在企业侧,运维团队如果决定使用 DDNS 提供远程接入,强烈建议配备双因子认证,并将该域名从常规的“异常域名封堵策略”中显式排除,避免误封。
5. 容易被忽视的几个防御细节
5.1 域名信誉评分不能只看“是否 DDNS”
有同行会把“域名是否属于 DDNS 服务商”当作唯一的风险评定标准。这是个大误区。我见过一些被攻陷了很久的环境,恶意域名竟然用的是企业自建 DNS 服务器上的私有解析记录,压根不走外网服务商。这意味着任何基于服务商的信誉库都不会标记它。所以,在检测规则里,除了域名归属,还要综合看解析频率变化、连接目标区域分布、目标端口、关联样本行为等因素。多维度叠加之后,误报率会明显下降。
5.2 过期的动态域名存在“续期接管”风险
这一点很少有人提,但真实发生过:某个企业员工离职前注册了一个 DDNS 域名用于内部系统远程调试,离职后域名到期没有续费。攻击者随后注册了这个同名的过期域名,并把它解析到自己的服务器。结果就是,所有仍然指向该域名的内部脚本和监控程序,开始不自觉地与攻击者服务器通信。这就是所谓的“待接管域名”问题。
预防方法很简单:任何动态域名都要有负责人和过期时间记录,离职和项目变更时第一时间检查域名续费状态。我通常建议用脚本定期扫描内部代码和配置中的域名,凡是有效期少于 90 天的都拉出来人工确认。
5.3 日志留存时间与取证的平衡
DDNS 攻击的特点决定了它是一个“慢过程”——很多感染主机在攻击者控制下潜伏了一两个月才被我们发现。如果企业的 DNS 日志只保留 7 天,当你想回溯最初的感染时间点时,数据早就没了。我建议 DNS 和防火墙连接日志至少保留 30 天,有条件的企业保留 90 天。日志不要只存哈希值,要把域名、解析 IP、协议、进程名、响应码等关键字段完整记录下来。在后续事件溯源时,这些细节价值巨大。
5.4 和海量告警对抗:建立自己的动态域名白名单
启用动态域名监控后,团队最头疼的往往是告警量暴增。因为正常业务中确实有一些合法的动态域名访问——比如公司自建视频会议设备、分支机构的远程网桥。如果全部把它当恶意的话,一天能产生几百条误报。
我的做法是建立两级白名单:第一级是基于服务商整体的“观察名单”,只监控不阻断;第二级是针对具体业务申报过的动态域名,直接放行并标记。恶意判定流程里,让“新出现的动态域名”单独进入观察队列,只有它出现异常行为时才升级。新手在实施时建议先跑 2 周纯监控模式,沉淀一批正常流量基线,再开阻断动作。这样即使产生误报,对业务的影响也可控。
6. 个人经验:对付 DDNS 攻击,心态比工具更重要
最后再分享一点我自己的体会。DDNS 攻击本身的技术门槛并不高,真正难的是防守思路能不能跟上。它需要你愿意花时间做持续的流量和行为基线建设,而不是靠某一个黑名单库打天下。我从最初的“见动态域名就封”进化到“区分服务商、区分信誉、区分行为模式”的过程,走了不少弯路,也误伤过好几次正常业务。建立一套以行为分析为基础、以动态域名为主要特征的检测体系,是我目前认为性价比最高的方案。
另外,团队在日常运维中,每隔一个季度最好就做一次动态域名流量专项审计,把过去 90 天内的外联域名拉出来,按解析变化频率排个序,重点看那些“解析频繁且访问外网”的域名。这个动作会帮你在攻击者的基础设施还在“潜伏期”时就发现痕迹,而不是等加密流量大规模外泄之后才被动应对。防御 DDNS 攻击没有一劳永逸的方案,但只要检测逻辑足够贴近攻击者的使用习惯,它就没那么可怕。