子域名接管攻击原理与防御
字数 1180 2025-11-13 06:44:57
子域名接管攻击原理与防御
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. 总结
子域名接管本质是管理疏忽导致的“身份劫持”。通过严格的资产生命周期管理和自动化监控,可有效避免此类漏洞。