劫持过时的 DNS 条目以指向您自己的网站

信息安全 攻击 dns aws
2021-08-29 15:49:42

上下文和系统配置:

  • 具有公共 IP 地址的 AWS EC2 实例
  • AWS Route53 托管的 DNS,带有指向上述 IP 地址的 somesubdomain.somedomain.io
  • 上面的 AWS EC2 实例并非一直在运行,它大部分时间都停止了,只是偶尔运行了一段时间
  • 每次启动 EC2 实例时,都会更新 DNS 条目以指向其新 IP 地址 - EC2 实例在不运行时不会保留其公共 IP 地址,它们会在启动时获取新的公共 IP 地址
  • 实例停止时,DNS 条目保持原样
  • 这个有点不寻常的设置背后的原因是节省成本,同时能够在运行时使用静态域名连接到实例

攻击:

  • 一天我注意到上面提到的 somesubdomain.somedomain.io 下有一个网站,尽管我的 EC2 实例已关闭
  • 这个网站的横幅/标志中有我的域名,所以这不可能是巧合

分析:

  • 当时我没有进行尽可能多的分析。其实我只是想解决问题。现在我只是在关闭实例时删除 DNS 条目。
  • 我意识到我的域下指向我的 EC2 实例的过去公共 IP 地址的 DNS 条目存在问题。上次关闭实例时,IP 地址恢复到可用池,并且可以重新分配给完全不同的实例

问题:

  • 这种攻击有一个通用名称吗?
  • 攻击者的主要好处是什么?
1个回答

这是一个子域接管。

它们通常以以下两种方式之一发生:

  1. 您有一条指向不再存在的 IP 地址的 A 记录,并且攻击者可以控制相关 IP 地址
  2. 您有一个 CNAME 记录指向一个不再存在的域,攻击者可以注册该域。

原因可能因情况而异。选择两个:

  1. 如果您可以控制“官方”域,则模拟会容易得多。这可能导致网络钓鱼、社会工程攻击等。
  2. 如果主域具有对子域有效的 cookie,那么如果受害者访问其子域,攻击者将能够从主站点窃取所有 cookie。

是的,有一些方法可以扫描此类错误配置,攻击者可以并且将会找到它们。

解决方案:

阻止子域接管的最简单和最有效的方法是始终清理您的 DNS 记录 - 不要让 A 或 CNAME 记录指向不存在的资源/域。

在你的情况下,虽然你有另一种选择。您可以为您的账户保留一个弹性 IP 地址,并根据需要将其从您的 EC2 实例附加/分离。通过保留 IP,您将确保它不会返回 AWS 的池以供其他人使用。此解决方案有一个小优点,您不必更新 DNS 或担心 DNS 传播,但它有一个小缺点,即您将在 IP 地址未使用时支付象征性的小时费。