侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 204 篇文章
  • 累计创建 79 个标签
  • 累计收到 128 条评论

为什么在云中使用 DNS ALIAS 记录而不是 CNAME?

汪洋
2024-07-19 / 0 评论 / 0 点赞 / 88 阅读 / 2,361 字

快速阅读 - 基于 LLM 生成

总结

主要讨论了在云环境中使用 DNS ALIAS 记录而不是 CNAME 记录的优势和原因

摘要

文章首先强调,在云资源上使用自定义域名非常重要。随后,作者通过一个实际的例子,展示了当在自定义域名( 如app.yourcompany.com)上使用 CNAME 记录指向云服务提供商的资源( 如 AWS 的负载平衡器 some-production-loadbalancer-123456.eu-west-1.elb.amazonaws.com)时,如果资源被删除,就会产生悬空 CNAME 问题。这种情况下,即使资源不再存在,DNS 查询仍然会返回原有的 CNAME 记录,导致请求无法正确解析。

作者进一步解释了悬垂 CNAME 问题的具体情况,通过在 AWS 上创建和删除负载平衡器,并展示了 DNS 查询结果的变化。由于 AWS 负载平衡器的域名包含随机数,攻击者可能通过大量创建和删除负载平衡器来猜测这些随机数,从而控制被删除负载平衡器的域名。

为了解决这个问题,作者提出了使用 DNS ALIAS 记录的解决方案。DNS ALIAS 记录不是标准的记录类型,但由AWS、CloudFlare 和 Azure 等服务提供商支持。与 CNAME 类似,ALIAS 记录允许用户在服务提供商的配置中提供负载平衡器的域名,并且服务提供商会自动更新域名的A记录以匹配负载平衡器的 IP 地址。这样,即使负载平衡器的 IP 地址发生变化,自定义域名的A记录也会自动更新,避免了悬空 CNAME 的问题。

最后,作者演示了如何将负载平衡器的域名添加为 ALIAS 记录,并验证了通过 ALIAS 记录的 DNS 查询结果。他指出,使用 ALIAS 记录后,攻击者无法确定负载平衡器的域名,从而提高了安全性。此外,ALIAS 记录还支持 DNS扁平化,减少了对 CNAME 条目的监控需求。

观点

  • 自定义域名在云资源上的重要性:在云服务之上使用自定义域名能够提供更具品牌性和易于记忆的访问入口。
  • CNAME 记录在云资源删除后的悬垂问题:当云资源被删除时,如果不更新自定义域名上的 CNAME 记录,会导致 DNS 解析问题,影响服务的可用性。
  • 安全风险:由于云服务提供商的资源域名包含随机数,攻击者可能通过猜测这些随机数来控制被删除资源的域名。
  • ALIAS 记录的优势:ALIAS 记录能够自动解析到云服务资源的正确IP地址,即使资源的 IP 地址发生变化,也能保持自定义域名的正确解析。
  • 提高安全性和减少监控负担:使用 ALIAS 记录可以避免悬垂 CNAME 带来的安全风险,并且由于 DNS 扁平化,减少了对 DNS 记录的频繁监控。

详细内容

为什么在云中使用 DNS ALIAS 记录而不是 CNAME?

在云资源之上建立自定义域至关重要。云提供商创建一个资源(如负载平衡器),并为您提供一个域,如 some-production-loadbalancer-123456.eu-west-1.elb.amazonaws.com。将此域名作为 CNAME 记录添加到 app.yourcompany.com

如果删除云上的资源会发生什么情况?

如果删除该资源,但在自定义域 (app.yourcompany.com) 上保留 CNAME 记录,就会遇到悬空 CNAME 问题。

什么是悬空 CNAME 问题?

让我们来看一个实际的例子;

我创建了一个域:blog.example.adililhan.com 我在 AWS 上创建了一个负载平衡器: adil-blog-test-1393565408.eu-west-1.elb.amazonaws.com

1_bAf6XT-Qt0F6cofClx0g1w.png

我将负载平衡器的域名作为 CNAME 添加到我的域名中:

1721352776461.png

只是为了测试,我会发送一个请求:

1721352799677.png

我收到了 AWS 资源(EC2 实例)的回复。我将删除负载平衡器,看看会发生什么:

1721352822827.png

DNS 结果:

1721352838103.png

自从负载平衡器域被删除后,AWS 已不再返回该域的任何信息。我将创建一个新的负载平衡器,名称相同:adil-blog-test

1721352857121.png

这是新负载平衡器的域名:adil-blog-test-1109044799.eu-west-1.elb.amazonaws.com,它与前一个非常相似。只是数字不同。

这就是问题所在:随机数

AWS 使用以下命名约定为其负载平衡器建立域:$YourLoadBalancerName-$RandomNumber.$RegionName.elb.amazonaws.com,攻击者可能会在你的 DNS 输出中识别出 3 个变量:

$YourLoadBalancerName -> adil-blog-test
$RandomNumber -> 1109044799
$RegionNumber -> eu-west-1

因此,攻击者不能只控制一个变量:$RandomNumber。我移除了负载平衡器,但在自定义域中保留了其域名。因此,如果攻击者删除/创建了足够数量的负载平衡器,那么最终也会获得同样数量的被删除负载平衡器。

解决方案:使用 DNS 别名记录

DNS 有许多不同的记录类型:A、AAAA、CNAME、MX 等。ALIAS 记录类型不属于标准记录类型。只有 AWS、CloudFlare 和 Azure 等少数服务提供商支持 DNS ALIAS 记录类型。

ALIAS 记录类型与 CNAME 类似。您可以在服务提供商配置中提供负载平衡器的域名

服务提供商将从负载平衡器的域名地址中检查返回的 IP 地址,并相应更新您域名的 A 记录

如果负载平衡器的 IP 地址发生变化,您的自定义域的 A 记录也会立即更新

让我们将负载平衡器的域名添加为 ALIAS 记录。

1721352975611.png

检查 DNS:

1721352991761.png

因此,攻击者无法确定负载平衡器的域名。出于测试目的,我将发送一个请求:

1721353008204.png

我删除了负载平衡器:

1721353022967.png

在检测到负载平衡器被删除后,AWS 继续从我的自定义域中删除与负载平衡器相关的 IP 地址:

1721353035155.png

有了 ALIAS 记录,就无需监控域上的 CNAME 条目。这种技术也被称为 DNS 扁平化。

0

评论区