游客发表
DNS劫持这事儿,持教程说穿了就是持教程有人在你查电话号码的时候,把答案给换了。持教程你问“百度服务器在哪”,持教程本该有人告诉你一个正确的持教程IP地址,结果中间有人抢答,持教程塞给你一个假地址。持教程你访问的持教程,就成了别人想让你看的持教程页面。
我最早接触这个,持教程是持教程好几年前在出租屋里折腾路由器。那会儿网速总是持教程不对劲,打开某些网站会弹广告,持教程但换手机流量就没事。持教程后来抓包一看,持教程DNS请求被人改过了——运营商干的,把不存在的域名解析到一个广告服务器上。这事让我意识到,DNS这个环节太脆弱了,明文传输、无验证、默认信任,简直是互联网的“信任漏洞”。
最土的办法,直接改你电脑的hosts文件。Windows在C:\Windows\System32\drivers\etc\hosts,Linux和macOS在/etc/hosts。加一行192.168.1.100 example.com,之后你访问example.com就直奔那个IP去了,根本不走DNS查询。
这招简单,但只能骗自己。局域网里想骗别人,得从网关下手。比如你控制了路由器,把DNS服务器地址改成自己的机器,然后跑个dnsmasq,想怎么解析就怎么解析。以前在公司内网测试,我就这么干过——把测试环境的域名指到本地,省得改代码。但要是拿来做坏事,整个局域网的人访问网银都可能被导到钓鱼站。
更隐蔽的做法是ARP欺骗。你往局域网里发假的ARP响应,告诉别人“网关的MAC地址是我”,流量就经过你机器了。然后你监听UDP 53端口的DNS查询,抢在真正的DNS服务器之前,伪造一个响应发回去。真正的响应回来时,人家已经拿着假IP去连接了。
这个手法在公共WiFi里特别常见。咖啡厅、机场、酒店,那些不加密的网络,随便一个树莓派就能搭起来。我见过有人用ettercap加dnsspoof,五分钟配好,连上WiFi的人访问任何域名都跳到指定页面。你说可怕不可怕?
上面那些都是小打小闹,真正影响大的是缓存投毒。攻击者向递归DNS服务器发送大量伪造响应,试图让服务器把假记录存进缓存。一旦成功,所有用这个递归服务器的用户都会拿到假IP。2008年Dan Kaminsky发现的那个漏洞,能让攻击者在几秒内污染缓存,当时几乎影响了整个互联网。
现在这种攻击难多了,因为源端口随机化、DNSSEC这些机制加上了。但老旧的递归服务器、配置不当的内网DNS,依然是活靶子。
普通用户能做的:用HTTPS,浏览器会验证证书,假网站没证书就露馅。或者换用DoH(DNS over HTTPS)、DoT(DNS over TLS),把DNS查询加密,中间人看不到也改不了。Firefox和Chrome都支持,Cloudflare的1.1.1.1和Google的8.8.8.8都提供DoH服务。
网络管理员该做的:启用DNSSEC验证,限制递归查询来源,监控异常DNS流量。别让内网DNS服务器对公网开放递归,那是自找麻烦。
说到底,DNS设计之初就没考虑安全,它假设网络是可信的。现在互联网早不是那个样子了。劫持手段层出不穷,防御也得跟上。你不管它,它就被人管。
友情链接