18个流行代码包遭黑客篡改,被植入窃取加密货币的恶意代码

至少18个每周下载量超20亿次的JavaScript代码包因开发者遭钓鱼攻击而被植入恶意代码,这些代码会静默劫持加密货币交易并重定向支付目的地到攻击者控制的账户,暴露了开源软件供应链的严重安全隐患。

18个流行代码包遭黑客篡改,被植入窃取加密货币的恶意代码

9月8日,至少18个每周总下载量超过20亿次的流行JavaScript代码包被短暂植入了恶意软件。事件起因是一名参与维护这些项目的开发者遭遇了钓鱼攻击。此次攻击似乎已得到快速控制,且目标明确地专注于窃取加密货币。但专家警告称,若类似攻击携带更具破坏性的恶意负载,可能导致更难以检测和遏制的恶意软件爆发。

这封钓鱼邮件诱骗开发者登录伪造的NPM网站并提供双因素认证的一次性令牌。钓鱼者随后利用该开发者的NPM账户向至少18个流行JavaScript代码包添加了恶意代码。

比利时安全公司Aikido负责监控主要开源代码仓库的新代码更新,扫描所有代码更新中的可疑和恶意代码。在今日发布的博客文章中,Aikido表示其系统发现恶意代码已被添加到NPM(Node Package Manager的缩写)上至少18个广泛使用的代码库中,NPM是JavaScript开发及广泛使用的JavaScript组件最新更新的中心枢纽。

JavaScript是一种强大的基于网络的脚本语言,被无数网站用于构建更具交互性的用户体验,例如向表单中输入数据。但网站开发者无需从头开始构建程序,他们可以直接重用NPM上专门为此目的设计的现有代码包。

不幸的是,如果网络犯罪分子成功通过钓鱼获取开发者的NPM凭据,他们可以引入恶意代码,使攻击者能够从根本上控制用户访问使用受影响代码库的网站时在浏览器中看到的内容。

据Aikido称,攻击者注入了一段代码,静默拦截浏览器中的加密货币活动,“操纵钱包交互并重写支付目的地,使得资金和授权在用户毫无察觉的情况下被重定向到攻击者控制的账户”。

Aikido研究员Charlie Eriksen写道:“这种恶意软件本质上是一种基于浏览器的拦截器,可劫持网络流量和应用程序API。其危险之处在于它在多个层面操作:改变网站上显示的内容、篡改API调用以及操纵用户应用程序认为它们正在签署的内容。即使界面看起来正确,底层交易也可以在后台被重定向。”

Aikido表示,他们通过社交网络Bsky通知了受影响的开发者Josh Junon,后者迅速回复称意识到自己刚刚遭遇了钓鱼攻击。Junon上当的钓鱼邮件是一场更大规模活动的一部分,该活动冒充NPM并告知收件人需要更新其双因素认证(2FA)凭据。钓鱼网站模仿了NPM的登录页面,并拦截了Junon的凭据和2FA令牌。登录后,钓鱼者随即更改了Junon NPM账户中存档的电子邮件地址,暂时将他锁定在外。

Aikido在Bluesky上通知了维护者,后者在UTC时间15:15回复称意识到账户已被入侵,并开始清理受感染的软件包。

Junon还在HackerNews上发表了道歉,告诉该社区以程序员为主的读者:“是的,我被入侵了。”

Junon写道:“这看起来有点像针对性攻击。对不起大家,非常尴尬。”

安全咨询公司Seralys的“首席黑客官”Philippe Caturegli指出,攻击者似乎是在发送钓鱼邮件前两天注册了他们的欺骗网站——npmjs[.]help。该欺骗网站使用了dnsexit[.]com的服务,这是一家“动态DNS”公司,还提供“100%免费”的域名,可以立即指向用户控制的任何IP地址。

Junon今日在Hackernews上的道歉列出了受影响的软件包。

Caturegli表示,值得注意的是,此案中的攻击者对其代码修改并未表现出更大的野心或恶意。

他说:“疯狂的是,他们入侵了数十亿个网站和应用程序,却只针对几个加密货币相关的东西。这是一次供应链攻击,本可以轻易变成比收集加密货币更糟糕的事情。”

Aikido的Eriksen对此表示同意,称无数网站侥幸躲过一劫,因为该事件在几小时内得到了处理。作为这些供应链攻击如何迅速升级的例子,Eriksen指出了8月下旬另一起NPM开发者账户被入侵事件,该事件向“nx”添加了恶意软件,这是一个每周下载量高达600万次的开源代码开发工具包。

在nx入侵事件中,攻击者引入了代码,该代码在用户设备上搜索来自GitHub和NPM等程序员目的地以及SSH和API密钥的身份验证令牌。但恶意代码并未将这些被盗凭据发送到攻击者控制的中央服务器,而是在受害者的GitHub账户中创建了一个新的公共仓库,并将被盗数据发布在那里,供全世界查看和下载。

Eriksen表示,像GitHub和NPM这样的编码平台应该采取更多措施,确保广泛使用的软件包的任何新代码提交都需要更高级别的证明,确认相关代码实际上是由账户所有者提交的,而不仅仅是来自该人的账户。

Eriksen说:“更流行的软件包应该要求证明其来自可信来源,而不仅仅是随机来自互联网上的某个位置。软件包是从哪里上传的,是由GitHub响应主分支的新拉取请求,还是其他地方?在这种情况下,他们并未入侵目标的GitHub账户。他们没有碰那个。他们只是上传了一个修改版本,而这个版本并非来自预期来源。”

Eriksen表示,代码仓库入侵对开发者来说可能是毁灭性的,许多人在此类事件后最终完全放弃了他们的项目。

Eriksen说:“这是不幸的,因为我们看到的一件事是,人们的项目被入侵后,他们说,‘你知道吗,我没有精力处理这个,我打算弃用整个软件包。’”

经常被引用的安全专家Kevin Beaumont在其博客doublepulsar.com上撰写安全事件文章,今日他通过频繁更新Mastodon账户密切关注此事。Beaumont表示,这一事件提醒人们,全球大部分地区仍然依赖于最终由极少数人维护的代码,这些人大多负担过重且资源不足。

Beaumont在Mastodon上写道:“大约过去15年里,每家企业都在开发应用程序,通过引入178个相互连接的库,这些库由Skegness棚屋里的24个人编写。大约过去2年里,组织一直在购买AI氛围编码工具,某个高管对着电脑大喊‘制作在线商店’,然后添加了389个库,一个应用程序就被‘放屁’般地生产出来。输出结果=如果你想拥有世界上的公司,只需钓鱼Skegness的一个人。”

Aikido最近推出了一款产品,旨在帮助开发团队确保每个使用的代码库在使用或安装前都经过恶意软件检查。位于加州伯克利的非营利组织国际计算机科学研究所的研究员Nicholas Weaver表示,Aikido的新产品之所以存在,是因为许多组织距离供应链噩梦仅一次成功的钓鱼攻击之遥。

Weaver表示,只要负责维护广泛使用代码的人员继续依赖可被钓鱼的2FA形式,这类供应链入侵就会持续发生。

Weaver说:“NPM应该只支持防钓鱼认证,”他指的是物理安全密钥是防钓鱼的——这意味着即使钓鱼者成功窃取了您的用户名和密码,在没有该物理密钥的情况下仍然无法登录您的账户。

Weaver说:“所有关键基础设施都需要使用防钓鱼的2FA,鉴于现代软件中的依赖关系,像NPM这样的档案库绝对是关键基础设施。NPM不要求所有贡献者账户使用安全密钥或类似的2FA方法应被视为疏忽。”

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计