小谈网络劫持

Photo by Don Mingo on Unsplash

现在的某些情况下网络环境是恶劣的,运营商(或者是公司、公众场合等环境)一般作恶的方式分两种:DNS 劫持和 HTTP 劫持。

我为了通俗易懂的讲法会不严谨的浅谈,大家如果想要更深入了解还是需要查阅专业文档。

什么是 DNS

DNS 大概是干什么的?简单的说我们上一个网站是通过网址来访问的,但是计算机和计算机间是通过 IP 地址,这个发起请求(DNS 客户端)并接受请求并将结果返回给你(DNS 服务端)的角色就是 DNS。这样的好处是不仅方便记忆(记网址总比记 IP 好吧?)且还有比如一个网站在各地区都有服务器时指定最近最佳的服务器等作用。

DNS 劫持

先说 DNS 劫持,这也是早年运营商的普遍做法,具体表现是上网的时候不小心输错成一个不存在的网址的时候,发现报错页面不是浏览器自身的报错而是跳转到一个页面,上面花里胡哨的界面不仅告诉你输入的网址不存在,往往还带着各种网址导航和广告,这就是早年常见的电信的「114 导航」和联通「沃管家」。

那么这是怎么做到的?原因是你上网的时候运营商会分配给你网络配置,比如 IP、子网掩码等其中就包括 DNS。这个运营商给你的 DNS 是可以做些小手段的,比如你上了一个运营商认为你不该上的网站或者输错了网址本该弹出报错页面时,将结果指向到运营商的服务器或者存在利益交换的广告商那。

因为人家觉得一来报错页面不美观,二来这个报错页面可以利用,比如做个网址导航(带上返利参数)再加些广告,反正用户大多搞不懂计算机,这不就是个报错页面么?

还需要注意的是,DNS 劫持不仅是运营商可以这么干,还有比如公众场所、公司等提供你上网的环境都可以这么干。

那么解决方法也很简单,既然运营商给的 DNS 解析结果不准确还有小动作,那我们就换一个可以信任的公共 DNS 不就好了嘛。

DNS 抢答

在使用公共 DNS 规避掉运营商 DNS 带来的隐患后,人家不高兴了,比如中国移动觉得你们这些客户乱用 DNS 得到的查询结果并不是符合我移动的网络环境(移动的宽带线路不如电信和联通),如果对客户的 DNS 请求识别并修改,客户不仅不知道还能解决因为我移动的线路不好导致上网慢而投诉的问题,如此一来,国安民乐,岂不美哉!

DNS 协议使用 UDP 协议通讯,与 TCP 协议不同 UDP 协议没有握手所以不需要双方确认数据故而无法保证数据传输的完整性,网络管理者可以在网络出入口旁路设置 IDS 入侵检测对 53 端口的 UDP 报文进行对比,当符合关键字时则向发出请求的客户端发送预先设置的结果包,此时因为延时结果包会先于真正的 DNS 服务器到达客户端,而 DNS 客户端会采用最先返回的结果。

这个即便客户设置使用其他 DNS 服务器但仍旧得到我移动给出的解析结果的「骚操作」就是 DNS 抢答(也叫 DNS 污染),中国移动还把这项技术搞了个专利(查阅基于旁路抢答机制的异网DNS管控实践)。

一个简单的自查方法就是随便向一个 IP 地址请求一个域名的解析都可以得到结果。(另外 114DNS 也给了一个自查方法使用命令 nslookup whether.114dns.com 114.114.114.114 如果查询结果是 127.0.0.* 即是被运营商 DNS 污染了)

而解决方法说简单也简单说难也难,比如既然最先响应结果包不准确那么就丢弃最先响应结果包,但是劫持者(一般是运营商)可以发一个假的就可以发一千个假的,那我采用最后的响应结果?那运营商还可以屏蔽局域网外的 53 端口通讯(53 端口一般用于 DNS 服务)

再者也可以对 DNS 传输进行加密,但是目前 DoT(DNS over TLS) 和 DoH(DNS over HTTPS) 尚未普及,而如 DNSCrypt 等 DNS 加密软件也不是各平台都有,对 DNS 加密的普及还需要一定时间。

HTTP 劫持

尽管有了 DNS 抢答,运营商还是不满意,如果能够做到用户打开其他网站也能插入我指定的广告岂不是更爽?HTTP 劫持应运而生,比较常见的表现在于比如打开的时候页面还算是显示正常,但是标签页上的标题不正常(比如上淘宝不显示淘宝而是 taobao.com 或者一个 IP 地址)且右下角有个浮窗广告,有时候广告加载不出来的情况下左下角加载状态还会看到正在连接的劫持网址

如上图,我打开网易严选的官网,可以看到左下角正在连接一个不属于网易严选的 IP,请求记录也可以看到请求道一个莫名其妙的 JS 文件,DOM 结构也很奇怪,还有一些例子:

比如你看到一篇公众号文章需要长按扫一扫,比如是腾讯新闻的文章结果却跳到一个卖保健品的文章,附上一个我今年 8 月抓到的一个劫持微信公众号文章的劫持脚本(http://cdn.mkitgfs.com/wifi/js/weixin_read.js)

比如有些运营商很喜欢玩的手机浏览器打开百度或者其他一些网站在底部会出现一个横向广告条(我以前用联通的时候到过好像叫什么沃管家)或者页面右上角有个红包图标等等。

那么解决办法呢?就是对这些劫持域名或 IP 地址进行屏蔽,但是治标不治本,具体现象是之后运营商再对你劫持时你正在打开的网页会不正常(可能是白页)这时再刷新一次就正常了,运营商依旧在对你劫持但能做到不让广告显示出来。

最后说说「女朋友和老婆」

前面说了一大堆运营商的作恶,现在来看看「女朋友和老婆」

在零几年的时候还是属于 DNS 污染和封 IP 的情况,比如把 Google 服务器的 IP 封掉,即便使用加密让 DNS 结果能得到正确 IP 但防火墙阻止了你访问 IP 所以还是上不去。好在 Google 的服务器地址何其多,所以就有了「改 hosts 大法」,我手动在本地强制指向正确的还没被封的 IP 不就好了。但慢慢的 Google 服务器再多也有被封完的时候,也就变成了大家现在需要代理服务器上网的方式。

到了这几年,直接使用 DNS 污染将结果解析到 Google 等几家早就被封了的服务器上,比如近期被封的 Behance,微博上的无知营销号大肆自我吹嘘「我知道真相」是 Behance 作死将其网站托管到了 Facebook 的数据中心导致上不去,那么事实到底如何?DNS 污染的表现到底是什么?

前面说了 DNS 抢答也叫 DNS 污染的表现就是在用户无法感知的情况下将解析记录篡改,但是这个操作不是无法无天的,你能在国内劫持你还能在国外劫持吗?

最直接的检测方法就是对比国内及国外的 DNS 解析记录,你说我没有国外服务器怎么查询?没关系,网上有很多 IP 查询网站。

首先可以使用 ip138.com 或者 ipip.net 对 Behance 官网进行查询

国内查询 DNS 污染结果

这么一看也就是我之前所说的将 DNS 结果污染,解析到早已被封的服务器上。

接着使用国外服务器进行查询(ip.cn 使用的国外服务器,cn.ip.cn 使用的国内服务器,大家可以自行使用后者查询看看是不是也是不正常 IP)

看到了吗?Behance 的正确托管就是 Fastly,哪来的什么 Facebook。

您可能还喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注