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 用于接收来自内核的事件的套接字类型。两个选项是 unicastmulticast

当 Auditbeat 是用于接收审计事件和管理规则的主要用户空间守护程序时,应使用 unicast。只有一个进程可以通过 “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 发送事件时发生错误、超出积压限制、内核内存耗尽或超出速率限制。选项为 silentlogpanicsilent 基本上使内核忽略错误,log 使内核使用 printk 写入审计消息,以便它们显示在系统的 syslog 中,而 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
一个字符串,其中包含应安装到内核的审计规则。每行应有一个规则。可以使用 # 作为前缀将注释嵌入到字符串中。规则的格式与 Linux auditctl 实用程序使用的格式相同。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 同时使用 kerneluserspace 策略。
  • 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 的不同集群的节点收集的信息。

审计规则

编辑

审计规则用于配置要审计的活动。这些规则配置为应监视的系统调用或文件。例如,您可以跟踪所有 connect 系统调用或对 /etc/passwd 的文件系统写入。

审计大量系统调用可能会给系统带来很大负担,因此请仔细考虑您定义的规则,并尝试在规则本身中应用过滤器,以尽可能具有选择性。

内核会按照规则定义的顺序评估规则,因此为了加快评估速度,请将最活跃的规则放在前面。

您可以为每个规则分配键,以便更好地识别触发事件的规则,并方便以后在 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