我们正处于云计算时代,虚拟服务器和存储空间等资源通常根据需要通过部署脚本以编程方式进行配置。虽然启动此类资产几乎是一个即时过程,但在不再需要它们时删除它们并不那么简单。简单地删除云资产,而不确保删除资产的所有可能指向它们的记录,无论是在域的 DNS 域中还是在代码库中,都可能为攻击者打开严重的安全漏洞。
想象一下以下场景:你想为你的客户运营一个特殊的假日活动,并决定为它创建一个微型网站来托管所有促销材料、注册表单等。你的开发人员开始工作,他们设计站点,并在 AWS 或任何云计算服务上设置新的虚拟服务器来托管它,以及用于存储站点数据的存储桶。
云服务提供商将从其可重用 IP 地址池中为你的 EC2 实例分配一个可公开访问的 IP 地址,并在其域 bucket-name.s3.region-code.amazonaws.com 下为你的存储桶分配主机名,以便你可以通过 API 访问它。
用户需要访问你的网站和搜索引擎,而机器人需要对其进行索引,因此下一步是在你的主域名上为其创建一个子域,并将其指向 IP 地址,以便可以从你的子域名访问 Web 服务器。然后,为 S3 存储桶创建一个子域和一个 DNS CNAME 记录,以将其指向存储桶的 AWS 主机名。假设你还有一个移动应用程序,该应用程序将数据发送到此网站,因此主机名也将其放入应用程序的代码中。由于统计信息跟踪或数据库备份等原因,你还有其他内部应用程序和工具需要与站点集成。
你现在创建的是位于不同位置的大量记录,这些记录指向本质上是临时云资源的内容。如果你删除了这些云资产,以为已经完事了,但你没有删除开发人员和基础架构工程师为它们创建的记录,那么就可能会产生很大的风险。
攻击者可以使用你的子域名进行网络钓鱼网站、恶意软件传播
攻击者可以从亚马逊获得相同的 IP 地址,因为它现在是免费的,并且他们将你的子域指向它,因此他们可以创建网络钓鱼站点或恶意软件服务站点。他们可以注册具有相同名称的 S3 存储桶,因为他们在你的应用程序代码中找到了一个引用,现在你的应用程序正在将敏感数据发送到他们拥有的存储桶。
这是 TikTok 安全工程师 Abdullah Al-Sultani 最近在布加勒斯特举行的 DefCamp 安全会议上提出的场景。他将这类攻击称为“Cloud squatting”。不仅仅是DNS记录,因为在帐户关闭后进行资源和名称重新分配的云服务的类型和数量非常广泛。公司越大,这个影子云记录问题就越大。
为什么大型企业更难识别云抢注风险
在 TikTok 通过其漏洞赏金计划后(该计划就包含了接管 TikTok 子域这类风险),Al-Sultani 就遇到了Cloud squatting。他的团队很快意识到,试图找到所有过时的记录将是一项艰巨的任务,因为 TikTok 的母公司字节跳动在全球许多国家拥有超过 100,000 名员工以及开发和基础设施团队,它还为不同地区的不同应用程序提供数千个域名。
为了解决这个问题,TikTok 安全团队构建了一个内部工具,该工具遍历了公司的所有域名,通过向 ITP 或 DNS 发送请求来自动测试所有 CNAME 记录;识别指向属于 AWS、Azure、Google Cloud 和其他第三方服务提供商等云提供商的 IP 范围的所有域名和子域名;然后检查这些 IP 记录是否仍然有效并分配给 TikTok。幸运的是,该公司已经在内部数据库中跟踪云提供商分配给其资产的 IP 地址,但许多公司可能不会进行这种类型的跟踪。
Al-Sultani并不是第一个强调云抢注危险的人。去年,宾夕法尼亚州立大学(Pennsylvania State University)的一个研究小组通过在亚马逊美国东部地区部署3万台EC2服务器,分析了公有云上IP重用的风险,这些服务器接收了1万个唯一IP地址,约占该地区可用IP池的5%。在进入这些IP地址的流量中,研究人员发现了金融交易,GPS位置数据和个人身份信息。
“我们确定了四类云服务,七类第三方服务和DNS作为可利用的潜在配置的来源,”研究人员在他们的研究论文中说。“我们发现可利用的配置不仅常见,而且在许多情况下非常危险 [...]在七类第三方服务中,我们确定了数十个可利用的软件系统,这些软件系统跨越数百个服务器(例如,数据库、缓存、移动应用程序和 Web 服务)。最后,我们确定了 5,446 个可利用的域名,涵盖231个eTLD,其中 105 个位于top 10,000,23 个位于前 1,000 的热门域名中。
从第三方软件继承的云安全风险
云抢注问题的风险甚至可以从第三方软件组件继承。今年 3 月,Checkmarx 的研究人员警告说,攻击者正在扫描 npm 包以查找对 S3 存储桶的引用。如果他们发现不再存在的存储桶,则会注册该存储桶。在许多情况下,这些软件包的开发人员选择使用 S3存储桶来存储预编译的二进制文件,这些文件在软件包安装期间下载和执行。因此,如果攻击者重新注册废弃的存储桶,他们可以在信任受影响的 npm 包的用户的系统上执行远程代码执行,因为他们可以托管自己的恶意二进制文件。
在一个类似的例子中,今年早些时候,Aqua Security的研究人员表明,被删除或重命名的GitHub存储库可以被攻击者重新注册。如果应用程序或文档仍然指向它们,则它们可用于提供恶意软件。研究人员将这种攻击称为 RepoJacking。
降低云抢注风险
攻击面非常大,但组织需要从某个地方开始,而且越早越好。IP 重用和 DNS 方案似乎是最普遍的,可以通过多种方式缓解:通过使用云提供商提供的保留 IP 地址,这意味着在组织明确释放它们之前,它们不会被释放回共享池,通过将自己的 IP 地址传输到云,在用户不需要直接访问这些服务器时在服务之间使用专用(内部)IP 地址, 或者使用云提供商提供的 IPv6 地址,因为它们的数量如此之大,以至于不太可能被重复使用。 组织还应强制实施一项策略,防止在应用程序内对 IP 地址进行硬编码,而应将 DNS 名称用于其所有服务。他们应该定期维护这些记录并删除过时的记录,但让所有内容都可以通过 DNS 寻址,这提供了一个集中的管理场所,而不是追逐硬编码的 IP 地址。