首页/安全/应急响应速查/top 快速定位高占用的挖矿进程

top 快速定位高占用的挖矿进程

挖矿木马的典型特征是 CPU 长期跑满:用 top 批处理模式抓快照,按 CPU 排序锁定嫌疑人,再看启动时间与命令行。

应急响应速查安全更新于 2026-10-13

top 与挖矿定位

top 是 procps-ng 提供的实时进程监控工具,默认每 3 秒刷新一次屏幕。应急排查时用批处理模式 top -b -n 1 抓一份快照落盘,理由是现场常常不能长时间盯着交互界面,而且批处理输出可以直接写进证据文件。挖矿木马的特征非常集中:CPU 长期贴满、进程启动时间很短、进程名仿冒系统组件、命令行里带矿池地址或 -t 线程数参数。

基本信息

适用平台Linux(procps-ng);macOS 与 BSD 的 top 选项与之不同
批处理模式top -b -n 1:-b 适合重定向,-n 指定采样次数
排序与间隔top -o %CPU 按 CPU 排序;-d 5 改成 5 秒刷新
单进程查看top -p 1234 只盯一个 PID;-H 展开线程
采样精度第一帧的 %CPU 是进程启动至今的平均值,第二帧起才是本间隔内的实时值
资源换算%CPU 可按多核累加超过 100%,八核机器上显示 800% 代表全部核心跑满

典型使用场景

  • 云主机 CPU 告警后确认是哪个进程在吃资源,先定位再隔离
  • 挖矿处置前抓取一份资源快照,作为处置前后对比的证据
  • 判断是业务升级导致的负载上升,还是出现了外来进程
  • 确认挖矿进程占用了多少核,评估是否做过线程限制以降低被发现的概率
  • 与 ss 输出的矿池连接一起核对,形成完整的资源与网络证据链

抓快照与筛高占用

抓快照与筛高占用
top -b -n 1 -o %CPU | head -n 25                 # 抓一份按 CPU 排序的快照
top -b -n 1 -o %CPU | awk 'NR>6 && $9+0>50 {print}'   # 只打印 CPU 超过 50% 的行
top -b -n 2 -d 1 -o %CPU | tail -n 30            # 采两帧,看第二帧的实时占用
top -b -n 1 -H -p 1234 | head -n 20              # 展开可疑进程的线程,看是否多线程挖矿
top -b -n 1 -o %CPU > /evidence/top_$(date +%F_%H%M).txt   # 落盘留证
uptime; nproc                                    # 负载与核数一起记录,便于换算

输出逐列读法

列含义异常信号
PID / USER进程号与运行账号nobody、www 等低权限账号跑着 CPU 密集进程
PR / NI优先级与 nice 值被恶意调低优先级以躲避告警,NI 值明显为正
VIRT / RES虚拟内存与常驻内存RES 只有几十兆却吃满多个核心,符合挖矿程序特征
S进程状态长期 R 说明一直在跑,很少进入睡眠
%CPUCPU 占用百分比稳定贴近 100% 的整数倍,且长时间不波动
TIME+累计占用 CPU 时间数值很大而进程启动时间很近,说明一直在算
COMMAND命令名与参数名字是 kworker、crond,但参数里带矿池地址或 -t 线程数
负载与核心数要一起看:uptime 的 load average 除以 nproc 才是真正的饱和度。有些挖矿样本会用 --cpu-max-threads-hint 之类参数只吃一半核心,目的是让监控曲线不至于爆表,所以不能只看负载是否打满。
挖矿进程常把名字改成 kworker、crond、java 这类系统名,也常带 watchdog 守护结构:杀掉主进程会被立刻拉起。定位时以资源占用与命令行参数为准,处置时把父子进程一起处理。

定位后的加固动作

定位后的加固动作
ps -p 1234 -o pid,ppid,lstart,cmd            # 看启动时间与父进程,判断是谁拉起的
sudo ls -l /proc/1234/exe /proc/1234/cwd      # 真实二进制路径与工作目录
sudo ss -antp | grep -w 1234                 # 该进程的网络连接,矿池地址即 IOC
sudo cat /proc/1234/environ | tr '\0' '\n'   # 环境变量里常见钱包地址与配置
sudo systemctl list-timers --all | head -n 10 # 时间维度上的拉起机制也要一并核对
容器场景下 top 看到的是当前命名空间的进程:宿主机要确认容器内是否在挖矿,用 docker stats 看容器级资源,再进容器或用 nsenter 查进程。

易错点

  • 只扫一眼排名靠前的进程就关掉界面:没有落盘快照,无法说明挖矿从何时开始、持续多久
  • 只看进程名判断:名字可伪装成系统组件,应以资源占用曲线与命令行为主判据
  • 漏掉只吃部分核心的样本:多核机器上单线程挖矿只占一两个核,按整体负载看会以为正常
  • 只杀主进程不查守护结构:父子进程互为看门狗,几秒内就会重新拉起
  • 定位后不抓 /proc 与连接信息:二进制、工作目录、外连地址都是处置与取证的必需素材

数据来源与参考

  • man 1 top(procps-ng)
  • MITRE ATT&CK T1496 资源劫持

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌