Section outline

  • DNS缓存中毒攻击的主要目标是本地 DNS 服务器。显然,攻击真实的 DNS 服务器是违法的,因此我们需要搭建自己的 DNS 服务器来进行攻击实验。实验环境需要四台独立的机器:一台用于模拟受害者,一台用作 DNS 服务器,两台用于攻击者。下图描述了实验环境的设置。
     
    DNS 缓存中毒攻击

    为了简单起见,我们将这些 VM 都放在同一 LAN (局域网)中,但学生不可以在攻击中利用这一点,他们应该将攻击者的机器视为远程机器,即攻击者无法在 LAN 上嗅探数据包。这与本地DNS攻击有所不同。
     
    测试 DNS 设置

    在用户容器中,我们将运行一系列命令来确保我们的实验设置正确。在实验报告中,请记录你的测试结果。

    获取 ns.attacker32.com 的 IP 地址。当我们运行以下 dig 命令时,本地 DNS 服务器将根据添加到其配置文件中的 forward 区域条目,将请求转发到攻击者的域名服务器。因此,回复应来自我们在攻击者域名服务器上设置的区域文件 attacker32.com.zone。如果得到的结果不是这样,那么你的设置可能存在问题。请在实验报告中描述观察结果。

    $ dig ns.attacker32.com

    获取 www.example.com 的 IP 地址。现在有两个域名服务器托管 example.com 域名,一个是该域的官方域名服务器,另一个是攻击者容器。我们将查询这两个域名服务器,看看得到什么响应。请运行以下两个命令(从用户机器上运行),并描述观察结果。

    // 将查询发送到我们的本地 DNS 服务器,本地服务器会将查询
    // 转发到 example.com 的官方名称服务器。
    $ dig www.example.com
    
    // 直接向 ns.attacker32.com 查询
    $ dig @ns.attacker32.com www.example.com

    显然,没有人会向 ns.attacker32.com 查询 www.example.com 的 IP 地址;他们总是会向 example.com 的官方域名服务器查询答案。DNS 缓存投毒攻击的目标是让受害者向 ns.attacker32.com 查询 www.example.com 的 IP 地址。换句话说,如果我们的攻击成功,只要运行第一个 dig 命令(没有 @ 选项的那个),我们就会从攻击者那里得到伪造的结果,而不是从官方的域名服务器获取的真实结果。