干安全和运维这么多年,半夜被电话叫醒说“咱们官网打不开了”或者“客户说咱们网站跳转到博彩网站了”,这种心跳骤停的感觉太熟悉了。
很多兄弟一听到DNS劫持,第一反应是:赶紧登录域名控制台,把解析改回来,或者换个DNS服务商。
停!打住!这么干大概率会给自己挖大坑,甚至把攻击者留下的唯一线索给抹了。
今天咱们不扯虚的,直接从一线实战视角,把DNS劫持和域名安全事件的应急处置扒个底朝天。
开篇立规矩:处置DNS劫持的“四不要”与总原则
接到域名解析异常或劫持告警,先在心里默念这四条铁律,严禁执行以下操作:
- 不要没确认劫持层面就乱改DNS配置:你以为是解析被改了,跑去控制台改A记录,结果发现是本地运营商缓存问题,改配置不仅没用,还可能引发二次故障。
- 不要在没取证前就换解析服务商:直接把域名切到别的DNS,原来的操作日志和解析记录全丢了,事后拿什么溯源?
- 不要忽略本地缓存因素:用户端或运营商DNS缓存没刷新,你服务端改出花来,用户那边照样报错,这锅不能瞎背。
- 不要只恢复不溯源:解析改回来了就完事了?攻击者是怎么进来的?账号密码是不是还漏着?不查根因,明天他还能把你劫回去。
处置总原则(刻在脑子里):
“先确认劫持层面,再恢复解析;先保护域名账号,再排查根因。”
正确开局:第一件事是确认劫持发生在哪一层
别一上来就急着敲命令,先搞清楚现在的局面。
第一步:多地点对比解析结果。找几个不同地域、不同运营商的朋友,或者用在线拨测工具,看看是不是所有人都访问异常。
第二步:按四层往下收敛。
- 域名注册层:域名还在不在咱们自己名下?有没有被转移?
- DNS解析层:权威DNS服务器上的记录对不对?
- 本地/运营商缓存层:是不是本地DNS缓存没刷新?
- 应用层:解析对了,但网站内容被篡改了,或者HTTP被中间设备劫持了?
第三步:明确区分三类情况,决定响应级别。
- 域名被接管(高危):域名注册商变了,或者NS记录被改到了别人的DNS。这是最严重的,直接走域名找回流程。
- 解析被篡改(中高危):域名还在,NS记录没变,但具体的A/CNAME记录被改了。改回正确记录,排查账号安全。
- 链路劫持(中危):解析完全正确,但访问时HTTP被注入广告或跳转。必须上HTTPS。
排查主链路:可复制的命令与操作
排查必须形成证据链。以下是标准动作,命令可直接复制。
1. 多地解析命令对比解析结果
操作:使用dig或nslookup指定不同的公共DNS进行查询。
# 查阿里云DNS (223.5.5.5)dig@223.5.5.5 www.yourdomain.com A +short# 查腾讯云DNS (119.29.29.29)dig@119.29.29.29 www.yourdomain.com A +short# 查Google DNS (8.8.8.8)dig@8.8.8.8 www.yourdomain.com A +short现象与问题:如果不同DNS返回的IP不一样,说明存在缓存不一致或权威DNS被篡改;如果都返回了奇怪的IP,说明权威解析被改了。
2. 查看当前解析记录是否被改
操作:登录域名解析服务商控制台,查看当前生效的解析列表。
现象与问题:发现原本指向公司服务器的A记录,被改成了一个陌生的境外IP。实锤解析被篡改。
3. 查域名注册信息
操作:使用whois命令查询域名状态。
whois yourdomain.com现象与问题:看Registrar(注册商)有没有变,看Expiration Date(到期时间)是不是快到了,看Status有没有clientTransferProhibited(转移锁)。如果注册商变了,说明域名被转移了。
4. 查解析服务商登录日志
操作:在DNS控制台找“操作日志”或“登录日志”。
现象与问题:发现凌晨3点有个陌生IP登录了控制台,并删除了原有解析,添加了恶意解析。这是内部账号泄露的铁证。
5. 查域名是否被转移
操作:对比whois结果中的Name Server(NS记录)。
whois yourdomain.com|grep"Name Server"现象与问题:如果NS记录变成了ns1.attacker-dns.com,说明整个域名的解析权被接管了。[生产环境风险:这时候改A记录没用了,必须找回域名控制权!]
6. 查证书签发记录
操作:去 crt.sh 查询该域名近期的SSL证书签发记录。
现象与问题:发现攻击者用你的域名申请了免费证书。说明攻击者不仅劫持了解析,还试图做中间人攻击或钓鱼。
7. 查网站内容是否被挂马或跳转
操作:用curl看响应头和正文。
curl-Ihttps://www.yourdomain.comcurl-shttps://www.yourdomain.com|grep-i"script"现象与问题:如果返回302跳转到博彩网站,或者页面里多了一堆隐藏的<script>标签,说明是应用层被挂马或HTTP被劫持。
8. 查本地/运营商缓存因素
操作:清理本地缓存,或换DNS测试。
# Windows 清本地缓存ipconfig /flushdns# Linux 清 systemd-resolved 缓存sudoresolvectl flush-caches现象与问题:清完缓存后,解析恢复正常。说明只是本地或运营商DNS缓存了旧的错误记录,等TTL过期或手动刷新即可,服务端无需改动。
高频现场逐个拆
遇到具体场景,对号入座:
1. 域名被转移(注册商账号被攻破/邮箱被接管)
- 现象:
whois显示域名注册商变了,或者NS记录全变了。 - 命令:
whois yourdomain.com - 处理:[生产环境风险:最高危!] 立即联系原注册商客服,提交企业资质、域名所有权证明,走域名申诉找回流程。同时立刻修改域名注册邮箱的密码和MFA。
2. 解析记录被篡改(A记录指向攻击服务器)
- 现象:控制台里A记录的IP被改了。
- 命令:登录控制台核对记录。
- 处理:立刻改回正确IP;排查控制台操作日志,修改DNS控制台密码,开启MFA。
3. NS记录被改(整个域名解析被接管)
- 现象:
whois查出来的NS记录不是你们用的DNS服务商了。 - 命令:
whois yourdomain.com | grep "Name Server" - 处理:在域名注册商控制台,把NS记录改回正确的DNS服务商地址。注意:NS记录修改生效极慢,可能需要24-48小时。
4. 子域名被接管(未使用的子域名/悬空解析)
- 现象:主域名没事,但某个废弃的子域名(如
test.yourdomain.com)被解析到了别人的服务器。 - 命令:
dig test.yourdomain.com A - 处理:这种通常是CNAME指向了已释放的云资源(如AWS S3桶、GitHub Pages)。立刻在DNS控制台删除该悬空解析记录。
5. 链路劫持(HTTP被注入广告/跳转)
- 现象:解析IP完全正确,但浏览器访问时页面被插入了广告,或者被302跳转。
- 命令:
curl -v http://yourdomain.com看响应过程。 - 处理:这是运营商或中间路由设备干的。唯一解法:全站强制HTTPS,HTTP请求直接301重定向到HTTPS,让中间设备无法篡改内容。
6. 缓存投毒(用户端解析到错误IP)
- 现象:只有部分用户反馈打不开,且解析出来的IP很奇怪。
- 命令:让用户执行
ipconfig /flushdns。 - 处理:如果是大面积的,可能是运营商Local DNS被投毒。联系运营商客服投诉,同时临时把域名CNAME到CDN,利用CDN的节点缓存来绕过污染。
7. 域名过期被抢注
- 现象:
whois显示域名创建时间变成了最近几天,注册人变了。 - 命令:
whois yourdomain.com - 处理:域名已经被别人合法抢注了。只能尝试联系新注册人购买,或者启用备用域名。这属于严重的管理事故。
8. 账号无多因素导致被接管
- 现象:DNS控制台登录日志显示异地登录,且没有MFA验证记录。
- 处理:立刻踢出所有活跃Session,强制修改密码,必须开启手机验证码或虚拟MFA二次验证。
处置与恢复:分场景给策略
处置分三档:紧急恢复(改回正确解析) → 保护账号(改密+多因素) → 溯源(谁改的怎么改的)。
- 域名被转移怎么找回?
别自己在控制台瞎点。直接打注册商(如阿里云、腾讯云、GoDaddy)的VIP客服电话,说明域名被盗。准备好营业执照、法人身份证、域名证书。走人工申诉流程,必要时报警拿受案回执。 - 解析恢复的生效时间?
改A/CNAME记录,受TTL影响,通常几分钟到几小时生效。改NS记录,受上级注册局缓存影响,最长可能需要24-48小时。[生产环境风险:改NS前一定要确认新DNS配置已经100%正确,否则域名会彻底断网!] - 是否切换解析服务商?
如果原服务商被脱裤,或者内部有内鬼,必须换。如果只是单点账号泄露,改密加MFA即可,没必要换,换服务商迁移成本很高。 - 受影响用户怎么通知?
如果涉及资金或敏感信息跳转,必须发官方公告。口径:“因网络波动/域名解析异常,部分用户访问可能出现错误,我们已紧急修复。请勿在异常页面输入账号密码。” - 处置后验证:
用在线拨测工具(如站长工具、拨测网)全国多地验证解析是否恢复;检查SSL证书是否是自家的;用不同网络环境实际访问验证。
根因分析:别全怪黑客技术高
DNS被劫持,表面看是解析变了,根因往往在管理上:
- 域名账号弱口令/无多因素:DNS控制台密码是
123456,还没开MFA,一猜就进。 - 邮箱被攻破:找回密码通道失守,攻击者通过重置邮箱密码拿下了域名控制台。
- 解析服务商无变更告警:解析记录被改了,安全团队居然没收到短信或邮件告警。
- 未使用子域名未清理:项目下线了,DNS里的CNAME没删,导致子域名被接管(Subdomain Takeover)。
- HTTP明文传输:没上HTTPS,给运营商和中间设备留了劫持的后门。
- 域名过期无人管:财务没续费,或者域名管理员离职没交接,导致域名掉线被抢注。
如何用日志定责(形成证据链):
- 用控制台登录日志证明:是某员工账号在异地登录并修改了记录,定位到具体账号。
- 用操作变更日志证明:修改操作发生的具体时间,排除历史遗留问题。
- 用whois和NS记录证明:是注册商层面的转移,还是解析层面的篡改。
把这三段证据拼在一起,复盘报告交上去,责任清清楚楚。
事后加固要点
擦完屁股得防病:
- 域名账号多因素+强口令:所有涉及域名注册、DNS解析的账号,必须开启MFA,密码16位以上。
- 注册商域名锁定:在注册商控制台开启“域名转移锁”(clientTransferProhibited),防止被恶意转出。
- 解析变更告警:配置DNS控制台的操作告警,只要有人修改解析记录,立刻发钉钉/企微/短信给安全团队。
- 悬空子域名清理:定期跑脚本,对比CMDB里的资产清单和DNS解析记录,清理无主子域名。
- 全站强制加密:所有Web服务强制HTTPS,HSTS头拉满,杜绝HTTP链路劫持。
- 域名到期提醒:设置域名到期前90天、60天、30天的自动续费或人工提醒,绑定多个管理员邮箱。
- 备用解析服务商:核心域名使用双DNS(如阿里云+腾讯云),或者主用商业DNS,备用免费DNS,防止单点故障。
- 定期解析一致性检查:写个定时脚本,每天比对权威DNS和各地Local DNS的解析结果,发现不一致立刻告警。
总结:处置过程中高频踩坑
最后,回顾一下大家最容易踩的8个坑,有则改之:
- 没确认层面乱改配置:用户本地缓存问题,你跑去改权威DNS,越改越乱。
- 没取证就换解析商:一气之下把DNS切了,事后查不到是谁改的解析。
- 忽略本地缓存背锅:没让用户清缓存,自己在那排查半天服务端。
- 只恢复不溯源:解析改回来了,但控制台密码还是泄露的,第二天又被改。
- 悬空子域名被接管:老项目下线没删DNS,被黑客拿去搞钓鱼。
- 域名账号无多因素:裸奔的账号,被撞库直接拿下。
- 过期被抢注:域名到期没人管,被职业抢注人盯上,花大价钱赎回来。
- 没有解析变更告警:解析被改了半个月,直到客户投诉才发现。
处理DNS劫持是个拼细心和全局观的活,网络层的魔鬼都藏在解析记录里。别把安全做成简单的“改IP”,要把每一次异常都当成一次梳理域名资产和加固账号安全的机会。
如果你觉得这篇实战复盘对你有帮助,别忘了点赞、收藏、关注一键三连!你在处理DNS劫持或域名安全事件时还遇到过什么奇葩事或者坑?欢迎在评论区留言交流,咱们一起排雷!