首页/安全/应急响应速查/检查进程内存映射中的可疑库

检查进程内存映射中的可疑库

/proc/PID/maps 列出全部映射段:出现 /tmp、/dev/shm 下的 .so 或没有路径的可执行匿名段,是用户态劫持与内存马的典型信号。

应急响应速查安全更新于 2026-10-13

maps 里能看到什么

/proc/PID/maps 列出进程的全部内存映射段,每行包含地址范围、权限、偏移、设备与文件路径。出现 /tmp、/dev/shm 下的 .so,或带执行权限的匿名段,是用户态劫持与内存马的典型信号。

怎么用最有价值

maps 适合与 ld.so.preload、进程环境变量联动核查:先从映射发现异常库,再顺着 /etc/ld.so.preload 与 environ 找到注入来源,最后核对库文件哈希与来源包。

基本信息

查看cat /proc/<PID>/maps
字段地址范围、权限、偏移、设备、inode、路径
可疑点匿名可执行段、非系统路径的 .so
关联文件/etc/ld.so.preload、/proc/PID/environ
权限要求root 或同用户可读
进阶/proc/PID/smaps 提供更细的内存占用信息

典型使用场景

  • 排查用户态劫持与内存马
  • 确认进程加载了哪些非常规库
  • 与 ld.so.preload 联动定位全局注入源
  • 分析进程崩溃或异常行为的库依赖
  • 取证时记录进程内存映射清单

过滤非标准路径的库

过滤非标准路径的库
awk '{print $6}' /proc/1234/maps | sort -u | grep -vE '^$|^/(usr|lib|lib64)' | head -n 30
grep -E 'rwxp' /proc/1234/maps | grep -E '/tmp|/dev/shm|/var/tmp' | head
awk '$2 ~ /x/ && $6 == "" {print}' /proc/1234/maps | head -n 10   # 可执行匿名段
ls -l /proc/1234/exe /proc/1234/cwd
cat /proc/1234/maps | grep '(deleted)' | head

逐列读法

字段含义正常/异常
权限位r/w/x/p 组合出现 rwxp 这种可写可执行组合需要解释
路径被映射的库或文件指向 /tmp、/dev/shm 需重点核查
匿名段无路径的可执行映射少数运行时正常使用,可疑进程中出现需追查
inode映射文件的 inode 号为 0 表示匿名段,非 0 可据此定位文件
匿名可执行段不总是恶意:部分运行时(如 JIT 引擎)会正常使用;判定要结合进程身份、启动时间与整体行为,而不是只看一行映射。
标记为 (deleted) 的映射说明文件已被删除但仍在运行:这是恢复被删库与溯源的重要材料,动手清理前先把它从 /proc/PID/map_files 复制出来。
分析顺序建议:先把映射中的文件路径去重,再筛出非标准路径,最后逐个核对来源与哈希;直接通读完整输出容易在几百行里迷路。

关联检查清单

  • 检查 /etc/ld.so.preload 是否引用该库
  • 检查进程 environ 中的 LD_PRELOAD 与 LD_LIBRARY_PATH
  • 核对库文件哈希与包管理器归属
  • 记录库文件创建时间与入侵时间窗的关系

易错点

  • 只盯文件名:库可以伪装成 libc 风格的名字放在 /tmp
  • 只看有路径的段:rwx 匿名段往往比有路径的更可疑
  • 忽略 (deleted) 标记:被删库仍在运行,是重要的恢复与溯源材料
  • 不做哈希与包归属核对:同名系统库被替换难以发现
  • 只看单个进程:全局注入源通常在 /etc/ld.so.preload 与进程之外

数据来源与参考

  • man 5 proc(/proc/pid/maps)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌