章节大纲

  • 现在我们将所有东西合在一起进行 Kaminsky 攻击。在攻击中,我们需要发送许多欺骗的 DNS 响应,希望其中有一个可以猜中正确的 Transaction ID,并比合法的响应更早到达。因此,发包速度至关重要:发出的数据包越多,成功的概率也就越大。如果我们像之前的任务那样,使用 Scapy 发送伪造的 DNS 回复成功率会非常低。学生可以使用 C 语言进行实现,但在 C 语言中构造 DNS 数据包并非易事。因此我们采用一个使用 C 语言和 Scapy 相结合的混合方法。通过混合方法,我们首先使用 Scapy 生成 DNS 数据包模板,并把模板保存在文件中。接着我们将该数据包模板加载到 C 程序中,并对其中某些字段进行一些微小修改,然后发出这个数据包。我们在 Labsetup/Files/attack.c 中提供了 C 语言的代码框架。学生可以对其中标记的区域进行修改,详细的代码解释在之后的指南部分中。

    检查 DNS 缓存:为了检查攻击是否成功,我们需要查看 DNS 缓存。以下的命令先将 DNS 缓存存到文件中,然后在文件中搜寻  attacker 关键词 (在我们的攻击中,我们采用 attacker32.com 作为攻击者的域名,如果学生使用不同的攻击域名,那么需要搜索不同的关键词)。
    # rndc dumpdb -cache && grep attacker /var/cache/bind/dump.db