你的网站被“挂马”了?不,可能是更隐蔽的“恶意子域名”
流量突然掉了一半,搜索结果里冒出“此网站可能有害”的红字——你翻遍代码、查完服务器日志,啥异常都没找到。
先别重启Nginx,也别急着重装CMS。打开你的DNS管理后台,搜一搜 *.yourdomain.com,很可能已经躺了几十个你根本没建过的子域名:porn.yourdomain.com、loan.yourdomain.com、甚至 admin123.yourdomain.com……它们不在你服务器上,也不走你配的CDN,但确确实实挂着你的域名,在发垃圾邮件、跳转钓鱼页、给黑产导流。
为什么黑客要“免费”给你建子域名?
他们图什么? 不是炫技,是真能套现。
第一,蹭你域名的信用分。
搜索引擎不会单独给每个子域名打分,而是看主域名的历史表现。你主站做了三年SEO、有外链、有收录,新冒出来的 seo.yourdomain.com 就能直接“继承”一部分信任度。黑客拿它堆关键词、导流到仿冒银行页,等用户投诉、平台封禁,倒霉的是你的主域名。
第二,绕过平台审核卡口。
很多SaaS服务(比如邮件服务商SendGrid、CDN厂商Cloudflare)对主域名做白名单,但默认放行所有子域名。黑客批量生成 newsletter.yourdomain.com、api.yourdomain.com,指向自己的黑站,连IP都藏得挺稳。我帮一个做跨境独立站的朋友排查时,发现他 pay.yourdomain.com 被悄悄指向境外支付劫持页面,用户输完卡号就跳转失败——客户以为是他系统崩了。
第三,骗过收件人的警惕心。
一封来自 support@help.yourdomain.com 的邮件,比 support@random123.net 容易点开得多。邮件服务商对知名域名后缀天然宽松,黑客就靠这个“信任惯性”,把钓鱼链接塞进用户收件箱。
如何揪出那些“隐形”的子域名?
服务器日志基本没用。
恶意子域名大多不经过你管的DNS服务器,而是直连权威DNS的通配符记录,或者利用API漏洞自动创建。你得主动出击,不能等告警。
方法1:查被动DNS历史记录。
去 SecurityTrails 或 Censys,输入你的主域名,拉出所有曾被解析过的子域名列表。我上周帮一个教育类客户扫,发现 dev.yourdomain.com 解析到了一个IP,而这个IP在 VirusTotal 上标记了17个钓鱼站。客户当场懵了:“dev?我们连测试环境都没开过。”
方法2:暴力枚举常见子域名。
用开源工具 Subfinder 或 Amass,跑一遍 top-10000-subdomains.txt 这类词表。它会尝试 admin、mail、staging、backup 等高频组合,看看哪些能真正解析成功。跑完后,和你DNS后台的记录一对比,多出来的,基本就是“私生子”。
方法3:翻证书透明度日志。
只要黑客给恶意子域名配了HTTPS,就得申请SSL证书,而所有公开证书都会进 crt.sh 这个公共日志库。在 crt.sh 搜 %.yourdomain.com,就能看到所有被签过证书的子域名。去年有个客户,live.yourdomain.com 下一口气冒出来三百多个变体,全指向同一个柬埔寨IP——全是比特币钱包钓鱼页。
发现恶意子域名后,怎么“斩草除根”?
删DNS记录?没用。
那些子域名压根不是你加的,你删不掉。关键不是清理表面,是掐断黑客的“生产流水线”。
第一步:锁死DNS控制台权限。
登录你的DNS服务商(比如阿里云DNS、Cloudflare、腾讯云DNSPod),进“子域名列表”或“DNS记录管理”,把所有非你本人添加的记录清空。然后立刻去“API密钥管理”里:
- 删除所有旧密钥
- 新建带最小权限的密钥(只读+仅限本域名)
- 开启双因素认证(2FA)
第二步:设个“空路由”陷阱。
在DNS解析里加一条通配符记录:*.yourdomain.com → A记录 → 0.0.0.0。
这样任何未授权的子域名请求,都会返回无效地址,黑客没法再利用。⚠️注意:这条会覆盖 www、mail 等合法子域名,所以必须先手动把它们单独加好A/AAAA/CNAME记录。
第三步:催搜索引擎“删缓存”。
- 在 Google Search Console 里,用“移除网址”功能,提交几个典型的恶意子域名URL(不用全提,选5–10个有代表性的)
- 在百度资源平台,上传一份“死链清单”(格式是纯文本,每行一个URL)
提交后不用干等,通常3–7天内,这些子域名就会从搜索结果里消失。
预防:让你的域名“百毒不侵”
补漏不如扎紧篱笆。 这三件事,今天就能做完。
动作1:开启DNS域名锁定。
在阿里云、Cloudflare 或腾讯云DNS后台,找“域名安全设置”或“高级防护”,打开“域名锁定”(Domain Lock)。开启后,连你自己都不能通过控制台或API删改DNS记录——除非先解锁。这招防的就是API密钥泄露后的自动化攻击。
动作2:让子域名变更“开口说话”。
用 dnstwist 写个简单脚本,每周自动扫一次你的域名,对比上次结果。有新增?立刻发邮件到你手机。我自己就设了一个,上个月 staging.yourdomain.com 突然冒出来——原来是开发同事本地测试忘关了,及时拦下,没给黑客留缝。
动作3:定期“扫墓”。
翻你DNS后台,把 test、beta、old、backup 这类明显是临时用的子域名全删掉。留着它们,等于在门口贴张纸:“此处无人看管,欢迎黑产入驻”。
今天就能做的1个具体操作
打开你正在用的DNS控制台(比如阿里云DNS、Cloudflare、腾讯云DNSPod),在搜索框里输入“子域名”或直接点“DNS解析记录”。
逐条看:这个记录是你自己加的吗?有没有 dev、test、staging、api 这类看着像内部用、但你完全想不起何时加的?如果是,立刻删除。
删完,点进“安全设置”或“访问控制”,把“允许通过API新增子域名”关掉,再把“操作需二次验证”打开。
整个过程不到5分钟。现在就去,别等下次收到Google的“危险网站”警告才动手。