预防DNS缓存中毒攻击

DNS的根本问题是无法对应答的真实性进行检查,DNS协议不提供对回复真伪的验证机制。

DNSSEC

为了在协议层面提供认证机制,域名系统安全扩展(DNSSEC)应运而生。DNSSEC是DNS的一系列扩展,目标是为DNS数据 提供认证和完整性检查。

DNSSEC在3个RFC中定义:RFC 4033,RFC 4034,RFC 4035。
有了DNSSEC,DNS回复会被进行数字签名,通过检查数字签名,DNS解析器能够判断返回的信息是否可信。

DNSSEC的主要功能是在回复消息中添加三种记录:RRSIG、DNSKEY和DS。

Dnssec验证核心例子

当从example.net域名服务器得到回复时,该服务器的公钥的哈希值已经被.net服务器提供

DNSSEC最早部署于2007年,用于国家顶级域名。2010年,第一次在root层级部署,到2015年,许多顶级域名均支持DNSSEC。 然而要让所有权威域名服务器都支持DNSSEC还有很多路要走。

TLS/SSL解决方案

在DNSSEC被广泛接受前,传输层安全协议(TLS/SSL)提供了一种解决方案,概况说就是得到域名IP地址后,计算机会 询问这个IP地址的所有者,让它提供对域名所有权的证明。

证明的方法是让服务器提供被证书授权中心签名的公钥证书,服务器还须表明它知道相应的私钥。这个证明协议是TLS协议 的一部分,经常被称为TLS/SSL,因为它的前身是SSL。

Note

这个解决方案,简单说,就是使用HTTPS协议。https协议是建立在TLS/SSL协议之上的。有了https,即使受到 DNS缓存中毒攻击,伪造的服务器仍需要提供正确的证书。

对比

DNSSEC和TLS/SSL协议都建立在公钥技术之上。但是它们的信任链不同。
DNSSEC用DNS区域层次结构提供信任链,父区域的域名服务器为子区域的域名服务器做担保。
TLS/SSL协议依赖公钥基础设施(PKI)

对DNS服务器的拒绝服务攻击

对root和TLD服务器的攻击

攻击不容易成功,原因有三:
1、缓存因素
TLD域名服务器一般在缓存中保留48小时。一旦获得顶级域名服务器ip地址,接下来再请求就不是从root服务器开始了。

2、根域名服务器数量多且高度分散
3、同一个根域名服务器部署在不同大洲的多个地点
通过IP anycast技术实现请求时,其中一个服务器就会接受并回复。这项技术使用边界网关协议(BGP)。在多个不同地点 同时广播同一个目标IP地址,BGP路由器会从中选择一个来实现路由目的。

对特定域的域名服务器的攻击

二级域名的权威域名服务器更容易攻击