文件完整性模块
编辑文件完整性模块编辑
当磁盘上的文件发生更改(创建、更新或删除)时,file_integrity
模块会发送事件。这些事件包含文件元数据和哈希值。
该模块适用于 Linux、macOS (Darwin) 和 Windows。
工作原理编辑
此模块利用操作系统的功能实时监控文件更改。当模块启动时,它会创建一个与操作系统的订阅,以接收指定文件或目录更改的通知。在收到更改通知后,该模块将读取文件的元数据,并计算文件内容的哈希值。
在启动时,此模块将对配置的文件和目录执行初始扫描,以便为监控的路径生成基线数据,并检测自上次运行以来的更改。它使用本地持久化数据,以便仅发送有关新文件或已修改文件的事件。
支持此功能的操作系统功能如下所示。
- Linux - 支持多种后端:
auto
、fsnotify
、kprobes
、ebpf
。默认情况下,使用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
(默认)、kib
、kb
、mib
、mb
、gib
、gb
、tib
、tb
、pib
、pb
、eib
和eb
。 -
max_file_size
- Auditbeat 将为其计算哈希值并运行文件解析器的文件的最大大小(以字节为单位)。大于此大小的文件将不会由配置的文件解析器进行哈希处理或分析。默认值为 100 MiB。为方便起见,可以将单位指定为值的後綴。支持的单位有
b
(默认)、kib
、kb
、mib
、mb
、gib
、gb
、tib
、tb
、pib
、pb
、eib
和eb
。 -
hash_types
- 文件更改时要计算的哈希类型列表。支持的哈希类型有
blake2b_256
、blake2b_384
、blake2b_512
、md5
、sha1
、sha224
、sha256
、sha384
、sha512
、sha512_224
、sha512_256
、sha3_224
、sha3_256
、sha3_384
、sha3_512
和xxh64
。默认值为sha1
。 -
file_parsers
file
下的file_integrity
字段列表,这些字段将由文件格式解析器填充。auditbeat.reference.yml 文件中列出了可以分析的可用字段。在扫描期间或文件事件涉及文件时,会在配置路径中对max_file_size
限制内的所有文件运行文件解析器。未被特定文件解析器作为目标的文件仅会被嗅探,以检查是否应继续分析。这通常只涉及读取少量字节。-
recursive
- 默认情况下,为
paths
中指定的路径设置的监视不是递归的。这意味着仅监视此目录内容的更改。如果将recursive
设置为true
,则file_integrity
模块将监视此目录及其所有子目录的更改。 -
backend
- (仅限 Linux)选择将用于获取事件的后端。有效值:
auto
、fsnotify
、kprobes
、ebpf
。默认值: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