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 | +--+--+--+--+--+--+--+ |
- Header format
1 | 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 |
| 字段 | 字节 | 说明 |
|---|---|---|
| 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 | 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 |
- Answer/Authority/Addtitional
1 | 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 |
安全相关
攻击
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.com和www.example.com都指向DNS记录 example.com ,而后者则有一个指向IP地址的A记录。如此一来,若服务器IP地址改变,则只需修改example.com的A记录即可。
1
2inject.attacker.com. CNAME www\\.example.com.
www\\.example.com. A 1.1.1.1\\00截断:\\000是C语言字符串的结束符,指的是8进制0对应的字符,很多情况下DNS记录中的字符串也会被这一字符截断。1
2inject.attacker.com. CNAME www.example.com\\000.attacker.com
www.example.com\\000.attacker.com A 1.1.1.1 - 信息劫持
先到先用。但IOS不是,有自己的解析机制。
- 重定向
防御
1.DNSSEC
客户端进行身份验证以及检查来自 DNS 域名服务器响应的完整性,以此鉴定它们的来源,并判断它们是否在传输过程中被篡改过。核心原理是使用数字签名机制和信任链。