文件完整性模块编辑

当磁盘上的文件发生更改(创建、更新或删除)时,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) - 使用 FSEvents API,自 macOS 10.5 起提供。此 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

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

路径
要监视的路径(目录或文件)列表。不支持 Glob。指定路径应在度量集启动时存在。路径应为绝对路径,但文件完整性模块将尝试将相对路径事件解析为其绝对文件路径。符号链接将在模块启动时解析,如果链接解析成功,则将监视链接目标。模块启动后对符号链接的更改不会更改监视目标。如果链接未解析为有效目标,则将监视符号链接本身;如果符号链接目标在模块启动后变为有效,则文件系统监视将不会获取此信息。
exclude_files
用于过滤掉不需要的文件事件的正则表达式列表。表达式与每个文件和目录的完整路径匹配。与 include_files 结合使用时,文件路径需要同时匹配 include_files 并且不匹配 exclude_files 才能被选中。默认情况下,不排除任何文件。有关支持的正则表达式模式列表,请参阅正则表达式支持。建议将正则表达式括在单引号中,以避免 YAML 转义规则出现问题。
include_files
用于指定要选择哪些文件的正则表达式列表。配置后,将仅监视与模式匹配的文件。表达式与每个文件和目录的完整路径匹配。与 exclude_files 结合使用时,文件路径需要同时匹配 include_files 并且不匹配 exclude_files 才能被选中。默认情况下,将选择所有文件。有关支持的正则表达式模式列表,请参阅正则表达式支持。建议将正则表达式括在单引号中,以避免 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 模块指定以下选项。

模块
要运行的模块的名称。
enabled
一个布尔值,指定模块是否已启用。
字段
将与数据集事件一起发送的字段字典。此设置是可选的。
标记
将与数据集事件一起发送的标记列表。此设置是可选的。
处理器

要应用于数据集生成的数据的处理器列表。

有关在配置中指定处理器的详细信息,请参阅处理器

索引

如果存在,则此格式字符串将覆盖此模块事件的索引(对于 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