利用Solidity语言扩展的50万美元加密货币盗窃案

本文详细分析了攻击者如何通过伪造Solidity语言扩展插件在Cursor AI IDE中植入恶意代码,最终窃取开发者50万美元加密货币的全过程,涉及恶意PowerShell脚本、远程控制工具和窃密木马等技术细节。

感染始末

2025年6月,一位俄罗斯区块链开发者遭遇网络攻击,损失约50万美元加密货币。令人惊讶的是,受害者的操作系统仅安装数天,仅下载了必要和热门应用。开发者深知加密货币交易的安全风险,始终保持警惕并仔细检查每个在线操作步骤,仅使用免费在线恶意软件检测服务保护系统,未安装商业杀毒软件。

感染情况引起我们的兴趣,决定调查事件根源。获取受感染系统的磁盘镜像后,我们开始分析。

带有陷阱的语法高亮

检查磁盘文件时,一个名为extension.js的文件引起注意。路径为%userprofile%.cursor\extensions\solidityai.solidity-1.0.9-universal\src\extension.js。以下是其内容片段:

扩展向服务器发送的请求 此截图清晰显示代码请求并执行来自web服务器angelic[.]su的PowerShell脚本:这是恶意软件的明确迹象。

extension.js是Cursor AI IDE中Solidity Language扩展的组件,该IDE基于Visual Studio Code,专为AI辅助开发设计。扩展在Cursor AI使用的Open VSX注册表中可用,约两个月前发布。研究时,该扩展已被下载54,000次(数字可能被夸大)。据描述,该扩展提供众多功能以优化Solidity智能合约代码工作,特别是语法高亮:

Open VSX注册表中的扩展描述 我们分析了该扩展每个版本的代码,确认其为伪造:任何版本均未实现语法高亮或其他声称功能。扩展与智能合约无关,仅从上述web服务器下载并执行恶意代码。此外,我们发现恶意插件的描述被攻击者从合法扩展页面复制,后者有61,000次下载。

扩展如何进入计算机

恶意扩展有54,000次下载,而合法扩展有61,000次。但攻击者如何麻痹开发者的警惕?为何他会下载下载量较少的恶意扩展?

我们发现,尝试安装Solidity代码语法高亮器时,开发者在扩展注册表中搜索solidity。查询返回以下结果:

“solidity"搜索结果:恶意(红色)和合法(绿色)扩展 搜索结果中,恶意扩展排名第四,而合法扩展仅排第八。因此,查看搜索结果时,开发者点击了列表中第一个下载量显著的扩展——不幸的是,这恰好是恶意扩展。

排名算法陷阱

恶意扩展为何在搜索结果中排名高于合法扩展,尤其考虑到其下载量较少?Open VSX注册表按相关性排名搜索结果,考虑多个因素,如扩展评分、发布时间或更新时间的远近、总下载量以及扩展是否经过验证。因此,排名由因素组合决定:例如,下载量低的扩展仍可能出现在搜索结果顶部,如果该指标被新近性抵消。恶意插件正是如此:伪造扩展的最后更新日期为2025年6月15日,而合法扩展最后更新于2025年5月30日。因此,由于因素的整体混合,恶意扩展的相关性超过原始扩展,使攻击者能在搜索结果中推广伪造扩展。

落入排名算法陷阱的开发者未获得所需功能:扩展未进行任何Solidity语法高亮。受害者误认为这是错误,决定稍后调查,并继续工作。同时,扩展悄悄在其计算机上安装恶意软件。

从PowerShell脚本到远程控制

如上所述,恶意插件激活时,从https://angelic[.]su/files/1.txt下载PowerShell脚本。

PowerShell脚本内容 脚本检查计算机是否安装ScreenConnect远程管理软件。如未安装,则从https://angelic[.]su/files/2.txt下载第二个恶意PowerShell脚本。新脚本随后从https://lmfao[.]su/Bin/ScreenConnect.ClientSetup.msi?e=Access&y=Guest下载ScreenConnect安装程序到受感染计算机并运行。从那时起,攻击者可通过新安装的软件控制受感染计算机,该软件配置为与C2服务器relay.lmfao[.]su通信。

数据窃取

进一步分析显示,攻击者使用ScreenConnect上传三个VBScript到受感染机器:

a.vbs b.vbs m.vbs

每个脚本从文本共享服务paste.ee下载PowerShell脚本。下载URL被混淆,如下图所示:

下载PowerShell脚本的混淆URL 下载的PowerShell脚本随后从archive[.]org检索图像。然后从该图像提取名为VMDetector的加载器。VMDetector攻击先前在针对拉丁美洲实体的网络钓鱼活动中观察到。加载器从paste.ee下载并运行最终有效负载。

对VBScript的分析确定以下有效负载下载到受感染计算机:

Quasar开源后门(通过a.vbs和b.vbs) 从浏览器、电子邮件客户端和加密货币钱包收集数据的窃密程序(通过m.vbs)。卡巴斯基产品将此恶意软件检测为HEUR:Trojan-PSW.MSIL.PureLogs.gen。

两个植入程序均与C2服务器144.172.112[.]84通信,分析时解析为relay.lmfao[.]su。借助这些工具,攻击者成功获取开发者钱包的密码短语,然后窃取加密货币。

新的恶意包

恶意插件在扩展商店中存在时间不长,于2025年7月2日被下架。彼时,它不仅在我们调查事件时被检测到,也被其他研究人员发现。然而,攻击者继续其活动:下架仅一天后,他们发布了另一个名为"solidity"的恶意包,此次完全复制原始合法扩展的名称。伪造功能未变:插件下载恶意PowerShell脚本到受害者设备。但攻击者试图大幅夸大下载量。新扩展据称下载约两百万次。以下结果直至最近仍出现在用户于Cursor AI开发环境中搜索solidity时(插件目前因我们的努力被移除)。

更新后的"solidity"搜索结果 更新后的搜索结果显示合法和恶意扩展在搜索排名中并列出现,分别占据第七和第八位。开发者名称乍看相同,但合法包由juanblanco上传,而恶意包由juanbIanco上传。Cursor AI使用的字体使小写字母l和大写字母I看起来相同。

因此,搜索结果显示两个看似相同的扩展:合法扩展有61,000次下载,恶意扩展有两百万次下载。用户会选择安装哪一个?做出正确选择成为真正挑战。

类似网络攻击

值得注意的是,我们发现的Solidity扩展并非此操作攻击者发布的唯一恶意包。我们使用开源包监控工具发现名为"solsafe"的恶意npm包。它使用URL https://staketree[.]net/1.txt下载ScreenConnect。此活动中,它还配置使用relay.lmfao[.]su与攻击者通信。

我们还发现2025年4月和5月发布了三个恶意Visual Studio Code扩展:solaibot、among-eth和blankebesxstnion。这些威胁中使用的感染方法与上述方法惊人相似。事实上,我们在其恶意脚本中发现几乎相同的功能。

VS Code扩展下载的脚本(左)与Solidity Language(右) 此外,所有列出扩展在执行期间执行相同的恶意操作,即:

下载名为1.txt和2.txt的PowerShell脚本 使用带有混淆URL的VBScript从paste.ee下载有效负载 从archive.org下载带有有效负载的图像

这使我们得出结论,这些感染方案目前被广泛用于攻击区块链开发者。我们认为攻击者不会止步于我们发现的Solidity扩展或solsafe包。

经验教训

恶意包继续对加密行业构成重大威胁。许多项目如今依赖从包存储库下载的开源工具。不幸的是,这些存储库中的包通常是恶意软件感染的来源。因此,我们建议下载任何工具时极度谨慎。始终验证您下载的包不是伪造的。如果安装后包未按广告宣传工作,请保持怀疑并检查下载的源代码。

许多情况下,通过伪造开源包安装的恶意软件是众所周知的,现代网络安全解决方案可以有效阻止。即使经验丰富的开发者也绝不能忽视安全解决方案,因为这些解决方案可以在安装恶意包时帮助防止攻击。

入侵指标

恶意JS文件哈希 2c471e265409763024cdc33579c84d88d5aaf9aea1911266b875d3b7604a0eeb 404dd413f10ccfeea23bfb00b0e403532fa8651bfb456d84b6a16953355a800a 70309bf3d2aed946bba51fc3eedb2daa3e8044b60151f0b5c1550831fbc6df17 84d4a4c6d7e55e201b20327ca2068992180d9ec08a6827faa4ff3534b96c3d6f eb5b35057dedb235940b2c41da9e3ae0553969f1c89a16e3f66ba6f6005c6fa8 f4721f32b8d6eb856364327c21ea3c703f1787cfb4c043f87435a8876d903b2c 网络指标 https://angelic[.]su/files/1.txt https://angelic[.]su/files/2.txt https://staketree[.]net/1.txt https://staketree[.]net/2.txt https://relay.lmfao[.]su https://lmfao[.]su/Bin/ScreenConnect.ClientSetup.msi?e=Access&y=Guest 144.172.112[.]84

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