Auditd 模块
编辑Auditd 模块编辑
auditd
模块接收来自 Linux 审计框架的审计事件,该框架是 Linux 内核的一部分。
此模块仅适用于 Linux。
工作原理编辑
此模块建立对内核的订阅,以在事件发生时接收它们。因此,与大多数其他模块不同,period
配置选项未使用,因为它不是使用轮询实现的。
Linux 审计框架可以为单个可审计事件发送多条消息。例如,rename
系统调用会导致内核发送八条独立的消息。每条消息都描述了正在发生的活动的不同方面(系统调用本身、文件路径、当前工作目录、进程标题)。此模块会将每条消息中的所有数据组合到单个事件中。
一个事件的消息可以与另一个事件的消息交错。此模块将缓冲消息,以便将相关消息组合到单个事件中,即使它们以交错或无序的方式到达。
常用命令编辑
在启用 auditd
模块的情况下运行 Auditbeat 时,您可能会发现其他监控工具会干扰 Auditbeat。
例如,如果另一个进程(例如 auditd
)已注册接收来自 Linux 审计框架的数据,则可能会遇到错误。您可以使用以下命令查看 auditd
服务是否正在运行并将其停止
-
查看
auditd
是否正在运行service auditd status
-
停止
auditd
服务service auditd stop
-
禁用
auditd
在启动时启动chkconfig auditd off
要节省 CPU 使用率和磁盘空间,您可以使用此命令阻止 journald
监听审计消息
systemctl mask systemd-journald-audit.socket
检查内核审计系统状态编辑
Auditbeat 提供了用于查询 Linux 内核中审计系统状态的有用命令。
-
查看已安装审计规则的列表
auditbeat show auditd-rules
打印已加载规则的列表,类似于
auditctl -l
-a never,exit -S all -F pid=26253 -a always,exit -F arch=b32 -S all -F key=32bit-abi -a always,exit -F arch=b64 -S execve,execveat -F key=exec -a always,exit -F arch=b64 -S connect,accept,bind -F key=external-access -w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity -a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EACCES -F key=access -a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EPERM -F key=access
-
查看审计系统的状态
auditbeat show auditd-status
打印内核审计系统的状态,类似于
auditctl -s
enabled 1 failure 0 pid 0 rate_limit 0 backlog_limit 8192 lost 14407 backlog 0 backlog_wait_time 0 features 0xf
配置选项编辑
此模块具有一些用于调整其行为的配置选项。以下示例显示了所有配置选项及其默认值。
- module: auditd resolve_ids: true failure_mode: silent backlog_limit: 8192 rate_limit: 0 include_raw_message: false include_warnings: false backpressure_strategy: auto immutable: false
此模块还支持稍后描述的标准配置选项。
-
socket_type
-
此可选设置控制 Auditbeat 用于从内核接收事件的套接字类型。这两个选项是
unicast
和multicast
。当 Auditbeat 是用于接收审计事件和管理规则的主要用户空间守护程序时,应使用
unicast
。只有一个进程可以通过“单播”连接接收审计事件,因此应停止任何其他守护程序(例如停止auditd
)。在 3.16 及更高版本的内核中可以使用
multicast
。通过使用multicast
,Auditbeat 将接收不限于单个进程的审计事件广播。这非常适合auditd
正在运行并管理规则的情况。默认情况下,如果内核版本为 3.16 或更高版本并且未定义任何规则,则 Auditbeat 将使用
multicast
。否则将使用unicast
。 -
immutable
-
此布尔设置将审计配置设置为不可变(
-e 2
)。此选项只能与socket_type: unicast
一起使用,因为 Auditbeat 需要管理规则才能设置它。请务必注意,启用此设置后,如果 Auditbeat 停止并恢复,则事件将继续处理,但配置要等到系统完全重启后才会更新。
-
resolve_ids
- 此布尔设置启用将 UID 和 GID 解析为其关联名称。默认值为 true。
-
failure_mode
- 这决定了内核在严重故障(例如向 Auditbeat 发送事件时出错、超过积压限制、内核内存不足或超过速率限制)时的行为。选项包括
silent
、log
或panic
。silent
基本上使内核忽略错误,log
使内核使用printk
写入审计消息,以便它们显示在系统的系统日志中,而panic
导致内核恐慌以防止使用机器。 Auditbeat 的默认值为silent
。 -
backlog_limit
- 这控制内核将缓冲的最大审计消息数。
-
rate_limit
- 这设置了内核传递的消息/秒数的速率限制。默认值为 0,表示禁用速率限制。将此值更改为零以外的任何值都可能导致消息丢失。降低消息速率的首选方法是在审计规则集中更具选择性。
-
include_raw_message
- 此布尔设置导致 Auditbeat 将构成事件的每条原始消息都包含在文档中,作为名为
event.original
的字段。默认值为 false。此设置主要用于开发和调试目的。 -
include_warnings
- 此布尔设置会导致 Auditbeat 将解析原始消息时遇到的任何问题都包含为警告。消息被写入
error.message
字段。默认值为 false。启用此设置后,无论include_raw_message
配置设置如何,原始消息都将包含在事件中。此设置主要用于开发和调试目的。 -
audit_rules
- 包含应安装到内核的审计规则的字符串。每行应该有一条规则。可以使用
#
作为前缀将注释嵌入到字符串中。规则的格式与 Linuxauditctl
实用程序使用的格式相同。 Auditbeat 支持添加文件监视(-w
)和系统调用规则(-a
或-A
)。有关更多信息,请参阅审计规则。 -
audit_rule_files
- 要从中加载审计规则的文件列表。这些文件在加载
audit_rules
中声明的规则后加载。支持通配符,并将按字典顺序扩展。格式与audit_rules
字段的格式相同。 -
ignore_errors
- 此设置允许忽略规则加载和解析期间的错误,但将它们记录为警告。
-
backpressure_strategy
-
指定 Auditbeat 用于防止背压传播到内核并影响已审计进程的策略。
可能的值为
-
auto
(默认):Auditbeat 使用kernel
策略(如果支持),或者回退到userspace
策略。 -
kernel
:Auditbeat 将内核审计框架中的backlog_wait_time
设置为 0。如果审计积压队列已满,这会导致事件在内核中被丢弃。需要 3.14 或更新的内核。 -
userspace
:当发布管道出现背压时,Auditbeat 会丢弃事件。如果未设置rate_limit
,则 Auditbeat 会将速率限制设置为 5000。用户应测试其设置并相应地调整rate_limit
选项。 -
both
:Auditbeat 同时使用kernel
和userspace
策略。 -
none
:未启用任何背压缓解措施。
-
标准配置选项编辑
您可以为任何 Auditbeat 模块指定以下选项。
-
module
- 要运行的模块的名称。
-
enabled
- 一个布尔值,指定模块是否已启用。
-
fields
- 将与数据集事件一起发送的字段字典。此设置是可选的。
-
tags
- 将与数据集事件一起发送的标记列表。此设置是可选的。
-
processors
-
要应用于数据集生成的数据的处理器列表。
有关在配置中指定处理器的信息,请参阅处理器。
-
index
-
如果存在,此格式化字符串将覆盖此模块事件的索引(对于 Elasticsearch 输出),或设置事件元数据的
raw_index
字段(对于其他输出)。此字符串只能引用代理名称和版本以及事件时间戳;要访问动态字段,请使用output.elasticsearch.index
或处理器。示例值:
"%{[agent.name]}-myindex-%{+yyyy.MM.dd}"
可能会扩展为"auditbeat-myindex-2019.12.13"
。 -
keep_null
- 如果此选项设置为 true,则值为
null
的字段将在输出文档中发布。默认情况下,keep_null
设置为false
。 -
service.name
- 用户为从中收集数据的服务指定的名称。例如,它可用于识别从具有相同
service.type
的不同集群的节点收集的信息。
审计规则编辑
审计规则是您配置要审计的活动的地方。这些规则配置为应监控的系统调用或文件。例如,您可以跟踪 /etc/passwd
的所有 connect
系统调用或文件系统写入。
审核大量系统调用会给系统带来沉重负担,因此请仔细考虑您定义的规则,并尝试在规则本身中应用过滤器,使其尽可能具有选择性。
内核会按照定义规则的顺序对其进行评估,因此请将最活跃的规则放在首位,以加快评估速度。
您可以为每个规则分配键,以便更好地识别触发事件的规则,并在以后的 Elasticsearch 中更轻松地进行过滤。
在配置中定义任何审计规则都会导致 Auditbeat 在添加配置中指定的规则之前清除所有现有审计规则。因此,包含 -D
(删除所有)规则是不必要的,也不受支持。
auditbeat.modules: - module: auditd audit_rules: | # Things that affect identity. -w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity -w /etc/shadow -p wa -k identity # Unauthorized access attempts to files (unsuccessful). -a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -F key=access -a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -F key=access -a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -F key=access -a always,exit -F arch=b64 -S open,truncate,ftruncate,creat,openat,open_by_handle_at -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -F key=access
示例配置编辑
Auditd 模块支持在配置 Auditbeat 下描述的常见配置选项。以下是一个配置示例
auditbeat.modules: - module: auditd # Load audit rules from separate files. Same format as audit.rules(7). audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ] audit_rules: | ## Define audit rules here. ## Create file watches (-w) or syscall audits (-a or -A). Uncomment these ## examples or add your own rules. ## If you are on a 64 bit platform, everything should be running ## in 64 bit mode. This rule will detect any use of the 32 bit syscalls ## because this might be a sign of someone exploiting a hole in the 32 ## bit API. #-a always,exit -F arch=b32 -S all -F key=32bit-abi ## Executions. #-a always,exit -F arch=b64 -S execve,execveat -k exec ## External access (warning: these can be expensive to audit). #-a always,exit -F arch=b64 -S accept,bind,connect -F key=external-access ## Identity changes. #-w /etc/group -p wa -k identity #-w /etc/passwd -p wa -k identity #-w /etc/gshadow -p wa -k identity ## Unauthorized access attempts. #-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -k access #-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -k access