进程环境变量
/proc/<pid>/environ 保存进程启动时的环境变量,用 NUL 字节分隔,需要经过 tr 或 strings 转换才能正常阅读。它的取证价值在于:临时凭据、代理设置与注入用的预加载变量常出现在这里,而这些内容不会写进任何日志文件。
基本信息
| 路径 | /proc/<pid>/environ |
|---|---|
| 格式 | NUL 字节分隔,直接查看会连成一行 |
| 权限要求 | 仅进程属主与 root 可读 |
| 语义 | 反映 exec 时的初始环境,进程内修改不会同步更新 |
| 相关文件 | /proc/<pid>/cmdline 同样为 NUL 分隔 |
| 常见线索 | 代理变量、预加载库变量、令牌与密钥类变量 |
典型使用场景
- 检查进程是否被注入预加载库
- 发现硬编码在环境中的凭据或令牌
- 判断可疑进程使用的代理与外联配置
- 与 cmdline、maps 一起构成进程画像
- 分析服务实际接收到的启动参数
最小示例
最小示例
tr '\0' '\n' < /proc/1234/environ | sort # 转换为按行输出
tr '\0' '\n' < /proc/1234/environ | grep -Ei 'proxy|token|key|secret|preload'
cat /proc/1234/status | head -8 # 进程基本信息
tr '\0' ' ' < /proc/1234/cmdline; echo # 与命令行对照
ls -l /proc/1234/exe # 可执行文件指向
sudo strings /proc/1234/environ | head -20 # 跨用户读取需要权限观察项与信号
| 观察项 | 含义 | 异常信号 |
|---|---|---|
| 预加载变量 | 指定预先加载的共享库 | 指向非标准路径的库文件 |
| 代理变量 | 外联代理设置 | 指向内网或陌生地址 |
| 令牌与密钥 | 访问凭据 | 明文出现在环境中 |
| 搜索路径 | 命令查找目录顺序 | 被前置了非标准目录 |
| 分隔符 | 是否按 NUL 解析 | 直接 cat 会把所有变量连成一行 |
environ 反映的是 exec 时的初始环境;进程内部修改过的变量不会同步到这个文件,因此它与运行时的实际环境可能存在差异。
读取其它用户进程的环境需要相应权限;容器内看到的是容器命名空间内的进程,宿主与容器的视角要分别取证。
环境变量中常含口令与令牌,写入报告前必须脱敏,截图也要遮挡相应部分。
不要用调试器附加的方式获取更多信息:附加会暂停进程并改变其状态,还可能在日志中留下记录。