专栏首页全栈者DNS劫持详解

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),作者:TingRongGao

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 揭秘前端文件上传原理(二)

    “ 上一篇文章讲到了以Form表单,将文件数据编码为特定的类型,来作为前端文件上传的载体,这一篇再来看看,如果不使用Form表单,不以FormData去提交数据...

    用户1462769
  • 前端数据获取之Ajax与Fetch (一)

    Ajax,读作”阿贾克斯“,这个是每一个web开发者必掌握的一门技术,现在咱们打开一个网页,页面上数据多多少少都会有它的一些参与,来获取数据,但也并不是所有的数...

    用户1462769
  • [每日一题] JavaScript面试之“大数相加”运算

    为什么会出现这个原因呢?先来探究一下Javascript的Number类型本质了,先来看看最权威的MDN对Javascript数字类型的定义。

    用户1462769
  • 第六章 DNS服务(1)

    DNS 是域名系统(Domain Name System) 的缩写,它的功能是将域名解析成ip。我们日常上网浏览网页时,在浏览器(如:IE)的地址栏中常输入的是...

    晓天
  • 【网络】网络知识科普篇

    本篇主要写三个东西:DNS,DDNS,DHCP分别是啥,分别有什么作用(重点讲解DNS,DDNS和DHCP一笔带过)

    zby1101
  • 6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置

    网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis D...

    逸鹏
  • Ubuntu Server 第八章 DNS服务

    这章的内容为DNS服务,远程管理一章中使用PUTTET,利用Hosts文件是域名指向对方IP,其实就已经涉及到了DNS。

    天钧
  • DNS与服务器搭建-Linux每日一练(10)

    DNS(Domain Name System)域名系统,也就是把某个网址解析成 ip 的服务,对于私有云的方案,有可能会自建 DNS 服务器,这样可以让所有的配...

    机智的程序员小熊
  • PB级数据实现秒级查询ES的安装

    趣学程序-shaofeer
  • 【Python机器学习】支持向量机(附源码)

    从本周开始,推送一个系列关于 Python 机器学习 。为了保证内容的原汁原味。我们采取全英的推送。希望大家有所收获。提高自己的英语阅读能力和研究水平。 In...

    量化投资与机器学习微信公众号

扫码关注云+社区

领取腾讯云代金券