DNS劫持如何把恶意广告塞进你的网页?自查与防护指南

发布时间:2026/10/15 22:02:01
DNS劫持如何把恶意广告塞进你的网页?自查与防护指南
打开一个再普通不过的新闻网页发现页脚和侧边栏多出几个“热门游戏下载”“系统加速”的横幅。你以为是网站自己接的广告直到后来发现不管你访问哪个网站都能看到同一批“系统升级提醒”弹窗甚至连银行登录页都出现了“安全控件下载”的引导。这时候基本可以确定出问题的不是网站而是你访问网站前的那一步——DNS解析。最近圈子里都在传一个数字单日受影响用户数以百万计。听起来像大范围断网事件但实际情况比断网隐蔽得多它藏在一跳一跳的DNS请求里。你在浏览器敲下一个域名本该返回真实服务器的IP但中间有人把这条“路标”偷偷换了于是流量被带到了钓鱼页、广告页、伪造的升级弹窗甚至被截胡做成了点击欺诈。这篇文章我把整条链路拆开讲清楚DNS是怎么被做局的恶意广告是怎么被塞进正常页面的以及普通用户、企业管理员分别该怎么自查、怎么防。写给你三类人家里路由器常年用默认密码的普通用户能从这里学会判断自家网络是否被“动过手脚”负责公司网络运维的人能拿到一套内网DNS基线加固的思路做安全运营的同行攻击链拆解和检测清单可以直接抄进自己的排查手册。1. DNS劫持到底怎么发生的从“电话簿”被动手脚说起1.1 为什么偏偏是DNS一次解析决定流量去向DNS域名系统干的事本质上就是一本电话簿。你记住的是网站名字电脑需要的是服务器IP地址DNS负责把“名字”翻译成“地址”。这个翻译过程发生在你每一次访问网站之前而且绝大多数情况下你的电脑会默认信任一个DNS服务器——要么是路由器下发的要么是运营商分配的要么是你手动设置的。这里面藏着一个先天的设计问题早年DNS协议在设计时默认了网络环境是友善的服务器返回什么答案客户端就信什么缺少一套机制来校验“这个答案到底是不是真的来自权威服务器”。所以攻击者盯上DNS理由非常充分它是一个前置环节。所有流量都要先过DNS这一关劫持它等于在必经之路上设卡。它是“信任链”的最底层。你浏览器里装的任何安全插件能防页面上的恶意脚本但防不住“页面本身就被换成了假的”。它的异常很难被普通人察觉。网站还能打开只是偶尔多几个弹窗大多数人会觉得是网站自己的广告不会想到解析层出了问题。用一个生活化类比DNS劫持相当于你把车开到路口路牌被人换了方向导航还显示一切正常。你并不知道自己已经偏离了原定路线直到看见路边的风景不对。1.2 攻击者的“杠杆”改一次配置影响一整片设备DNS攻击之所以能实现“日均百万用户”这种量级靠的是杠杆效应。攻击者不需要一台一台攻击用户电脑只要搞定一个“中间分发节点”就能同时影响接入这个节点的所有设备。最典型的杠杆点是家庭路由器。绝大多数家用路由器承担着“DNS转发者”的角色家里所有手机、电脑、电视盒子、智能家居设备都把路由器当作默认DNS服务器路由器再去向上游的公共DNS或运营商DNS查询。一旦路由器本身的DNS配置被篡改整屋设备的域名解析都会指向攻击者指定的恶意DNS服务器。一台路由器平均覆盖一个家庭三五台设备如果是出租屋、小型办公网络影响面还会成倍放大。企业内网里的杠杆点更多域控服务器上的DNS策略、DHCP下发的DNS配置、内部递归解析器任何一个环节出问题影响的都是整个网段的终端。再加上现在物联网设备大规模普及路由器、摄像头、智能电视、NAS这些设备往往没有及时更新固件它们本身就是天然的“肉鸡池”。攻击者只要批量扫描互联网上开放管理端口、且还在使用默认密码的设备就能一次性控制大量“跳板”逐层渗透。这也是为什么我觉得单纯讨论“某个漏洞补丁”意义不大——DNS这个体系的问题更多是信任模型和运维习惯的问题。攻击者利用的往往不是某个0day而是默认密码、未修复固件、明文协议这些老问题。2. 恶意广告完整攻击链拆解从篡改解析到收割流量2.1 第一步三种常见方式拿下DNS解析控制权把整条攻击链拆开看第一步永远是把“解析控制权”拿到手。实操中常见的是三种路径我分别说下原理和手法。第一种是路由器配置篡改。攻击者通过扫描找到了你家路由器的管理后台可能是默认账号密码没改也可能是管理端口暴露到了公网或者固件存在远程执行漏洞。拿下来之后进管理页面找到WAN口或DHCP设置里的DNS选项改成自己控制的恶意DNS服务器地址。这块改完用户几乎无感知因为上网、网页、视频统统正常密码也不用重新输入只是后台解析结果变了。第二种是DNS缓存投毒。这种攻击不需要控制任何路由设备而是直接伪造DNS响应骗过递归服务器让它在缓存里存下错误的解析记录。早年经典的攻击手法是通过向目标递归服务器发送大量伪造的应答包同时猜测事务ID和源端口一旦命中错误记录就被缓存下来了。现在虽然有了端口随机化和DNSSEC但在一些防护不到位、配置老旧的递归服务器上这类攻击依然有生存空间。缓存投毒狠的地方在于它污染的不是一台终端而是整台递归服务器服务的所有用户。第三种是公共网络里的套牌DNS。攻击者在公共Wi-Fi环境中架设一个伪装成运营商的无线热点然后自己搭一个DHCP服务器向所有连进来的终端下发“网关是我、DNS也是我”的配置。用户连接了来历不明的Wi-Fi所有DNS查询本质上都在跟攻击者的服务器对话。这种场景在商场、咖啡馆、火车站特别常见攻击成本极低只需要一台笔记本开个热点。2.2 第二步把恶意广告“插”进正常页面的几个手段拿到解析控制权之后广告是怎么被“插”进正常页面的我见过的手段主要有四类按隐蔽程度排序第一类是NXDOMAIN劫持。用户访问的域名如果不存在了、输错了或者某个子域名没有解析记录恶意DNS服务器会返回一个“广告页”的IP把用户带到充满推广链接的页面。这种手法以前很多做域名停靠的灰色业务就在用攻击者只是把同一套思路放大拦截更多“无效流量”。第二类是泛解析污染。恶意DNS服务器对某个域名下的所有子域名都返回同一个恶意IP不管用户访问的是主站、图片站还是接口站全部指向同一个钓鱼或广告页面。这个手法在攻击一个具体站点时特别有效尤其是那些没做证书固定、用户靠书签访问的站点。第三类是定向替换广告域名。很多正常网页会从第三方广告联盟加载横幅和弹窗页面本身是正常的只是广告位资源来自特定广告域名。恶意DNS把“广告域名A”解析到一个恶意IP用户打开正常网站后广告位加载出来的是钓鱼页或伪装成“系统升级”的弹窗。这种手段最难识别因为网站本身没被篡改用户看到的却是异常内容。第四类是配合HTTP流量劫持做内容注入。DNS被劫持之后攻击者可以进一步配合对HTTP流量的中间人处理在页面里注入一段脚本这段脚本再动态生成广告。由于很多网页还停留在HTTP明文时代流量经过攻击者控制的链路插入一段脚本并不难。这类手法的危害不只是广告脚本还有可能被替换成挖矿代码、钓鱼表单或勒索提示。2.3 第三步赚到钱且不被封的套路攻击者折腾这么大一圈最终目的还是变现。恶意广告的变现方式往往是多层嵌套的按点击付费。伪造的高曝光广告带来大量点击每点击一次产生分成收益。从“百万用户级别”的流量池来看即使点击率只有千分之几收益也相当可观。推广“安全软件”和“优化工具”。弹窗引导用户下载所谓的系统加速器、安全管家实际上安装的是捆绑流氓软件或广告插件每成功安装一个攻击者能从推广联盟拿到固定分成。劫持电商返利链接。把用户访问电商网站的流量导向带推广参数的链接买家正常购物攻击者白拿佣金。二次分发恶意载荷。最严重的情况是广告弹窗根本不是目的而是试探。弹窗页面里藏了漏洞利用代码用户一旦在弹窗页完成某个下载行为后面还有RAT、勒索软件等着。为了不被快速封杀攻击者在基础设施上也非常讲究。域名批量注册、短生命周期轮换是标配解析记录做成“快闪式”几分钟换一个IP让黑名单追不上部分团伙用Fast-Flux技术让同一个域名轮换绑定到数百个IP的僵尸网络节点上检测系统八成追到一半就追不动了。3. 高频踩坑场景实录家庭、企业、公共网络3.1 家庭路由器成为“帮凶”的典型路径去年我帮一位朋友排查家里的网络问题现象是所有设备上都能看到同一个“浏览器需要更新”的浮层点了下载之后电脑开始卡顿任务管理器里多出好几个没见过的进程。我第一反应就是让他登路由器后台看一眼DNS设置他还不信说路由器密码虽然没改过但外人怎么会知道自己家宽带密码。结果登上后台一看DNS主服务器被改成了一个非常陌生的地址。朋友家的路由器是很多年前买的老款管理后台一直用的默认密码admin/adminWAN口的远程管理功能还开着等于把大门钥匙挂在了门口。这类案例我见过不止一次。家庭场景的攻击路径基本都符合这个规律设备老、密码弱、固件不更新、远程管理裸奔。还有一类更容易被忽略的是安装了来路不明的“网络加速”“DNS优化”类App。这些App本身就可能内置了篡改DNS的逻辑安装时索要“修改网络设置”权限用户一旦授权DNS就被改到软件服务商指定的服务器上。这类软件还会推送自家广告本质上就是一种披着工具外衣的劫持。3.2 企业内网DNS中毒的高危场景企业场景比家用复杂得多。我接手过一个模拟项目案例某公司的内网职员反映访问公司内部知识库时偶尔会跳到一个长得几乎一样的登录页但登录名密码输进去之后再登正式系统却提示密码错误。后来排查到内部DNS服务器上——问题出在DNS转发配置。这台内部DNS被设置成可以转发外部查询而它上游的某个公共DNS缓存被污染过内部系统域名恰好和外部某个域名前缀一致缓存投毒的结果被带了进来。企业内网DNS中毒的另一个高发点是测试环境和生产环境共用DNS。某开发者在测试环境改了条A记录想验证一个新服务结果改完忘了清理测试配置被同步到了所有内网用户。这种不是故意攻击但后果比攻击还难查——所有员工访问那个内部系统都被解析到了测试环境的IP页面看起来“能打开”但数据都是旧的。真正恶意的企业级DNS攻击目标通常不是广告而是凭据窃取。攻击者通过投毒让内网用户访问到钓鱼站点等用户输入域账号密码之后再进行下一步渗透。广告收益只是顺手的事拿到企业内网的账号才是真正的目标。3.3 公共Wi-Fi里的“套牌DNS”公共Wi-Fi场景是这三类里最容易被普通用户踩中的。攻击者架设一个热点名字起成和附近商场、机场官方Wi-Fi几乎一样或者干脆就是“免费WiFi”。连接之后攻击者通过DHCP下发的DNS配置让所有连入设备的解析请求都经过他的服务器。这种场景下的恶意广告往往表现为“连接Wi-Fi后弹出一个全屏广告页”或“所有网站顶部多出一条黄色横幅”。很多用户以为这是Wi-Fi登陆页面的一部分随手就关了。但攻击者真正想做的是让用户在这个“广告页”上输入手机号、验证码、甚至支付信息。技术上这不算高深纯粹是利用了用户对“免费网络”的信任。4. 自查流程三步定位本地DNS是否被劫持4.1 用命令比对解析结果最快的第一道验证如果你怀疑家里的网络出了问题第一步不用装任何工具系统自带的命令就能验证。Windows上打开命令行cmd执行nslookup www.example.com先记录下返回的IP地址。然后再指定一个你知道可信的公共DNS服务器做对比nslookup www.example.com 8.8.8.8如果两个结果返回的IP不一致而且第一个结果指向的是一个陌生IP那基本可以确定本地DNS的解析已经被篡改。Linux和Mac上对应的命令是digdig www.example.com dig 8.8.8.8 www.example.com对比方法一样。需要注意的一个细节是不要只看IP是否相同要关注返回的“服务器”字段。如果dig结果显示查询的应答来自一个你根本不认识的地址即使IP碰巧和公共DNS结果一致也说明中间链路存在问题。另外有些网站本身做了负载均衡不同DNS服务商返回的IP可能不一样——这种情况下不要急着下结论多测几个域名用多个公共DNS交叉验证。4.2 检查系统与路由器的DNS配置找到“被改过的痕迹”命令验证发现问题之后下一步是找出DNS配置是在哪里被改的。先看终端设备自己的配置。Windows执行ipconfig /all关注“DNS服务器”那一行。如果地址不是常见公共DNS也不是你所知道的路由器网关地址而是个来历不明的公网IP那说明系统的DNS配置被手动改过。Linux下查看cat /etc/resolv.conf某些Linux发行版的网络管理配置在/etc/NetworkManager/目录下也需要一起看。手机的检查路径是进入Wi-Fi设置找到当前连接的网络查看“高级选项”或“静态配置”DNS一栏如果被填入了陌生地址同样要警惕。再往上走一层登录路由器管理后台找到“网络设置”或“WAN口设置”查看手动配置的DNS服务器。正常家庭网络这里通常填的是运营商自动获取的地址或者什么也不填自动获取。如果这里被填入了两个陌生的固定IP多半就是被入侵过的痕迹。我遇到过一种更隐蔽的情况路由器显示的是“自动获取”但运营商光猫下发的DNS本身就是被篡改过的。这种比较麻烦需要进光猫管理页面单独看。4.3 流量侧的特征与日志观测判断攻击是否正在发生如果命令验证和配置检查都没发现问题但恶意广告现象依然存在就需要从流量侧做观测了。在网关或路由器上开启DNS日志重点关注几类特征大量终端在极短时间内请求了同一批陌生域名而这些域名没有任何业务关联。域名本身具有极强的随机性比如“x7f2k9q1.example”这种前缀后缀毫无意义的组合典型的Fast-Flux特征。解析结果频繁变动的域名同一域名的TTL被设置成极短比如60秒以内每次查询返回的IP都不同。终端对某些根本不在业务范围内的域名发起了DNS请求比如智能电视在访问一个只在攻击者控制列表里出现的域名。这些特征在网络里单独出现一两个可能是有异常流量但如果集中出现基本可以断定有恶意DNS活动。有条件的话可以在网关镜像口挂一个抓包工具过滤DNS协议UDP/TCP 53端口观察一个终端在固定时间段内的DNS查询序列正常情况下应该是“分散、低频、有明确目的”异常情况则是“高频、集中、无明确业务逻辑”。5. 分层加固家庭和企业应该分别怎么做5.1 家庭用户的“三件套”加固家庭场景的防护不用做很复杂把三件事做扎实就能挡掉绝大多数攻击路径。第一件改路由器管理密码、关闭远程管理。这一点我反复强调因为绝大多数家用路由器被入侵都是默认密码和远程管理端口惹的祸。登录路由器的管理地址在“系统管理”或“远程管理”里把WAN口访问关掉同时把默认密码改成强密码。这一步操作十分钟能挡掉外面扫描器的绝大多数尝试。第二件路由器固件升级到最新版本。很多路由器厂商其实在后续固件里修补了远程执行和DNS注入类漏洞但用户长期不更新等于带着已知漏洞裸奔。升级之前先备份路由器配置升级之后确认DNS设置没被重置成异常值。第三件把设备端的DNS手动指定为可信公共DNS。在路由器WAN口设置里或者在每台设备的网络设置里手动填入一个你信任的DNS服务器地址。这里需要提醒的是公共DNS虽然能规避运营商层面的劫持但前提是你手动指定的服务器本身可信而且你确定网络上没有攻击者能把你的请求拦下来。最稳妥的方式是配合加密DNS一起用后面讲协议方案时会展开。另外手机上不要安装来路不明的“网络加速”“DNS优化”类App。这类工具经常申请“修改网络”权限本质上就是把DNS控制权交出去。家里有智能电视、NAS这类设备的话同样需要留意它们的DNS设置它们往往没有像电脑和手机那样容易观察被篡改了也看不出来。5.2 企业网络的DNS防线配置要点企业网络里DNS被劫持的影响面远大于家庭所以防线也得成体系。我按从底层到上层的顺序整理了一个加固清单加固层面具体动作解决的问题网络层防火墙只放行指定DNS出口终端不能直连外部任意DNS防止终端绕过内部解析器避免DNS流量失控服务层内部DNS采用分离解析架构内网域名和外网域名走不同解析器避免外部缓存污染影响内网解析协议层启用DNSSEC校验防止缓存投毒和伪造应答监控层部署DNS审计日志与异常告警规则快速发现异常解析与可疑溯源管理面定期更换DNS服务器管理凭据限制管理网段访问防止DNS服务器本身被攻破篡改企业内网的DNS出口管控是很多团队容易忽略的点。绝大多数企业的边界防火墙默认允许所有终端发起外网DNS查询这意味着就算你内部解析器做得再安全终端也可能绕过你直接向外部恶意DNS发起解析。更狠的还有DNS隧道攻击——攻击者用地狱般的低频DNS查询做隐蔽通道把所有数据切成小块包在DNS请求里外传。所以出口方向的53端口只允许指定解析器出站是成本最低、效果最明显的一道防线。RPZResponse Policy Zone是另一个被低估的能力。它的作用相当于给DNS加了一道“内容过滤”内网用户解析某个恶意域名时解析器不会直接返回真实IP而是返回一个黑洞地址或者告警页面。威胁情报源提供的恶意域名库可以直接喂给RPZ实现分钟级的拦截能力。对于大多数企业而言部署RPZ比一个个配置终端防火墙要高效得多。5.3 协议层面的解决方向DNSSEC与加密DNS到底解决什么问题前面讲的都是运维手段但DNS攻击之所以能成立底层原因是协议在设计上缺乏“认证”和“加密”。所以业内提了两个层面的解决方向它们解决的问题并不相同很多人混为一谈这里拆开说。DNSSEC解决的是“这个答案是不是真的”。它通过数字签名机制让权威服务器对解析记录做签名递归服务器拿到应答后先验证签名验不过就丢弃。相当于电话簿每一页都盖了防伪章伪造号码册子过不了验证。它防的是缓存投毒和伪造应答但不能防“合法DNS服务器被恶意配置成错误答案”——因为签名链确实有效只是内容本身被改了。所以DNSSEC是安全基座不是万能药。加密DNS解决的是“查询过程是不是被偷看和篡改”。常见的协议是DoTDNS over TLS和DoHDNS over HTTPS。它们把DNS查询内容加密让网络链路中的中间人看不到你在查什么域名也没法在传输过程中修改应答。它防的是公共Wi-Fi的窃听和中间人篡改。需要特别说明的是加密DNS在做的是“保护你本机的DNS请求不被偷改”这是网络安全的正当加固手段。对普通用户而言目前最简单有效的组合是设备上使用支持加密DNS的解析设置同时在路由器层面也启用加密DNS上游。对企业的建议是先保证内部解析器支持加密查询再逐步过渡。部署的时候要注意兼容性——有些老设备不支持加密DNS强制切过去会导致解析失败。5.4 容易忽略的细节和“送命”操作最后说几个我在实际踩坑中总结的细节这些细节网上很少被集中提到但每一条都可能让你前功尽弃。第一加密DNS不是全搞定。如果你的浏览器使用的是系统默认DNS解析而系统又没配置加密DNS只在浏览器层面开启DoH只能保护浏览器流量其他App的请求照样明文走53端口。更隐蔽的是某些系统在“自动代理配置”场景下会绕开DoH设置。所以配置完之后一定要用抓包工具验证一下53端口还有没有明文请求流出。第二DNS轮换和TTL缓存问题。你改了DNS配置之后旧解析结果可能还在缓存里“改完立刻生效”是错觉。排查和测试时要留意TTL值改完配置最好清一下DNS缓存Windows执行ipconfig /flushdns再等待对应时长才能确认新配置真正生效。第三内网测试环境和生产环境一定要隔离。我在前文提到过测试记录被同步到生产导致全公司解析错乱的事故这种“自己人坑自己人”的情况比外部攻击更频繁。解决办法是在DHCP里给测试网段分配独立的DNS服务器或者在DNS服务器上按网段做视图隔离绝不能让测试解析记录无差别返回给正式网段。第四警惕“安全软件”本身的劫持行为。有些安全软件、PC管家类工具在安装后默认接管系统DNS设置并且会拦截、改写部分域名的解析结果用于推送自家的资讯和广告。这类行为在合规性上很有争议但对用户来说它的技术表现和恶意劫持几乎一样解析结果被改、页面被注入内容。排查时如果发现DNS设置是被某个安全软件改的不用怀疑自己是不是中了更严重的攻击先看这个软件的功能设置里有没有“DNS保护”或“网页加速”之类的开关关了再观察。最后再分享一个我自己的习惯每隔一段时间我都会随机抽几个常用网站用nslookup对比一下解析结果。这套操作不用任何安全工具五分钟能跑完但能帮你尽早发现家里的路由器、运营商链路或者设备本身出了问题。别等到所有网页都弹广告、电脑明显变卡了才想起来查——DNS这个环节越早发现损失越小。