DNS协议分析——基于wireshark流量分析

域名系统DNS是一个分布式的客户机/服务器网络数据库,TCP/IP应用程序使用它来完成主机名称和IP地址之间的映射(反之亦然),提供电子邮件路由信息、服务命名和其他服务。DNS的因特网标准是RFC 1034,1035。

0x01 域名结构

每个域名都有标号序列组成,而各标号之间用点隔开。例如下面的域名:
mail.126.com
mail代表三级域名,126代表二级域名,com代表顶级域名。DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的顶级域名写在最右边。有多个标号组成的完整域名总共不超过255个字符。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由ICANN进行管理。

0x02 域名的2种查询方式

1、主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。递归查询时,返回的结果只有两种:查询成功或查询失败。如图b所示。
2、本地域名服务器向根域名服务器的查询通常是采用迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。如图a所示。
20140507124241312.png
通常根服务器或者流量较大的域名服务器都不使用递归查询,其原因也很简单,大量的递归查询会导致服务器过载。所以通常查询方式是2种查询结合。从客户端到本地域名服务器(LDNS,一般为ISP DNS服务器)这一段采用递归查询,而本地域名服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了,如果本地域名服务器没有缓存,那么本地域名服务器再采用迭代查询。如下图所示。
931074-20160831182908574-1101121377.png

0x03 DNS缓存机制

一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供)。同时本地的etc/hosts中也可以记录dns解析记录。windows系统在C:WindowsSystem32driversetchosts,linux系统则在/etc/hosts。
windows中刷新dns缓存命令

ipconfig /flushdns

而由于很多linux发型版都没有内置DNS本地缓存,所以无需刷新。
DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。

0x04 DNS资源记录类型

资源记录用于多种用途,但可以分为三大类:数据类型、查询类型和元类型。数据类型用于传达在DNS中存储的信息,如IP地址和授权名称服务器的名称。查询类型使用和数据类型相同的值,增加了几个额外的值(如,AXFR、IXFR和*)。元类型指定了与一个特定单一DNS消息相关联的临时数据。

1. A、AAAA记录

A记录用来存储与域名相关联的IPv4地址的DNS资源记录,AAAA记录用来存储与域名相关联的IPv6地址的DNS资源记录。
DNS服务器会回复包含多个答案对象的DNS响应消息,每一个答案对象都包含一个IP地址及相关信息。DNS客户端主机采用哪个IP地址来执行相关访问,取决于本机实现。
DeepinScrot-4730.png
DeepinScrot-1225.png

2、CN记录

CN记录也叫别名记录,用来指明某个域名是另一个域名的别名。一条CN记录总是指向另一个域名,不会指向任何一个IP地址。这种DNS记录有助于将一个域名无缝更改为另一个域名,更改期间不会影响末端用户的访问。
以下就是查询www.baidu.com的A记录时,返回了CN记录www.a.shifen.com和www.a.shifen.com的两个a记录。
DeepinScrot-4806.png

3、NS记录

NS记录叫名称服务器记录,指定该域名又哪个DNS服务器解析。
下面是sina.com的4个ns记录,说明有多个dns服务器同时对sina.com进行解析。
DeepinScrot-0110.png

4、SOA记录

SOA记录是一种包含权威信息(名称服务器、联系的电子邮件地址,序列号,区域传输计时器等)的DNS资源记录。每个DNS区只有一条SOA资源记录。
以下为www.baidu.com的SOA记录,包含
Name:区名
Primary name server:主名称服务器,指明本DNS域的主DNS服务器的域名)
Responsible authority's mailbox:责任人邮箱,本DNS区的负责人的邮箱信息
Serial Number:序列号,每执行一次区域传输,其值便会按顺序递增。可将该值视为DNS数据库的当前版本
Refresh Interval:刷新时间,告诉辅名字服务器相隔多久检查该区的数据是否是最新的。
Retry Interval:重试时间,如果辅名字服务器超过刷新间隔时间后无法访问主服务器,那么它就开始隔一段时间重试连接一次,这个时间通常比刷新时间要短,但也不一定。
Expire limit:过期或期满,如果在期满时间内,辅名字服务器还不能和主服务器连上,辅名字服务器就失效。这意味着辅名字服务器将停止关于该区的回答,因为这些区数据太旧了。设置时间比刷新和重置时间长很多,以周为单位是合理的。
Minimum TTL:最小生存期,这是针对缓存而言的,与区传送没有关系。 生存期(TTL)为所容许的名字服务器对数据缓存的时间长度,一旦生存期到了,名字服务器必须丢弃缓存数据并从授权的名字服务器中重新获取新的数据。这样可以确保域数据在整个网络上的一致性。
DeepinScrot-0934.png

5、PTR记录

PTR记录用于响应逆向DNS查询,即类似从ip反查域名。通常用于邮件的反向地址解析,来验证是否为垃圾邮件。
在nslookup查询ip 123.126.96.210的PTR记录时,会将该地址进行逆转,然后添加特殊的域。逆转后变换成Name: 210.96.126.123.in-addr.arpa,实际上的意思是在查询域96.126.123.in-addr.arpa.中的:“主机”210
DeepinScrot-1936.png
DeepinScrot-1743.png

6、MX记录

记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。例如收信人后缀是@126.com,那么mx记录就需要查找投递的邮件服务器。以下就是查询126.com的MX记录后返回的优先值不同的网易邮件服务器域名。
DeepinScrot-4044.png

7、发送方策略框架(SPF)和文本(TXT)记录

SPF就是对外公布 服务器授权的IP、主机列表 (查询不在本列表名单的主机或IP,可视为不合法主机或伪造的发件主机。
SPF的内容写在DNS的txt类型的记录里面,可以用来防止别人伪造你的邮件地址进行发信。SPF的第一个版本使用DNS TXT资源记录,就是使用TXT记录保持与域名相关的简单字符串。
例如:当网易企业邮箱的邮件服务器收到自称发件人是[email protected]的邮件,那这封邮件是真的从xxx.com的邮件服务发过来的,还是伪造的呢?这时便可通过查询xxx.com的SPF记录进行判断。
DeepinScrot-5217.png

0x04 DNS安全扩展(DNSSEC)

开发DNSSEC这项技术的目的是要提高DNS资源记录的安全性,具体的实现方法是对DNS资源记录进行额外的完整性验证。DNSSEC的运作机制是对资源记录加以数字化签名,签名的动作起始于分层的DNS树形结构的根服务器。
下面对DNSSEC描述一下简化版的交互过程
1、DNS客户端主机发出DNS查询消息,消息中包含的附加记录字段的DO标记位置1。这是向DNS服务器表明,本客户端支持DNSSEC,希望资源记录附带数字签名。
2、收到DNS查询消息后,DNS服务器会回复包含RRSIG的DNS响应消息。RRSIG是由委托签名者进行数字签名的资源记录。
3、DNS客户端向DNS服务器另发一条DNS消息请求,请求解析同一个域名,但在消息中将记录类型设置为DNSKEY。这是用来签名该资源记录的公钥。
4、DNS服务器用DNSKEY回复所请求的域。
5、DNS客户端用DNSKEY执行哈希计算,并将计算结果与RRSIG进行比较,来验证数据的完整性。
6、若完整性验证失败,则资源记录有被篡改之嫌,DNS客户端将弃之不用。

参考文档:
TCP/IP 详解卷一:协议-凯文 R.福尔
计算机网络(第六版)-谢希仁
wireshark网络分析实战(第二版)-甘德拉·库马尔·纳纳
https://blog.csdn.net/wyq_tc25/article/details/51679520
https://www.cnblogs.com/qingdaofu/p/7399670.html
http://www.360doc.com/content/15/0806/16/5711743_489921984.shtml
Last modification:August 18th, 2020 at 10:07 pm

Leave a Comment