2025-07-21 20:15:08
loading...
Solana开源机器人暗藏盗币陷阱:私钥泄露风险警示
摘要
2025年7月,慢雾安全团队披露一起针对Solana生态的恶意开源项目攻击事件。用户因使用名为pumpfun-pumpswap-sniper-copy-trading-bot的GitHub项目,导致私钥被窃取并发送至攻击者服务器。该恶意代码通过伪装成正常功能,在配置文件中植入隐蔽后门,实现自动上传私钥信息。目前相关IP与域名已被列入威胁情报库。
在2025年7月初,慢雾安全团队接到一名受害用户的求助,请求协助分析其加密资产被盗的原因。调查发现,事件源于该用户使用了一个托管在GitHub上的开源项目 zldp2002/solana-pumpfun-bot,进而触发了隐蔽的盗币行为。近期,又有用户因使用类似的开源项目——audiofilter/pumpfun-pumpswap-sniper-copy-trading-bot,导致加密资产被盗,并联系到慢雾安全团队。对此,团队进一步深入分析了该攻击手法。
H2 静态分析
我们首先通过静态分析的方式,寻找攻击者设置的陷阱。经分析,发现可疑代码位于 /src/common/config.rs 配置文件中,主要集中在 create_coingecko_proxy() 方法内。从代码可见,create_coingecko_proxy() 方法首先调用了 import_wallet(),该方法进一步调用 import_env_var() 来获取私钥。
在 import_env_var() 方法中,主要用于获取 .env 文件中的环境变量配置信息。调用过程中,如果环境变量存在,则直接返回;若不存在,则进入 Err(e) 分支,打印错误信息。由于存在无退出条件的 loop {} 循环,会导致资源持续消耗。
PRIVATE_KEY(私钥)等敏感信息也存储在 .env 文件中。回到 import_wallet() 方法,当其中调用 import_env_var() 获取到 PRIVATE_KEY(私钥)后,恶意代码会对私钥长度进行判断:
- 若私钥长度小于85,恶意程序将打印错误信息,并由于存在无退出条件的 loop {} 循环,会导致资源持续消耗,恶意程序无法正常退出;
- 若私钥长度大于85,则使用Solana SDK将该Base58字符串转换为Keypair对象,其中包含私钥信息。
随后,恶意代码使用Arc对私钥信息进行封装,以支持多线程共享。
回到 create_coingecko_proxy() 方法,在成功获取私钥信息后,恶意代码接着对恶意URL地址进行解码。该方法首先获取编码后的 HELIUS_PROXY(攻击者服务器地址)这一硬编码常量。随后,恶意代码使用bs58对HELLOUS_PROXY进行解码,将解码结果转换为字节数组,并通过from_utf8()将该字节数组进一步转为UTF-8字符串。
通过编写脚本可还原出HELLOUS_PROXY解码后的真实地址如下:
http://103.35.189.28:5000/api/wallets
恶意代码在成功解码出URL后,首先创建一个HTTP客户端,将获取到的私钥信息payer使用to_base58_string()转换为Base58字符串。随后,恶意代码构造JSON请求体,并将转换后的私钥信息封装其中,通过构建POST请求,将私钥等数据发送至上述URL所指向的服务器,同时忽略响应结果。无论服务器返回何种结果,恶意代码仍会继续运行,以避免引起用户察觉。
此外,create_coingecko_proxy() 方法中还包含获取价格等正常功能,用以掩盖其恶意行为;该方法名称本身也经过伪装,具有一定的迷惑性。
通过分析可知,create_coingecko_proxy() 方法在应用启动时被调用,具体位于main.rs中main()方法的配置文件初始化阶段。在配置文件src/common/config.rs的new()方法中,恶意代码首先加载.env文件,随后调用create_coingecko_proxy()方法。据分析,该服务器的IP地址位于美国。
观察到该项目在GitHub上于近期(2025年7月17日)进行了更新,主要更改集中在src目录下的配置文件config.rs中。在src/common/config.rs文件中,可以看到HELIUS_PROXY(攻击者服务器地址)的原地址编码已被替换为新的编码。使用脚本对原地址编码进行解码后,可获得原服务器地址。
H3 动态分析
为了更直观地观察恶意代码的盗窃过程,我们采用动态分析方法,编写了一个Python脚本,用于生成测试用的Solana公私钥对。同时,我们在服务器上搭建了一个能够接收POST请求的HTTP服务器。编写Python脚本生成测试服务器对应的编码,并将其替换原攻击者设置的恶意服务器地址编码,即HELIUS_PROXY处。随后,将.env文件中的PRIVATE_KEY替换为刚生成的测试私钥。接下来,启动恶意代码并观察服务器端接口的响应。
我们可以看到,测试服务器成功接收到了恶意项目发送的JSON数据,其中包含PRIVATE_KEY(私钥)信息。
H2 入侵指标(IoCs)
IPs:
103.35.189.28
Domains:
storebackend-qpq3.onrender.com
SHA256:
07f0364171627729788797bb37e0170a06a787a479666abf8c80736722bb79e8 - pumpfun-pumpswap-sniper-copy-trading-bot-master.zip
ace4b1fc4290d6ffd7da0fa943625b3a852190f0aa8d44b93623423299809e48 - pumpfun-pumpswap-sniper-copy-trading-bot-master/src/common/config.rs
恶意仓库:
https://github.com/audiofilter/pumpfun-pumpswap-sniper-copy-trading-bot
类似实现手法:
https://github.com/BitFancy/Solana-MEV-Bot-Optimized
https://github.com/0xTan1319/solana-copytrading-bot-rust
https://github.com/blacklabelecom/SAB-4
https://github.com/FaceOFWood/SniperBot-Solana-PumpSwap
https://github.com/Alemoore/Solana-MEV-Bot-Optimized
https://github.com/TopTrenDev/Raypump-Executioner-Bot
https://github.com/deniyuda348/Solana-Arbitrage-Bot-Flash-Loan
H2 总结
本次分享的攻击手法中,攻击者通过伪装成合法开源项目,诱导用户下载并执行该恶意代码。该项目会从本地读取.env文件中的敏感信息,并将盗取的私钥传输至攻击者控制的服务器。这类攻击通常结合社会工程学技术,用户稍有不慎便可能中招。
我们建议开发者与用户对来路不明的GitHub项目保持高度警惕,尤其是在涉及钱包或私钥操作时。如确需运行或调试,建议在独立且无敏感数据的环境中进行,避免执行来源不明的恶意程序和命令。此类事件再次凸显了区块链安全中“代码即信任”的风险,也反映出当前开源生态中潜在的供应链攻击隐患。对于市场趋势而言,随着Solana生态应用日益活跃,相关安全事件频发,提示投资者应更加关注底层资产存储与链上交互的安全性。
声明:文章不代表比特之家观点及立场,不构成本平台任何投资建议。投资决策需建立在独立思考之上,本文内容仅供参考,风险自担!转载请注明出处!侵权必究!