供应链攻击!伪装成加密货币交易工具的恶意Python包和Github项目
字数 2270 2025-08-23 18:31:34
供应链攻击分析:伪装成加密货币交易工具的恶意Python包和Github项目
1. 攻击概述
近期发现一起针对加密货币爱好者的多向量供应链攻击,攻击者通过PyPI官方仓库和Github项目分发名为CryptoAITools的恶意Python包。该恶意包在被删除前已被下载1300多次。
攻击特点:
- 通过PyPI和Github双重分发
- 伪装成合法的加密货币交易工具
- 针对Windows和MacOS系统
- 具备反分析能力(反虚拟机、反沙箱)
- 窃取加密货币相关敏感信息
2. 攻击载体分析
2.1 Github项目分析
项目名称:Meme-Token-Hunter-Bot
- 创建时间:2024年2月4日
- 活跃更新:2024年7月开始
- 最近更新:分析时3周前更新了Release版本
- 项目官网:https://coinsw.app/
2.2 恶意程序特征
- 使用PyInstaller打包成exe程序
- 运行需要联网
- 伪装成正常加密货币项目
3. 恶意模块分析
3.1 系统版本判断
恶意程序首先判断操作系统版本,选择执行对应的Windows或MacOS恶意代码。
3.2 Windows恶意模块
- 包含大量加密代码
- 解码外联地址下载多个py模块
- 存放路径:
~\AppData\Local\tmpcode\ - 主执行模块:
main.py
关键外联地址:
- 基础URL:
aHR0cHM6Ly9jb2luc3cuYXBwL2Jhc2Vjdw==(解码后:https://coinsw.app/basecw) - 下载模块列表(Base64编码):
bWFpbi5weQ== c2VjdXJpdHkucHk= dGFkLnB5 bG9jYWwucHk= c3MucHk= Y2F0LnB5 dXBkLnB5 Zmlyc3RwYWdlLnB5 YXJhLnB5 Y2YucHk= Y2l6LnB5 Y2F0X2RhbmNlLmdpZg== cHMucHk=
3.3 MacOS恶意模块
- 解码外联地址下载模块
- 存放路径:
~/tmpcode/ - 主执行模块:
MHTBot.py
4. 代码混淆与去混淆技术
4.1 混淆技术
攻击者对功能模块中的字符串进行了混淆处理。
4.2 去混淆方法
构建动态解密脚本:
- 提取混淆后的字符串
- 使用Python.exe动态解密
- 将解密后的代码重写至功能模块
去混淆脚本关键代码(Go语言):
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"regexp"
"strings"
)
func main() {
onefile := "C:\\Users\\admin\\Desktop\\main.py"
filename := filepath.Base(onefile)
xor_table := get_xor_table(onefile)
content, err := ioutil.ReadFile(onefile)
if err != nil {
fmt.Printf("Error reading file: %s\n", err)
return
}
// 正则表达式匹配混淆字符串
pattern := `''\.join
$$
$.*?
$$
$`
re := regexp.MustCompile(pattern)
matches := re.FindAllStringSubmatch(string(content), -1)
newfiledata := string(content)
for _, match := range matches {
os.Remove("test.py")
WriteFile_A("test.py", xor_table)
WriteFile_A("test.py", "\n")
WriteFile_A("test.py", `print(`)
WriteFile_A("test.py", match[0])
WriteFile_A("test.py", `)`)
cmd := exec.Command("D:\\Python311\\python.exe", "test.py")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("Error: %s\n", err)
return
}
if strings.Contains(newfiledata, match[0]) {
newfiledata = strings.ReplaceAll(newfiledata, match[0], `'`+strings.ReplaceAll(string(output), "\r\n", "")+`'`)
}
}
WriteFile(filename, newfiledata)
}
5. 功能模块详细分析
5.1 主模块 (main.py)
- 主控制模块
- 调用其他模块执行恶意功能
5.2 反分析模块 (firstpage.py)
功能:反虚拟机和反沙箱检测
检测项目:
- 系统进程检查:枚举并终止黑名单中的进程
- 网络检查:外联ipapi.co/ip/获取IP地址,检查IP/MAC黑名单
- 系统信息检查:检查硬件ID、用户名和计算机名
黑名单示例:
- 用户黑名单:包含"WDAGUtilityAccount"、"Frank"等常见测试账户
- 计算机名黑名单:包含"DESKTOP-NAKFFMT"、"WIN-5E07COS9ALR"等常见虚拟机名称
- 硬件ID黑名单:包含"7AB5C494-39F5-4941-9163-47F54D6D5016"等常见虚拟机ID
- IP黑名单:包含"88.132.231.71"、"78.139.8.50"等
- MAC黑名单:包含"00:15:5d:00:07:34"等常见虚拟机MAC
- 进程黑名单:包含"httpdebuggerui"、"wireshark"、"fiddler"等分析工具
反制措施:
检测到分析环境时,会打开"cat_dance.gif"动画文件作为干扰
5.3 数据收集模块
tad.py
- 功能:打包Telegram程序的应用数据
- 输出:ArchiveX.zip
ps.py
- 功能:打包浏览器信息
- 收集内容:
- Cookies
- 网页历史记录
- 下载目录
ciz.py
- 功能:打包与加密货币相关的浏览器扩展数据
- 目标扩展ID示例:
nkbihfbeogaeaoehlefnkodbefgpgknn (MetaMask) fhbohimaelbohpjbbldcngcnapndodjp hnfanknocfeofbddgcijnmhnfnkdnaad
local.py
- 功能:打包加密货币钱包数据
- 目标钱包路径:
Bitcoin: C:\Users\%USERNAME%\AppData\Roaming\Bitcoin\wallets\ Electrum: C:\Users\%USERNAME%\AppData\Roaming\Electrum\wallets\ Exodus: C:\Users\%USERNAME%\AppData\Roaming\Exodus\exodus.wallet\
ss.py
- 功能:屏幕截屏
ara.py
- 功能:扫描Downloads、Documents、Desktop目录
- 目标文件:包含特定关键字的文件
- 关键字示例:
passw, mdp, login, solana, phantom, metamask, wallet, crypto, private, key
5.4 数据外传模块 (upd.py)
- 功能:压缩并上传收集的数据
- 上传地址:https://www.tinyvago.com/pip/x/requirements.php
6. 防御建议
6.1 开发人员防护
- 验证第三方依赖的合法性
- 检查项目贡献者的可信度
- 使用虚拟环境隔离项目依赖
- 定期审计项目依赖
6.2 用户防护
- 仅从官方渠道下载软件
- 警惕要求过高权限的应用程序
- 使用虚拟机或沙箱运行可疑程序
- 定期检查系统异常进程
6.3 企业防护
- 实施软件供应链安全策略
- 部署行为分析检测系统
- 监控异常网络连接
- 定期进行安全意识培训
7. IOCs (Indicators of Compromise)
- PyPI包名:CryptoAITools
- Github项目:Meme-Token-Hunter-Bot
- 项目官网:https://coinsw.app/
- C&C服务器:https://coinsw.app/basecw
- 数据上传地址:https://www.tinyvago.com/pip/x/requirements.php
- 文件存放路径:
- Windows:
~\AppData\Local\tmpcode\ - MacOS:
~/tmpcode/
- Windows:
8. 总结
该攻击利用加密货币社区的信任,通过供应链攻击分发恶意软件,具有以下特点:
- 多平台支持(Windows/MacOS)
- 复杂的分层架构
- 强大的反分析能力
- 针对性的数据收集
- 隐蔽的数据外传方式
安全团队应提高对这类供应链攻击的警惕,加强软件来源验证和运行时监控。