先说明一句:这类标题在技术社区里很常见,但真正有价值的从来不是“怎么实施劫持”,而是“劫持到底怎么发生、怎么被我发现、怎么把它挡住”。这篇文章我完全站在防御者的角度来写,把自己过去处理过的DNS劫持事件拆开讲清楚。无论你是企业网管、站点运维,还是普通用户,看完之后都应该能独立完成一次DNS安全排查,并且知道该在哪些环节把洞补上。
1. DNS劫持的本质:为什么域名解析会成为攻击目标
1.1 一次“网页打不开”背后的完整解析链路
先捋一遍DNS解析的正常流程,因为不搞清楚正常长什么样,就没办法判断什么是异常。
你在浏览器输入一个域名,操作系统首先查本地 hosts 文件,然后查本地DNS缓存,接着把请求发给配置的递归DNS服务器(比如运营商给的114.114.114.114或8.8.8.8)。递归服务器帮你一层层查询,最终拿到这个域名对应的IP,返回给浏览器,浏览器再向这个IP发起HTTP请求。
整个链路看起来简单,但它涉及的节点非常多:终端的hosts文件、终端DNS缓存、网络出口的路由器、运营商递归DNS、权威DNS服务器、以及中间传输链路。任何一个节点被篡改,用户拿到的都可能是一个错误的IP。
我遇到过一台服务器,健康检查一切正常,但用户反馈时好时坏。后来抓包才发现,终端解析出来的IP根本不是服务器真实IP,而是某个CDN节点IP。这就是典型的解析链路被动了手脚——某个中间环节把域名指向了错误位置,流量被引到了别处。
1.2 劫持可能发生的四个关键位置
DNS劫持本质上不是一种单一攻击手法,它是一类“对解析过程任意环节做手脚”的攻击统称。按发生位置分类,更容易理解它的全貌:
本地hosts文件篡改。 这是最古老也最直接的方式。hosts文件优先级最高,只要在里面加一条记录,域名解析就会被强行指向指定IP。早期的网吧、局域网环境里,通过修改hosts来屏蔽或引流是常规操作。
终端DNS配置篡改。 攻击者通过木马或恶意脚本,把系统网卡里的DNS服务器地址改成自己控制的服务器。这样终端所有域名解析请求都会经过攻击者,他就能按需返回伪造IP。
路由器DNS设置篡改。 家用路由器管理密码弱是重灾区。攻破路由器后,把LAN侧下发的DNS改成恶意地址,整条网线下所有设备全部中招,而且终端上几乎看不出异常。
链路或递归服务器劫持。 运营商层面或公共WiFi环境下的劫持多发生在这里。公共WiFi的网关直接拦截DNS请求,返回伪造响应,或者运营商在某些网络节点对特定域名做内容替换。这类劫持对用户完全透明,用户体验往往只是“打开了奇怪的页面”。
1.3 理解攻击者的动机,才能知道该防什么
做防御的一定要搞明白攻击者想得到什么,不然防护方向很容易跑偏。
第一类动机是流量变现。把热门网站劫持到广告页,或者插入推广脚本,这是最常见的黑产模式。典型特征是页面里多了不存在的浮层、跳转链接,或者部分资源加载变慢。
第二类动机是钓鱼欺诈。把银行、电商、邮箱域名解析到高仿的钓鱼站点,用户输入账号密码直接进攻击者的数据库。这类劫持目标明确,通常带有时间窗口,因为钓鱼站点很快会被发现和封禁。
第三类动机是中间人窃听。攻击者把HTTPS请求降级为HTTP,或者通过伪造证书截取流量,窃取表单里的敏感数据。这类攻击技术门槛更高,但一旦得手,损失也最大。
理解这
