恶意NuGet包伪装Nethereum窃取加密货币钱包密钥

Socket安全团队发现针对加密货币开发者的供应链攻击,恶意NuGet包使用同形字符攻击技术伪装成Nethereum库,窃取私钥和助记词等敏感钱包数据,攻击者还通过虚假下载量提升包的可信度。

恶意NuGet包伪装Nethereum,窃取加密货币钱包密钥

Socket威胁研究团队发现了一起针对加密货币开发者的复杂供应链攻击,攻击通过NuGet包注册表进行。这些恶意包会窃取敏感钱包数据,包括私钥和助记词,突显了包注册表安全实践中的关键漏洞。

同形字符攻击技术

攻击核心围绕名为Netherеum.All的包展开,该包乍看之下与合法的Nethereum库完全相同。关键区别在于单个字符:包名称包含西里尔字母"e"(U+0435)而非拉丁字母"e",使得在随意查看时几乎无法与原始包区分。

这种同形字符攻击利用了NuGet宽松的Unicode命名规则,与其他大多数包注册表不同,NuGet不将标识符限制为ASCII字符。攻击者使用称为同形字符误植域名的技术发布冒充Nethereum的恶意包,Nethereum是以太坊开发的标准.NET库。

虽然npm、PyPI、Maven Central和其他主要注册表强制执行严格的仅ASCII命名约定,但NuGet缺乏此类限制使开发者容易受到字符替换攻击。

攻击时间线与影响

Nethereum的广泛采用——拥有数千万次NuGet下载和广泛的下游依赖关系——使其成为攻击者寻求破坏开发者环境和CI/CD管道的有吸引力的目标。

恶意包于2025年10月16日首次发布,Socket研究团队于2025年10月18日向NuGet报告。NuGet迅速响应,于2025年10月20日移除该包并暂停相关发布者账户(nethereumgroup)。然而,从发布到移除的四天时间窗口为潜在破坏提供了足够时间。

通过虚增下载量制造可信度

攻击者采用了第二种欺骗策略:人为虚增下载量以使恶意包看起来合法且流行。发布几天内,Netherеum.All显示总下载量为1160万——对于没有现有用户群的新包来说,这是一个难以置信的高数字。

研究人员将此归因于自动下载膨胀脚本,这些脚本循环遍历多个包版本、轮换IP地址并操纵用户代理以绕过CDN缓存。这种人为 popularity 提升显著影响搜索排名算法,赋予包虚假可信度,并增加开发者搜索Nethereum时首先遇到恶意版本的可能性。

恶意功能分析

核心恶意功能位于名为EIP70221TransactionService.Shuffle的方法中,该方法采用XOR加密隐藏其命令与控制端点,直到运行时才暴露。恶意软件使用44字节基于位置的XOR掩码解码硬编码的种子字符串,以揭示真正的C2端点:solananetworkinstance[.]info/api/gads。

调用时,代码发送包含名为"message"表单字段的HTTPS POST请求,携带调用者提供的敏感数据——可能包括助记词、私钥、keystore JSON文件或已签名交易数据。

攻击的隐蔽性

攻击的复杂性在于其隐蔽性。恶意包包含对真实Nethereum库(Nethereum.Hex、Nethereum.Signer、Nethereum.Util和Nethereum.RPC)的合法引用,确保受感染应用程序正常编译并按预期运行。

Shuffle方法仅在开发者调用交易助手或账户初始化函数时执行——在开发者信任的常规加密操作期间。从开发者的角度来看,应用程序完美运行,而敏感钱包数据悄无声息地外泄到攻击者控制的服务器。

持续攻击模式

此活动代表针对NuGet以太坊生态系统的协调攻击的第二轮迭代。研究人员将Netherеum.All与早期名为NethereumNet的误植域相关联,后者采用相同的渗漏技术并共享相同的恶意代码库。

两个包均由同一威胁行为者使用不同的NuGet别名(nethereumgroup和NethereumCsharp)发布,表明尽管单个包被移除,攻击者仍有意保持持久性的策略。

安全建议

安装任一恶意包的开发者应假设钱包操作处理的所有密钥均已泄露,并立即轮换私钥、助记词和keystore密码。

组织应实施更严格的依赖项卫生实践,包括发布者身份验证、合并前依赖项扫描以及可疑网络活动的异常检测。

注册表维护者必须考虑采用仅ASCII命名约定以消除同形字符攻击向量,而开发者应利用安全工具在包到达生产环境之前检测同形字符、异常下载模式和可疑运行时行为。

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