DNS劫持详解

在前两天的时候,打开www.linux.org的时候突然发现,页面跟原来完全不一样了,里面各种fk,第一反应就是网站被黑了,攻击者对于该站非常不满,还有一张“菊花图”,场面异常火爆,有兴趣可看这个报道(http://www.10tiao.com/html/739/201812/2649445233/1.html)。后来网站官方说网站被黑是一起DNS劫持事件(https://www.linux.org/threads/linux-org-dns-hijack-incident.21073/),对于网站被黑感到啼笑之余,也同时让我好奇DNS劫持到底是什么,攻击威力如此大。

1. DNS是什么

DNS是Domain Name System的缩写, 我们称之域名系统。首先它是远程调用服务,本地默认占用53端口,它本身的实质上一个域名和ip的数据库服务器,他要完成的任务是帮我们把输入的域名转换成ip地址,之后通过ip寻址连接目标服务器。

通过一个例子说一下我的理解,当我们上网的时候如果通过域名(如www.taobao.com)访问一个网站,流程应该是输入网址,浏览器缓存中查找www.taobao.com的ip,如果你刚刚访问过,则直接返回ip,如果没找到,则先进入本机的hosts文件找有没有这个域名,有的话返回对于ip,没有的话,进入本地DNS解析器中查找缓存,找不到的情况下则需要网络中的服务器去查找,首先查找本地DNS配置的服务器,如我们熟悉的谷歌的8.8.8.8和电信的114.114.114.114这两个(mac上的配置地址文件 /etc/resolv.conf),都是在我们机器上事先配置好的,访问这个服务器如果在其缓存中查到对于的ip则直接访问给我们,同时本机的DNS解析器缓存该记录,如果服务器也没有找到这个域名的信息,这时候要看我们本地的配置是否需要转发,如果需要就需要本地DNS服务器一级一级向上查询,知道返回域名信息,不是转发的情况下,本地DNS服务器开始与根DNS服务器交互,当然根DNS服务器并没有我们想要的ip信息,由于全球都需要依赖它,它只会返回一些基本信息,在此时它先返回给我们.com这个顶级域名管理服务器的ip,本地DNS服务器拿到这个ip再向它寻找,当然.com的域名他也不会全存储,它会返回二级域名taobao.com的管理服务器ip地址,本地DNS服务器再次查找返回给我们www.taobao.com 的ip地址,本地DNS服务器返回给客户端,只会客户端根据ip寻址,连接目标服务器。

ps:说一下本地DNS服务器和路由器DNS服务器的关系,如果本地配置了DNS服务器则使用本地配置的,否则使用路由器的DNS服务器配置,路由器的DNS服务器配置可以通过http://192.168.1.1/ 输入登录信息修改.

在这个过程中你可以实践这些操作。

1. 先在浏览器打开www.taobao.com 之后在本机hosts文件中修改www.taobao.com 指向的ip,你会发现浏览器打开淘宝还是正常,这时候你换一个没有打开过淘宝的浏览器,访问跳转至你hosts中配置的ip了。

2. 利用tcpdump抓包观察。命令行执行 sudo tcpdump -v port 53, 你会发现你之前要是打开过www.taobao.com, 它是不会输出访问数据请求信息的。但是你访问一个没有访问过的域名的时候,会有一些访问DNS服务器的信息。如下图:

2. DNS劫持

在上面一个完整的域名解析过程中,我们可以看到想要获取目标网站的ip,除了在本机中的查找操作有时还需要第三方服务器(DNS)的参与,但是只要经过第三方的参与,那么网络就不属于我们可控制的范围,那么就有可能产生DNS挟持,具体体现在我们获取到的ip并不是我们想要的ip,从而打开的并不是我们的目标网站。例如网站在经过本地DNS解析时,黑客将本地DNS缓存中的www.taobao.com 替换成其他网站的ip返回,而客户端并不知情,依旧按照正常流程寻址,建立连接。请注意上面那张linux被黑的图,它的域名依旧是linux.org,这就让我们很迷惑了,如果一些黑客想要盗取我们密码的话,它可以做一个跟目标网站一模一样的页面,让我们登录,当我们输入完密码提交的时候就中招了。百度上找了一张图,浅显易懂,就把它搬过来了。

在这个过程中,黑客一般是黑进了我们的路由器里,修改了路由器的本地DNS地址,从而访问一个伪造的DNS服务器,这个伪造的服务器解析域名的时候返回错误的ip给我们,当然他要能黑进我们电脑里也可以修改我们的hosts文件?,当然我觉得黑客够牛叉,黑进谷歌域名服务器,根域名服务器也是有可能的,我想那到时候黑客可能被全球通缉了... 当然即使黑客黑掉了根域名服务器,我们也不会因此一片黑暗,因为首先我们常用的域名都在一级一级的本地DNS缓存,上一级DNS缓存中中可解析到,如果解析不到,你知道你要访问的目标服务器ip,直接拿ip访问目标网站,也是没有问题的。

我在学习的过程中发现还有一种劫持,它返回给你正确的ip,但是内容作了修改,一般是运营商所为,例如给原来的网页植入一个<iframe>展示一些广告。不过这种方式很不常见,也危害不大,毕竟运营商还不会到用这种方式骗我们密码的地步,因为他们想知道不用这么费劲?。

3. DNS劫持预防

关于怎么预防我认为在客户端还是比较费劲的,但是我们的目的是要找到合法正确的目标服务器ip,极端情况下,我们把需要用的ip都配置到hosts文件中就可以避免,但是这显然不可能。再就是我们要使用正规的DNS服务器,避免被伪造的DNS服务器解析挟持。 不过我们在平时的注意也可以避免一些,例如上面的linux.org那张图,可以看出它是不安全的,因为原来的linux.org是https的,被劫持之后证书验证不通过。正常情况下未被劫持的网站应该是如下这样子的。

当然并不是https就不能劫持,可以看看这篇文章 HTTPS 可能被这样劫持吗?(https://www.zhihu.com/question/22795329)

检查你的电脑有没有被挟持打开一个不存在的域名查看,果然我的在查找不存在的情况下重定向跳转到联通网址下面,不过友好的通知我刚访问的页面不能存在,让我百度一下。。。 我把本地DNS替换成8.8.8.8后,再次试了一下不存在的域名,这一次就被被挟持了,看下图

并且不能ping通这个域名

$ ping dadasdasdsadsadsa.com.cn

ping: cannot resolve dadasdasdsadsadsa.com.cn: Unknown host

后来我查找学习之后认为,即使如何更改DNS最终都是运营商提供的网络,不过还好的是这样的劫持并不是很严重。

4. 总结

以上就是我关于DNS一些粗浅的认识与理解,如果有错误,大家帮忙指出,共同学习,进步。

现在网络普及太快太广,各种安全问题也层出不穷,记得之前收到不封邮件,我也没多想打开点了一下连接,因为是在手机上,打开链接的域名也没有展示出来,只有中文展示“邮箱登录”,界面是qq邮箱的登录界面,我这输完点击登录没有反应,觉得有点不对,把链接拷出来在pc上打开发现,点击确定就会把账号和密码明文提交上去,取出接口后写了一个程序,死循环提交数据大概3,4个小时之后,发现对方挂了... 后来觉得很有意思,但是也不免提升了安全意识。


参考文章:

https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F

https://yq.aliyun.com/articles/58967?spm=5176.100244.teamconlist.7.WOFDYX

https://juejin.im/post/59ba146c6fb9a00a4636d8b6

原文发布于微信公众号 - 全栈者(fullStackEngineer)

原文发表时间:2018-12-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券