pam.d/sshd 注入 pam_exec 的后门日志排查

5次阅读

识别可疑 pam_exec 条目需检查 /etc/pam.d/sshd 中含 pam_exec.so 的行,重点排查临时路径脚本、expose_authtok 参数、log=/dev/NULL 或 seteuid 隐藏行为,因其默认不写系统日志,须结合进程监控、文件访问和网络连接动态验证。

pam.d/sshd 注入 pam_exec 的后门日志排查

sshd 的 pam.d 配置里怎么识别可疑的 pam_exec 条目

直接看 /etc/pam.d/sshd 文件,重点扫描含 pam_exec.so 的行。合法使用通常带明确路径、quietstdout 等可控参数;后门倾向省略日志控制、调用非常规脚本(如 /tmp/.x/dev/shm/a.sh)、或加 expose_authtok 窃取密码明文。

常见可疑模式包括:

  • auth [default=ignore] pam_exec.so /tmp/.p —— 路径在临时目录,无日志输出
  • auth [success=done] pam_exec.so expose_authtok /var/log/.a —— expose_authtok 是高危标志,且目标脚本名伪装成日志
  • 同一行混用 seteuid + log=/dev/null —— 主动屏蔽执行痕迹

为什么 pam_exec 后门往往不写系统日志

因为默认情况下 pam_exec.so 不自动记录到 syslog,除非显式加 log=file_path 或脚本自身调用 logger。攻击者正是利用这个默认静默行为绕过常规审计。

排查时不能只盯 /var/log/secure/var/log/auth.log 里有没有 pam_exec 记录——大概率什么都没有。真正线索藏在:

  • 脚本自身的网络外连(netstat -tupn | grep :443 查异常连接)
  • 脚本读取的环境变量env | grep -i pass 可能暴露被窃凭证)
  • 脚本是否设了 seteuid 并 fork 子进程隐藏父 PID

如何动态验证某条 pam_exec 是否真在执行

别依赖日志,改用进程和文件监控。在测试账号登录前后快速抓快照:

  • strace -f -e trace=execve,openat,connect -p $(pgrep -f "sshd.*@") 2>&1 | grep -E "(execve|/tmp|.sh)" 捕获实际调用
  • 对疑似脚本加 inotifywait -m -e access,modify /tmp/.backdoor.sh,再触发一次 SSH 登录看是否触发
  • 检查该脚本是否设置了 LD_PRELOADPATH 劫持(strings /tmp/.x | grep -E "(LD_|PATH=)"

注意:某些后门会检测是否在 strace 下运行,进而跳过敏感逻辑,所以多换几种方式交叉验证。

排查时最容易忽略的两个点

一是 /etc/pam.d/common-auth/etc/pam.d/system-auth 被间接 includesshd,后门可能不在 sshd 本体文件里;二是容器或云主机中,/etc/pam.d/sshd 可能被 overlayfs 或 initramfs 覆盖,真实生效配置得查 grep -r "pam_exec" /usr/lib/pam.d/ 或运行时 sshd -T | grep -i pam

另外,pam_exec 支持传参给脚本,比如 pam_exec.so /bin/sh -c 'id >> /dev/shm/log',这种内联命令极难静态识别,必须结合运行时行为分析。

text=ZqhQzanResources