auditd通过监控execve系统调用捕获非法进程拉起行为,需结合uid≠euid、可疑路径(如/tmp/*)、高危命令非root调用等规则精准判定,并通过audispd/filebeat转发至告警系统实现闭环。

Auditd 本身不拉起进程,也不直接触发告警,但它能精准捕获“非法进程拉起”行为的内核级痕迹——关键在于监控 execve 系统调用 并结合用户权限、路径特征、执行上下文做高置信度判定,再将日志事件实时转发给监控系统(如 Prometheus + Alertmanager、ELK、或自建脚本)完成告警闭环。
聚焦三类典型非法进程拉起场景
不是所有 execve 都要告警,需区分风险等级:
-
非 root 用户执行特权路径程序:如普通用户运行
/usr/bin/sudo、/bin/mount或自定义 SUID 二进制,应捕获uid != euid的调用; -
可疑路径下的可执行文件被拉起:如
/tmp/.backdoor、/dev/shm/ld.so、/var/run/.x等临时目录中的 ELF 文件,这类几乎全是后门; -
已知高危工具被异常提权调用:如
find、python3、bash被非 root 用户以euid=0执行,尤其参数含-c、system(、exec(等 shell 注入痕迹。
写准 auditd 规则,避免噪音和漏报
规则需写入 /etc/audit/rules.d/10-process-exec.rules,再执行 sudo augenrules --load 加载:
- 捕获所有可疑 execve(带权限升降):
-a always,exit -F arch=b64 -S execve -F uid!=euid -k illegal_exec_priv - 单独盯住高危路径(支持通配但慎用):
-a always,exit -F arch=b64 -S execve -F path=/tmp/* -F perm=x -k tmp_exec-a always,exit -F arch=b64 -S execve -F path=/dev/shm/* -F perm=x -k shm_exec - 监控特定高危命令的非 root 调用:
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/python3 -F uid!=0 -k py3_unpriv_root
注意:不要用 -w 监控目录,它不适用于 exec;必须用 -a ... -S execve;auid 比 uid 更可靠,可加 -F auid!=0 过滤真实登录者。
让监控系统真正“看到”并响应
auditd 日志默认写入 /var/log/audit/audit.log,需打通到告警链路:
-
轻量级方案:用
audispd插件将匹配illegal_exec_priv的事件转发至 rsyslog,再由 rsyslog 写入指定文件或发 UDP 到日志平台; -
标准运维方案:用 Filebeat 或 Fluentd 采集
audit.log,按key字段(如illegal_exec_priv)打标、过滤,并对接 Prometheus Pushgateway 或直接推送到 Alertmanager; -
快速验证方式:写个每 10 秒轮询的脚本:
ausearch -k illegal_exec_priv --start recent --raw | aureport -f -i,若有输出就触发echo "ALERT: illegal exec" | mail -s "SEC" admin@example.com。
查日志时重点看哪些字段
一条典型告警日志中,真正决定是否非法的是这组组合:
-
auid=1001:谁登录进来(不可伪造,哪怕 su 切换也保留); -
uid=1001 euid=0:实际用户 vs 有效用户,不等即提权; -
exe="/tmp/.shell":真实执行路径,不是comm="bash"这种易伪装的进程名; -
a0="bash" a1="-c" a2="rm -rf /":前三个参数,可识别恶意命令链; -
cwd="/tmp":工作目录在临时区,高度可疑。











