外观
实验室服务器安全排查复盘:从异常负载到证据闭环
一次服务器账号异常风险排查,不能只凭“CPU 很高”或“没有看到可疑进程”下结论。本次工作围绕一台实验室计算服务器的指定账号,按“确认范围、核验进程、比对已知迹象、检查持久化、明确结论边界”的顺序进行只读取证。
为避免扩大风险,本文不公开服务器地址、账号名、密钥信息或攻击指标的具体值。
排查目标
此前该服务器曾出现与挖矿活动相关的风险线索。本次的目标不是笼统地判断“服务器是否正常”,而是回答三个具体问题:
- 指定账号当前运行的高资源进程是否与其科研任务一致?
- 是否仍存在已知恶意程序、可疑外联或挖矿协议连接?
- 是否存在计划任务、登录凭据或账户配置等持久化风险?
封禁原因:不只是一次高负载
结合网络中心的封禁通知和服务器审计记录,事件原因应拆成两部分理解:一是服务器对外表现出挖矿相关行为,二是服务器内部存在异常的账号切换和对其他主机的连接尝试。单看某个进程的 CPU 占用,无法解释整起事件。
从认证日志还原攻击链
在保留原始日志副本后,可以用以下只读命令筛选认证事件(时间范围应替换为实际告警窗口):
sudo journalctl --since '告警开始时间' --until '告警结束时间' --no-pager \
| grep -Ei 'su\[|sudo\[|session opened|session closed|authentication failure'
sudo last -Fai | head -n 100
sudo grep -E 'Accepted|Failed password|session opened|session closed' \
/var/log/auth.log /var/log/secure 2>/dev/null本次日志呈现出一条清晰的横向切换链:账号 A 成功切换到账号 B,随后又成功切换到账号 C;同一时间段内还出现了对多个本地账号的大量密码尝试。账号 B、C 的目录没有发现对应的木马文件或持久化项,但这并不能抵消“凭据已经失陷”的事实。攻击者还尝试过提权命令,但未能通过 sudoers 校验,现有证据不支持已经获得 root 权限的结论。
如何确认是否存在外联和挖矿迹象
认证日志需要与网络和进程证据交叉验证:
sudo ss -tpna
sudo ps -eo user,pid,ppid,%cpu,%mem,lstart,args --sort=-%cpu | head -n 40
sudo pgrep -a -f 'xmrig|stratum|矿工关键词'本次没有发现已知恶意外联、挖矿协议连接或运行中的矿工进程;高资源进程最终指向可追溯的模型评测任务。因此更准确的表述是:历史上确实发生过账号被利用和异常访问,当前复核未发现活跃的已知木马或挖矿进程。
凭据与横向风险
事件复盘还发现多个账户曾共用同一把 SSH 密钥,且至少一个密码已被成功猜中。即使某个用户目录“没有木马”,旧密码和共享密钥仍可能让攻击者再次进入或横向移动。应使用以下命令核对授权密钥指纹,但不要把指纹原值发布到公开文章:
sudo ssh-keygen -lf /home/<用户>/.ssh/authorized_keys
sudo passwd -S <用户>
sudo getent passwd <用户>处置原则是先锁定失陷账号、隔离旧 authorized_keys、终止会话并保留取证副本,再由可信设备生成唯一的新 ED25519 密钥。不能只在旧密钥文件中追加一行新密钥,否则原有入口仍然有效。
其他基础设施线索
排查还发现用户目录中存在休眠的 Tailscale 安装痕迹。虽然当时没有运行中的 tailscaled,但本地卸载并不等于管理后台节点和 auth key 已撤销;这类远程接入能力也应纳入事件闭环。另有防火墙规则持久化状态、审计服务未启用等基础设施缺口,需要在恢复服务前补齐。
排查过程
1. 先确认主机与账号状态
首先核对目标主机、系统运行时间、负载、磁盘占用和 systemd 服务状态,避免将正常的模型评测负载误判为入侵行为。同时检查目标账号的登录 shell、当前会话和进程数量,确认账号是否处于预期的可登录状态。
这一步发现该账号已从此前的禁止登录状态恢复为可交互登录,并存在多个终端会话。因此,账号状态变化被单独记录,作为需要管理员确认授权的事项,而不是直接按恶意行为处理。
2. 核验高 CPU 与 GPU 进程来源
对目标账号的高资源进程逐一检查可执行路径、启动参数、工作目录和占用设备。结果显示,CPU 与 GPU 负载均来自项目目录内的模型评测脚本,参数、目录结构与正在进行的科研任务相符;未发现匿名二进制文件、异常临时目录落地或伪装为系统服务的进程。
这里的关键是把“资源高”拆解为可验证证据:进程从哪里启动、执行什么代码、连接到哪里、是否与业务任务匹配。
可复现的只读排查指令
下面的命令适合在确认主机范围后执行。它们只读取状态,不会停止进程、删除文件或修改账户;<PID> 和 <用户> 需要替换为待核验对象。生产环境执行前仍应遵守实验室的运维授权流程。
| 命令 | 主要观察内容 | 本次检查得到的信号 |
|---|---|---|
uptime; free -h; df -h; systemctl --failed | 运行时间、负载、内存、磁盘和失败服务 | 主机运行稳定,未发现 failed systemd 服务;磁盘空间尚可。 |
ps -eo user,pid,ppid,%cpu,%mem,etime,args --sort=-%cpu | head -n 25 | 高 CPU 进程的用户、父进程、参数和运行时长 | 高负载进程属于目标科研任务,参数和工作目录可追溯。 |
readlink -f /proc/<PID>/exe; readlink -f /proc/<PID>/cwd | 进程实际可执行文件和工作目录 | 未发现匿名二进制或异常临时目录路径。 |
nvidia-smi | GPU 使用者、显存和计算进程 | GPU 占用与模型评测任务匹配。 |
ss -tpna | TCP/UDP 监听端口、远端地址和所属进程 | 未发现已知恶意外联或挖矿协议连接。 |
pgrep -a -f 'xmrig|矿工关键词' | 是否存在已知矿工进程 | 未匹配到已知矿工进程;关键词应按实际 IOC 清单维护。 |
find /tmp /var/tmp -xdev -type f -mtime -14 -ls | 近期临时目录落地文件 | 未发现此前风险事件中的可疑落地文件。 |
这些命令的结果需要组合解释。例如,ps 只能说明进程正在运行,不能证明代码可信;必须继续核对 /proc/<PID>/exe、工作目录、父进程和网络连接。反过来,pgrep 没有输出也不等于系统没有木马,只能说明当前没有命中已知名称。
需要管理员权限的补充核验
以下命令用于检查持久化和凭据风险,通常需要目标账号本人或 root 权限:
sudo crontab -l -u <用户>
sudo systemctl list-timers --all
sudo systemctl list-unit-files --state=enabled
sudo find /home/<用户>/.ssh -maxdepth 2 -type f -ls
sudo getent passwd <用户>
sudo journalctl --since '7 days ago' --unit=sshd它们分别用于发现用户级计划任务、定时器、开机自启服务、SSH 公钥、账号 shell 变化和近期登录记录。本次使用的运维账号没有免密 sudo,目标家目录权限也受限,因此这些命令没有被冒险绕过权限执行;这正是“未完成核验项”,而不是“没有发现问题”。
3. 比对已知恶意活动迹象
随后按此前风险事件中的已知特征进行全量比对,包括:
- 已知恶意文件名和临时落地路径;
- 典型挖矿程序进程;
- 已知外联地址;
- 挖矿协议及常见端口连接;
- 异常的网络连接状态。
检查未发现已知矿工进程、对应的可疑文件或挖矿协议连接。系统服务状态也未出现失败项,当前运行状态与模型任务负载相符。
4. 识别权限边界并记录未完成项
安全排查不能把“看不到”写成“没有”。由于本次检查使用的是普通运维账号,且目标账号家目录权限受限,无法读取其私钥、用户级计划任务及部分持久化配置;同时没有可用的特权登录方式完成 root 级核验。
因此,结论被明确限定为:未发现活跃的已知木马或挖矿活动迹象,但尚不能证明系统完全无感染。
处理结果与建议
本次未执行删除文件、停止进程或修改账户等操作,避免在证据不足时影响正常科研任务。后续建议由具备管理员权限的人员补全以下核验:
- 检查目标账号及系统级
crontab、systemd user service、启动脚本和 SSHauthorized_keys。 - 核对账号恢复登录权限是否经过授权,并收敛不必要的交互式登录权限。
- 对历史恶意文件路径和异常网络特征建立定期只读巡检与告警。
- 将高 CPU/GPU 任务与项目、负责人和运行时段建立对应记录,降低后续误报成本。
- 发生疑似入侵时优先保留进程、网络和文件时间线证据,再决定隔离、终止或清理措施。
复盘结论
本次排查完成了当前运行进程、网络连接和已知攻击迹象的交叉验证,确认高资源占用来自可追溯的模型评测任务,未发现活跃的已知木马或挖矿行为。
同时,权限不足导致持久化项和凭据项无法完成特权核验。这个限制本身就是排查结果的一部分:一次合格的安全结论,应同时说明已验证的事实、尚未验证的范围,以及下一步如何补齐证据。