进程启动时环境变量劫持常见于pam_env配置滥用或LD_PRELOAD注入,需检查/etc/security/pam_env.conf、/etc/pam.d/服务配置、shell启动脚本、/etc/environment及/proc/PID/environ,并审计pam_env.so哈希与可疑.so文件,加固建议包括清除恶意配置、限制user_readenv、保护/etc/ld.so.preload并启用env_reset。

进程启动时环境变量被劫持,常见于 pam_env 配置滥用或 LD_PRELOAD 动态库注入,属于隐蔽性强、权限提升风险高的入侵手法。排查需聚焦系统级配置、用户级环境加载链和运行时动态链接行为。
检查 pam_env 配置是否被恶意篡改
pam_env 模块通过 PAM 配置在用户登录时设置环境变量,攻击者可能在其中注入恶意路径或命令。重点检查以下位置:
-
red">/etc/security/pam_env.conf:主配置文件,查看是否有异常
DEFAULT、OPTION或unset行,尤其注意含PATH、LD_LIBRARY_PATH、LD_PRELOAD的赋值 - /etc/security/pam_env.conf.d/(若存在):检查该目录下所有 .conf 文件,攻击者常在此添加隐藏配置
-
/etc/pam.d/common-session 和 /etc/pam.d/sshd 等服务 PAM 配置:确认是否启用了
pam_env.so,并检查其参数(如debug、user_readenv=1)是否被滥用
定位 LD_PRELOAD 注入点
LD_PRELOAD 可在进程启动前强制加载指定共享库,是常见的无文件注入手段。排查应覆盖静态配置与运行时继承:
- 检查用户 shell 启动脚本:
~/.bashrc、~/.profile、/etc/profile.d/*.sh中是否设置LD_PRELOAD;注意转义、变量拼接或 base64 隐藏写法 - 检查系统级环境配置:
/etc/environment、/etc/default/locale等非 Shell 解析文件,某些 PAM 模块会读取它们并导入环境 - 对可疑进程执行
cat /proc/,直接查看实际生效的环境变量;用/environ | tr '\0' '\n' strings /proc/辅助确认预加载库是否已映射/maps | grep -i preload
审计 PAM 模块加载与可疑共享库
除配置外,还需验证模块本身是否被替换或劫持:
- 运行
md5sum /lib/x86_64-linux-gnu/security/pam_env.so(路径依系统而异),比对官方包哈希(如通过dpkg -S pam_env.so查来源,再apt download libpam-runtime校验) - 搜索全局可疑共享库:
find /usr -name "*.so*" -type f -exec file {} \; 2>/dev/null | grep "ELF.*shared object" | grep -v "not stripped",重点关注非常规路径(如/tmp、/dev/shm、用户 home 下的隐藏目录)中的 .so 文件 - 检查
/etc/ld.so.preload文件是否存在且内容可信——该文件会全局启用LD_PRELOAD,优先级最高,一旦被写入即影响所有动态链接进程
验证与加固建议
确认问题后,需阻断路径并防止复发:
- 清除恶意配置项,禁用不必要的
pam_env.so调用;如必须使用,限制其仅读取/etc/security/pam_env.conf,关闭user_readenv - 将
/etc/ld.so.preload权限设为644并属主 root,避免普通用户写入;定期用auditd监控该文件修改事件(-w /etc/ld.so.preload -p wa) - 对关键服务(如 sshd、sudo)启用
env_reset(sudoers)或ClearAllEnvironment yes(sshd_config),限制继承不可信环境










