跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何利用Auditd规则实时捕获并阻止对系统影子文件的非法读取

auditd仅审计不阻止,需联动外部工具实现阻断;一、用-w规则监控/etc/shadow读取并按auid过滤非root行为;二、通过ausearch验证日志与来源;三、借脚本或audispd告警并触发pkill/IP封禁等响应。 Auditd 本身不提供“阻止”行为的能力,它是一个 审计与记录工具 ,不是访问控制或入侵防御系统(如 SELinux、AppArmor 或 fail2ban)。它的核心作用是 精准捕获 非法读取等敏感操作,并留下不可抵赖的内核级日志,为溯源、告警和后续响应提供依据。所谓“实时捕获并阻止”,准确理解应为: 通过 auditd 实时捕获非法读取行为 → 触发告警或联动外部工具 → 由其他机制(如脚本拦截、服务重启、IP封禁)实现阻止效果 。 下面分三步说明如何落地: 一、用 -w 规则捕获 /etc/shadow 的所有读取行为 `/etc/shadow` 是只允许 root 读写的敏感文件,任何非 root 用户或进程的读取都属异常。auditd 支持监控“读”(r)权限,但需注意: - 单纯 `-p r` 可能产生大量噪音(如 root 自身的合法读取); - 更实用的是结合 `auid`(原始登录用户ID)过滤,区分“谁真正发起请求”。 推荐规则(写入
/etc/audit/rules.d/10-shadow.rules
): -w /etc/shadow -p r -k shadow_read_attempt -a always,exit -F path=/etc/shadow -F perm=r -F auid!=0 -k unauthorized_shadow_read 说明: 第一条捕获所有读取,便于基线分析; 第二条聚焦 非 root 用户(auid!=0)发起的读取 ,这才是高价值告警信号;
-k
关键字便于后续用
ausearch -k unauthorized_shadow_read
快速筛选。 二、验证规则是否生效并识别真实读取来源 规则加载后,务必手动测试并确认日志可查: sudo augenrules --load sudo auditctl -l | grep shadow # 模拟非法读取(普通用户下执行): su -l testuser -c "cat /etc/shadow" 2>/dev/null || true # 查看捕获结果: sudo ausearch -k unauthorized_shadow_read -i | tail -5 输出中重点关注字段:
auid=
:原始登录用户(如 1001),确认是否非 root;
uid=
和
euid=
:实际执行用户,判断是否提权后读取;
comm=
和
exe=
:调用命令(如
cat
、
vim
、
python3
),识别攻击工具;
tty=
和
addr=
:登录终端与源 IP,定位攻击入口。 三、从“捕获”走向“响应”:告警与轻量级阻止联动 auditd 日志写入 `/var/log/audit/audit.log`,可通过以下方式实现闭环: - 配置 audispd 插件,将匹配 `unauthorized_shadow_read` 的事件转发至 syslog 或 Kafka; - 编写简易监控脚本(每30秒轮询): `sudo ausearch -k unauthorized_shadow_read -m SYSCALL --start recent | grep -q "auid!=" && echo "$(date) 非法读shadow!" | mail -s "ALERT" admin@example.com` - 更进一步:脚本中加入临时阻断逻辑,例如: `pkill -u $(ausearch -k unauthorized_shadow_read --start recent -i | awk '/auid=/ {print $NF}' | head -1)` 或调用 `iptables -I INPUT -s [源IP] -j DROP`(需提前提取 addr 字段) 不复杂但容易忽略

相关文章