网站首页 > 博客文章 正文
谷歌为 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 团队的代表均未回复关于采取了哪些措施来确保通过该镜像提供的模块安全性的邮件询问。
这项研究警示我们,在生产设备上运行代码之前,正确审查代码非常重要。这个过程包括在安装前验证软件包的完整性、分析依赖关系是否存在异常,以及使用能更深入检查已安装代码的安全工具。
关注【黑客联盟】带你走进神秘的黑客世界
- 上一篇: Kali不限速镜像下载地址
- 下一篇: 阿里开源MySQL中间件Canal快速入门
猜你喜欢
- 2025-03-06 Github 2025-03-02 php开源项目日报 Top10
- 2025-03-06 阿里开源MySQL中间件Canal快速入门
- 2025-03-06 Kali不限速镜像下载地址
- 2025-03-06 安装通义万相2.1体验AI生成高质量视频
- 2025-03-06 2个良心的“Windows资源站”,镜像开源纯净!真是相见恨晚
- 2025-03-06 魔哈:Grok国内镜像
- 2025-03-06 开源磁盘镜像和恢复工具Rescuezilla 2.5.1发布!
- 2025-03-06 阿里开源组件Nacos实战操作之安装部署完整版
- 2025-03-06 不用安装docker也能构建docker镜像
- 2025-03-06 使用Flask应用框架在Centos7.8系统上部署机器学习模型
你 发表评论:
欢迎- 05-21上传图片到cloudflare r2
- 05-21wordpress通过代码实现百度主动推送和实时推送
- 05-21百度实时推送代码解决方案
- 05-21Elasticsearch的路由routing的应用技巧
- 05-21技巧:PHP版本怎样隐藏在Linux服务器
- 05-21Python 进阶-day24: API 开发
- 05-21kubectl常用删除命令
- 05-21HTTP 的常见头字段有哪些?说说它们的作用
- 376℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 371℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃初次使用IntelliJ IDEA新建Maven项目
- 356℃Maven技术方案最全手册(mavena)
- 353℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 351℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 351℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 346℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)