Go 模块镜像三年多来一直向开发者提供带后门程序

B站影视 2025-02-06 17:43 3

摘要:谷歌为 Go 编程语言开发者运营的一个镜像代理,在长达三年多的时间里一直在推送一个带有后门的软件包,直到本周一才停止。此前,发现恶意代码的研究人员曾两次请愿要求将其下架。

谷歌为 Go 编程语言开发者运营的一个镜像代理,在长达三年多的时间里一直在推送一个带有后门的软件包,直到本周一才停止。此前,发现恶意代码的研究人员曾两次请愿要求将其下架。


这个名为 Go 模块镜像的服务,会缓存 GitHub 及其他地方的开源软件包,以加快下载速度,并确保这些软件包与 Go 生态系统的其他部分兼容。默认情况下,当有人使用 Go 内置的命令行工具下载或安装软件包时,请求会通过该服务进行路由。该网站的介绍称,这个代理由 Go 团队提供,“由谷歌运营”。


缓存隐患


安全公司 Socket 周一表示,自 2021 年 11 月以来,Go 模块镜像一直在托管一个广泛使用模块的后门版本。该文件使用了 “域名混淆(typosquatting)” 技术,即给恶意文件起与广泛使用的合法文件相似的名字,并将其植入热门代码库。如果有人在使用命令行获取文件时出现拼写错误,甚至只是对正确名称做了微小变动,就会获取到恶意文件,而非所需文件。(类似的域名混淆手段在域名方面也很常见。)


恶意模块名为 boltdb - go/bolt,是被广泛采用的 boltdb/bolt 的变体,有 8367 个其他软件包依赖 boltdb/bolt 才能运行。这个恶意软件包最初出现在 GitHub 上。那里的文件最终被恢复为合法版本,但那时 Go 模块镜像已经缓存了带后门的版本,并在接下来的三年里一直存储着。


Socket 的研究人员写道:“这次攻击的成功依赖于 Go 模块代理服务的设计,该设计为了性能和可用性优先考虑缓存。一旦某个模块版本被缓存,即使原始源后来被修改,仍可通过 Go 模块代理访问。虽然这种设计对合法用例有益,但威胁行为者利用这一点,尽管代码库后来发生了变化,仍持续分发恶意代码。”


还有其他手段来吸引开发者使用这个软件包。一是 boltdb - go/bolt 附带的 README 文件是原始良性软件包 README 文件的副本。另一个是原始软件包已被归档。开发者通常会选择活跃的分支版本,而非旧版本。还有些人可能会误以为这个恶意软件包就是原始 / 合法的软件包。


后门潜入模块,构建了隐藏的 IP 地址和端口,并连接到攻击者控制的服务器。然后它会执行远程服务器发出的任何命令。该服务器的 IP 地址由 Hetzner Online(AS24940)托管,声誉良好。Socket 的研究人员怀疑,该基础设施是专门为此次攻击行动获取的,以避免被发现。他们写道:“与随意传播的恶意软件不同,这个后门旨在融入可信赖的开发环境,增加了在被发现之前广泛传播并造成危害的可能性。”


发现该模块后,Socket 上周五请愿将其移除。周一,Socket 再次请愿,该软件包最终被下架。研究人员提供了以下事件顺序:

威胁行为者在 GitHub 上创建一个仿冒仓库(github.com/boltdb - go/bolt)他们发布一个带有隐藏远程访问机制的后门版本(v1.3.1)Go 模块镜像获取并缓存这个版本,存储起来供未来安装使用威胁行为者修改 GitHub 仓库,将 v1.3.1 替换为干净版本人工审查 GitHub 的人员现在只能看到干净版本尽管 GitHub 仓库看起来是安全的,但 Go 模块镜像继续向开发者提供恶意的 v1.3.1 版本我们于 2025 年 1 月 30 日识别出恶意缓存软件包,并请愿从 Go 模块镜像中移除它,2 月 3 日再次请愿。我们还于 2 月 3 日向 GitHub 报告了该 GitHub 仓库及相关账户,以供进一步调查和下架处理。


尽管在检测时 GitHub 仓库已 “干净”,但通过 Go 模块代理提供的缓存软件包仍然是恶意的。这就是为什么 Go 的模块缓存行为存在安全风险,因为它允许攻击者在软件包被缓存后隐藏踪迹。


谷歌和 Go 团队的代表均未回复关于采取了哪些措施来确保通过该镜像提供的模块安全性的邮件询问。


这项研究警示我们,在生产设备上运行代码之前,正确审查代码非常重要。这个过程包括在安装前验证软件包的完整性、分析依赖关系是否存在异常,以及使用能更深入检查已安装代码的安全工具。

关注【黑客联盟】带你走进神秘的黑客世界

来源:黑客技术分享

相关推荐