文件完整性模块

编辑

file_integrity 模块在磁盘上的文件发生更改(创建、更新或删除)时发送事件。这些事件包含文件元数据和哈希值。

该模块为 Linux、macOS (Darwin) 和 Windows 实现。

工作原理

编辑

此模块使用操作系统的功能来实时监控文件更改。当模块启动时,它会向操作系统创建一个订阅,以接收指定文件或目录更改的通知。收到更改通知后,模块将读取文件的元数据并计算文件内容的哈希值。

启动时,此模块将对配置的文件和目录执行初始扫描,以生成受监控路径的基线数据,并检测自上次运行以来的更改。它使用本地持久化数据,以便仅发送新文件或修改文件的事件。

为该功能提供支持的操作系统功能如下。

  • Linux - 支持多种后端:autofsnotifykprobesebpf。默认情况下,使用 fsnotify,因此内核必须具有 inotify 支持。Inotify 最初合并到 2.6.13 Linux 内核中。eBPF 后端使用现代 eBPF 功能,并支持 5.10.16+ 内核。Kprobes 后端使用 tracefs 并支持 3.10+ 内核。FSNotify 无法将用户数据与文件事件关联。可以通过指定 backend 配置选项来选择首选后端。由于 eBPF 和 Kprobes 处于技术预览阶段,auto 将默认为 fsnotify
  • macOS (Darwin) - 使用 macOS 10.5 中出现的 FSEvents API。此 API 将对文件的多个更改合并为一个事件。Auditbeat 将此合并的更改转换为有意义的动作序列。但是,在极少数情况下,报告的事件顺序可能与实际发生的顺序不同。
  • Windows - 使用 ReadDirectoryChangesW

文件完整性模块不应被用于监控网络文件系统上的路径。

配置选项

编辑

此模块有一些配置选项,用于调整其行为。以下示例显示了 Linux 的所有配置选项及其默认值。

- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc
  exclude_files:
  - '(?i)\.sw[nop]$'
  - '~$'
  - '/\.git($|/)'
  include_files: []
  scan_at_start: true
  scan_rate_per_sec: 50 MiB
  max_file_size: 100 MiB
  hash_types: [sha1]
  recursive: false

此模块还支持稍后描述的标准配置选项

paths
要监视的路径(目录或文件)列表。不支持 glob。指定的路径应在度量集启动时存在。路径应为绝对路径,尽管文件完整性模块将尝试将相对路径事件解析为其绝对文件路径。符号链接将在模块启动时解析,如果链接解析成功,则将监视链接目标。模块启动后对符号链接的更改不会更改监视目标。如果链接无法解析为有效目标,则将监视符号链接本身;如果符号链接目标在模块启动后变为有效,则文件系统监视不会拾取此情况。
exclude_files
用于筛选掉不需要的文件事件的正则表达式列表。这些表达式与每个文件和目录的完整路径匹配。当与 include_files 结合使用时,文件路径需要同时匹配 include_files 且不匹配 exclude_files 才能被选中。默认情况下,不排除任何文件。有关支持的 regexp 模式列表,请参阅正则表达式支持。建议将正则表达式包装在单引号中,以避免 YAML 转义规则的问题。
include_files
用于指定要选择哪些文件的正则表达式列表。配置后,仅监视与模式匹配的文件。这些表达式与每个文件和目录的完整路径匹配。当与 exclude_files 结合使用时,文件路径需要同时匹配 include_files 且不匹配 exclude_files 才能被选中。默认情况下,选择所有文件。有关支持的 regexp 模式列表,请参阅正则表达式支持。建议将正则表达式包装在单引号中,以避免 YAML 转义规则的问题。
scan_at_start

一个布尔值,控制 Auditbeat 是否在启动时扫描配置的文件路径,并为自上次运行 Auditbeat 以来已修改的文件发送事件。默认值为 true。

此功能依赖于本地存储在 path.data 中的数据,以确定文件是否已更改。Auditbeat 首次运行时,将为它遇到的每个文件发送一个事件。

scan_rate_per_sec
当启用 scan_at_start 时,这将设置初始扫描的平均读取速率,以字节/秒为单位定义。这限制了 Auditbeat 在启动时消耗的 CPU 和 I/O 量。默认值为“50 MiB”。将值设置为“0”将禁用限制。为方便起见,可以将单位指定为值的后缀。支持的单位为 b(默认)、kibkbmibmbgibgbtibtbpibpbeibeb
max_file_size
Auditbeat 将计算哈希值并运行文件解析器的文件最大大小(以字节为单位)。大于此大小的文件将不会被哈希或由配置的文件解析器分析。默认值为 100 MiB。为方便起见,可以将单位指定为值的后缀。支持的单位为 b(默认)、kibkbmibmbgibgbtibtbpibpbeibeb
hash_types
文件更改时要计算的哈希类型列表。支持的哈希类型为 blake2b_256blake2b_384blake2b_512md5sha1sha224sha256sha384sha512sha512_224sha512_256sha3_224sha3_256sha3_384sha3_512xxh64。默认值为 sha1
file_parsers
file 下将由文件格式解析器填充的 file_integrity 字段列表。可在 auditbeat.reference.yml 文件中找到可分析的可用字段。文件解析器在扫描期间或当文件事件涉及文件时,在配置路径中 max_file_size 限制内的所有文件上运行。不是特定文件解析器目标的文件仅被嗅探以检查是否应继续分析。这通常只涉及读取少量字节。
recursive
默认情况下,设置为 paths 中指定路径的监视不是递归的。这意味着只监视对这些目录内容的更改。如果将 recursive 设置为 true,则 file_integrity 模块将监视这些目录及其所有子目录的更改。
backend
(仅限 Linux) 选择将用于获取事件的后端。有效值:autofsnotifykprobesebpf。默认值:fsnotify

标准配置选项

编辑

您可以为任何 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 的不同集群节点收集的信息。

配置示例

编辑

文件完整性模块支持在配置 Auditbeat下描述的通用配置选项。以下是一个配置示例

auditbeat.modules:
- module: file_integrity
  paths:
  - /bin
  - /usr/bin
  - /sbin
  - /usr/sbin
  - /etc