通过 sudo 与 auditd 相关联来检测特权提升sudo 日志显示了命令被调用的事实,但没有显示之后发生了什么。 auditd 在内核级别看到所有内容,两者结合可以提供完整的视图。
⏺️
目标: 检测用户是否通过 sudo 获得了特权 shell,或者执行了超出预期行为的操作。 单一日志源无法显示所有情况,需要进行关联。
⏺️
配置 auditd 以跟踪通过 sudo 启动的进程 - 关键点是 PPID(父进程 ID):
# 监控具有 euid=0 的进程的 fork/exec
auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k priv_exec
# 专门监控以 root 身份启动的解释器
auditctl -a always,exit -F arch=b64 -S execve
-F path=/bin/bash -F euid=0 -k shell_as_root
auditctl -a always,exit -F arch=b64 -S execve
-F path=/usr/bin/python3 -F euid=0 -k python_as_root
⏺️
将 sudo 事件与后续操作通过 session ID 相关联。 每次 sudo 调用都会创建一个新的 audit 会话 - 所有子进程都会继承该会话:
# 查找特定 sudo 调用的 session ID
ausearch -k sudo_exec -i --start today | grep "ses="
# 该会话中的所有事件
ausearch --session 42 -i | grep -E "execve|open|connect"
一个 ses 包含了从 sudo 调用开始到会话结束的所有进程图。
⏺️
通过 aureport 进行自动关联。 构建可疑会话的摘要:
# 所有启动了 bash 解释器的会话
aureport --executable --start today | grep bash
# 来自 root 进程的网络活动会话
ausearch -k priv_exec -i | grep "syscall=connect"
# 特定会话的完整时间线
ausearch --session 42 -i --format text |
awk '/execve|openat|connect/{print $1,$2,$3,$NF}'
⏺️通过 auditd 中的模式检测经典特权提升技术:
# 在特权会话中启动的 SUID 二进制文件
ausearch -k priv_exec -i | grep "SUID"
# sudo 之后写入 /etc/passwd 或 /etc/sudoers
auditctl -w /etc/passwd -p wa -k passwd_write
auditctl -w /etc/sudoers -p wa -k sudoers_write
ausearch -k passwd_write -i --start today |
grep -B5 "ses=" | grep "auid=" | sort -u
auid 是原始用户 ID,即使在 sudo 之后也不会改变,可以根据它来确定实际执行操作的用户。
⏺️收集最终警报: sudo 调用加上同一会话中后续启动的 shell,这已经是一个需要调查的理由:
# /bin/bash
# 查找在 sudo 之后启动了解释器的会话
ausearch -k sudo_exec --start today -i | grep "ses=" |
grep -oP 'ses=\K\d+' | sort -u | while read ses; do
if ausearch --session $ses -i 2>/dev/null |
grep -q "priv_exec\|shell_as_root"; then
echo "ALERT: Suspicious session $ses"
ausearch --session $ses -i | grep "execve" | tail -5
fi
承接数据提取 网站APP渗透 后台提权等
黑客技术支持联系:@Penetration_AA