在线排查三条主线
时间有限的现场排查不能靠「把整盘扫一遍」,而要按信息价值排序:先看谁在对外通信(连接),再看进程画像(谁在跑、从哪来、什么时候起),最后核对它靠什么活下来(持久化)。这三条主线覆盖了绝大多数入侵痕迹,而且每条都有明确的一两个命令入口。主线跑完再回到账号与日志,把散点串成时间线。
三条主线
| 主线 1 连接 | ss -antp 找对外连接与监听面,先看谁在跟外界通话 |
|---|---|
| 主线 2 进程 | ps 与 /proc 画像:可执行路径、工作目录、启动时间、父进程 |
| 主线 3 持久化 | cron、systemd、登录脚本、SSH 密钥,看它怎么活下来 |
| 收尾 | 账号与会话(passwd、sudoers、authorized_keys、last) |
| 最后 | 日志与时间线:auth、journal、Web 访问日志,按 UTC 排序 |
| 原则 | 先易失后持久、先外联后文件、先范围后清理 |
典型使用场景
- 接到告警但时间窗口只有十几分钟,需要快速给出「有没有被控」的判断
- 现场无法停机,只能在线做初步排查并写进报告
- 多台主机批量核对,用同样的三条主线保证口径一致
- 刚接手别人管的机器,需要一份快速的现状画像
- 清理前后各做一轮,用同一套主线对比验证效果
按主线顺序执行
按主线顺序执行
sudo ss -antp state established | grep -vE '127.0.0.1|::1' | head -n 20 # 1 对外连接
sudo ss -lntup | head -n 20 # 2 监听面
ps -eo pid,ppid,lstart,pcpu,cmd --sort=-lstart | head -n 15 # 3 最新启动的进程
sudo ls -l /proc/<PID>/exe /proc/<PID>/cwd # 4 进程画像
systemctl list-timers --all | head -n 15 # 5 定时器
crontab -l 2>/dev/null; ls -la /etc/cron.d/ 2>/dev/null # 6 计划任务
find /root /home -maxdepth 3 -name 'authorized_keys' -exec ls -l {} \; # 7 免密通道主线与判据
| 主线 | 看什么 | 命中之后 |
|---|---|---|
| 连接 | 对端地址、端口、归属进程 | 取进程 PID,进 /proc 核对真实身份,把地址整理成 IOC |
| 进程 | 启动时间、父进程、可执行路径 | 按启动时间对齐告警时间,父进程指向 shell 说明是人工执行 |
| 持久化 | cron、systemd、登录脚本、SSH 密钥 | 先记录内容与时间,再逐处清理,避免复发 |
| 账号 | uid 0 账号、sudoers 变更、密钥文件 | 确认是否为后门,清理前保留证据 |
| 日志 | 登录、命令、Web 访问 | 按 UTC 排序合并成事件表,标出证据缺口 |
外联是攻击者最难隐藏的痕迹:进程名与文件路径都能伪装,但到 C2 的连接必须真实出现在连接表里。所以三条主线里,连接永远排在第一位。
顺序错了会重复劳动:一上来就整盘搜 webshell 或逐个翻日志,往往几十分钟还没确定主机是否被控。先外联、再进程、后持久化,能把范围迅速收窄到一个或几个具体进程上。