发布于 

dns 学习

dns查询、报文、安全相关学习。

查询流程

1.本地查询

1.浏览器调用stud resolver解析器(存根解析器)去本地(/etc/hosts)查询有没有相关的记录。

2.本地hosts没查到,则查找本地DNS解析器缓存

2.本地DNS服务器查询

3.如果hosts和本地DNS解析器缓存都没查询到,则 查询TCP/IP参数中设置的首选DNS服务器(即本地DNS服务器),此服务器收到查询请求时 首先检查是否自己负责的区域,如果是则返回权威应答给客户机

4.要查的域名不由本地DNS服务器区域解析,如果该DNS服务器缓存了映射关系,则调用这个IP地址映射。此解析不具有权威性

5.如果本地DNS服务器本地区域文件和缓存解析都失效,则根据本地DNS服务器的设置进行查询。

  • 未用转发模式,本地DNS把请求发到根DNS。根DNS服务器返回负责顶级域名服务器的一个IP。
  • 转发模式(设置转发器),此DNS服务器会把请求转发至上一级ISP DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或转发到根DNS或者把请求转至上上级,以此循环。

报文格式

DNS报文格式,不论是请求报文,还是DNS服务器返回的应答报文,都使用统一的格式。

  • DNS format
1
2
3
4
5
6
7
8
9
10
11
+--+--+--+--+--+--+--+
| Header | // 报文头
+--+--+--+--+--+--+--+
| Question | // 查询的问题
+--+--+--+--+--+--+--+
| Answer | // 应答
+--+--+--+--+--+--+--+
| Authority | // 授权应答
+--+--+--+--+--+--+--+
| Additional | // 附加信息
+--+--+--+--+--+--+--+
  • Header format
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| opcode |AA|TC|RD|RA| Z | RCODE | // Flags
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
字段 字节 说明
ID 2 关联会话
Flags 2 QR: 0表示查询报文,1表示响应报文;
opcode: 通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求),[3,15]保留值;
AA: 表示授权回答(authoritative answer)– 这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器;
TC: 表示可截断的(truncated)–用来指出报文比允许的长度还要长,导致被截断;
RD: 表示期望递归(Recursion Desired) – 这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的;
RA: 表示支持递归(Recursion Available) – 这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询;
Z : 保留值,暂未使用;
RCODE: 应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下: 0 : 没有错误。 1 : 报文格式错误(Format error) - 服务器不能理解请求的报文; 2 : 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求; 3 : 名字错误(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在; 4 : 没有实现(Not Implemented) - 域名服务器不支持查询类型; 5 : 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答.比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zone transfer); [6,15] : 保留值,暂未使用;
QDCOUNT 2 报文请求段中的问题记录数
ANCOUNT 2 报文回答段中的回答记录数
NSCOUNT 2 授权段中的授权记录数
ARCOUNT 2 报文附加段中的附加记录数
  • Question
1
2
3
4
5
6
7
8
9
10
11
  0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ... |
| QNAME | // 无符号8bit为单位,长度不限,表示查询名(广泛的说就是:域名)
| ... |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE | //无符号16bit整数表示查询的协议类型.
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS | // 无符号16bit整数表示查询的类,比如,IN代表Internet.
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

  • Answer/Authority/Addtitional
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NAME | // 资源记录包含的域名
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE | // 表示DNS协议的类型.
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS | // 表示RDATA的类.
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL | // 表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH | // 表示RDATA的长度
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDATA | // 不定长字符串来表示记录,格式根TYPE和CLASS有关。比如TYPE是A,CLASS是IN,那么RDATA就是一个4个字节的ARPA网络地址。
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

安全相关

攻击

1.针对DNS的DDOS攻击

  • DNS 放大攻击

    攻击者向公共DNS服务器发送DNS名称查询,使用受害者的地址作为源地址,导致公共DNS服务器的响应都被发送到目标系统。

2.DNS欺骗

主要是由于协议的不可靠、没有验证机制导致。

  • 缓存污染

    DNS缓存投毒攻击主要有两种攻击方式,分别利用\\.\\000字符。
    句点注入\\.在解码时会被认为是 .字符,因此DNS记录 www\\.example.com. A 1.1.1.1存入DNS缓存后就是将域名 www.example.com解析为 1.1.1.1的一条A记录。

    ​ CNAME对于需要在同一个IP地址上运行多个服务的情况来说非常方便。若要同时运行文件传输服务和Web服务,则可以把ftp.example.comwww.example.com都指向DNS记录 example.com ,而后者则有一个指向IP地址的A记录。如此一来,若服务器IP地址改变,则只需修改example.com的A记录即可。

    1
    2
    inject.attacker.com. CNAME www\\.example.com.
    www\\.example.com. A 1.1.1.1

    \\00截断:

    \\000是C语言字符串的结束符,指的是8进制0对应的字符,很多情况下DNS记录中的字符串也会被这一字符截断。

    1
    2
    inject.attacker.com. CNAME www.example.com\\000.attacker.com
    www.example.com\\000.attacker.com A 1.1.1.1
  • 信息劫持

    先到先用。但IOS不是,有自己的解析机制

  • 重定向

    防御

    1.DNSSEC

    客户端进行身份验证以及检查来自 DNS 域名服务器响应的完整性,以此鉴定它们的来源,并判断它们是否在传输过程中被篡改过。核心原理是使用数字签名机制信任链

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @玄同 创建,使用 Stellar 作为主题。