〇、2024 视角(写于 2024-06)
本篇首发于 2024-06,过去 2 年挖矿病毒、内核 Rootkit 形态发生了一些变化:
- unhide 仍是 Linux 下找隐藏进程最轻量的工具,但部分 Rootkit 已经能 hook 掉
/proc遍历,建议结合sysdig/bpftrace一起看。 - sysdig 2023 起被 Sysdig 公司收为闭源商业版的一部分,但社区 fork
draios/sysdig仍可拉取旧版开源;2024 推荐用bpftrace/opensnoop-bpftrace替代做 syscall 级追踪。 - 挖矿病毒命名:过去是 8 位随机名(
f54e90d4),2024 已进化为伪装成系统服务名(kthrotlds、migration/0),单看名字不再可靠,必须看cmdline + 真实可执行路径。 - 应急 SOP 没变:先断网 → 看进程 → 看 cron → 杀进程 → 删 cron → 改密码 → 关密码登录 → 备份数据后重装。
下面进入正文。
一、为什么需要"应急排查"清单
线上服务器出现异常,最贵的成本不是 CPU 也不是磁盘,而是"不知道下一步该敲什么命令"。本文按"症状 → 第一条命令 → 深入分析 → 处置"的顺序,整理了 4 个最常见场景的应急清单:
- CPU 拉满但
top看不出明显元凶(隐藏进程 / 多核分配) - 磁盘 IO 飙高(
iostat/ 临时压测复现) - 登录用户可疑(踢人 / 改端口)
- 挖矿病毒(
unhide/sysdig找进程 / 清理定时任务)
每个场景都给最小可运行命令,不讲空洞理论。
重要原则:发现入侵迹象后,先断网再排查,避免恶意进程远程"自删"破坏现场。
二、场景 1:CPU 拉满
2.1 一条命令把 CPU 吃满(用于复现 / 压测)
| |
原理:dd if=/dev/zero of=/dev/null 不产生 IO,只用 CPU。N 个并行正好把 N 核打满。
2.2 内存打满(用于测试 OOM)
| |
2.3 磁盘 IO 打满(用于复现 IO 瓶颈)
| |
跑起来后用 iostat 观察:
| |
关键列含义:
| 列 | 含义 |
|---|---|
r/s / w/s | 每秒读 / 写次数 |
rkB/s / wkB/s | 每秒读 / 写 KB |
await | 平均每次 IO 等待时间(ms) |
svctm | 平均每次 IO 服务时间(ms) |
%util | 设备繁忙时间占比,接近 100% 就是瓶颈 |
avgqu-sz | 平均 IO 队列长度 |
2.4 CPU 满但 top 看不到凶手
很可能是进程被 Rootkit 隐藏了。ps 只能看到 /proc 里可见的进程,Rootkit 通过改系统调用 / 内核模块把进程从 /proc 抹掉。
| |
输出示例(节选):
| |
"<no link>" 加 (deleted) 几乎可以肯定是被替换的可执行文件。这种进程ps 看不到,但 unhide 跑遍 /proc 就能揪出来。
2.5 sysdig:高级武器
| |
输出形如:
| |
1986.02%出现在普通命令里几乎肯定是异常——单进程超过 100% 表示它多线程用了多核,但Discord一般不该这样。如果看到f54e90d4这种 8 位随机名字的可执行文件,就是挖矿木马。
定位 PID 后用下面这套"五连":
| |
pwdx 1806 找进程工作目录:
| |
No such process 是典型的"恶意进程"——它在被查询的瞬间就已经退出了,只留下 /proc 里的残骸。
三、场景 2:磁盘清理与排查
| |
ncdu 快捷键:
| 键 | 作用 |
|---|---|
n | 按文件名排序 |
s | 按大小排序 |
r | 重新计算 |
g | 显示百分比 |
q | 退出 |
四、场景 3:SSH 登录用户异常
| |
注意
pkill -9 -t pts/2会强杀该终端所有进程,包括用户正在跑的服务。生产环境慎用,最好先wall警告。
/var/log/auth.log 异常增长是被 SSH 暴力破解的信号:
| |
应对:
- 改 SSH 端口
- 关闭密码登录,只允许密钥
- 装 fail2ban 自动封禁
- 内网机器直接禁外网 SSH
五、场景 4:挖矿病毒应急 SOP
本节基于实际处置过的案例整理,所有"客户信息"已脱敏。
5.1 症状
top看到f54e90d4、ntools、kthrotlds等奇怪名字- CPU 长期 100%,但业务进程正常
/etc/cron.d/下出现随机名字的文件
5.2 排查流程
| |
示例输出:
| |
F6tfV3LP 这种随机 8 位字母几乎肯定是恶意 cron。e2scrub_all 是 ext 文件系统自带工具,不要删。
| |
5.3 清理
| |
5.4 后续加固
- 改所有弱密码
- 关闭 SSH 密码登录
- 查 /etc/passwd 是否有可疑新用户
- 检查开机启动项:
systemctl list-unit-files --state=enabled - 重装系统(如果已经渗透很深)
经验上重装比清理快。挖矿病毒经常会留后门,清理成本远高于备份数据 → 重装 → 加固。
六、sysdig 进阶使用
| |
更多 sysdig chisel(内置的分析命令):
| Chisel | 用途 |
|---|---|
topprocs_cpu | CPU 占用 Top |
topprocs_net | 网络流量 Top |
topprocs_file | 读写文件 Top |
topfiles_bytes | 文件读写字节数 Top |
spy_users | 用户行为跟踪 |
spy_ip | IP 维度流量 |
list_login_shells | 登录历史 |
七、SSH 日志监控
| |
日志格式:
| |
日志暴增多半是 SSH 暴力破解,可以装 fail2ban 自动封禁。
八、常见 5 个坑
unhide报很多 Found HIDDEN:先看Cmdline和Executable两列,"<no link>"+(deleted)才是真可疑;内核线程、kthreadd的子进程是正常的。pkill -9 -t pts/2把自己踢下线:远程终端执行前确认 pts 号是自己的(who第一行)。crontab里的"正常任务"删错:e2fsprogs的e2scrub_all看起来像可疑脚本,是合法的——别删。dd if=/dev/zero把磁盘打满:of=/dev/null不会写盘;of=/burn(不存在)会真的写满磁盘,小心。- 入侵后只杀进程不清理 cron:挖矿病毒的核心是 cron 里的回连脚本,不删 cron 杀 100 次也会复活。
九、应急排查清单(建议收藏)
| |
十、总结
- CPU 满先
top看不见再unhide,别忘了sysdig是终极武器。 - 挖矿病毒的根在
/etc/cron.d/随机名文件,不删 cron 杀 100 次也复活。 - 入侵后清理 = 找 → 杀 → 删 cron → 改密码 → 关密码登录 → 重装。
- 预防 > 应急:SSH 密钥 + fail2ban + 最小开放端口。
