限制/dev/shm是缓解LPE攻击的有效手段,需通过fstab设置size=64M、noexec、nosuid等选项限制容量与执行权限,必要时禁用普通用户访问,并结合SELinux/AppArmor策略与运行时监控强化防护。

限制共享内存段(如 /dev/shm)是缓解本地提权(LPE)攻击的有效手段之一,尤其针对利用 tmpfs 共享内存进行恶意 payload 注入、符号链接竞争或 IPC 滥用的漏洞(例如某些 CVE 中的 shm-based exploit)。关键在于缩小攻击面,而非完全禁用功能。
理解共享内存的风险载体
Linux 中的 /dev/shm 是基于 tmpfs 的内存文件系统,默认挂载且可读写。攻击者常利用它:
- 存放恶意 ELF 或动态库(如通过
LD_PRELOAD注入) - 创建符号链接指向敏感路径(配合 race 条件劫持文件操作)
- 绕过传统磁盘临时目录(
/tmp)的挂载限制(如noexec、nosuid)
永久限制 /dev/shm 的容量与权限
在 /etc/fstab 中修改挂载选项,限制大小并移除执行权限:
- 编辑
/etc/fstab,将原行(如none /dev/shm tmpfs defaults 0 0)替换为:none /dev/shm tmpfs defaults,size=64M,mode=1777,noexec,nosuid,nodev 0 0 - 执行
sudo mount -o remount /dev/shm生效 -
size=64M防止内存耗尽或大体积 payload 存储;noexec和nosuid是核心防护项
对无特权用户禁用 /dev/shm 访问(高安全场景)
若应用不依赖 POSIX 共享内存(如不使用 shm_open()),可进一步收紧:
- 卸载并禁止普通用户挂载:
sudo umount /dev/shm && sudo chmod 000 /dev/shm - 或在 systemd 系统中屏蔽默认挂载:
sudo systemctl mask dev-shm.mount - 注意:部分服务(如 Chrome、某些数据库、glibc 多线程程序)可能依赖该路径,需测试兼容性
补充防御:监控异常使用行为
仅靠限制不够,建议结合运行时检测:
- 使用
inotifywait -m /dev/shm监控新建/写入事件(适合调试阶段) - 在 SELinux/AppArmor 策略中明确约束进程对
/dev/shm的访问类型(如禁止mmap(PROT_EXEC)) - 定期检查:
find /dev/shm -type f -perm /111(查找可执行文件)或ls -la /dev/shm查看可疑符号链接

















