如何通过Auditd规则实时监控并有效拦截对系统影子文件的非法读写操作?

2026-04-27 22:131阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计837个文字,预计阅读时间需要4分钟。

如何通过Auditd规则实时监控并有效拦截对系统影子文件的非法读写操作?

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=:调用命令(如 catvimpython3),识别攻击工具;
  • 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 字段)

不复杂但容易忽略

本文共计837个文字,预计阅读时间需要4分钟。

如何通过Auditd规则实时监控并有效拦截对系统影子文件的非法读写操作?

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=:调用命令(如 catvimpython3),识别攻击工具;
  • 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 字段)

不复杂但容易忽略