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 --> M

攻击链示意图

2. 详细攻击过程

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. 威胁情报查询

使用多个威胁情报平台交叉验证:

2. 系统排查步骤

A. 进程排查

# 查找可疑进程
ps aux | grep -E "dockerd|docker-daemon"

# 检查进程文件路径
ls -l /proc/<PID>/exe

B. 网络连接排查

# 查看活跃网络连接
netstat -antp | grep ESTABLISHED

# 检查可疑域名连接
ss -antp | grep -E "195.24.237.73|anondns"

C. 文件系统排查

# 检查 /tmp 目录
ls -la /tmp/

# 查找最近修改的文件
find /tmp -mtime -1 -type f

D. 数据库审计

# 查看 PostgreSQL 日志
tail -f /var/log/postgresql/postgresql-*.log

# 检查可疑函数创建记录
grep "CREATE.*FUNCTION" /var/log/postgresql/postgresql-*.log

3. 恶意代码分析

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_upxd

B. 字符串提取

# 提取矿池地址信息
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*" -delete

C. 数据库加固

# 修改数据库密码
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. 及时更新

定期更新数据库、容器运行时和操作系统,修补已知漏洞。


参考资料

  1. 应急响应 | 云主机中XMRig挖矿病毒的排查与分析
最后修改:2026 年 01 月 15 日
如果觉得我的文章对你有用,请随意赞赏