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

Linux 中发现异常进程,尤其是隐藏进程,不能只依赖 ps 或top这类常规命令——因为恶意进程常通过 rootkit、内核模块篡改系统调用、劫持 procfs 等方式绕过标准工具。排查需从用户态、内核态、文件系统、网络行为多维度交叉验证。
检查 /proc 目录是否被篡改
正常情况下,/proc是内核提供的虚拟文件系统,每个运行中的进程对应一个数字子目录(如/proc/1234)。但 rootkit 可能隐藏特定 PID 的目录,或伪造 /proc 内容。
- 用
ls -la /proc | wc -l统计总进程数,对比ps aux | wc -l结果是否明显偏少 - 手动遍历
/proc/[0-9]*,检查是否存在“空目录”(无exe、cmdline、status等关键文件)或权限异常(如属主为未知 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比对已知安全基线,关注名称可疑(如hide、root、knark、adore)或无签名模块 - 检查
/lib/modules/$(uname -r)/kernel/下是否有非官方模块,尤其extra/或updates/目录 - 用
sysctl kernel.modules_disabled确认模块加载是否被禁用(若为 0,说明仍可加载);结合dmesg | tail -50查看最近内核日志中是否有模块插入痕迹 - 检查 eBPF 程序:
bpftool prog list和bpftool map list(需 bpftool 支持),留意非系统路径加载的程序
关联行为分析:网络 + 文件 + 内存线索
即使进程名被隐藏,其行为仍会暴露线索:
- 用
ss -tunlp或netstat -tunlp查监听端口,再用lsof -i :PORT反查进程——若返回“can’t identify protocol”或 PID 为空,极可能被隐藏 - 检查定时任务:
crontab -l、systemctl 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追溯可疑执行链
排查隐藏进程本质是打破攻击者的“可见性控制”,核心在于用不同视角交叉印证。不要迷信单一命令输出,优先保证排查工具自身未被污染(如用静态二进制、离线镜像、可信宿主机远程分析),再结合行为特征缩小范围。






























