2025-11-13
环境配置
00

目录

1️⃣持久化
2️⃣multi-user.target.wants 目录和 default.target.wants目录
3️⃣分析黑客创建的service
4️⃣其他线索挖掘
分析root执行的命令
恶意文件分析
全面排查

这是一次挖矿病毒查杀记录 发生时间大约在11月10日前后一两天

1️⃣持久化

挖矿病毒通常为了避免被用户kill掉,都会选择持久化,一般来说就是cron和systemd两种选择,所以排查的思路就是查看相关服务或定时任务的配置文件 先找到“第一次出现矿工/持久化”的大致时间点,后续与登录/访问日志做对齐。

sudo ls -lt /etc/systemd/system | head -n 30

这个命令通常用于快速查看最近在系统中被修改、添加或启用的 systemd 服务单元。

输出:

-rw-r--r-- 1 root root 135 11月 13 22:08 system.service drwxr-xr-x 2 root root 4096 11月 10 18:51 default.target.wants drwxr-xr-x 2 root root 4096 11月 10 18:51 multi-user.target.wants -rw-r--r-- 1 root root 190 11月 10 18:51 route_forbidden.service -rw-r--r-- 1 root root 443 11月 9 09:32 ollama.service drwxr-xr-x 2 root root 4096 11月 5 16:52 snapd.mounts.target.wants -rw-r--r-- 1 root root 344 11月 5 16:52 snap-gnome\x2d42\x2d2204-226.mount -rw-r--r-- 1 root root 365 11月 4 16:23 snap-pycharm\x2dprofessional-548.mount -rw-r--r-- 1 root root 326 11月 4 06:19 snap-core22-2139.mount -rw-r--r-- 1 root root 329 11月 4 00:54 snap-firefox-7177.mount -rw-r--r-- 1 root root 338 11月 4 00:54 snap-snap\x2dstore-1216.mount -rw-r--r-- 1 root root 380 11月 4 00:54 snap-snapd\x2ddesktop\x2dintegration-315.mount -rw-r--r-- 1 root root 326 11月 4 00:53 snap-snapd-25577.mount drwxr-xr-x 2 root root 4096 11月 4 00:40 systemd-suspend.service.wants drwxr-xr-x 2 root root 4096 11月 4 00:40 systemd-suspend-then-hibernate.service.wants drwxr-xr-x 2 root root 4096 11月 4 00:40 systemd-hibernate.service.wants drwxr-xr-x 2 root root 4096 11月 4 00:31 sockets.target.wants lrwxrwxrwx 1 root root 31 11月 3 22:54 sshd.service -> /lib/systemd/system/ssh.service

根据时间发生时间进行溯源,system.service,default.target.wants,multi-user.target.wants,route_forbidden.service 极有可能是被黑客动手脚了。

2️⃣multi-user.target.wants 目录和 default.target.wants目录

multi-user.target.wants 本质上是一个/etc/systemd/system/multi-user.target.wants/下的目录。目录包含了当系统进入多用户命令行模式时,必须自动启动的服务列表。

例如:当使用 systemctl enable nginx 命令来让 Nginx 服务开机自启时,systemd 实际上就是在 multi-user.target.wants 目录下创建了一个指向 /usr/lib/systemd/system/nginx.service 的符号链接。

这里因为黑客enable 了route_forbidden.service,所以导致multi-user.target.wants发生了变动。

/etc/systemd/system/default.target.wants/ 目录包含了当系统进入默认目标(无论是 graphical.target 还是 multi-user.target)时,都必须自动启动的服务。

执行以下命令查看wants目录下哪些service最近被修改过:

shell
ls -lt /etc/systemd/system/multi-user.target.wants | head -n 10

输出:

lrwxrwxrwx 1 root root 43 11月 10 18:51 route_forbidden.service -> /etc/systemd/system/route_forbidden.service lrwxrwxrwx 1 root root 54 11月 5 16:52 snap-gnome\x2d42\x2d2204-226.mount -> /etc/systemd/system/snap-gnome\x2d42\x2d2204-226.mount lrwxrwxrwx 1 root root 58 11月 4 16:23 snap-pycharm\x2dprofessional-548.mount -> /etc/systemd/system/snap-pycharm\x2dprofessional-548.mount lrwxrwxrwx 1 root root 32 11月 4 16:05 xrdp.service -> /lib/systemd/system/xrdp.service lrwxrwxrwx 1 root root 39 11月 4 16:05 xrdp-sesman.service -> /lib/systemd/system/xrdp-sesman.service lrwxrwxrwx 1 root root 42 11月 4 06:19 snap-core22-2139.mount -> /etc/systemd/system/snap-core22-2139.mount lrwxrwxrwx 1 root root 43 11月 4 00:54 snap-firefox-7177.mount -> /etc/systemd/system/snap-firefox-7177.mount lrwxrwxrwx 1 root root 49 11月 4 00:54 snap-snap\x2dstore-1216.mount -> /etc/systemd/system/snap-snap\x2dstore-1216.mount lrwxrwxrwx 1 root root 66 11月 4 00:54 snap-snapd\x2ddesktop\x2dintegration-315.mount -> /etc/systemd/system/snap-snapd\x2ddesktop\x2dintegration-315.mount

根据输出可以看到/etc/systemd/system/route_forbidden.service 这个服务被enable了。

然后再查看default.target.wants目录下有哪些service被enable了

ls -lt /etc/systemd/system/default.target.wants/ | head -n 10

输出:

lrwxrwxrwx 1 root root 34 11月 10 18:51 system.service -> /etc/systemd/system/system.service lrwxrwxrwx 1 root root 34 11月 9 09:09 ollama.service -> /etc/systemd/system/ollama.service

可以看到system.service是黑客动过手脚的service.

除此之外,按时间顺序列出 /etc/systemd/system/ 目录中所有服务单元文件(.service 文件)的最后修改时间。 执行:

sudo | stat -c '%y %n' /etc/systemd/system/*.service | 2>/dev/null | | | sort

输出:

2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-fi.w1.wpa_supplicant1.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.bluez.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.freedesktop.Avahi.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.freedesktop.ModemManager1.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.freedesktop.oom1.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.freedesktop.resolve1.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.freedesktop.thermald.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/dbus-org.freedesktop.timesync1.service 2025-11-03 22:34:38.116185889 +0800 /etc/systemd/system/display-manager.service 2025-11-03 22:34:38.117185917 +0800 /etc/systemd/system/sudo.service 2025-11-03 22:34:38.117185917 +0800 /etc/systemd/system/syslog.service 2025-11-03 22:54:04.679584528 +0800 /etc/systemd/system/sshd.service 2025-11-09 09:32:22.566007156 +0800 /etc/systemd/system/ollama.service 2025-11-10 18:51:01.284670255 +0800 /etc/systemd/system/route_forbidden.service 2025-11-13 22:08:00.899714204 +0800 /etc/systemd/system/system.service

然后排查cron的配置:

sudo stat -c '%y %n' /etc/cron*/* /var/spool/cron/crontabs/* 2>/dev/null | sort

输出:

2019-11-19 23:14:51.000000000 +0800 /etc/cron.daily/cracklib-runtime 2021-10-10 01:14:16.000000000 +0800 /etc/cron.daily/0anacron 2021-10-10 01:14:16.000000000 +0800 /etc/cron.d/anacron 2021-10-10 01:14:16.000000000 +0800 /etc/cron.monthly/0anacron 2021-10-10 01:14:16.000000000 +0800 /etc/cron.weekly/0anacron 2021-12-06 06:59:35.000000000 +0800 /etc/cron.daily/dpkg 2022-01-09 04:02:36.000000000 +0800 /etc/cron.d/e2scrub_all 2022-01-24 23:37:01.000000000 +0800 /etc/cron.daily/logrotate 2022-03-18 03:03:00.000000000 +0800 /etc/cron.daily/man-db 2022-03-18 03:03:00.000000000 +0800 /etc/cron.weekly/man-db 2022-04-08 18:22:23.000000000 +0800 /etc/cron.daily/apt-compat 2023-07-25 02:24:17.000000000 +0800 /etc/cron.daily/apport

分析可以发现列出的 /etc/cron*、/var/spool/cron/crontabs/* 没有近期改动(都停在 2019–2023),这说明这波挖矿没有走 cron 持久化,而是专注用 systemd 单元。

到这里基本上确定了黑客持久化通过伪装的system.service和route_forbidden.service进行持久化。入侵的时间应该是在2025-11-10 18:51:01.284670255

注意

2025-11-10 18:51:01.284670255 是关键时间点,入侵的时间大概率早于此时

3️⃣分析黑客创建的service

执行cat /etc/systemd/system/route_forbidden.service

输出:

[Unit] Description=System function loader. [Service] Type=forking GuessMainPID=no Restart=always RestartSec=10 ExecStart=-/usr/bin/route_forbidden-all [Install] WantedBy=multi-user.target

这明显不是正常系统服务:名字可疑、ExecStart 指向陌生二进制 /usr/bin/route_forbidden-all,还用 Type=forking + GuessMainPID=no + 前缀 -(忽略失败)来提高“自愈率”。高度可疑的后门/加载器。

forking 类型用于那些会自己创建子进程并让父进程退出的传统守护进程。恶意软件经常使用这种类型来迷惑 systemd。主启动程序可以快速执行并退出,而真正的恶意负载在后台作为一个独立的子进程运行。

GuessMainPID=no 它明确告诉 systemd:“不要尝试猜测哪个进程是主进程”。这与 Type=forking 结合使用,使得 systemd 很难跟踪到真正的恶意进程PID。这让服务的管理(如 systemctl status 或 systemctl stop)变得不可靠,进一步增强了恶意软件的生存能力。

执行:

cat /etc/systemd/system/system.service

输出:

[Unit] Description=Custom System Service [Service] ExecStart=/usr/bin/system/system Restart=always [Install] WantedBy=default.target

/usr/bin/system/system:这个二进制文件是所有恶意行为的执行者。它的功能可能是从挖矿、DDoS攻击到数据窃取或作为勒索软件的加载器。

4️⃣其他线索挖掘

执行安全审计命令,专门用于在 Linux 系统日志中搜索未经授权的加密货币挖矿活动迹象。

sudo journalctl --no-pager | grep -iE 'xmrig|minerd|kdevtmpfsi|kinsing|watchdog|stratum|pool|nanopool|monero'

输出:

11月 13 22:07:59 james-Precision-7920-Tower kernel: NMI watchdog: Enabled. Permanently consumes one hw-PMU counter. 11月 13 22:07:59 james-Precision-7920-Tower kernel: DMA: preallocated 4096 KiB GFP_KERNEL pool for atomic allocations 11月 13 22:07:59 james-Precision-7920-Tower kernel: DMA: preallocated 4096 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations 11月 13 22:07:59 james-Precision-7920-Tower kernel: DMA: preallocated 4096 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations 11月 13 22:08:03 james-Precision-7920-Tower system[1380]: * ABOUT XMRig/6.21.0 gcc/5.4.0 (built for Linux x86-64, 64 bit) 11月 13 22:08:03 james-Precision-7920-Tower system[1380]: * POOL #1 king.markrege.shop:80 algo auto 11月 13 22:08:03 james-Precision-7920-Tower system[1380]: * POOL #2 king.markrege.shop:443 algo auto 11月 13 22:08:04 james-Precision-7920-Tower rtkit-daemon[1675]: Watchdog thread running. 11月 13 22:08:09 james-Precision-7920-Tower system[1380]: [2025-11-13 22:08:09.948] net use pool king.markrege.shop:443 TLSv1.3 194.62.122.80 11月 13 22:08:09 james-Precision-7920-Tower system[1380]: [2025-11-13 22:08:09.981] net use pool king.markrege.shop:80 194.62.122.80

这下基本上可以进行取证了,机器在 22:07:59 刚启动(内核 NMI watchdog 日志),22:08:03 system 进程(由 system.service 启动)立刻加载 XMRig,并连到 king.markrege.shop:80/443(解析到了 194.62.122.80)。 说明 system.service 确实是挖矿持久化,且随开机自启。

分析root执行的命令

执行以下命令查看root 用户的 bash 命令历史记录文件

sudo cat /root/.bash_history

输出:

bash <(curl -sSL https://linuxmirrors.cn/main.sh) ls curl -fsSL https://tailscale.com/install.sh | sh tailscale up tailscale netcheck ls kill 71008 ls cd /mnt ls ls -a cd ls cd /home/james ls tar -xvf l.tar.gz ./tree -a kawpow -o stratum+ssl://127.0.0.1:1602 -u RG8hkuPjjPKYjeuPa3MDyX9FTDjxSoWtdU.RIG --no-watchdog --no-strict-ssl ls nano root.sh ./root.sh nvidia-smi ls

可以看到攻击者上传了l.tar.gz压缩包,并执行了挖矿命令,其中-a kawpow: -a 很可能代表“算法(algorithm)”。 kawpow 是一种特定的工作量证明(Proof-of-Work)挖矿算法。使用此算法的最著名的加密货币是 Ravencoin (RVN)。这明确告诉我们攻击者在挖什么类型的币。

-o stratum+ssl://127.0.0.1:1602 它没有直接连接到互联网上的公共矿池,而是连接到本地(localhost)的1602端口。这通常意味着攻击者在你的服务器上还运行了另一个代理程序(proxy)。这个代理程序监听1602端口,接收tree矿工的连接,然后再将流量转发到真正的外部矿池。这样做有几个好处

-u RG8hkuPjjPKYjeuPa3MDyX9FTDjxSoWtdU.RIG -u 代表“用户(user)”或“钱包地址(username)”。 RG8hkuPjjPKYjeuPa3MDyX9FTDjxSoWtdU 这长长的一串字符,就是攻击者的Ravencoin钱包地址。所有挖矿产生的收益都会打到这个地址里。这是非常有价值的线索。 .RIG 是矿工名(Worker Name)。攻击者用它来标识是哪台被黑的机器在为他工作。

恶意文件分析

不要立即删除 /usr/bin/route_forbidden-all! 先对它进行取证分析: file /usr/bin/route_forbidden-all:查看文件类型(是二进制程序还是脚本)。 strings /usr/bin/route_forbidden-all | less:查看文件中包含的可打印字符串,可能会发现IP地址、域名、命令等线索。 sha256sum /usr/bin/route_forbidden-all:计算其哈希值,然后去 VirusTotal 等在线平台查询是否为已知的恶意软件。 备份该文件到一个安全的地方(比如压缩并加密),以备后续分析。

全面排查

攻击者不可能只留下这一个东西。你需要: 检查 crontab (crontab -l for root and other users)。 检查 /etc/rc.local 和其他启动脚本。 检查用户的 .bashrc, .profile 等文件是否有可疑命令。 检查 /root/.ssh/authorized_keys 和其他用户的 authorized_keys 是否有未知的公钥。 检查 last 和 who 命令,看是否有可疑的登录历史。 使用 ss -antp 或 netstat -antp 查看是否有其他异常的网络连接。

本文作者:James

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!