Linux发现异常进程_隐藏进程排查思路

11次阅读

linux 排查隐藏进程需多维度交叉验证:检查 /proc 是否被篡改、使用静态 ps 或直接读取 /proc、分析内核模块与 ebpf、关联网络端口及定时任务、内存镜像分析,确保工具未被污染。

Linux 发现异常进程_隐藏进程排查思路

Linux 中发现异常进程,尤其是隐藏进程,不能只依赖 pstop这类常规命令——因为恶意进程常通过 rootkit、内核模块篡改系统调用、劫持 procfs 等方式绕过标准工具。排查需从用户态、内核态、文件系统、网络行为多维度交叉验证。

检查 /proc 目录是否被篡改

正常情况下,/proc是内核提供的虚拟文件系统,每个运行中的进程对应一个数字子目录(如/proc/1234)。但 rootkit 可能隐藏特定 PID 的目录,或伪造 /proc 内容。

  • ls -la /proc | wc -l 统计总进程数,对比 ps aux | wc -l 结果是否明显偏少
  • 手动遍历 /proc/[0-9]*,检查是否存在“空目录”(无execmdlinestatus 等关键文件)或权限异常(如属主为未知 UID)
  • 执行 cat /proc/sys/kernel/pid_max 确认 PID 上限,再用 find /proc -maxdepth 1 -regex "/proc/[0-9]+" | wc -l 看实际可见 PID 数量是否接近上限

绕过 ps/top:使用原始系统调用或静态二进制

攻击者常 hook libc 的 getdents64 等函数,使动态链接的 ps 失效。可尝试更底层的方式:

  • 用静态编译的ps(如从干净环境拷贝)或busybox ps,避免依赖被劫持的 glibc
  • 直接读取 /proc 并解析:for pid in /proc/[0-9]*; do echo "$pid: $(cat $pid/comm 2>/dev/null)"; done | sort
  • strace -f -e trace=clone,fork,vfork,execve ps aux 2>&1 | grep -E 'clone|execve' 观察 ps 本身是否漏掉了 fork 事件

检查内核模块与系统调用劫持

隐藏进程常依赖恶意内核模块(LKM)或 eBPF 程序干扰进程列表生成逻辑:

  • 运行 lsmod 比对已知安全基线,关注名称可疑(如hiderootknarkadore)或无签名模块
  • 检查 /lib/modules/$(uname -r)/kernel/ 下是否有非官方模块,尤其 extra/updates/目录
  • sysctl kernel.modules_disabled 确认模块加载是否被禁用(若为 0,说明仍可加载);结合 dmesg | tail -50 查看最近内核日志中是否有模块插入痕迹
  • 检查 eBPF 程序:bpftool prog listbpftool map list(需 bpftool 支持),留意非系统路径加载的程序

关联行为分析:网络 + 文件 + 内存线索

即使进程名被隐藏,其行为仍会暴露线索:

  • ss -tunlpnetstat -tunlp查监听端口,再用 lsof -i :PORT 反查进程——若返回“can’t identify protocol”或 PID 为空,极可能被隐藏
  • 检查定时任务:crontab -lsystemctl list-timers --all/etc/cron.*/*/var/spool/cron/,寻找启动可疑二进制的入口
  • 扫描内存镜像(需提前配置):volatility -f memdump.raw linux_pslist(配合 kdump 或 LiME 采集),该方式不依赖 /proc,可发现内核级隐藏进程
  • 检查异常文件访问:auditctl -w /bin -w /usr/bin -p wa -k bin_exec临时启用审计,再用 ausearch -k bin_exec | ausearch -m execve 追溯可疑执行链

排查隐藏进程本质是打破攻击者的“可见性控制”,核心在于用不同视角交叉印证。不要迷信单一命令输出,优先保证排查工具自身未被污染(如用静态二进制、离线镜像、可信宿主机远程分析),再结合行为特征缩小范围。

text=ZqhQzanResources