子域劫持
子域接管是指攻击者获得了目标域的子域的控制权。通常,这发生在子域在域名系统(DNS)中有一个规范名称(CNAME),但没有主机为其提供内容。这可能是因为虚拟主机尚未发布,或者虚拟主机已被移除。攻击者可以通过提供自己的虚拟主机,然后为其托管自己的内容来接管该子域。
如果攻击者能够做到这一点,他们就有可能读取主域设置的Cookie,执行跨站脚本攻击,或绕过内容安全策略,从而能够捕获受保护的信息(包括登录凭据)或向毫无戒心的用户发送恶意内容。
子域就像一个电源插座。如果你有自己的电器(主机)插在上面,一切都正常。但是,如果你从插座上拔下你的电器(或尚未插上),别人就可以插入一个不同的电器。你必须在断路器或保险丝盒(DNS)处断电,以防止插座被他人使用。
它们是如何发生的?
如果虚拟主机的配置或取消配置(移除)过程处理不当,攻击者就有可能接管子域。
配置期间
攻击者在你购买的托管提供商上为你购买的子域名称设置了虚拟主机。
假设你控制着 example.com 域。你想在 blog.example.com 添加一个博客,你决定使用一个维护博客平台的托管提供商。(对于“博客”,你可以替换为“电子商务平台”、“客户服务平台”或任何其他“基于云”的虚拟托管场景。)你可能经历的过程如下:
- 你在域名注册商处注册了“blog.example.com”名称。
- 你设置了 DNS 记录,将想要访问 blog.example.com 的浏览器导向虚拟主机。
- 你在托管提供商处创建了一个虚拟主机。
除非托管提供商非常谨慎地验证设置虚拟主机的实体确实是子域名称的所有者,否则比你更快的攻击者可能会使用相同的托管提供商和你的子域名称创建一个虚拟主机。在这种情况下,一旦你在第 2 步设置了 DNS,攻击者就可以在你的子域上托管内容。
取消配置期间
你关闭了你的虚拟主机,但攻击者使用相同的名称和托管提供商设置了一个新的虚拟主机。
你(或你的公司)决定不再维护博客,于是从托管提供商那里移除了虚拟主机。但是,如果你不删除指向托管提供商的 DNS 条目,攻击者现在就可以在该提供商处创建自己的虚拟主机,声明你的子域,并在该子域下托管自己的内容。
防止子域接管的措施
防止子域接管是虚拟主机和 DNS 生命周期管理中操作顺序的问题。根据组织的规模,这可能需要多个部门之间的沟通和协调,这只会增加发生易受攻击的错误配置的可能性。
-
定义虚拟主机配置和取消配置的标准流程。尽可能紧密地执行所有步骤。
- 通过声明虚拟主机开始配置;*最后*创建 DNS 记录。
- 通过*首先*移除 DNS 记录开始取消配置。
-
创建组织所有域及其托管提供商的清单,并随情况变化而更新,以确保没有任何内容被遗漏。
-
向托管供应商施压,要求他们弥补漏洞;询问他们如何验证声称拥有虚拟主机的个人是否确实对域名拥有合法的所有权。在组织内部,将此纳入供应商资格审查流程。
我的子域已被接管。我该怎么办?
如果你发现你的域的一个子域已被接管,如果可能的话,第一步是“断电”,即移除该子域的 DNS 条目。如果你的网站有多层虚拟化(例如,除了虚拟主机之外还有CDN),你可能需要检查每一层,以找出攻击者确切地在哪里声明了他们的虚拟主机以接管你的域。