Linux 检查隐藏进程与后门

1次阅读

Linux 检查隐藏进程与后门

linux 系统中隐藏进程和后门往往通过 rootkit、内核模块篡改、ptrace 欺骗或进程伪装等方式规避常规命令检测。单纯依赖 pstophtop 很容易漏掉恶意活动。要有效排查,需结合多维度比对与底层检查。

用 /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),使 psls 等命令过滤掉特定进程或文件。可执行:

  • lsmod 查看已加载模块,重点关注名称可疑(如 hiderootkitacpinv 等仿冒驱动)、作者为空或为未知第三方的模块
  • cat /proc/sys/kernel/modules_disabled 若为 1,说明模块加载已被禁用——正常系统通常为 0;若突变为 1,可能是攻击者为防止被卸载而锁定
  • 使用 ksymoopscrash 工具(需 vmlinux)检查 sys_call_table 是否被 patch,但需调试符号支持,生产环境较少启用

比对不同工具输出识别不一致项

攻击者常只 hook 部分工具。同时运行多个进程查看命令,发现差异即为线索:

  • 运行 ps auxfps -eflsof -i -P -npidof -x bash 等,记录所有 PID 列表,用 comm -3 找出仅存在于某一种输出中的 PID
  • 使用 netstat -tulpnss -tulpn 对比监听端口与对应 PID;若某个端口在 ss 中可见但在 netstat 中无 PID 显示,可能 netstat 被 LD_PRELOAD 劫持
  • 检查 /proc/net/tcp/proc/net/udp 等原始套接字文件,手动解析十六进制 inode,再反查 /proc/[0-9]*/fd/ 下的 socket 链接,确认归属进程

检查可疑持久化与启动入口

后门进程往往伴随自启动机制,需排查非常规入口点:

  • 检查定时任务:crontab -l(当前用户)、cat /etc/crontabls /etc/cron.*systemctl list-timers --all
  • 检查服务单元:systemctl list-unit-files --type=service | grep enabled,特别关注名称含 updatechecksync 等模糊词汇的服务;用 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 快照、模块列表、启动服务清单,作为后续审计参照。不复杂但容易忽略。

text=ZqhQzanResources