终止进程前先完成进程画像
进程一终止,/proc 下的目录立即消失,可执行文件、工作目录、环境变量、打开的文件与连接信息大多再也取不回来。所以处置动作必须严格按「画像 → 冻结 → 确认 → 终止」四步走:先把能取的信息全部记录下来,用挂起信号把进程冻结争取时间,确认它不是关键业务进程并已处理好持久化机制,最后才终止。跳过中间步骤是最常见的现场失误。
基本信息
| 画像要素 | 可执行文件路径与哈希、工作目录、命令行、环境变量、启动时间、父进程 |
|---|---|
| 网络要素 | 该进程的 TCP 与 UDP 连接、监听端口、对端地址 |
| 文件要素 | 打开的文件与套接字,是否持有已删除文件 |
| 冻结方式 | kill -STOP 暂停进程,保留内存现场与连接 |
| 确认事项 | 是否为核心业务进程、是否已处理持久化机制、是否有守护进程 |
| 样本处理 | 从 /proc/<PID>/exe 复制二进制并计算哈希,单独保存 |
典型使用场景
- 确认木马进程后准备终止,需要先固定证据
- 清理前需要样本留档,供后续检测与其他主机检索
- 判断进程是否由守护结构拉起,决定终止顺序
- 排查「杀不掉的进程」,先冻结再分析原因
- 为处置报告准备可验证的进程画像材料
画像到终止的完整序列
画像到终止的完整序列
PID=1234
ps -p $PID -o pid,ppid,user,lstart,cmd # 1 基本信息
sudo ls -l /proc/$PID/exe /proc/$PID/cwd # 2 可执行文件与工作目录
sudo md5sum /proc/$PID/exe 2>/dev/null # 3 文件指纹
sudo ss -antp | grep "pid=$PID" # 4 相关网络连接
sudo cat /proc/$PID/environ | xargs -0 -n1 | head -n 20 # 5 环境变量
sudo ls -l /proc/$PID/fd | head -n 20 # 6 打开的文件描述符
sudo cp /proc/$PID/exe /evidence/sample_$PID.bin 2>/dev/null # 7 留样本
sudo kill -STOP $PID # 8 冻结,争取处置时间
sudo kill -9 $PID # 9 确认后终止画像字段清单
| 项目 | 取值方式 | 用途 |
|---|---|---|
| 可执行路径 | /proc/PID/exe | 判断文件位置是否异常 |
| 文件哈希 | md5sum 或 sha256sum | 横向检索与样本比对 |
| 工作目录 | /proc/PID/cwd | 找到它落地的目录 |
| 命令行 | /proc/PID/cmdline | 提取地址与参数作为 IOC |
| 环境变量 | /proc/PID/environ | 发现未在配置中出现的地址或凭据 |
| 启动时间 | ps 的 lstart | 判断是否落在入侵时间窗内 |
| 网络连接 | ss 按 pid 过滤 | 确认通信对象与端口 |
不要跳过冻结这一步:直接终止可能触发对手脚本的超时清理逻辑,顺手删掉工具与日志;先挂起再确认,既能保住现场,也便于判断有没有守护进程会把它重新拉起。
终止前先确认自己不是在杀业务进程:看启动时间、父进程与所属账号,必要时与业务方确认。误杀核心服务造成的损失,往往比留着一个待处理的样本更大。