防范子域名劫持:DNS记录管理指南

本文详细解析子域名劫持的成因与危害,提供针对DNS记录管理的具体防护措施,包括Azure平台的自动化防护功能、检测脚本和修复流程,帮助IT管理者构建安全防线。

[IT管理者必读] 通过管理DNS记录防范子域名劫持

您是否了解“子域名劫持”这一安全问题?子域名劫持是一个长期存在的常见安全威胁,随着云服务使用的增加,尤其需要引起重视。虽然这不是微软服务独有的问题,但本文将以Microsoft Azure为例,详细说明子域名劫持的概述、成因及对策。

1 什么是子域名劫持?

子域名劫持(Subdomain Takeover)是由于DNS记录管理不当而导致的安全问题。例如,在使用CDN(内容分发网络)服务等外部服务时,通常会将组织管理的域名或子域名通过DNS记录解析到外部服务。这样,访问组织域名的用户可以被引导至组织签约的外部服务。

当停止使用该外部服务时,不仅需要解除外部服务的合约并停止服务,还必须删除已设置的CNAME记录,确保组织管理的域名不再解析到外部服务。否则,访问组织域名的用户将继续访问已停止使用的外部服务。

遗憾的是,在停止使用外部服务时,DNS记录管理往往被忽视,导致域名仍然指向不可用的外部服务。恶意第三方会利用这一漏洞,将正规域名的访问流量重定向到恶意第三方控制的资源。这就是所谓的子域名劫持问题。

发生场景示例(Microsoft Azure)

子域名劫持是一个长期存在的常见安全问题。然而,近年来,随着CDN服务和云服务使用的增加,组织域名引导至外部服务的配置增多,子域名劫持问题因此受到更多关注。虽然这不是Microsoft Azure独有的问题,但为了便于理解,我们以使用Microsoft Azure的虚构公司Contoso为例进行说明:

  1. Contoso的管理员在Microsoft Azure上创建名为app-contogreat-dev-001.azurewebsites.net的网站资源。
  2. 为了将Contoso的子域名greatapp.contoso.com绑定到Microsoft Azure上创建的资源(app-contogreat-dev-001.azurewebsites.net),添加CNAME记录。
  3. 数月后,Contoso的管理员决定停止使用Microsoft Azure上的网站,因此删除了Azure资源app-contogreat-dev-001.azurewebsites.net。但此时忘记删除CNAME记录。CNAME记录未被删除,greatapp.contoso.com仍然指向已删除的资源(app-contogreat-dev-001.azurewebsites.net)。
  4. 恶意第三方创建了与Microsoft Azure上网站同名的网站资源(app-contogreat-dev-001.azurewebsites.net)。
  5. 由于指向greatapp.contoso.com到app-contogreat-dev-001.azurewebsites.net的CNAME记录仍然存在,访问greatapp.contoso.com的流量会被引导至恶意第三方创建的网站资源。

子域名劫持发生后的影响?

如果发生子域名劫持问题,正规域名的流量将被导向恶意第三方。恶意第三方可能利用此进行攻击,例如造成以下影响:

  • 钓鱼欺诈:如果恶意第三方的网站伪装成Contoso公司的钓鱼网站,信任正规Contoso网站并访问greatapp.contoso.com的用户可能会遭受钓鱼攻击。
  • Cookie窃取:许多Web应用程序允许从子域名访问Session Cookie。恶意第三方可能准备伪装成正规Contoso公司的页面,从浏览页面的用户处窃取Cookie。

2 如何防止子域名劫持?(域名管理员侧)

子域名劫持是由于DNS记录管理不当而发生的。因此,为了防止子域名劫持,需要及时删除组织中不再使用的DNS记录,保持健康状态。特别是在停止使用外部服务时,除了解除服务合约和删除内容外,还应删除已设置的CNAME资源记录或A/AAAA记录。例如,在子域名使用结束或外部服务使用结束时,将DNS记录删除流程纳入外部资源删除流程,并向开发者和运维人员宣传,将DNS记录删除正确纳入IT运维流程并进行管理,这一点非常重要。

有助于防护的功能(Microsoft Azure)

Microsoft Azure提供了有助于防止子域名劫持的功能。请将其纳入Azure资源的管理运维中,助力防护措施。

  1. 检查组织中DNS区域是否存在不必要的DNS记录 我们提供了有用的PowerShell脚本来检查是否存在指向未使用资源的DNS记录。 https://aka.ms/DanglingDNSDomains 使用此PowerShell脚本,可以列出在Azure订阅或租户中创建的现有Azure资源的所有关联CNAME域名。如果发现指向未使用的Azure资源等不必要的DNS记录,建议按照修复指南减轻风险。
  2. 管理以避免产生不必要的DNS记录 为了防止子域名劫持,当域名指向的资源使用结束时,需要及时删除DNS记录。使用Azure资源时,有以下功能可避免残留不必要的DNS记录,请将其纳入资源管理流程。
    • 使用Azure DNS的别名记录 传统的DNS区域记录中,当目标IP或CNAME不存在时,通常需要手动更新关联的DNS记录,这可能导致子域名劫持问题。使用Azure DNS的别名记录,可以在引用的Azure资源发生生命周期事件时自动更新DNS记录。虽然别名记录可保护的内容有限制,但对于可用的服务,建议尽可能使用别名记录来自动化DNS记录管理。详情请参阅Azure DNS别名记录公告。
    • 使用Azure App Service的自定义域名验证 创建Azure App Service的DNS条目时,请创建带有域验证ID的asuid.{subdomain} TXT记录。将域验证ID添加到自定义域名可以避免未解析的DNS条目,有助于防止子域名劫持。这些记录并不能阻止其他人在CNAME条目中创建相同名称的Azure App Service,但无法证明域名所有权的第三方无法接收流量或控制内容。详情请参阅将现有自定义DNS名称映射到Azure App Service。
    • 构建并自动化减轻威胁的流程 如果上述措施不可用,强烈建议建立防止子域名劫持的步骤、检测步骤以及万一受害时的修复步骤。
      • 创建预防步骤: 指导应用程序开发者在每次删除资源时重新路由地址。 在停止服务时,将“删除DNS条目”纳入必要检查事项清单。 为所有具有自定义DNS条目的资源设置删除锁。删除锁可作为指示器,表明在资源取消配置前必须删除映射。此类措施只有与内部教育计划结合才能发挥作用。
      • 创建检测步骤: 定期检查DNS记录,确保所有子域名都映射到以下Azure资源:
        • 是否存在:对DNS区域执行查询,检查是否指向*.azurewebsites.net或*.cloudapp.azure.com等Azure子域的资源(详情参阅此参考列表)。
        • 所有者是否为自己:确认DNS子域名指向的所有资源均为自己所有。 维护Azure完全限定域名(FQDN)端点和服务所有者的服务目录。要构建服务目录,请运行相应的Azure Resource Graph查询脚本。该脚本显示可访问资源的FQDN端点信息,并将其输出到CSV文件。如果可以访问租户的所有订阅,该脚本会考虑所有订阅,如示例脚本所示。要将结果限制在特定订阅集,请按所示编辑脚本。
      • 创建修复步骤: 如果发现未解析的DNS条目,团队需要调查是否发生侵害。 调查资源停用时地址未重新路由的原因。 删除不再使用的DNS记录,或将其指向组织拥有的正确Azure资源(FQDN)。

3 如何避免子域名劫持的危害?(用户侧)

对于意图浏览正规网站的用户,如果该网站由于子域名劫持问题被第三方“劫持”,可能会无意中访问恶意内容。如今的网络犯罪,如钓鱼欺诈,手段日益巧妙,特别是当正规网站被利用时,用户自身很难分辨是否为恶意内容。

为了对抗这些威胁,最新产品配备了许多保护用户免受恶意内容侵害的功能。例如,Windows 10和Microsoft Edge标准搭载的Windows Defender SmartScreen,即使网站是正规的,也会通过机器学习分析网站是否包含恶意内容、可疑行为迹象、声誉和各种威胁信息,并在认为有恶意时进行拦截。企业用户可以使用Microsoft 365 E5、Microsoft Defender Advanced Threat Protection(ATP)等,在企业网络中避免、检测、调查和应对高级威胁。用户侧重要的是保持使用设备的最新状态,并充分利用最新的安全功能。

健全的管理体制

特别是COVID-19大流行以来,随着云使用的增加,针对云上管理薄弱环境的案例增多,攻击者盯上了这些环境。不仅生产环境,包括开发环境、测试环境在内,创建和维护健全的IT环境是安全的重要基础。请重新审视不必要的DNS记录,并务必重新评估Azure资源的管理体制和组织安全能力。详情请参阅“遭受攻击也不动摇的IT环境新形态:Security Posture”。

垣内ゆりか
安全项目经理
安全响应团队
Microsoft

参考信息:

防止Microsoft Azure未解析DNS条目并避免子域名劫持

相关标签:

Azure、子域名劫持、安全信息

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计