首页/安全/取证与溯源速查/maps 内存映射异常检查
Linux 取证135 条

maps 内存映射异常检查

/proc/<pid>/maps 展示进程的地址空间映射:从 /tmp、/dev/shm 加载的共享库或成片的匿名可执行段,都是注入与无文件载荷的可疑信号。

取证与溯源速查安全更新于 2026-10-13

maps 映射段

/proc/<pid>/maps 列出进程当前的全部内存映射,每行含地址范围、权限位、偏移、设备、inode 与文件路径。注入类载荷常表现为可读写可执行(rwx)的匿名段、从 /tmp 或 /dev/shm 映射的可执行文件,或路径带 (deleted) 标记的已删除共享库。

基本信息

适用平台Linux
路径/proc/<pid>/maps,同目录有 smaps、smaps_rollup
行格式地址 权限 偏移 设备 inode 路径
权限位r/w/x 加 p(私有)或 s(共享)
可疑特征rwx 段、/tmp/ 与 /dev/shm/ 下的映射、无路径的大段匿名映射
补充数据/proc/<pid>/smaps 提供每段大小与常驻内存

典型使用场景

  • 确认进程是否加载了发行版之外的共享库
  • 排查内存注入与无文件(fileless)载荷
  • 对比同一程序在多台主机上的映射差异
  • 找出占用虚拟内存最多的映射段
  • 与 lsmod、proc net 联动形成完整进程画像

最小示例

最小示例
PID=1234
awk '{print $2, $6}' /proc/$PID/maps | sort | uniq -c | sort -rn | head  # 统计权限位与来源
cat /proc/$PID/maps | grep -E 'rwx|/tmp/|/dev/shm/'                     # 只挑高风险行
cat /proc/$PID/maps | grep '(deleted)'                                  # 已删除仍被映射的文件
ls -l /proc/$PID/map_files/ 2>/dev/null | head                          # 需权限与内核支持
cat /proc/$PID/smaps_rollup 2>/dev/null | head -12                      # 总体内存占用概览
ss -tanp | grep "pid=$PID"                                              # 结合连接判断进程用途

输出逐列读法

列含义异常信号
地址范围该映射占用的虚拟地址区间孤立的超大匿名 rwx 段
权限rwxp 组合,p 为私有同一段同时可写可执行且无来源
偏移映射在文件中的起始偏移非 0 偏移的常见库文件
设备/inode所属文件系统标识设备号为 0 说明匿名映射
路径被映射文件的全名(deleted)、/tmp、/dev/shm 下的可执行文件
smaps 给出每段的 Size、Rss 与 Pss,判断一段匿名内存是否真为载荷,比只读 maps 的地址范围更可靠。
在业务主机上直接 dump 进程内存会影响业务与安全软件运行;优先只读查看并把范围、时刻、命令写入采集记录。
Java、Node 与浏览器等使用 JIT 的进程天然存在 rwx 段,判断时要结合进程来源、可执行文件哈希与网络行为,不能只看权限位。

易错点

  • 把 JIT 进程的可执行匿名段一律当恶意:Java、浏览器、编译型运行时都会产生 rwx 段,需按进程类型区分
  • 只看 maps 不看 smaps:无法判断映射是否真正驻留,容易把预留地址空间误报为载荷
  • 忽略 (deleted) 标记:删除后仍在运行的可执行文件是典型的自清理痕迹,漏掉会失去主线
  • 未记录 PID 与采集时刻:进程退出后 maps 无法恢复,证据链随即断裂

数据来源与参考

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