GitHub 正在努力遏制一场持续的攻击,该攻击使数百万个代码存储库淹没了该网站。研究人员表示,这些存储库包含混淆的恶意软件,可以从开发人员设备中窃取密码和加密货币。
恶意存储库是合法存储库的克隆,因此普通人很难区分它们。未知方已经自动化了一个分叉合法存储库的过程,这意味着源代码被复制,以便开发人员可以在基于原始项目构建的独立项目中使用它。结果是数以百万计的分叉,其名称与原始分叉相同,并添加了包裹在七层混淆之下的有效负载。更糟糕的是,一些人没有意识到这些模仿者的恶意,正在分叉,这加剧了洪水。
打地鼠
安全公司 Apiiro 的研究人员马坦·吉拉迪 (Matan Giladi) 和吉尔·大卫 (Gil David)周三写道:“大多数分叉的存储库很快就会被 GitHub 删除,这表明了自动化。 ” “但是,自动化检测似乎错过了许多存储库,而手动上传的存储库则幸存下来。因为整个攻击链似乎大部分都是大规模自动化的,所以幸存下来的 1% 仍然相当于数千个恶意代码库。”
鉴于不断上传的新存储库以及 GitHub 的删除,很难准确估计每个存储库的数量。研究人员表示,在 GitHub 删除之前上传或分叉的存储库数量可能有数百万。他们表示,此次攻击“影响了超过 100,000 个 GitHub 存储库”。
GitHub 官员没有对 Apiiro 的估计提出异议,也没有回答通过电子邮件发送的其他问题。相反,他们发表了以下声明:广告
GitHub 拥有超过 1 亿开发人员,构建了超过 4.2 亿个存储库,并致力于为开发人员提供一个安全可靠的平台。我们有专门的团队专门检测、分析和删除违反我们的可接受使用政策的内容和帐户。我们采用人工审查和大规模检测,利用机器学习并不断发展和适应对抗策略。我们还鼓励客户和社区成员举报滥用行为和垃圾邮件。
针对开发者平台用户的供应链攻击至少自 2016 年以来就已经存在,当时一名大学生将自定义脚本上传到 RubyGems、PyPi 和 NPM。这些脚本的名称与广泛使用的合法软件包相似,但在其他方面与它们没有任何联系。学生脚本中的回拨功能显示,冒名顶替者代码在 17,000 多个独立域上执行了 45,000 多次,其中一半以上的代码被授予了全能的管理权限。其中两个受影响的域名以 .mil 结尾,这表明美国军方内部的人员运行了他的脚本。这种形式的供应链攻击通常被称为误植,因为它依赖于用户在选择他们想要使用的软件包名称时犯下的小错误。
2021 年,一名研究人员使用类似的技术在苹果、微软、特斯拉和其他数十家公司的网络上成功执行了伪造代码。这种技术被称为依赖性混淆或名称空间混淆攻击,首先将恶意代码包放置在官方公共存储库中,并为它们指定与苹果和其他目标公司在其产品中使用的依赖包相同的名称。然后,公司使用的包管理器内的自动化脚本会自动下载并安装伪造的依赖项代码。
Apiiro 观察到的技术称为回购混淆。
“与依赖性混淆攻击类似,恶意行为者会让目标下载其恶意版本而不是真实版本,”周三的帖子解释道。“但是依赖性混淆攻击利用了包管理器的工作方式,而仓库混淆攻击只是依赖于人类错误地选择恶意版本而不是真实版本,有时还使用社会工程技术。”
该活动的流程很简单:
- 克隆现有存储库(例如:TwitterFollowBot、WhatsappBOT、discord-boost-tool、Twitch-Follow-Bot 等数百个)
- 用恶意软件加载程序感染他们
- 以相同的名称将它们上传回 GitHub
- 每数千次自动分叉
- 通过论坛、Discord 等在网络上秘密推广它们。
使用该活动中任何恶意存储库的开发人员解压隐藏在七层混淆之下的有效负载,以接收恶意 Python 代码,以及随后的可执行文件。该代码主要由开源BlackCap-Grabber的修改版本组成,然后从各种应用程序收集身份验证 cookie 和登录凭据,并将它们发送到攻击者控制的服务器。研究人员表示,恶意代码库“执行了一系列额外的恶意活动”。
该图演示了有效负载的工作原理:
该活动于去年五月开始,截至本文在 Ars 上发布时仍在进行中。阿皮罗表示,到目前为止已经经历了三个主要阶段:
2023 年 5 月:正如Phylum 最初报告的那样,多个恶意软件包被上传到 PyPI,其中包含当前有效负载的早期部分。这些软件包通过“ os.system(“pip install package”) ”调用传播到流行的 GitHub 存储库的分支中,例如“chatgpt-api”。
2023 年 7 月至 8 月:多个恶意存储库被上传到 GitHub,这次直接传递有效负载,而不是通过导入 PyPI 包。这是在 PyPI 删除恶意软件包之后发生的,安全社区加大了对这方面的关注。趋势科技的 Aliakbar Zahravi 和 Peter Girnus 发表了一篇精彩的技术分析。
2023 年 11 月至今:我们已检测到超过 100,000 个包含类似恶意负载的存储库,并且数量不断增长。这种攻击方法有几个优点:
- GitHub 很大,因此尽管实例数量很多,但它们的相对比例仍然微不足道,因此难以检测。
- 不像以前那样涉及包管理器,因此没有提及明确的恶意包名称,因此少了一个指标。
- 目标存储库规模较小且受欢迎程度较低,这使得毫无戒心的开发人员更容易犯错误并克隆他们的恶意模仿者。
周三的帖子没有说明此活动中的恶意代码库已收到多少下载或安装(如果有),Apiiro 代表也没有回复寻求此信息和其他详细信息的电子邮件。如果没有这些信息,就很难评估 GitHub 上大量恶意上传内容对现实世界的威胁有多大。考虑到分叉的数量和活动的持续时间,开发人员最好意识到风险并确保下载来自合法来源。