子域名接管攻击原理与防御
字数 1180 2025-11-13 06:44:57

子域名接管攻击原理与防御

1. 攻击描述

子域名接管攻击(Subdomain Takeover)是一种因DNS配置错误或服务废弃而导致的安全漏洞。当某个子域名(如cdn.example.com)指向一个外部服务(如云存储、CDN、SaaS平台),但该外部服务的资源被删除或权限失效后,攻击者可以重新注册该服务并控制此子域名,从而冒充合法域名进行钓鱼、窃取Cookie或分发恶意软件。

2. 攻击原理

关键条件:

  1. DNS记录指向外部服务:子域名的CNAME或A记录指向第三方平台(如AWS S3、GitHub Pages、Heroku等)。
  2. 目标服务未绑定:原所有者释放了第三方服务的资源(如删除了S3存储桶),但未移除DNS记录。
  3. 攻击者注册该服务:攻击者抢注被释放的资源,使子域名指向自己控制的内容。

示例场景:

  • 公司曾使用assets.example.com指向一个AWS S3存储桶(桶名为company-assets)。
  • 后来公司迁移到其他CDN,删除了S3存储桶,但忘记删除DNS中的CNAME记录(仍指向company-assets.s3.amazonaws.com)。
  • 攻击者创建同名S3存储桶,并上传恶意文件。用户访问assets.example.com时会加载攻击者的内容。

3. 攻击步骤

  1. 信息收集
    • 扫描目标的子域名(使用工具如Amass、Sublist3r)。
    • 检查DNS记录类型(CNAME/A记录)及其指向的第三方服务。
  2. 识别可接管目标
    • 访问子域名,若返回错误如NoSuchBucket(AWS S3)、404 Not Found(GitHub Pages),则可能存在漏洞。
    • 使用自动化工具(如Subjack、HostileSubBruteforcer)验证服务是否可被注册。
  3. 接管子域名
    • 在第三方平台注册与DNS记录指向标识相同的资源(如S3存储桶名、GitHub仓库名)。
    • 上传恶意内容(如伪造登录页面、XSS载荷)。
  4. 利用攻击
    • 通过子域名发送钓鱼邮件、劫持用户会话或绕过安全策略(如CSP允许信任子域名)。

4. 防御措施

  1. 定期清理DNS记录
    • 删除未使用的子域名指向,尤其是废弃第三方服务的记录。
  2. 监控子域名状态
    • 使用自动化工具(如Aquatone、DNSTwist)定期检查子域名是否可被接管。
  3. 保留第三方服务资源
    • 即使不再使用,也应保留空资源并设置访问限制(如S3存储桶策略拒绝所有请求)。
  4. 使用DNSSEC
    • 防止DNS劫持导致子域名被重定向。
  5. 第三方服务配置
    • 为云服务绑定自定义域名时,添加所有权验证(如TXT记录)以避免冲突。

5. 总结

子域名接管本质是管理疏忽导致的“身份劫持”。通过严格的资产生命周期管理和自动化监控,可有效避免此类漏洞。

子域名接管攻击原理与防御 1. 攻击描述 子域名接管攻击 (Subdomain Takeover)是一种因DNS配置错误或服务废弃而导致的安全漏洞。当某个子域名(如 cdn.example.com )指向一个外部服务(如云存储、CDN、SaaS平台),但该外部服务的资源被删除或权限失效后,攻击者可以重新注册该服务并控制此子域名,从而冒充合法域名进行钓鱼、窃取Cookie或分发恶意软件。 2. 攻击原理 关键条件: DNS记录指向外部服务 :子域名的CNAME或A记录指向第三方平台(如AWS S3、GitHub Pages、Heroku等)。 目标服务未绑定 :原所有者释放了第三方服务的资源(如删除了S3存储桶),但未移除DNS记录。 攻击者注册该服务 :攻击者抢注被释放的资源,使子域名指向自己控制的内容。 示例场景: 公司曾使用 assets.example.com 指向一个AWS S3存储桶(桶名为 company-assets )。 后来公司迁移到其他CDN,删除了S3存储桶,但忘记删除DNS中的CNAME记录(仍指向 company-assets.s3.amazonaws.com )。 攻击者创建同名S3存储桶,并上传恶意文件。用户访问 assets.example.com 时会加载攻击者的内容。 3. 攻击步骤 信息收集 : 扫描目标的子域名(使用工具如Amass、Sublist3r)。 检查DNS记录类型(CNAME/A记录)及其指向的第三方服务。 识别可接管目标 : 访问子域名,若返回错误如 NoSuchBucket (AWS S3)、 404 Not Found (GitHub Pages),则可能存在漏洞。 使用自动化工具(如Subjack、HostileSubBruteforcer)验证服务是否可被注册。 接管子域名 : 在第三方平台注册与DNS记录指向标识相同的资源(如S3存储桶名、GitHub仓库名)。 上传恶意内容(如伪造登录页面、XSS载荷)。 利用攻击 : 通过子域名发送钓鱼邮件、劫持用户会话或绕过安全策略(如CSP允许信任子域名)。 4. 防御措施 定期清理DNS记录 : 删除未使用的子域名指向,尤其是废弃第三方服务的记录。 监控子域名状态 : 使用自动化工具(如Aquatone、DNSTwist)定期检查子域名是否可被接管。 保留第三方服务资源 : 即使不再使用,也应保留空资源并设置访问限制(如S3存储桶策略拒绝所有请求)。 使用DNSSEC : 防止DNS劫持导致子域名被重定向。 第三方服务配置 : 为云服务绑定自定义域名时,添加所有权验证(如TXT记录)以避免冲突。 5. 总结 子域名接管本质是管理疏忽导致的“身份劫持”。通过严格的资产生命周期管理和自动化监控,可有效避免此类漏洞。