1. 远程攻击的挑战

本地 DNS 攻击有一定的局限性,即为了嗅探受害者的 DNS 请求,攻击 者的机器和受害者的机器必须在同一局域网上。这给远程黑客造成了障碍,因为远程黑客嗅探不到 DNS 请求。DNS 请求里面有两个数据远程黑客很难获得。第一个是 UDP 头部中的源端口号,DNS 请求是 UDP 包,其源端口号是一个 16 位的随机数字。第二 个是 DNS 头部的一个 16 位的交易 ID。欺骗回复必须包含这两个值,否则,回复不会被接受。因为不能嗅探,攻击者只能猜测这两个数字,猜到的几率是 232 分之一。如 果黑客可以在 1 秒内发送 1000 个欺骗请求,需要 50 天才能尝试 232 次。如果黑客用 有 1000 个主机的僵尸网络发起攻击,则只需要 1.2 小时。

上述假想的攻击忽视了缓存的影响,因为我们需要猜测交易 ID 和源端口号,一次性成功几乎是不可能的。如果我们失败了,真实的请求会到达本地 DNS 服务器,并且被缓存。为了尝试下一次攻击,我们需要等待服务器发起第二次 DNS 请求。但是不幸的是,因为本地 DNS 服务器可以从缓存中得到 IP 地址,它就不会对同一主机名发出请求,除非缓存内的记录过期。缓存的这个特点让攻击者在尝试第二次攻击之前需要等待,等待的时间可能是几小时或者几天。这使得远程 DNS 缓存中毒攻击变得非常不现实。