查看原文
其他

惊了!DNS解析居然中毒了!

脚本之家 2021-06-29

The following article is from 小白学黑客 Author 小白哥

 关注
“脚本之家
”,与百万开发者在一起
出处:小白学黑客(ID:xiaobaihacker)
作者:小白哥

不知道大家平时在使用ping命令时有没有注意过,有些域名ping的时候会出现另外一个域名,比如百度:

而有的域名又没有,比如博客园:

这到底是什么原因呢?

当我们在使用ping来连接一个域名的时候,ping程序将会自动为我们解析这个域名所对应的IP地址,也就是做DNS解析。

DNS大家应该不会陌生,全称是域名解析系统,就是将一个域名转换成IP地址的系统。看起来,应该像是这么一个装置:

DNS像是一个黑盒子,输入一个域名,输出一个或多个IP地址。

如果把DNS的映射关系想象成后台数据库中的一个表格,它可能长这样:

域名IP地址
a.com11.11.11.11
b.com22.22.22.22、20.20.20.20
c.com33.33.33.33
.........

像上面这样,一个域名对应一个或多个IP地址的记录,叫A记录

但实际上,除了A记录,还存在一种记录,叫做CNAME记录,又叫别名记录。

DNS解析的时候,对一个域名解析的答案仍然是一个域名,需要对这个答案中的域名再进行解析才能拿到IP地址,而这个中间域名,就是原域名的一个别名。

如果拿我们C语言中学到的指针做类比的话,普通域名解析就相当于直接通过指针访问变量,而通过CNAME的形式解析,就相当于二级指针,指针指向的不是变量本身,而是一个中间指针,还要再寻址一次才能访问变量。

在Linux上,我们可以使用dig命令来查看DNS解析的详情:

那这么大费周章干什么呢,不是多此一举吗?

其实不是,任何事物出现一定是有一定原因的,在计算机领域尤其如此。

CNAME技术在CDN领域应用非常多,一个典型的例子,一个北京的用户访问百度和一个深圳的用户访问百度,他们实际请求的IP地址很大可能是不同的,为了提升访问速度,DNS系统会返回距离最优的IP地址。

下面是一段改编自知乎的描述:

原文链接:https://zhuanlan.zhihu.com/p/147723106

假如你是A公司程序员,你公司中的一台IP为1.1.1.1的服务器,注册了域名为www.A.com,对外提供客户访问。

随着公司越做越大,访问量也越来越多,服务器顶不住了,你去找CDN提供商购买CDN加速服务,这个时候他们要求你的域名做个CNAME指向他们给你的一个域名叫a.x.com.

当用户访问www.A.com的时候,本地DNS会获得CDN提供的CNAME域名:a.x.com,然后再次向DNS调度系统发出请求,通过DNS调度系统的智能分析,把这个a.x.com指向一个(离用户地理位置最近的)CDN提供商的服务器IP,让用户就近取到想要的资源(如访问网站),大大降低了延迟。

这样,不管CDN背后的服务器IP如何变化,www.A.com这个域名的解析可以保持不变,省了不少麻烦。

安全问题

使用上CNAME以后,上面的例子中,解析关系就变成了这样:

现在思考一个场景:

如果A公司这个业务黄了,不再给CDN服务商续费,那就失去了a.x.com这个域名。

现在一个不怀好意的家伙去向这个CDN服务商申请了这个a.x.com域名,会发生什么事情?

如果原来A公司的域名www.a.com没有解除DNS的CNAME解析,仍然解析到a.x.com,就相当于把自己公司的官网重定向到了这个不怀好意的家伙的网站去了。

如果这个人做出一个跟原来A公司一模一样的网站呢,如果A公司是一个购物网站,是一个社交网站,是一个下载网站,那后果是不是很可怕?

这不是危言耸听,而是已经真实发生了的事情,还是发生在一个你想不到的大公司网站身上!

看完这篇文章,你有什么收获吗?

关注视频号,参与留言送书活动

  推荐阅读:

到底该选择32位还是64位版本的Office?微软为你解答疑惑

存在多年的Linux恶意软件被发现,可窃取用户敏感信息

绝密!程序员五一如何避免加班

他只靠写代码,登上了胡润富豪榜!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存