域名劫持原理及实现
域名劫持原理及实现
你输入 bank.com,回车,劫持及实页面跳出来一个和银行官网长得一模一样的域名原理登录框。你输了账号密码。劫持及实三天后,域名原理卡里的劫持及实钱没了。这不是域名原理电影桥段,是劫持及实域名劫持最经典的变现路径。整个过程里,域名原理你的劫持及实浏览器没报任何错,地址栏显示的域名原理也确实是 bank.com——但那个“bank.com”已经指向了攻击者的服务器。
要理解这件事,劫持及实得先看DNS在干嘛。域名原理你敲下域名,劫持及实操作系统先查本地hosts文件,域名原理没有记录就去找递归DNS服务器。递归服务器一路问根域名服务器、顶级域服务器、权威域名服务器,最后拿回一个IP地址。浏览器拿着这个IP去建连接。劫持就发生在这条链路的任何一个环节——只要有人把“域名→IP”这个映射关系改掉,你就被送到别处去了。
最常见的入口是本地hosts文件。Windows在 C:\Windows\System32\drivers\etc\hosts,Linux在 /etc/hosts。恶意软件拿到管理员权限后,往里写一行 192.168.1.100 bank.com,完事。你下次访问银行,流量直接进了内网那台机器。这种手法粗糙但管用,尤其是配合钓鱼页面。我见过一个案例,攻击者用hosts劫持了某公司内网OA系统的域名,员工连续两周都在假登录页上输入凭证,IT部门愣是没发现——因为页面和真的一模一样,连SSL证书都是自签的,浏览器只弹了个小警告,没人细看。
比hosts更隐蔽的是DNS服务器劫持。攻击者控制一台递归DNS服务器,或者直接入侵运营商级别的DNS设备,把特定域名的A记录改成自己的IP。2010年百度被黑那次,就是DNS解析记录被篡改,导致全国大面积访问异常。这种级别的劫持,普通用户完全无感——你本地没动过任何配置,但递归服务器返回的就是假地址。
还有一种叫DNS缓存投毒。攻击者向递归DNS服务器发送伪造的响应包,抢在真实响应到达之前把假记录塞进缓存。Kaminsky在2008年发现的漏洞就是这个路子:利用DNS协议事务ID和端口号的预测缺陷,每秒能投毒几千次。后来DNSSEC就是为了堵这个口子,但部署率到今天也不算高。
实现一次劫持,技术上并不复杂。假设你拿到了一台路由器的控制权(默认密码没改那种),在DHCP设置里把DNS服务器指向自己的机器。然后跑一个假的DNS服务,收到查询请求就返回你指定的IP。剩下的事就是克隆目标网站。用 httrack 扒下前端资源,改掉表单提交地址,找个VPS挂上去。整个过程熟练的话,半小时搞定。
更粗暴的做法是ARP欺骗。在局域网里发伪造的ARP响应,把自己伪装成网关。受害者所有流量都经过你的机器,你在中间做DNS响应篡改。Wireshark抓包能看到DNS查询明文跑过去,你直接构造一个假响应扔回去,比等真服务器回复快得多。咖啡厅、机场、酒店这些公共Wi-Fi是重灾区,我每次连上陌生网络,第一件事就是手动设DNS为 1.1.1.1 或 8.8.8.8,虽然不能防所有劫持,但至少能挡掉本地路由器层面的篡改。
防御手段其实就那几样,但真正用起来的人不多。DNSSEC能验证响应真实性,DoH和DoT把DNS查询加密,HTTPS把网站内容加密。问题在于,这些技术要么部署麻烦,要么有性能损耗,要么需要服务端配合。普通用户能做的,就是别乱连公共Wi-Fi,路由器改默认密码,hosts文件设成只读。企业层面,内部DNS服务器做响应策略,监控异常解析记录,比事后追查有用得多。
域名劫持的本质是信任链断裂——你信任DNS返回的地址,信任地址栏显示的域名,信任页面上的锁图标。攻击者只需要打破其中一环,剩下的信任就全塌了。技术上讲,这事没有一劳永逸的解法,只有不断加高攻击者的成本。至于普通用户,记住一件事:地址栏里那个域名,不一定是你以为的那个。
```