auditd不能直接监控共享内存读写,但可通过审计shmget、shmat、shmctl、mmap等系统调用及/dev/shm文件变更,结合uid、权限、参数等上下文识别非法shm行为,并需配合chmod /dev/shm、limits.conf限制等主动防护措施。

auditd 本身不直接监控共享内存(SHM)的读写操作,因为 SHM 的数据访问发生在进程地址空间内,不触发传统文件 I/O 或系统调用审计点(如 read/write)。但可通过监控关键系统调用和内存管理行为,间接捕获 SHM 的创建、附加、分离及潜在滥用痕迹。核心思路是:聚焦 SHM 生命周期控制行为 + 关联可疑上下文(如非授权进程、敏感路径、异常参数),而非试图“监听内存内容”。
监控 SHM 创建与映射的关键系统调用
共享内存段的建立依赖 shmget、shmat、mmap(含 MAP_SHARED)等系统调用。auditd 可对其精准捕获:
- 添加规则记录所有 SHM 相关系统调用(x86_64 系统):
sudo auditctl -a always,exit -F arch=b64 -S shmget,shmat,shmdt,shmctl -k shm_lifecycle
sudo auditctl -a always,exit -F arch=b64 -S mmap,mmap2 -F perm=x -k shm_mmap
(-F perm=x捕获可执行映射,常用于恶意载荷注入) - 持久化到规则文件(如
/etc/audit/rules.d/shm.rules),再执行augenrules --load生效 - 重点字段说明:
✓shmget记录 key、size、flags(含IPC_CREAT、0600权限位)
✓shmat记录 shmid、addr、shmflg(是否SHM_RDONLY)
✓mmap记录 addr、len、prot(PROT_READ|PROT_WRITE)、flags(MAP_SHARED)
识别非法使用的上下文特征
单条系统调用日志不足以判定“非法”,需结合 UID、命令路径、参数和时间模式综合判断:
- 过滤非特权用户创建高权限 SHM:
ausearch -m shmget -ui 1000..60000 --start today | aureport -f -i | grep "0666\|0644"
(排除 root 和系统账户 UID,关注宽松权限如 0666) - 定位可疑进程映射行为:
ausearch -m mmap -F a1=0x1000000 -F a2=0x7 -F a3=0x1001 -i
(a1=len,a2=prot,a3=flags;0x1001=MAP_SHARED|MAP_ANONYMOUS,常用于隐蔽通信) - 关联 execve 行为:若某进程在
shmat后立即执行execve,且目标路径在/dev/shm或含 base64 参数,高度可疑
加固 SHM 使用环境并限制滥用面
审计只是事后追溯,必须配合主动防护降低风险:
- 禁用全局可写的 SHM 目录:
chmod 0755 /dev/shm && chown root:root /dev/shm
避免普通用户在/dev/shm下随意创建文件型 SHM - 限制 IPC 资源上限(防 DoS):
在/etc/security/limits.conf添加:
* soft memlock 65536
* hard memlock 65536
(限制每个用户可锁定的内存页数,抑制大块 SHM 分配) - 监控
/dev/shm文件系统变更:
-w /dev/shm -p wa -k shm_fs
捕获新建、删除或重命名 SHM 文件的行为(如touch /dev/shm/.malware)
快速排查与日志分析技巧
原始审计日志字段密集,用工具链高效提取关键信息:
- 查某用户今日所有 SHM 操作:
ausearch -u username -m shmget,shmat,shmdt --start today | aureport -f -i - 找所有带
MAP_SHARED的 mmap 调用(含进程名):
ausearch -m mmap -F a3=0x1001 --raw | aureport -f -i | awk '{print $5,$13}'
($5=comm 进程名,$13=exe 执行路径) - 生成 SHM 使用基线:
aureport -m --start this-week | grep -E "(shm|map)" | awk '{print $5}' | sort | uniq -c | sort -nr
对比日常进程列表,突增陌生进程即需核查











