18个流行代码包遭劫持,被恶意篡改窃取加密货币

至少18个每周下载量超20亿次的JavaScript代码包因开发者遭钓鱼攻击而被植入恶意软件,该攻击旨在窃取加密货币,暴露了开源软件供应链的脆弱性和双重认证的安全隐患。

18个流行代码包遭劫持,被恶意篡改窃取加密货币

至少18个每周合计下载量超过20亿次的流行JavaScript代码包今日被短暂植入恶意软件,原因是参与维护这些项目的开发者遭到钓鱼攻击。此次攻击似乎已得到快速控制,且目标明确集中在窃取加密货币上。但专家警告称,若类似攻击携带更具恶意的载荷,可能导致破坏性恶意软件爆发,其检测和遏制难度将大大增加。

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

比利时安全公司Aikido负责监控主要开源代码仓库的新代码更新,扫描所有代码更新中的可疑和恶意代码。在今日发布的博客中,Aikido表示其系统发现恶意代码已被添加到NPM(Node Package Manager的缩写)上至少18个广泛使用的代码库中,该平台是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个相互连接的库来开发应用程序,这些库由斯凯格内斯某个棚屋里的24个人编写。大约过去2年里,组织一直在购买AI氛围编码工具,某个高管对着电脑大喊‘制作在线商店’,然后添加了389个库,一个应用程序就被‘放屁似的’弄出来了。输出结果=如果你想拥有世界上的公司,只需在斯凯格内斯钓鱼一个人。”

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

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

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

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

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