EPERM错误表示“Operation not permitted”,是权限受限类攻击的关键信号,常见于capset、setuid、prctl、mount等高风险系统调用失败时,需结合auditd规则聚焦监控并关联上下文分析。

直接用 -F exit=-EPERM 过滤系统调用退出时的 EPERM 错误码,是定位权限受限类攻击最准、开销最小的方式。-EPERM 表示“Operation not permitted”,常出现在提权尝试、能力篡改、特权操作绕过等攻击链中,比如 capset、setuid、prctl(PR_SET_SECUREBITS)、mount 等调用失败时。
聚焦高风险系统调用,避免日志泛滥
全量捕获 -S all 虽能覆盖所有失败,但生产环境噪声大、检索难。应优先监控已知易被滥用的调用:
-
capset:修改进程能力集,常见于 Dirty Pipe、CVE-2021-4034 等提权利用 -
setuid/setresuid/setfsuid:用户 ID 切换行为,非 root 进程调用失败往往暗示提权试探 -
prctl:尤其PR_SET_NO_NEW_PRIVS或PR_SET_SECUREBITS失败,可能反映沙箱逃逸尝试 -
mount/umount:非特权 mount 尝试失败,是容器逃逸或 unshare 攻击的典型信号 -
bpf:BPF 程序加载失败(如BPF_PROG_LOAD),可能因CAP_SYS_ADMIN不足或 LSM 拦截
推荐规则(写入 /etc/audit/rules.d/perm-fail.rules):
-a always,exit -F arch=b64 -S capset,setuid,setresuid,setfsuid,prctl,mount,umount,bpf -F exit=-EPERM -k perm_fail_attack -a always,exit -F arch=b32 -S capset,setuid,setresuid,setfsuid,prctl -F exit=-EPERM -k perm_fail_attack_32
确保规则永久生效且服务正常运行
规则文件必须以 .rules 结尾,并通过 augenrules --load 加载:
- 检查 auditd 是否运行:
systemctl status auditd(需为active (running)) - 确认内核审计已启用:
auditctl -s | grep enabled应输出enabled 1 - 加载后验证:
sudo auditctl -l | grep perm_fail_attack - 若使用 CentOS 7,不可用
systemctl restart auditd(会清空规则),只用augenrules --load
快速定位可疑攻击上下文EPERM 事件本身只是“失败信号”,需结合时间窗口和关联行为判断是否为攻击:
- 查最近 10 分钟所有
EPERM事件并解析路径与命令:ausearch -k perm_fail_attack -i | grep -E "comm=|exe=|name=|auid=" - 关联同一时间点的
EXECVE和CAPSET行为(提权链特征):ausearch -m EXECVE,CAPSET -ts recent -k perm_fail_attack | aureport -i -f - 排除已知白名单:普通用户执行
ping(需CAP_NET_RAW)失败属正常;但capset失败且auid!=uid或来自/tmp/下可执行文件,则高度可疑
配合日志轮转与降噪策略
- 在
/etc/audit/auditd.conf中设置:max_log_file = 50(单位 MB)max_log_file_action = rotatenum_logs = 10 - 避免监控
/proc、/sys等虚拟路径(auditd 不支持,规则无效) - 若发现某路径高频触发(如某恶意脚本反复调用
prctl),可用-F path=单独标记,便于后续隔离分析
不复杂但容易忽略


















