1. DNS 欺骗和缓存污染

1. DNS 欺骗和缓存污染
客户端(PC等)发起域名请求的时候(例如访问:),如果在本地缓存没有的情况下,会往递归服务器发送域名查询请求(我们也称之为 ),递归服务器再一层层递归从 . 到 com. 再到 .(即到 . 的权威服务器 --> com. 的权威服务器 --> . 的权威服务器),最终取到对应的解析 A 记录返回给客户端 。在整个查询过程中,攻击者可以假冒任何一个应答方:递归服务器 --> .的权威服务器 --> com. 的权威服务器 --> . 的权威服务器,给请求方发送一个伪造的响应(UDP 包极其容易伪造),其中响应的解析记录给了一个错误的 IP 地址或者其他类型的解析记录(比如 、 或者 cname 到错误的域名地址去等) 。客户端或者是解析服务器在没有经过数据来源正确性校验的情况下接受了伪造的应答,直接将导致客户端无法正常访问网站或者其他资源或者客户端请求重定向到了伪造的网站上去 。另外由于 DNS 当中存在着缓存,这种错误的记录将随着攻击者设定的 TTL 进行存活缓存,如果是递归服务器受到 DNS 欺骗那将会导致自身以及大面积的客户端缓存了错误的解析记录(可以通过清除缓存解决) 。
2.简介
全称Name,即 DNS 安全扩展,是由 IETF 提供的一系列 DNS 安全认证的机制(可参考 ) 。它提供一种可以验证应答信息真实性和完整性的机制,利用密码技术,使得域名解析服务器可以验证它所收到的应答(包括域名不存在的应答)是否来自于真实的服务器,或者是否在传输过程中被篡改过 。
采用基于公共密钥加密的数字签名,从而增强 DNS 验证强度 。并非对 DNS 查询和响应本身进行加密签名,而是由数据所有者对 DNS 数据自身进行签名 。
每一个 DNS 区均包含一个公私秘钥对 。DNS 区所有者使用该区域的私钥对区域内的 DNS 数据进行签名,为这些数据生成数字签名 。顾名思义,"私钥"是指 DNS 区所有者会对这些密钥材料保密 。但是,该区域的公钥则在区域内公开发布,供全体用户检索 。凡在区域内查找数据的递归解析器,还必需检索区域公钥,从而使用公钥验证 DNS 数据的真实性 。解析器确认检索到的 DNS 数据的数字签名是否有效 。如果有效,证明 DNS 数据合法,则将 DNS 数据返回给用户 。如果签名未通过验证,解析器会假设发生攻击,丢弃数据并向用户返回错误 。
在 DNS 协议中新增了两项重要功能:
3.原理
通过公钥密码技术对DNS中的信息创建密码签名,为 DNS 信息同时提供认证和信息完整性检查,它的实施步骤如下:
DNS 服务器收到 DNS 查询请求后,用散列函数将要回复 DNS 报文的内容进行散列运算,得到“内容摘要”,使用私匙加密后再附加到 DNS 报文中;
DNS 查询请求者接收到报文后,利用公匙解密收到的“内容摘要”,再利用散列函数计算一次 DNS 查询请求报文中的“内容摘要”,两者对比;
若相同,就可以确认接收到的 DNS 信息是正确的DNS响应;若验证失败,则表明这一报文可能是假冒的,或者在传输过程、缓存过程中被篡改了 。
【1. DNS 欺骗和缓存污染】4.资源记录
为了实现资源记录的签名和验证,增加了四种类型的资源记录:
5. 主流 DNS 支持情况 公共 DNS
检查方法:dig + DS . @DNS的IP | grep DS 如果有 DS 记录返回则说明该服务器支持
DNS:8.8.8.8,8.8.4.4
DNS IPv6:2001:4860:4860::8888,2001:4860:4860::8844
DNS:1.1.1.1,1.0.0.1
:208.67.222.222,208.67.220.220

1. DNS 欺骗和缓存污染

文章插图
阿里 :223.5.5.5,223.6.6.6