0

0

进程启动环境变量被劫持的 pam_env 或 ld_preload 入侵排查

舞夢輝影

舞夢輝影

发布时间:2026-01-21 18:22:02

|

143人浏览过

|

来源于php中文网

原创

进程启动时环境变量劫持常见于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 配置滥用或 LD_PRELOAD 动态库注入,属于隐蔽性强、权限提升风险高的入侵手法。排查需聚焦系统级配置、用户级环境加载链和运行时动态链接行为。

检查 pam_env 配置是否被恶意篡改

pam_env 模块通过 PAM 配置在用户登录时设置环境变量,攻击者可能在其中注入恶意路径或命令。重点检查以下位置:

  • red">/etc/security/pam_env.conf:主配置文件,查看是否有异常 DEFAULTOPTIONunset 行,尤其注意含 PATHLD_LIBRARY_PATHLD_PRELOAD 的赋值
  • /etc/security/pam_env.conf.d/(若存在):检查该目录下所有 .conf 文件,攻击者常在此添加隐藏配置
  • /etc/pam.d/common-session/etc/pam.d/sshd 等服务 PAM 配置:确认是否启用了 pam_env.so,并检查其参数(如 debuguser_readenv=1)是否被滥用

定位 LD_PRELOAD 注入点

LD_PRELOAD 可在进程启动前强制加载指定共享库,是常见的无文件注入手段。排查应覆盖静态配置与运行时继承:

慧中标AI标书
慧中标AI标书

慧中标AI标书是一款AI智能辅助写标书工具。

下载
  • 检查用户 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),限制继承不可信环境

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

232

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

437

2024.03.01

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

314

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

741

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.12.07

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1350

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

704

2023.06.29

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号