
Linux 系统中隐藏进程和后门往往通过 rootkit、内核模块篡改、ptrace 欺骗或进程伪装等方式规避常规命令检测。单纯依赖 ps、top 或 htop 很容易漏掉恶意活动。要有效排查,需结合多维度比对与底层检查。
用 /proc 文件系统交叉验证进程真实性
/proc 是内核暴露进程信息的直接接口,绕过用户态工具的钩子干扰。重点检查以下几点:
- 遍历
/proc/[0-9]*目录,确认每个 PID 对应的/proc/PID/exe(符号链接)是否指向真实可执行文件;若显示(deleted)或无法解析,需警惕已删除但仍在运行的恶意程序 - 检查
/proc/PID/cmdline内容是否与ps输出一致;不一致可能说明进程名被篡改(如将bash伪装成sshd) - 对比
/proc/PID/status中的PPid(父进程 ID)是否合理;例如一个“systemd”子进程却由非 1 的 PID 启动,值得深入追踪
检测异常内核模块与隐藏系统调用
rootkit 常通过加载恶意内核模块(LKM)劫持系统调用表(sys_call_table),使 ps、ls 等命令过滤掉特定进程或文件。可执行:
-
lsmod查看已加载模块,重点关注名称可疑(如hide、rootkit、acpi、nv等仿冒驱动)、作者为空或为未知第三方的模块 -
cat /proc/sys/kernel/modules_disabled若为 1,说明模块加载已被禁用——正常系统通常为 0;若突变为 1,可能是攻击者为防止被卸载而锁定 - 使用
ksymoops或crash工具(需 vmlinux)检查 sys_call_table 是否被 patch,但需调试符号支持,生产环境较少启用
比对不同工具输出识别不一致项
攻击者常只 hook 部分工具。同时运行多个进程查看命令,发现差异即为线索:
- 运行
ps auxf、ps -ef、lsof -i -P -n、pidof -x bash等,记录所有 PID 列表,用comm -3 找出仅存在于某一种输出中的 PID - 使用
netstat -tulpn和ss -tulpn对比监听端口与对应 PID;若某个端口在ss中可见但在netstat中无 PID 显示,可能netstat被 LD_PRELOAD 劫持 - 检查
/proc/net/tcp、/proc/net/udp等原始套接字文件,手动解析十六进制 inode,再反查/proc/[0-9]*/fd/下的 socket 链接,确认归属进程
检查可疑持久化与启动入口
后门进程往往伴随自启动机制,需排查非常规入口点:
- 检查定时任务:
crontab -l(当前用户)、cat /etc/crontab、ls /etc/cron.*、systemctl list-timers --all - 检查服务单元:
systemctl list-unit-files --type=service | grep enabled,特别关注名称含update、check、sync等模糊词汇的服务;用systemctl cat servicename查看实际 ExecStart 指令 - 检查用户级启动项:
~/.bashrc、~/.profile、~/.bash_profile中是否有异常nohup或后台 curl/wget 下载执行语句 - 检查 PAM 配置:
/etc/pam.d/common-session或/etc/pam.d/sshd中是否插入了可疑pam_exec.so模块
排查隐藏进程与后门不是单次操作,而是建立基线 + 持续比对的过程。建议在可信状态下生成干净的 /proc 快照、模块列表、启动服务清单,作为后续审计参照。不复杂但容易忽略。










