上述攻击的目标是用户的计算机。为了实现长期影响,每次用户的计算机发送 DNS 查询请求 www.example.com 时,攻击者的机器必须发送伪造的 DNS 响应。这效率不高。有一个更好的方式,可以攻击 DNS 服务器,而不是用户的计算机。
当本地 DNS 服务器接收到查询时,它首先从自己的缓存中查找答案。如果答案已经缓存,DNS 服务器将直接使用缓存中的信息进行回复。如果缓存中没有答案,DNS 服务器就会从其他 DNS 服务器获取答案。当它获得答案后,便会将答案存储到缓存中,下次查询时就不需要再向其他 DNS 服务器发请求。
因此,如果攻击者能够伪造其他 DNS 服务器的响应,本地 DNS 服务器会将伪造的响应存入缓存,并保持一定时间。下次,当用户的计算机想要查询相同的主机名时,它将从缓存中获得伪造的响应。这样,攻击者只需要伪造一次,影响就能持续到缓存信息过期为止。这个攻击被称为 DNS 缓存投毒。
请修改前一个任务中的程序来实现此攻击。在发起攻击之前,确保 DNS 服务器的缓存为空。可以使用以下命令来清空缓存:
您可以检查本地 DNS 服务器的缓存,查看是否已经中毒。以下命令会首先将缓存的内容转储到一个文件中,然后显示该文件的内容:
# rndc dumpdb -cache
# cat /var/cache/bind/dump.db