缓解 Azure 应用服务中的子域接管
子域接管是定期创建和删除大量资源的组织会遇到的一种常见威胁。 当你有 DNS 记录指向已取消预配的 Azure 资源时,可能会发生子域接管。 这类 DNS 记录也称为“无关联的 DNS”项。 子域接管使恶意操作者能够将专用于某组织的域的流量重定向到一个执行恶意活动的站点。
子域接管造成的风险包括:
- 失去对子域内容的控制
- 不知情访问者的 Cookie 搜集
- 网络钓鱼活动
- 经典攻击(如 XSS、CSRF、CORS 免验证)的进一步风险
通过无关联的 DNS 和子域接管详细了解子域接管。
Azure 应用服务提供名称预留服务和域验证令牌,以防止子域接管。
应用服务如何防止子域接管
删除应用服务应用或应用服务环境 (ASE) 后,禁止立即重用相应的 DNS,但属于最初拥有 DNS 的订阅租户的订阅除外。 因此,客户有一些时间清理指向所述 DNS 的任何关联/指针,或通过重新创建同名资源在 Azure 中回收 DNS。 默认情况下,在 Azure 应用服务上为“*.chinacloudsites.cn”和“*.appserviceenvironment.cn”资源启用此行为,因此不需要任何客户配置。
示例方案
订阅“A”和订阅“B”是属于租户“AB”的唯一订阅。 订阅“A”包含具有 DNS 名称“test.chinacloudsites.cn”的应用服务 Web 应用“test”。 删除应用时,只有订阅“A”或订阅“B”能够通过创建名为“test”的 Web 应用来立即重用 DNS 名称“test.chinacloudsites.cn”。 资源删除后,不允许其他订阅立即声明该名称。
如何防止子域接管
为 Azure 应用服务创建 DNS 项时,请使用域验证 ID 创建 asuid.{subdomain} TXT 记录。 如果存在此类 TXT 记录,则其他 Azure 订阅无法验证自定义域或对其进行接管,除非将令牌验证 ID 添加到 DNS 条目。
这些记录可防止使用 CNAME 条目中的相同名称创建另一个应用服务应用。 如果无法证明域名的所有权,则威胁操纵者无法接收流量或控制内容。
应在网站删除之前更新 DNS 记录,以确保意图不轨之人无法在从删除到重新创建之间的时间内接管域。
若要获取域验证 ID,请参阅映射自定义域教程