DNS运作方式

1、什么是DNS

输入域名,输出ip地址的一个系统

2、直观过程

用dig工具来查看查询的过程


image.png

应答部分:

QUESTION SECTION: 查询内容

IN代表Internet协议。A代表A解析,即IPV4(AAA为ipv6)。

ANSWER SECTION: 响应内容

紧接着A后面的是ip地址,即输出结果
这里显示help.deadfishcrypto.com有两个A解析

如果显示的不是A,而是NS(name server),就代表右边接着的服务器中,能查询到最左边的域名的下一级域名信息(也就是托管了左边这个域名)

其他信息

如查询时间,本地DNS地址端口等。

3、域名层级

我们用DNS的最终目的都是要知道我们要访问背后的服务器地址具体是多少,因此第一步都是向DNS服务器发起请求,问它要地址。但是一台DNS服务器不可能保存全世界所有域名ip对,因此要有域名的层级管理
示例图中的

help.deadfishcrypto.com.

多了一个‘.’在最后,这里是省略了.root,原本的样子应该是:

help.deadfishcrypto.com.root

用'.'来给域名分级别,具体如下:

help.deadfishcrypto.com.root
主机名.次级域名.顶级域名.根域名`

4、查询过程

  1. 向根域名服务器发起查询请求,查到顶级域名的NS记录跟A记录。
  2. 向顶级域名服务器发起查询请求,查到次级域名的NS记录跟A记录。
  3. 向次级域名服务器发起查询请求,查到主机名的A记录

上两张别人的图,方法不绝对,都有可能:


image.png

image.png

然后阿里云就是权威DNS:


image.png

5、根域名服务器

保存顶级域名(DNS根区)解析信息的服务器。

那DNS服务器怎么知道一开始的根域名服务器的地址呢?

答:

hard code。一般DNS服务器最少写死一个或以上根域名服务器信息,不然就会陷入循环查询。

6、name server

NS代表托管这一级域名的服务器域名,例如.com下的次级域名的解析信息,能通过*.gtld-server.net.中任意一个服务器查询到


image.png
  1. 例如第一个根域名的托管,问本地要到了根域名服务器的信息(那么本地的配置就相当于NS);
  2. 然后问根域名服务器要了com.的NS:*.gtld-server.net.;
  3. 然后问*.gtld-server.net.要到了deadfishercrypto.com.的NS(dns15.hichina.com)
  4. 最后问dns15.hichina.com药到了help.deadfishcrypto.com的A解析。

7、DNS根区

保存所有(1000多个)顶级域名信息的文件,而管理这个文件的组织:ICANN

例如.com的name server就有:


image.png

为了防止循环查询,DNS根区还保存了对应的IP地址,因为顶级域名的NS也是需要通过顶级域名去查到IP的,如果不知道任何一个顶级域名NS的IP,那就会陷入循环查询。
因此DNS根区里面存的是:

a.gtld-servers.net. 172800  IN  A   192.5.6.30
a.gtld-servers.net. 172800  IN  AAAA    2001:503:a83e:0:0:0:2:30
b.gtld-servers.net. 172800  IN  A   192.33.14.30
b.gtld-servers.net. 172800  IN  AAAA    2001:503:231d:0:0:0:2:30
c.gtld-servers.net. 172800  IN  A   192.26.92.30
c.gtld-servers.net. 172800  IN  AAAA    2001:503:83eb:0:0:0:0:30
... ...

8、DNS劫持

就是我想访问china.com,但是回来的内容是一些不可描述的东西。
正常的客户端请求流程是这样的:

客户端---(请求域名)--->DNS---(解析得到IP地址)--->返回给客户端,然后客户端访问IP

被劫持的请求是这样的

攻击者---(从内部修改了解析对或缓存)--->某DNS服务器
客户端---(请求域名)--->被攻击的DNS---(解析得到攻击期望的IP地址)--->返回给客户端,然后客户端访问IP
换句话说:

DNS劫持就是:你问DNS:“银行怎么走,我要去存钱”,DNS翻了翻地图(一本无意间被修改过的),然后指了一条通往劫匪巢穴的道路。
HTTP劫持(例如中间人攻击)就是:你想买一包薯片结果回来了一袋屎。原因就是钱出去的路跟薯片回来的路中间多了一个黑客做中间转发,黑客就把薯片换掉,装了一袋shit给你。

9、DNS缓存投毒

就是攻击者在外部修改了DNS缓存服务器的记录,达到黑客的目的。
方式:

攻击者---(向DNS服务器要一个不存在的域名的解析:如abc.xxx.com)--->DNS缓存服务器

那么此时缓存服务器肯定是找不到abc.xxx.com这个域名的,因为abc.不存在,于是DNS缓存服务器就问xxx.com的name server要解析信息了

DNS缓存服务器---(请求abc.xxx.com的解析是什么)--->xxx.com的nameserver

由于DNS系统用的是UDP包通信,所以攻击者在xxx.com的nameserver应答返回之前,
疯狂给DNS缓存服务器发包,告诉它:abc.xxx.com的ip是x.x.x.x

攻击者---(是我是我是我)--->DNS缓存服务器,收到后缓存了,收到第一个包之后,后面的都不要了

DNS缓存服务器缓存了攻击者的记录,攻击目的达成

上面是个人理解,下面是华为的图解(输了输了


DNS投毒攻击

然后防御方法很简单,就是在缓存服务器和授权DNS服务器之间加一个用户不知道的queryid,然后DNS缓存服务器出入口加多一个防御,用于验证queryid就行了。


image.png

参考:

· 根域名的知识 -by阮一峰
· DNS 原理入门 -by阮一峰
· DNS缓存投毒攻击与防御原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容