XMRig 挖矿病毒入侵排查与分析技术复盘
一、事件概述
1. 事件背景
某云主机触发外链恶意域名告警,该域名在多个威胁情报平台中标记为未知,仅在腾讯威胁情报平台中被识别。由于各家威胁情报平台的时效性差异,需要进行深入排查。
2. 影响范围
A. 影响系统
- 云主机中的 Docker 容器
- PostgreSQL 数据库服务
B. 入侵途径
PostgreSQL 数据库存在弱口令,攻击者通过数据库连接获取系统权限
3. 严重程度
中等风险:系统资源被恶意占用,但未发现数据窃取或逃逸到宿主机
二、攻击链分析
1. 攻击流程
graph TD
subgraph 攻击链
A[弱口令扫描] --> B[psql 数据库入侵]
B --> C[创建恶意函数]
C --> D[执行系统命令]
D --> E[下载挖矿脚本]
E --> F[启动挖矿进程]
end
subgraph 挖矿架构
F --> G[bot 主程序]
G --> H[dockerd 守护进程]
H --> I[docker-daemon 挖矿进程]
I --> J[矿池连接]
end
subgraph 恶意行为
K[清除竞争进程]
L[删除痕迹文件]
M[持久化运行]
end
F --> K
F --> L
F --> M2. 详细攻击过程
A. 初始入侵
攻击者通过弱口令扫描发现存在弱口令的 PostgreSQL 数据库服务
B. 权限提升
在 PostgreSQL 中创建恶意系统函数,通过数据库函数执行系统命令
C. 恶意载荷执行
Base64 编码的命令经过解码后执行以下操作:
- 自定义 curl 函数用于网络通信
- 删除 /tmp 目录中的 docker-daemon 文件
- 杀死同类挖矿进程以独占资源
- 从攻击者服务器下载恶意文件并执行
D. 挖矿进程部署
下载的恶意程序会:
- 将进程名伪装为 dockerd(Docker 守护进程)
- 生成 docker-daemon 实际挖矿程序
- 建立守护进程关系,确保持续运行
graph LR
subgraph 数据库层
A[PostgreSQL 弱口令]
end
subgraph 入侵层
B[创建恶意函数]
C[执行 Base64 命令]
end
subgraph 下载层
D[HTTP 下载恶意文件]
E[bot 可执行文件]
end
subgraph 执行层
F[清除竞争进程]
G[启动 dockerd 守护进程]
H[运行 docker-daemon 挖矿]
end
subgraph C2 层
I[矿池服务器]
J[195.24.237.73]
K[dockerdupdate.anondns.net]
end
A --> B
B --> C
C --> D
D --> E
E --> F
E --> G
G --> H
H --> I
I --> J
I --> K三、恶意样本分析
1. 样本基本信息
A. 主程序 bot
- 文件名:bot
- 打包工具:UPX 5.0.2
- 编程语言:C
- SHA256:f5a7fd53488638cd3c36f39bdb6b9b35dc6df14ad837dd30eb87b95262feb2f5
B. 解压后 bot_upxd
- SHA256:85fb4996fd46b91bda84aae63acad45d0d5784782d09fbf5141aeb426a2ca5c6
C. 挖矿程序 docker-daemon
- SHA256:354786bac66720ed2a5e471673a381ad127bfa0503b3ec8146df2f49dd8a24ef
2. 样本行为分析
A. 进程伪装
- bot 程序执行后将自身重命名为 dockerd
- 伪装成 Docker 守护进程以混淆视听
B. 守护进程机制
- dockerd 进程作为守护进程监控 docker-daemon
- 当 docker-daemon 被终止时,dockerd 会自动重启它
- 清理时应先终止 dockerd 进程
C. 挖矿配置
通过逆向分析和字符串提取,发现以下配置:
- 算法:门罗币(XMRig)
- 矿池1:dockerdupdate.anondns.net:44999
- 矿池2:dockerdupdate.anondns.net:4433
D. 功能模块
IDA Pro 分析显示程序包含以下功能:
- 帮助信息输出(-h 参数)
- 版本信息显示(-V 参数)
- 硬件拓扑导出(--export-topology 参数)
- 矿池连接配置(-o、-a、-u、-p 参数)
四、排查方法
1. 威胁情报查询
使用多个威胁情报平台交叉验证:
- 腾讯威胁情报平台:https://tix.qq.com/
- 微步在线:https://x.threatbook.com/
- 360 威胁情报中心:https://ti.360.cn/
- 奇安信威胁情报:https://ti.qianxin.com/
- 绿盟威胁情报:https://poma.nsfocus.com/
2. 系统排查步骤
A. 进程排查
# 查找可疑进程
ps aux | grep -E "dockerd|docker-daemon"
# 检查进程文件路径
ls -l /proc/<PID>/exeB. 网络连接排查
# 查看活跃网络连接
netstat -antp | grep ESTABLISHED
# 检查可疑域名连接
ss -antp | grep -E "195.24.237.73|anondns"C. 文件系统排查
# 检查 /tmp 目录
ls -la /tmp/
# 查找最近修改的文件
find /tmp -mtime -1 -type fD. 数据库审计
# 查看 PostgreSQL 日志
tail -f /var/log/postgresql/postgresql-*.log
# 检查可疑函数创建记录
grep "CREATE.*FUNCTION" /var/log/postgresql/postgresql-*.log3. 恶意代码分析
A. UPX 解包
# 下载 UPX 工具
wget https://github.com/upx/upx/releases/download/v5.0.2/upx-5.0.2-amd64_linux.tar.xz
# 解包恶意文件
./upx -d bot -o bot_upxdB. 字符串提取
# 提取矿池地址信息
strings docker-daemon | grep -A 30 -B 60 -i "dockerdupdate\|anondns\|44999\|4433"C. 静态分析
使用 IDA Pro 或 Ghidra 进行反汇编分析,重点关注:
- 程序入口点
- 字符串引用
- 网络相关函数调用
- 进程创建和操作
五、清理措施
1. 应急响应步骤
A. 终止恶意进程
# 先终止守护进程
kill -9 $(pgrep dockerd)
# 再终止挖矿进程
kill -9 $(pgrep docker-daemon)
# 清理相关进程
kill -9 $(pgrep bot)B. 清理恶意文件
# 删除恶意文件
rm -f /tmp/bot
rm -f /tmp/docker-daemon
# 检查并删除其他可疑文件
find /tmp -name "*bot*" -delete
find /tmp -name "*docker*" -deleteC. 数据库加固
# 修改数据库密码
psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'strong_password';"
# 删除恶意函数
psql -U postgres -c "DROP FUNCTION IF EXISTS <malicious_function_name>;"
# 启用日志审计
ALTER SYSTEM SET log_statement = 'all';2. 安全加固建议
A. 数据库安全
- 使用强密码策略,密码长度不少于 12 位
- 定期更换数据库密码
- 限制数据库远程访问,使用防火墙规则
- 启用 SSL/TLS 加密连接
B. 容器安全
- 使用非 root 用户运行容器
- 限制容器资源配额
- 定期更新镜像和基础系统
- 使用安全扫描工具检查镜像
C. 系统监控
- 部署主机安全监控软件
- 配置异常进程告警
- 启用系统日志审计
- 建立定期安全检查机制
六、IOC 指标
1. 网络指标
A. IP 地址
- 195.24.237.73
- 194.41.112.90
B. 域名
- dockerdupdate.anondns.net
C. 端口
- 44999
- 4433
2. 文件哈希
A. 主程序
- SHA256:f5a7fd53488638cd3c36f39bdb6b9b35dc6df14ad837dd30eb87b95262feb2f5
B. 解包程序
- SHA256:85fb4996fd46b91bda84aae63acad45d0d5784782d09fbf5141aeb426a2ca5c6
C. 挖矿程序
- SHA256:354786bac66720ed2a5e471673a381ad127bfa0503b3ec8146df2f49dd8a24ef
3. 进程特征
A. 进程名
- dockerd(伪装的 Docker 守护进程)
- docker-daemon(实际挖矿进程)
- bot(初始下载文件名)
B. 文件路径
- /tmp/bot
- /tmp/docker-daemon
七、经验总结
1. 入侵分析
A. 攻击路径
攻击者利用 PostgreSQL 数据库弱口令作为入侵入口,通过创建恶意函数执行系统命令,体现了数据库作为应用核心组件的重要性。
B. 持久化机制
恶意程序采用守护进程机制实现持久化,dockerd 进程监控并自动重启 docker-daemon,增加了清理难度。
C. 资源独占
恶意程序会主动清除其他挖矿进程,以确保自身能够独占系统资源进行挖矿。
2. 检测建议
A. 多源威胁情报验证
单个威胁情报平台可能存在时效性问题,建议使用多个平台交叉验证,提高检测准确率。
B. 进程行为监控
重点关注进程名称与实际功能不匹配的情况,如伪装成系统守护进程的可疑程序。
C. 数据库审计
定期审计数据库日志,检查异常函数创建和命令执行记录。
3. 防御策略
A. 最小权限原则
数据库不应具有执行系统命令的权限,严格限制数据库用户的系统访问能力。
B. 网络隔离
容器间应实施网络隔离策略,防止单个容器被入侵后影响其他容器或宿主机。
C. 及时更新
定期更新数据库、容器运行时和操作系统,修补已知漏洞。