文件完整性模块

编辑

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
要监视的路径(目录或文件)列表。不支持通配符。指定的路径在 metricset 启动时应该存在。路径应为绝对路径,尽管文件完整性模块将尝试将相对路径事件解析为其绝对文件路径。符号链接将在模块启动时解析,如果链接解析成功,则将监视链接目标。模块启动后对符号链接的更改不会更改监视目标。如果链接无法解析为有效目标,则将监视符号链接本身;如果符号链接目标在模块启动后变为有效,则文件系统监视器将不会拾取此更改。
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 模块指定以下选项。

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