auditd无法直接审计内核内存分配,但可通过监控mmap、memfd_create、shmat等系统调用及异常上下文(如root权限、非标路径、高频调用)间接识别内存相关风险行为,并需结合eBPF与资源监控实现闭环响应。

auditd 本身不直接记录“内存分配请求”这类内核级内存管理行为(如 kmalloc、vm_area_struct 分配),它监听的是系统调用和安全相关事件。要审计与内存分配异常相关的可疑行为,需聚焦触发内存分配的用户态动作——比如进程启动、共享库加载、大页映射、mmap/munmap 调用,以及伴随这些动作的异常上下文(如特权提升、非预期路径、高频调用)。真正的内存分配细节由内核内存子系统(slab、page allocator)管理,auditd 只能通过其外围行为间接捕获风险信号。
明确可审计的关键内存相关系统调用
以下系统调用是内存资源被申请或释放的典型入口,auditd 可精准捕获:
- mmap / mmap2 / munmap:最常用于堆外内存申请(如 JVM DirectByteBuffer、Python mmap)、大内存映射或恶意代码注入;
- brk / sbrk:传统堆扩展操作,异常增长可能预示内存泄漏或攻击载荷驻留;
- shmat / shmget / shmctl:System V 共享内存操作,常被用于进程间隐蔽通信或逃逸;
- memfd_create:创建匿名内存文件,近年被广泛用于无文件恶意载荷(fileless malware);
- userfaultfd:高级内存管理接口,已被用于多种提权/绕过利用链,属高危监控目标。
配置高价值审计规则(含上下文过滤)
避免全量记录导致性能崩溃,应结合参数、权限、路径做精细化过滤:
- 监控所有
memfd_create调用,并标记为高危:auditctl -a always,exit -S memfd_create -F success=1 -k memfd_activity - 捕获 root 或 sudo 进程执行的异常 mmap(如 MAP_ANONYMOUS + MAP_HUGETLB):
auditctl -a always,exit -S mmap,mmap2 -F uid=0 -F a0&0x22=0x22 -F key=mmap_root_anon_huge
(a0是第一个参数,&0x22=0x22表示同时含 MAP_ANONYMOUS 和 MAP_HUGETLB 标志) - 记录任意用户对
/proc/[0-9]*/maps或/proc/[0-9]*/smaps的读取(常用于侦察内存布局):auditctl -w /proc -p r -F perm=04 -F key=proc_mem_read - 拦截非标准路径下的
ld.so或libdl.so加载(常见于 LD_PRELOAD 注入):auditctl -a always,exit -S openat,open -F path=/lib64/ld-linux-x86-64.so.2 -F key=ld_so_load
关联内存异常指标实现闭环响应
单靠 auditd 日志无法判断“内存分配是否异常”,必须与资源监控数据联动:
- 在 Prometheus 中采集
process_resident_memory_bytes{process="auditd"}和node_memory_Slab_bytes,当 Slab 持续增长 + auditd 内存同步上升时,触发auditctl -s | grep backlog检查队列积压; - 用 eBPF 工具(如 BCC 的
slabratios或memleak)实时检测 slab 分配热点,若发现kmalloc-8192或kmalloc-rcl异常激增,立即查询对应时间窗口的 auditd 日志:ausearch -ts recent --input-logs -m SYSCALL -i | grep -E "(mmap|memfd_create)"; - 设置告警规则:当某进程在 5 分钟内触发
mmap超过 1000 次,且comm不在白名单(如 java、postgres、nginx)中,自动执行systemctl kill --signal=SIGUSR2 auditd触发日志 dump 并冻结规则加载。
麒麟等国产系统特别注意事项
银河麒麟 V10 SP2+ 默认启用更细粒度审计,但存在已知版本缺陷(audit-3.0-5.se.06)会导致 memfd_create 规则引发 auditd 内存泄漏。建议:
- 升级至 audit-3.0-7.se.02 或更高版本;
- 若暂无法升级,禁用
memfd_create规则,改用ausearch -sc memfd_create每小时离线扫描替代; - 在
/etc/audit/rules.d/99-memory.rules中添加-b 8192(增大 backlog 队列),防止丢事件; - 禁止使用
-w /proc全目录监控,改用精确路径白名单,否则会因频繁 procfs 访问拖垮 auditd。

















