子域名接管漏洞是怎么回事儿
字数 1433 2025-08-07 00:35:01
子域名接管漏洞详解
一、漏洞概述
子域名接管漏洞(Subdomain Takeover)是指攻击者能够控制目标组织不再使用的子域名,从而可以展示任意内容或进行恶意活动的安全漏洞。这种漏洞通常发生在组织忘记删除DNS记录(特别是CNAME记录)的情况下。
二、漏洞原理
-
基本流程:
- 组织为某个功能(如GitHub Pages)创建子域名并设置CNAME记录
- 该功能停止使用后,组织忘记删除DNS记录
- 攻击者发现后可重新注册该服务并接管子域名
-
核心原因:
- DNS记录(特别是CNAME)指向的服务已不再使用
- 但DNS记录未被及时清理
- 攻击者可重新注册该服务并声明对该子域名的所有权
三、漏洞危害
-
网络钓鱼:
- 伪造合法组织的登录页面
- 窃取用户凭据
-
Cookie窃取:
- 设置恶意JavaScript窃取用户Cookie
-
邮件伪造:
- 如果子域名用于邮件服务,可伪造发件人
-
信任滥用:
- 利用合法组织的域名信任关系进行攻击
四、漏洞复现(以GitHub Pages为例)
-
设置阶段:
# 在DNS管理平台设置CNAME记录 blog.example.com CNAME username.github.io -
正常使用阶段:
- 在GitHub创建项目并配置Pages
- 在Settings > Pages中添加自定义域名blog.example.com
- 此时访问blog.example.com显示GitHub Pages内容
-
漏洞产生阶段:
- 用户删除GitHub项目但保留DNS记录
- 访问blog.example.com显示404页面
-
攻击者接管:
- 攻击者创建自己的GitHub项目
- 在Settings > Pages中添加blog.example.com
- 现在该子域名显示攻击者控制的内容
五、检测方法
-
手动检测:
- 收集目标所有子域名
- 检查DNS记录(特别是CNAME)
- 访问子域名查看是否返回特定服务商的404页面
-
自动化工具:
- subtake:专门检测子域名接管问题
- can-i-take-over-xyz:不同服务的利用方式
六、易受攻击的服务
-
常见易受攻击平台:
- GitHub Pages (*.github.io)
- Heroku (*.herokuapp.com)
- AWS S3 (*.s3.amazonaws.com)
- Shopify (*.myshopify.com)
- Azure (*.azurewebsites.net)
-
其他情况:
- 域名过期被抢注:如果CNAME指向的域名过期并被他人注册
七、防御措施
-
主动防御:
- 定期审计DNS记录
- 下线服务时同步清理DNS记录
- 监控子域名状态
-
被动防御:
- 使用DNSSEC防止DNS劫持
- 设置适当的SPF、DKIM、DMARC记录防止邮件伪造
-
应急响应:
- 发现被接管后立即删除或修改DNS记录
- 通知相关服务提供商
八、实战技巧
-
目标发现:
- 大规模子域名收集
- 筛选CNAME记录指向第三方服务的子域名
- 批量检测这些服务是否可被接管
-
成功率统计:
- 测试表明约3%的GitHub Pages相关子域名存在接管风险
-
利用扩展:
- 不仅限于GitHub,其他云服务也存在类似问题
- 关注新出现的云服务平台
九、法律与道德
-
注意事项:
- 未经授权测试可能违法
- 发现漏洞应通过合法渠道报告
- 仅在授权范围内进行测试
-
漏洞报告:
- 通过组织官方渠道或漏洞赏金平台报告
- 提供详细复现步骤和影响证明