应监控setuid、setgid、capset、execve、prctl等权限相关系统调用,通过auditd添加规则-a always,exit -f arch=b64 -s setuid,setgid,capset,execve,prctl -f key=perm_syscall实现持久化审计,并结合ausearch和/proc/pid/status分析调用上下文与能力状态变化。

监控服务器权限相关系统调用,核心是捕获那些直接影响用户权限、能力集(Capability)、凭证(credentials)或特权操作的内核行为。这类调用一旦被异常触发,往往意味着提权尝试、权限滥用或恶意进程驻留。
重点关注的权限类系统调用
以下系统调用直接关联权限变更或高危能力启用,应列为监控优先项:
- setuid、setgid、setreuid、setregid:修改进程有效/保存UID/GID,常见于提权或伪装身份
- capset:动态调整线程的能力位图(Permitted/Effective/Inheritable),是Capability机制的核心控制点
-
execve:程序加载入口,配合文件能力(file capabilities)决定子进程初始权限;若执行带
+ep能力的二进制,会立即激活对应Effective能力 -
prctl(特别是
PR_SET_KEEPCAPS、PR_CAPBSET_DROP等选项):用于精细控制能力继承与丢弃,常被隐蔽提权工具使用 -
chown、fchownat(配合
AT_SYMLINK_NOFOLLOW):非root用户若能成功调用,说明已获得CAP_CHOWN能力,需确认是否合理授权
用auditd持久化审计权限调用
auditd是内核级审计框架,适合长期、可靠地记录权限敏感操作,日志写入/var/log/audit/audit.log,不易被普通用户清除。
添加规则示例:
sudo auditctl -a always,exit -F arch=b64 -S setuid,setgid,capset,execve,prctl -F key=perm_syscall
说明:
-
-F arch=b64限定64位系统调用(x86_64环境) -
-S后列出目标系统调用名,支持逗号分隔 -
-F key=perm_syscall打标签,便于后续检索 - 规则默认监控所有UID,如需聚焦特定用户,可加
-F uid!=0(排除root自身常规操作)或-F auid>=1000(仅审计登录用户)
查日志命令:ausearch -k perm_syscall | aureport -f -i
用strace临时抓取可疑进程行为
对正在运行的可疑进程(如异常父进程、高CPU但无业务逻辑的守护进程),可用strace快速观察其权限动作:
-
strace -p PID -e trace=setuid,setgid,capset,prctl -s 256:只跟踪指定调用,截断长参数便于阅读 -
strace -f -e trace=execve -o exec.log --daemonize /path/to/app:记录完整exec链,检查是否加载了带能力的二进制 - 注意:strace本身需要
CAP_SYS_PTRACE,普通用户无法附加到其他用户进程,需root或对应capability权限
结合Capability状态做上下文判断
单看系统调用不足以定性风险,需同步检查调用前后的Capability状态:
- 用
cat /proc/PID/status | grep Cap查看进程当前三组能力位图(CapEff、CapPrm、CapInh) - 对比
getcap /proc/PID/exe:若可执行文件无能力,但进程Effective里有CAP_NET_ADMIN,则大概率是运行时通过capset()非法提升 - 发现
capset()调用返回0(成功),但调用前CAP_SETPCAPS不在Permitted中?这违反Capability设计原则——说明内核可能被篡改或存在0day利用
不复杂但容易忽略:权限调用本身合法,关键在“谁在什么上下文中调用、调用前后能力如何变化”。把auditd规则、proc状态和进程血缘(ppid、execve路径)串起来,才能真正识别恶意提权链。











