核心是捕获euid≠uid的execve调用,监控特权命令执行及关键配置文件写入与属性变更,并通过auid关联登录会话实现提权链路溯源。

追踪用户权限提升过程中的异常记录,核心是抓住“谁在什么时间、以什么方式、做了什么提权动作”这三点。不能只看最终是否拿到 root,而要盯住整个提权链路——从第一次 sudo 输入,到 execve 系统调用触发,再到 /etc/sudoers 被改写或新用户被添加。
捕获真实提权动作:euid ≠ uid 是黄金指标
普通用户执行 sudo ls 或 su - 时,内核会把有效 UID(euid)设为 root,但实际 UID(uid)仍是原用户。auditd 能精准捕获这种差异,比查进程名或日志关键词可靠得多。
- 添加永久规则:echo '-a always,exit -F arch=b64 -S execve -F euid!=uid -k priv_escalation' | sudo tee /etc/audit/rules.d/10-privilege.rules
- 若系统跑 32 位程序,补一条:-a always,exit -F arch=b32 -S execve -F euid!=uid -k priv_escalation
- 加载规则:sudo augenrules --load,再用 sudo auditctl -l | grep priv_escalation 确认生效
关联上下文:把命令、用户、终端和源 IP 串起来
单条 execve 记录只告诉你“某人执行了某命令”,但无法判断是否异常。必须结合 ausearch 的时间窗口与字段过滤,还原完整操作链。
- 查某用户最近一次提权:ausearch -m EXECVE -ui $(id -u username) --start 10 minutes ago -i
- 查所有失败后成功的 sudo 行为:ausearch -m EXECVE -c sudo --start today | aureport -f -i | grep -E "(failed|success)"
- 把终端(tty)、源 IP(auid 对应登录会话)、命令行参数一起输出,避免误判脚本自动调用
识别伪装行为:进程名可信,路径和环境不可信
攻击者常把恶意二进制起名为 nginx 或 sshd,混进正常进程树里。光看 ps 输出会漏掉,得深入 /proc 查证。
- 找可疑子进程:pstree -p | grep -A2 -B2 "sshd\|nginx",观察是否有无名子进程挂在服务下
- 验证真实路径:ls -la /proc/[PID]/exe,软链接指向 /tmp 或 /dev/shm 就高度可疑
- 检查环境变量:cat /proc/[PID]/environ | tr '\0' '\n' | grep -E "(LD_PRELOAD|PATH=)",异常 PATH 或预加载库基本可定性劫持
锁定高危变更:不只是命令执行,更是权限结构被改写
提权不一定要靠运行 sudo,也可以通过悄悄修改配置文件或新增账户实现。这些动作必须被审计规则覆盖,且要区分“写入”和“属性变更”。
- 监控 sudoers 修改:-w /etc/sudoers -p wa -k sudoers_change
- 盯住账号创建:-a always,exit -F arch=b64 -S useradd,groupadd -k account_mgmt
- 捕获 shadow 文件变动:-w /etc/shadow -p wa -k shadow_modification,包括 chmod/chown/cp 覆盖等全部手法











