问题陈述
互联网上的任何名称服务器都有可能成为合法区域和非法区域的“权威服务器”。
例如,我可以将 microsoft.com 添加到我的内部名称服务器。只要我添加 www、msdn、technet.microsoft.com 所需的记录,一切就都正常了。但是,我并不是 microsoft.com 的合法所有者(根据 DNS 服务器.com
)
DNS 具有一项功能,它还会Additional
在响应中包含合法名称服务器的这些虚假“NS”的记录。
发生这种情况时,DNS 客户端应该足够聪明,丢弃附加记录,并从根目录遍历 DNS 层次结构,直到正确的位置。在这种情况下,DNS 客户端(递归解析器)将查看:
- 根服务器
- 通讯服务器
- 微软
其他背景
我一直在查询各种 DNS 服务器,并注意到Additional
记录部分的使用方式存在很大不一致。
一些 DNS 服务器包含其不具有权威性的服务器的 A 记录信息(在附加部分)。
Example:
Question: CNAME (or ALL) for host.example.com.
Answer: host.otherguy.com (then in the additional -> A record for host.otherguy.com is 8.8.8.7)
我认为,如果 A 记录被缓存,并且“otherguy.com”的 NS 显示 IP 是 7.7.7.7,那么这将是一次 DNS 缓存中毒尝试。
是否有一套简明的规则可以描述 99% 的响应者以及可以预期什么?
相反,是否存在一组规则来定义 DNS 查询何时无效?
示例答案
我认为我正在寻找的答案是这样的:
如果 DNS 服务器遇到不等于当前遍历位置的 FQDN,则它必须丢弃查询中发送的任何其他记录,并从根部遍历 DNS 层次结构。
答案1
您所谈论的问题众所周知,是一种毒药攻击。示例 (1)“RFC 1034 的解析算法允许互联网上的任何服务器破坏或接管 yahoo.com。” -http://cr.yp.to/djbdns/notes.html(2)http://en.wikipedia.org/wiki/DNS_spoofing#Redirect_the_NS_record_to_another_target_domain
基本上,今天使用的解决方案是:忽略附加信息中的 RR 集。
非正式证据:“即使引荐在 DNS 消息的附加部分中包含“ns1.example.net”和“ns2.example.net”的 A 记录,现代迭代解析器也会忽略这些记录,以防止缓存中毒。” -http://verisigninc.com/en_US/products-and-services/domain-name-services/domain-information-center/frequently-asked-questions/dns-behavior-changes/index.xhtml
RFC1034 的“澄清”(即修复)位于 RFC 2181 第 5.4.1 节中:
Unauthenticated RRs received and cached from the least trustworthy of
those groupings, that is data from the additional data section, and
data from the authority section of a non-authoritative answer, should
not be cached in such a way that they would ever be returned as
answers to a received query. They may be returned as additional
information where appropriate. Ignoring this would allow the
trustworthiness of relatively untrustworthy data to be increased
without cause or excuse.