你输入了
www.bank.com,持原回车。持原浏览器开始查 DNS,持原问了一圈“这个域名对应哪个 IP”。持原正常情况下,持原答案来自你的持原运营商 DNS 或 8.8.8.8 这类公共解析器,返回的持原是银行真实服务器的 IP。但如果这条查询链路上有人动了手脚,持原返回的持原可能是攻击者控制的服务器 IP——你看到的页面和真银行一模一样,但所有数据都进了别人的持原口袋。这就是持原 DNS 劫持。它的持原核心逻辑不复杂:DNS 协议本身几乎没有验证机制。1983 年设计 DNS 时,持原互联网还是持原个互相信任的小圈子,查询和应答都是持原明文 UDP,源端口和事务 ID 是仅有的“防伪标记”。攻击者只要能在正确的时间窗口里猜中这两样东西,就能伪造一个应答包抢先送到你机器上。你的系统一看:事务 ID 对上了,端口也对,收下。真正的 DNS 服务器稍后返回的正确应答反而被丢弃。
这个“抢答”有个术语叫 DNS 缓存投毒。2008 年 Dan Kaminsky 披露的那个漏洞影响面极大——攻击者不需要直接劫持你的机器,只要污染了递归 DNS 服务器的缓存,所有用那台服务器的用户都会被导向恶意 IP。当时几乎全世界的 DNS 服务器都中招,厂商连夜打补丁。那次事件之后,DNS 查询开始普遍启用随机源端口,把攻击者需要猜的位数从 16 位提到 32 位,暴力猜中的概率大幅下降。
但劫持不止这一种玩法。更粗暴的方式是在网络路径上直接拦截 DNS 查询并伪造应答。公共 Wi-Fi 是重灾区。你在咖啡馆连上某个免费热点,路由器把 DHCP 下发的 DNS 服务器设成它自己,然后对所有域名查询返回它想要的 IP。你访问任何网站,它都能给你塞一个广告页或者钓鱼页。2014 年有安全团队做过实验,在机场、酒店、咖啡厅的公共 Wi-Fi 里,DNS 被篡改的比例高得吓人。有些是运营商干的,插入广告;有些是恶意热点,直接偷账号密码。
还有一种发生在本地。你电脑里的 hosts 文件、路由器固件的 DNS 设置、甚至浏览器插件,都可能被恶意软件改掉。2019 年有个叫“Roaming Mantis”的团伙,专门攻击家用路由器,改掉 DNS 设置,把用户往钓鱼页面引。用户完全无感,因为浏览器地址栏显示的域名是对的。
DNS over HTTPS(DoH)和 DNS over TLS(DoT)是目前对抗劫持的主流手段。它们把 DNS 查询加密后走 HTTPS/TLS 通道,路径上的攻击者看不到内容,也没法伪造应答。Firefox 和 Chrome 都已经内置了 DoH 支持。但这事也有争议——加密 DNS 意味着网络管理员和 parental control 软件更难监控用户访问了什么。英国就曾对 DoH 的普及表示过担忧。技术从来都是双刃剑。
检测 DNS 劫持不算太难。如果你访问某个网站时页面明显不对,但换用手机热点就正常,大概率是当前网络的 DNS 出了问题。或者用
nslookup分别向本地 DNS 和 8.8.8.8 查询同一个域名,对比返回的 IP 是否一致。不一致的话,中间有人做了手脚。防御层面,普通用户能做的有限但有用:路由器管理密码别用默认的,固件及时更新;公共 Wi-Fi 下尽量用 VPN 或开启浏览器的 DoH;操作系统和浏览器保持最新版本。企业侧则需要部署 DNSSEC 验证,虽然 DNSSEC 的部署率至今仍然不高,全球范围内大概只有三成左右的域名启用了它。
DNS 劫持之所以长期存在,根本原因在于 DNS 这套基础设施太老太开放,而它又处在整个互联网访问链条的最前端。改起来牵一发动全身。你每次输入网址到看到页面的那几百毫秒里,DNS 查询可能已经经过了四五个节点,任何一个环节出问题,你看到的就不是你想看的那个网站。
顶: 99617踩: 889






评论专区