引言
Wazuh是一个开源的、免费的企业级安全监控解决方案,专注于威胁检测、完整性监控、事件响应和合规性。它由部署在受监控系统的端点安全代理和管理服务器组成,服务器收集并分析代理收集的数据。Wazuh支持多平台,包括Windows、Linux、macOS、HP-UX、Solaris和AIX,能够跨场所、虚拟化、容器化和基于云的环境保护工作负载 。
目录
[1 介绍](#1 介绍)
[2 Wazuh server](#2 Wazuh server)
[2.1 Wazuh manager](#2.1 Wazuh manager)
[2.1.1 Agent注册服务](#2.1.1 Agent注册服务)
[2.1.1.1 配置](#2.1.1.1 配置)
[2.1.2 Agent连接服务](#2.1.2 Agent连接服务)
[2.1.2.1 配置](#2.1.2.1 配置)
[2.1.3 分析引擎](#2.1.3 分析引擎)
[2.1.3.1 数据源](#2.1.3.1 数据源)
[2.1.3.2 解码](#2.1.3.2 解码)
[2.1.3.3 规则匹配与告警](#2.1.3.3 规则匹配与告警)
[2.2 索引集成](#2.2 索引集成)
[2.2.1 Wazuh indexer](#2.2.1 Wazuh indexer)
[2.2.1.1 Filebeat](#2.2.1.1 Filebeat)
[2.2.1.1.1 配置](#2.2.1.1.1 配置)
[2.2.1.2 Wazuh indexer 连接器](#2.2.1.2 Wazuh indexer 连接器)
[2.2.1.2.1 配置](#2.2.1.2.1 配置)
[2.2.2 第三方索引](#2.2.2 第三方索引)
[2.3 告警管理](#2.3 告警管理)
[2.3.1 告警阈值](#2.3.1 告警阈值)
[2.3.1.1 配置](#2.3.1.1 配置)
[2.3.2 转发告警](#2.3.2 转发告警)
[2.3.2.1 告警转发到syslog系统](#2.3.2.1 告警转发到syslog系统)
[2.3.2.2 告警转发到电子邮件系统](#2.3.2.2 告警转发到电子邮件系统)
[2.3.2.3 告警转发到数据库](#2.3.2.3 告警转发到数据库)
[2.4 事件日志](#2.4 事件日志)
[2.4.1 日志压缩与轮转](#2.4.1 日志压缩与轮转)
[2.4.2 事件日志存档](#2.4.2 事件日志存档)
[2.4.2.1 启用存档](#2.4.2.1 启用存档)
[2.5 Wazuh服务器队列](#2.5 Wazuh服务器队列)
[2.5.1 Wazuh agent队列](#2.5.1 Wazuh agent队列)
[2.5.1.1 配置](#2.5.1.1 配置)
[2.5.2 Wazuh分析引擎队列](#2.5.2 Wazuh分析引擎队列)
1 介绍
Wazuh是一个开源的安全平台,它集成了扩展检测和响应(XDR)以及安全信息和事件管理(SIEM)的功能。它能够保护本地、虚拟化、容器化和基于云环境的工作负载。Wazuh主要包含四个主要的组件分别是Wazuh agent、Wazuh server、Wazuh indexer和Wazuh dashboard。
- Wazuh agent:该组件可安装在笔记本电脑、台式机、服务器、云实例或者虚拟机中。它提供威胁预防、检测和响应的能力。该组件可运行在Linux、Windows、macOS、AIX和HP-UX系统中。
- Wazuh server:该组件负责分析从各个Wazuh agent收集的数据,通过解码器和规则对其数据进行处理,使用威胁情报来查找已知的入侵指标(IOCs)。单个Wazuh server可以分析来自数百上千个agent搜集的数据,并能设置为集群时进行水平扩展。此组件也能对Wazuh agent组件进行管理,在必要的情况下对agent进行配置和远程升级。
- Wazuh indexer:该组件是一个高度可扩展的全文搜索和分析引擎。此组件为Wazuh server生成的告警编制索引并存储。
- Wazuh dashboard:该组件提供数据可视化和分析的Web界面。它包括多种开箱即用的仪表板,用于威胁狩猎、法规合规性(例如PCI DSS、GDPR、CIS、HIPAA、NIST 800-53)、检测到的易受攻击的应用程序、文件完整性监控数据、配置评估结果、云基础设施监控事件等。这些仪表板也可以用于管理Wazuh配置和监控其状态
IOC是Indicator of Compromise,即"威胁指标"。这是一种用于识别安全威胁的特定模式或异常行为的指标,例如恶意IP地址、域名、URL或文件哈希等。Wazuh使用这些指标来帮助检测可能表明安全漏洞或攻击的活动
除了基于代理的监控能力外,Wazuh还支持监控无代理设备,例如防火墙、交换机、路由器或者网络IDS等。例如Wazuh可以通过Syslog获取设备数据,也可以通过SSH或者其它API来定期获取目标设备的数据。下面是Wazuh的组件和数据流示意图。
2 Wazuh server
Wazuh server是Wazuh的核心组件,该组件用于分析从agents、网络设备和其它API接收的数据,它通过将收到的数据与预定义的规则集相关联进行匹配,对于异常事件生成告警信息。
Wazuh server主要包括两个组件,分别是Wazuh manager和Filebeat。Wazuh server负责数据分析和告警,Filebeat负责将分析后的数据转发到Wazuh indexer组件。
2.1 Wazuh manager
Wazuh manager负责数据分析和告警。它可以通过Syslog、email或者第三方API将告警信息转发出去。
Wazuh manager有多个服务和组件组成,这些组件和服务负责不同的功能。例如与Wazuh agent的注册、身份验证和加密通信,聚合安全事件,解码日志,匹配规则和告警等。
2.1.1 Agent注册服务
注册服务主要用于将Wazuh agent注册到Wazuh manager中。注册服务简化了agent的注册流程,并确保所注册的agent经过了身份验证,以及两者之间通信安全。
Wazuh agent在终端设备上安装并启动后,它会自动与Wazuh manager发起agent注册流程。manager生成唯一的身份验证秘钥用于加密其与agent之间的通信。当然,用户可以为注册流程配置额外的安全措施,例如密码验证、manager身份验证和agent身份验证等。
2.1.1.1 配置
下面是Wazuh server默认的配置文件信息,配置文件默认路径为/var/ossec/etc/ossec.conf。配置文件中块包含了注册服务的配置信息。
XML
<auth>
<disabled>no</disabled>
<remote_enrollment>yes</remote_enrollment>
<port>1515</port>
<use_source_ip>no</use_source_ip>
<force>
<enabled>yes</enabled>
<disconnected_time enabled="yes">1h</disconnected_time>
<after_registration_time>1h</after_registration_time>
<key_mismatch>yes</key_mismatch>
</force>
<purge>yes</purge>
<use_password>no</use_password>
<ciphers>HIGH:!ADH:!EXP:!MD5:!RC4:!3DES:!CAMELLIA:@STRENGTH</ciphers>
<!-- <ssl_agent_ca></ssl_agent_ca> -->
<ssl_verify_host>no</ssl_verify_host>
<ssl_manager_cert>etc/sslmanager.cert</ssl_manager_cert>
<ssl_manager_key>etc/sslmanager.key</ssl_manager_key>
<ssl_auto_negotiate>no</ssl_auto_negotiate>
</auth>
- <disabled>:启用或者禁用agent向manager的注册和身份验证服务。默认值是"no"。此标签允许内容为"yes"和"no"。
- <remote_enrollment>:是否允许manager在端口1515上接收agent发起的TLS加密连接。默认值为"yes"。此标签允许内容为"yes"和"no"。
- <port>:指定用于监听连接的TCP端口号。默认值为1515。此标签允许配置端口号范围为0~65535。
- <use_source_ip>:是否将agent的ip地址作为识别信息。此标签允许内容为"yes"和"no"。如果为"no",即使已注册的agent的ip地址发生了更改,依旧可以连接到manager。如果为"yes",一旦已注册的agent的ip地址发生更改,将无法连接到manager。
- <force> :指定agent重新注册需要满足的条件。下面是其子标签。
- <enabled>:如果manager检测到发起注册的agent名称或者IP地址在注册列表中存在,是否依然执行注册流程。如果此标签使能,manager会删除旧的重名或者重IP的agent信息。默认值为"yes"。此标签允许内容为"yes"和"no"。
- <disconnected_time>:指定是否允许对断开连接时间超过指定时长的agent执行替换。默认值为1h。此标签内容允许大于等于0的任意值,除此之外,允许"s"、"h"、"m"和"d"作为后缀,分别表示秒、小时、分钟和天。"enabled"是此标签支持的属性,此属性默认值为"yes",这意味着启用此选项。"enable"属性的值可以是"yes"或者"no"。
- <after_registration_time>:指定是否允许对注册时间超过指定时长的agent执行替换。默认值为1h。此标签内容允许大于等于0的任意值,除此之外,允许"s"、"h"、"m"和"d"作为后缀,分别表示秒、小时、分钟和天。
- <key_mismatch>:指定当agent提供的密钥与manager中记录的密钥不一致时执行替换。此标签默认值为"yes"。此标签允许内容为"yes"和"no"。
- <purge>:指定在删除agent时是否同时删除其密钥。如果此标签值为"no",agent被删除时,其密钥依然保存在密钥列表文件中,只是被标记为已删除。如果此标签值为"yes",删除agent时,其密钥信息也会被删除。此标签默认值为"yes"。此标签允许内容为"yes"和"no"。
- <use_password>:是否启用密码作为身份验证手段。当此标签内容为"no"时,则不启用密码验证。如果此标签内容为"yes",将使用密码验证,Wazuh server通过/var/ossec/etc/authd.pass文件读取密码,如果authd.pass文件不存在,则随机生成一串密码并保存到/var/ossec/logs/ossec.log文件中。
- <ciphers>:设置使用SSL加密网络通讯时使用的密码套件列表。此标签默认内容为"HIGH:!ADH:!EXP:!MD5:!RC4:!3DES:!CAMELLIA:@STRENGTH",其含义是使用高强度的密码套件,不使用匿名Diffie-Hellman密钥交换(ADH)密码套件、不使用指数级(exponential)密钥交换的密码套件、不使用MD5哈希算法的密码套件、不使用RC4流密码的密码套件、不使用3DES(三重数据加密标准)的密码套件、不使用Camellia加密算法的密码套件,根据密码套件的强度进行排序,优先选择更安全的密码套件。
- <ssl_agent_ca>:指定用于验证客户端CA证书的路径。
- <ssl_verify_host>:启用或禁用在CA证书源主机验证。检查证书中Common Name(CN)字段是否与客户端IP地址一致。此标签默认值为"no"。此标签允许内容为"yes"和"no"。
- <ssl_manager_cert>:指定Wazuh server端SSL证书路径。
- <ssl_manager_key>:指定Wauzh server端SSL密钥路径。默认值为etc/sslmanager.key(此路径为安装目录下的相对路径)。
- <ssl_auto_negotiate>:启用或禁用自动选择SSL/TLS方法。默认情况下,只允许TLS v1.2。当此标签设置为"yes"时,server与agent会协商出最安全通用的方法。在较旧的系统中manager不支持TLS v1.2,此选项会自动设置为"yes"。默认值为"no"。此标签允许内容为"yes"和"no"。
2.1.2 Agent连接服务
manager的连接服务主要用于监听来自agent的事件,此服务维护与agent之间持久且安全的通信通道。agent使用此安全通道将数据发送给manager进行分析。默认情况下,安全通道使用TCP协议建立。
2.1.2.1 配置
下面是Wazuh server默认的配置文件信息,配置文件默认路径为/var/ossec/etc/ossec.conf。下面是关于agent连接服务相关的配置信息。
XML
<ossec_config>
<remote>
<connection>secure</connection>
<port>1514</port>
<protocol>tcp</protocol>
<queue_size>131072</queue_size>
</remote>
</ossec_config>
- <connection>:指定manager接受的传入连接的类型。默认值是"secure"。此标签支持的内容为"secure"和"syslog"。
- <port>:指定manager用于监听agent事件的端口。默认情况下,<connection>标签设置为"secure"则为1514端口,设置为"syslog"则为514端口。此标签允许的端口范围为1~65535。
- <protocol>:指定连接的协议类型。默认值为"tcp"。此标签支持的内容为"tcp"和"udp"。
- <queue_size>:设置接收agent event的缓存队列的大小。默认值是131072。此标签允许的队列值为1~262144。缓存队列只能存储agent event数据,不能缓存syslog event。因此,此选项只有在<connection>标签设置为"secure"时生效。
2.1.3 分析引擎
Wazuh的分析引擎支持多种日志类型的解析,例如Windows事件、SSH日志、Web服务器日志等。分析引擎使用解码器识别所处理的日志类型,并使用规则匹配解码后的日志信息。如果有规则命中则会触发告警或者动作执行,例如封锁IP、删除恶意软件等。
2.1.3.1 数据源
Wazuh支持多种数据源,从而全面的监控终端设备,支持复杂的威胁检测,减少漏洞暴露。下面是Wazuh支持的常见的数据源:
- 操作系统日志:Wazuh支持从多种操作系统类型获取系统日志,如Windows、Linux和macOS。它能从Linux终端设备获取各种日志,包括syslog、auditd和应用程序日志等。从Windows终端系统、应用程序和安全事件通道获取系统日志。从macOS终端的统一日志系统(ULS,集中管理和存储所有系统级别的日志)获取日志。
- Syslog事件:Wazuh可从支持syslog的终端上获取日志。终端可以是Linux或者Unix系统,可以是安装有Wazuh agent也可以没有安装。
- 无代理监控:如果终端设备不支持Wazuh agent安装,Wazuh也能监控这些无代理设备。这要求终端设备支持ssh连接,Wazuh Server使用ssh连接监控终端设备的文件、文件夹或者配置文件,并且在终端设备上执行命令。
- 云提供商日志:Wazuh可直接通过云提供商,例如AWS、Azure、Google Cloud等获取日志。
- 自定义日志:可以将Wazuh配置为从多个应用程序和第三方安全工具(例如VirusTotal、Windows Defender、Clamav等)收集和解析日志。
2.1.3.2 解码
解码是分析结构化或非结构化数据(例如来自不同数据源的日志)以提取可用于监控和告警的有意义信息的过程。在 Wazuh 中解码的主要目的是将原始数据转换为 Wazuh manager可以解释和处理的格式。它涉及两个过程:
- 预解码阶段:在此阶段,日志分析引擎从日志头中提取类似syslog的信息,例如时间戳、主机名和程序名称。预解码阶段简化了日志结构,并为进一步分析做好准备。
可以使用Wazuh Logtest工具来查看预解码阶段解析结果,详细步骤为:
(1)假设日志内容如下:
Feb 14 12:19:04 192.168.1.1 sshd[25474]: Accepted password for Stephen from 192.168.1.133 port 49765 ssh2
(2)在Wazuh server端执行/var/ossec/bin/wazuh-logtest命令。
(3)将上面日志复制粘贴到终端,点击回车键。
下面是节选wazuh-logtest输出的解析日志中预解码阶段的信息,可以看到在预解码阶段可以从日志中成功读取时间戳、主机名和日志生成程序名称。
bash
root@top:~# /var/ossec/bin/wazuh-logtest
Starting wazuh-logtest v4.8.2
Type one log per line
Feb 14 12:19:04 192.168.1.1 sshd[25474]: Accepted password for Stephen from 192.168.1.133 port 49765 ssh2
**Phase 1: Completed pre-decoding.
full event: 'Feb 14 12:19:04 192.168.1.1 sshd[25474]: Accepted password for Stephen from 192.168.1.133 port 49765 ssh2'
timestamp: 'Feb 14 12:19:04'
hostname: '192.168.1.1'
program_name: 'sshd'
- 解码阶段:在这个阶段,Wazuh 分析引擎应用与日志匹配的解码器。解码器提取用户名、IP 地址、错误代码、URL等字段以及日志中包含的任何其他相关信息。
下面是解码器与示例日志进行匹配的示例,示例中解码器位于Wazuh server系统中/var/ossec/rulesets/decoders/0310-ssh_decoders.xml文件中。
示例日志:
Feb 14 12:19:04 192.168.1.1 sshd[25474]: Accepted password for Stephen from 192.168.1.133 port 49765 ssh2
解码器:
XML
<decoder name="sshd">
<program_name>^sshd</program_name>
</decoder>
<decoder name="sshd-success">
<parent>sshd</parent>
<prematch>^Accepted</prematch>
<regex offset="after_prematch">^ \S+ for (\S+) from (\S+) port (\S+)</regex>
<order>user, srcip, srcport</order>
<fts>name, user, location</fts>
</decoder>
名为"sshd"的解码器要求解析由"sshd"程序产生的日志信息,与当前实例日志匹配。名为"sshd-success"的解码器从当前示例日志中提取"Stepen"、"192.168.1.133"和"49765"信息。
可以使用Wazuh自带的Wazuh logtest工具演示解码阶段,操作步骤可参考预解码阶段说明。该工具解码阶段结果输出如下:
bash
**Phase 2: Completed decoding.
name: 'sshd'
parent: 'sshd'
dstuser: 'Stephen'
srcip: '192.168.1.133'
srcport: '49765'
2.1.3.3 规则匹配与告警
解码日志后,Wazuh manager会将解码结果与规则集进行匹配。Wazuh规则集在XML格式文件中定义,也可以自定义格式以满足不同的监控需求。这些规则包含了触发告警的条件。下面示例中规则ID为5715规则可以示例日志进行匹配。
示例日志如下:
Feb 14 12:19:04 192.168.1.1 sshd[25474]: Accepted password for Stephen from 192.168.1.133 port 49765 ssh2
示例规则如下:
XML
<rule id="5715" level="3">
<if_sid>5700</if_sid>
<match>^Accepted|authenticated.$</match>
<description>sshd: authentication success.</description>
<group>authentication_success,pci_dss_10.2.5,</group>
</rule>
- **<rule id="5715" level="3">**注明规则ID为5715,规则等级为3。规则ID是规则的唯一标识符,而规则等级表示命中此规则时事件的严重等级。
- **<if_sid>5700</if_sid>**注明了当前规则依赖于另一个ID为5700的规则,也就是说ID为5700的规则命中是执行当前规则匹配的前提条件。
- **<match>^Accepted|authenticated.$</match>**注明匹配以"Accepted"开头或者以"authenticated"结尾的日志条目。
- **<description>sshd: authentication success.</description>**描述当前规则检测的内容。当前规则的作用是命中ssh身份验证通过的日志。
- **<group>authentication_success,pci_dss_10.2.5,</group>**分配规则到authentication_success和pci_dss_10.2.5组中。
默认情况下,Wazuh 服务器会为级别高于 2 的任何规则生成告警。用户可以创建自定义解码器和规则来分析Wazuh原生不支持的日志。
2.2 索引集成
2.2.1 Wazuh indexer
Wazuh索引集成在Wazuh manager和Wazuh indexer之间架起一座桥梁。它将数据从Wazuh manager转发到Wazuh indexer中建立索引。Wazuh索引集成有两个部件组成,分别是Filebeat和 Wazuh indexer插头。
2.2.1.1 Filebeat
此组件是一个轻量级数据传输器,旨在将 Wazuh manager产生的告警和存档事件安全地转发到 Wazuh indexer进行索引和存储。它读取Wazuh分析引擎的输出并实时发送事件。
2.2.1.1.1 配置
下面是Wazuh server端默认的Filebeat配置信息,此配置文件默认位置为/etc/filebeat/filebeat.yml。
XML
# Wazuh - Filebeat configuration file
output.elasticsearch.hosts:
- 127.0.0.1:9200
# - <elasticsearch_ip_node_2>:9200
# - <elasticsearch_ip_node_3>:9200
output.elasticsearch:
protocol: https
username: ${username}
password: ${password}
ssl.certificate_authorities:
- /etc/filebeat/certs/root-ca.pem
ssl.certificate: "/etc/filebeat/certs/wazuh-server.pem"
ssl.key: "/etc/filebeat/certs/wazuh-server-key.pem"
setup.template.json.enabled: true
setup.template.json.path: '/etc/filebeat/wazuh-template.json'
setup.template.json.name: 'wazuh'
setup.ilm.overwrite: true
setup.ilm.enabled: false
filebeat.modules:
- module: wazuh
alerts:
enabled: true
Archives:
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0644
logging.metrics.enabled: false
seccomp:
default_action: allow
syscalls:
- action: allow
names:
- rseq
- **<output.elasticsearch.hosts>**注明了可连接的Wazuh indexer节点IP地址列表。可以配置为IP地址或者主机名。默认情况下,该配置设置为localhost,即127.0.0.1:9200。如果实际场景中包含多个Wazuh indexer节点,可以使用逗号分割IP地址。
- **<protocol>**注明了用于连接的协议。默认情况使用https,此配置允许的参数值为"http"和"https"。
- **<username> and <password>**指定与Wazuh indexer进行身份验证时的用户名和密码的环境变量名。
- **<ssl.certificate_authorities>**指定用于 HTTPS 服务器验证的根证书的路径。默认值为/etc/filebeat/certs/root ca.pem。
- **<ssl.certificate>**指定Filebeat SSL证书的路径。默认值为/etc/filebeat/certs/wazuh server.pem。
- **<ssl.key>**指定Filebeat使用的SSL密钥的路径。默认值为/etc/filebeat/certs/wazuh server key.pem。
- **<setup.template.json.enabled>**启用或禁用自定义模板,默认值为true。
- **<setup.template.json.path>**指定模板JSON文件的文件路径。默认值为/etc/filebeat/wazuh template.json。
- **<setup.template.json.name>**定义模板的名称。默认值为"wazuh"。
- **<setup.ilm.overwrite>**设置为true时,全生命周期策略会在启动时被覆盖。默认值为true。
- **<setup.ilm.enabled>**对创建的任何新索引启用或禁用索引生命周期管理。默认值为false。
- **<filebeat.modules>**指定Filebeat将使用的模块。
- **<module>**定义要使用的模块。默认值为"vazuh"。
- **<alerts>**启用或禁用将告警转发到Wazuh indexer。当配置选项<enabled>设置为true,告警将转发到indexer。
- **<archives>**指定是否要归档处理和转发的日志。
- **<logging.level>**定义日志级别。默认值为info,其它日志等级为debug、error和warning。
- **<logging.to_files>**启用或禁用文件日志记录。默认值为true,当设置为true时,Filebeat将所有日志写入文件。
- **<logging.files.path>**定日志文件将存储的目录。默认日志路径为/var/log/filebeat。
- **<logging.files.name>**定存储日志的文件的名称。默认名称为"filebeat"。
- **<logging.files.keepfiles>**指定要保留的最近轮换的日志文件数。默认值为7。此配置参数允许的值为1~1024。
- **<logging.files.permissions>**设置日志文件的文件权限。默认值为0664,这意味着日志文件的所有者可以读取和写入日志文件,而其他人只能读取。
- **<logging.metrics.enabled>**启用或禁用内部指标的日志记录。默认值为true。
- **<seccomp>**指定一个SECOMP(安全计算模式)策略,该策略限制Filebeat进程可以发出的系统调用数量。
- **<default_action>**将系统调用的默认操作设置为Allow。这意味着默认情况下将允许syscalls 列表中未明确指定的任何系统调用。
- **<syscalls>**定义系统调用名称和相应操作的列表。
- **<action>**指定任何在names列表中的系统调用执行时采取相应的动作。默认值为allow。其它可配置值为errno、trace、trap、kill_thread、kill_process和log。
- **<names>**定义系统调用名称列表。列表中必须至少定义一个system调用。resp(可重启序列)统调用用于跨多个线程加速对共享内存的用户空间操作。
2.2.1.2 Wazuh indexer 连接器
Wazuh index 连接器负责从Wazuh indexer接收漏洞数据,并将其安全地转发到 Wazuh indexer。这些数据以 JSON 格式存在,并遵循 Elastic Common Schema (ECS),以确保数据的一致性和可靠性。
2.2.1.2.1 配置
index 连接器的配置默认在Wazuh server的/var/ossec/etc/ossec.conf中,如下所示:
XML
<ossec_config>
<indexer>
<enabled>yes</enabled>
<hosts>
<host>https://127.0.0.1:9200</host>
</hosts>
<ssl>
<certificate_authorities>
<ca>/etc/filebeat/certs/root-ca.pem</ca>
</certificate_authorities>
<certificate>/etc/filebeat/certs/filebeat.pem</certificate>
<key>/etc/filebeat/certs/filebeat-key.pem</key>
</ssl>
</indexer>
</ossec_config>
- **<indexer>**指定 Wazuh indexer 连接器的配置选项。
- **<enabled>**启用或禁用Wazuh indexer连接器。此选项的允许值为"yes"和"no"。
- **<hosts>**指定要连接到的Wazuh indexer节点的列表。
- **<host>**指定要连接到的Wazuh indexer节点的URL或IP地址。例如http://172.16.1.11或者 192.168.3.2:9230。默认情况下,该值设置为localhost:http://127.0.0.1:9200。
- **<ssl>**指定SSL参数的配置选项。
- **<certificate_authorities>**指定要验证的根证书文件路径列表。使用ca选项设置每个CA证书文件路径。
- **<ca>**指定用于 HTTPS 服务器验证的根CA证书。默认值为/etc/filebeat/certs/root ca.pem。
- **<certificate>**指定Filebeat SSL证书的路径。默认值为/etc/filebeat/certs/filebeat key.pem。
- **<key>**指定用于身份验证的证书密钥。默认值为/etc/filebeat/certs/filebeat key.pem
2.2.2 第三方索引
Wazuh manager可以将告警转发到第三方索引器。如果您仅将Wazuh manager用于日志分析,并希望将告警转发到第三方解决方案进行索引和存储,则还有其他选择。Wazuh允许您在每个Wazuh manager节点上安装您选择的数据转发器,以将告警转发到您想要的解决方案。
|------------|---------------------------------------------------------|
| 解决方案 | 描述 |
| ELK stack | 使用Logstash将Wazuh manager告警转发到ELK Stack。 |
| OpenSearch | 使用Logstash将Wazuh manager告警转发到OpenSearch。 |
| Splunk | 使用Splunk Universal Forwarder 将Wazuh manager告警转发到Splunk。 |
2.3 告警管理
告警是Wazuh管理器在处理从Wazuh代理和无代理设备收到的事件后生成的通知。默认情况下,告警存储在/var/ossec/logs/alerts/alerts.log和/var/ossec/logs/alerts/alerts.json文件中。
默认情况下,Wazuh服务器使用Filebeat将生成的告警转发到Wazuh索引器中进行索引。此外,您还可以将Wazuh管理器配置为将告警转发syslog服务器、电子邮件系统和数据库等其它系统中。
2.3.1 告警阈值
警报阈值是触发警报必须超过的最低严重性级别。Wazuh管理器根据所命中规则集中的规则等级来判定事件严重等级。默认情况下,只有等级大于等于3会触发告警。
2.3.1.1 配置
告警阈值在Wazuh server端/var/ossec/etc/ossec.conf文件中的标签中配置。下面示例中展示了如何设置告警阈值。
XML
<ossec_config>
<alerts>
<log_alert_level>3</log_alert_level>
<email_alert_level>12</email_alert_level>
</alerts>
</ossec_config>
- **<log_alert_level>**标签设置了触发告警的最低严重等级,当事件等级大于等于告警等级,告警信息将存储到/var/ossec/logs/alerts/alerts.log和/var/ossec/logs/alerts/alerts.json文件中。默认值为3。事件等级范围为1~16。
- **<email_alert_level>**该标签设置警报生成电子邮件通知的最低严重性级别。默认值为12。允许的值为1~16。
2.3.2 转发告警
如果需要将告警日志进行转发,默认情况下,Wazuh管理器将警报转发到Wazuh索引器。除此之外,Wazuh管理器支持通过配置,将告警转发到其它的系统用于分析和备份。
2.3.2.1 告警转发到syslog系统
用户可以使用syslog_output选项配置Wazuh服务器,使其将告警信息发送到syslog服务器。将警报转发到syslog服务器对于集中监控和自定义报告非常有用。
对于syslog_output选项的配置可在Wazuh服务器的/var/ossec/etc/ossec.conf文件中配置。如下所示:
XML
<ossec_config>
<syslog_output>
<level>9</level>
<server>192.168.1.241</server>
</syslog_output>
</ossec_config>
- **<level>**该标签设置要转发到syslog服务器的警报的最低严重性级别。如果未定义此选项,Wazuh服务器会将所有警报转发到syslog服务器。
- **<server>**改标签设置syslog服务器的IP地址或者主机名。
除此之外,用户也可以在配置文件中配置多个<syslog_output>块使得Wazuh服务器将告警转发到多个syslog服务器。
XML
<ossec_config>
<syslog_output>
<server>192.168.1.240</server>
</syslog_output>
<syslog_output>
<level>9</level>
<server>192.168.1.241</server>
</syslog_output>
</ossec_config>
在上面示例中Wazuh服务器将所有告警信息发送192.168.1.240所标识的syslog服务器中,而只将严重等级大于9的告警发送到192.168.1.241所标识的syslog服务器中。
2.3.2.2 告警转发到电子邮件系统
Wazuh提供了一项功能,可以将告警发送电子邮件系统中。用户可以将其配置为在触发规则时或根据自定义设置向一个或多个电子邮件地址发送电子邮件警报。此配置可以帮助用户获取每日事件报告等。
下面示例为Wazuh服务器匹配到规则ID为553时触发的将告警信息以邮件的形式发送的内容:
bash
Wazuh Notification.
2024 Apr 29 08:58:30
Received From: wazuh-server->syscheck
Rule: 553 fired (level 7) -> "File deleted."
Portion of the log(s):
File '/var/ossec/test_dir/somefile.
txt' deleted
Mode: realtime
Attributes:
- Size: 0
- Permissions: rw-r--r--
- Date: Mon Apr 29 08:46:12 2024
- Inode: 841858
- User: root (0)
- Group: root (0)
- MD5: d41d8cd98f00b204e9800998ecf8427e
- SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709
- SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
--END OF NOTIFICATION
用户可以在Wazuh服务器的/var/ossec/etc/ossec.conf文件中配置email选项如下所示,包含发送者、接受者以及服务器名称等。
XML
<ossec_config>
<global>
<email_notification>yes</email_notification>
<email_to>me@test.com</email_to>
<smtp_server>mail.test.com</smtp_server>
<email_from>wazuh@test.com</email_from>
</global>
</ossec_config>
下面配置将告警转发到电子邮件系统。
XML
<ossec_config>
<alerts>
<email_alert_level>10</email_alert_level>
</alerts>
</ossec_config>
- **<email_alert_level>**该标签设置要转发到电子邮件服务器的警报的最低严重性级别。默认情况下是12。
除此之外,针对将告警转发到电子邮件系统Wazuh提供更加精细的配置选项,详细配置信息可参考Wazuh官方文档。
2.3.2.3 告警转发到数据库
Wazuh支持将警报转发到数据库系统。可通过更改配置来指定Wazuh管理器将告警转发到数据库中。如果想要使配置生效,需要对支持数据库类型的Wazuh管理器进行源码编译安装。当前Wazuh支持MySQL和PostgreSQL数据库。详细配置信息可参考Wazuh官方文档。
2.4 事件日志
日志是从Wazuh代理、外部API和网络设备接收的原始事件。Wazuh服务器无限期地存储所有日志。为了最大限度地优化空间,Wazuh管理器会自动压缩日志文件。
Wazuh管理两种类型的日志,分别来自Wazuh服务器的内部日志和受监控终端节点的外部日志。这些日志无限期地存储在Wazuh服务器的/var/ossec/logs/目录中。
下表描述了日志文件及其在 Wazuh 服务器上的存储位置。
|----------------------------------------|------|----------------------------------|
| 日志文件 | 日志源 | 描述 |
| /var/ossec/logs/ossec.log | 内部日志 | 存储Wazuh服务器生成的所有info级别的日志。 |
| /var/ossec/logs/api.log | 内部日志 | 存储Wazuh应用在与Wazuh服务API交互时生成的日志。 |
| /var/ossec/logs/cluster.log | 内部日志 | 存储Wazuh集群活动生成的日志。 |
| /var/ossec/logs/integrations.log | 内部日志 | 存储Wazuh集成模块在与第三方应用程序和系统交互时生成的日志。 |
| /var/ossec/logs/active-responses.log | 内部日志 | 存储Wazuh主动响应模块生成的日志。 |
| /var/ossec/logs/firewall/firewall.log | 内部日志 | 存储防火墙生成的日志。 |
| /var/ossec/logs/archives/archives.log | 外部日志 | 以明文形式存储从第三方应用程序和系统接收的日志。 |
| /var/ossec/logs/archives/archives.json | 外部日志 | 将从第三方应用程序和系统接收的日志存储在JSON中。 |
2.4.1 日志压缩与轮转
日志文件会迅速累积并占用系统中的大量磁盘空间。为了防止这种情况,Wazuh Manager在日志轮转过程中压缩日志,这有助于有效管理磁盘使用情况并保持系统性能。Wazuh管理器每天或在日志文件达到特定阈值(如文件大小、时间等)时压缩日志文件并将其存档。在日志轮转过程中,Wazuh 会创建一个原始名称的新日志文件,以便于持续写入新事件。
日志文件每天压缩一次,并使用MD5、SHA1和SHA256哈希算法进行数字签名。压缩的日志文件存储在嵌套目录中,此嵌套目录分别由原始日志名称、年、月组成。例如/var/ossec/logs/archives/archives.log在2024年4月13号执行压缩存储,则日志文件存储在...../archives/2024/Apr/文件夹下。例如:
bash
# ls -la /var/ossec/logs/archives/2024/Apr/
total 0
drwxr-x--- 2 wazuh wazuh 62 Apr 17 08:15 .
drwxr-x--- 4 wazuh wazuh 28 Apr 12 07:30 ..
-rw-r----- 1 wazuh wazuh 0 Apr 13 00:00 ossec-archive-13.log.gz
-rw-r----- 1 wazuh wazuh 0 Apr 13 00:00 ossec-archive-13.log.sum
日志文件名中包含压缩此日志文件时日期,ossec-archive-13.log.gz为压缩后的文件,ossec-archive-13.log.sum为包含压缩后文件校验码。
根据用户的需要,用户可以将压缩文件配置为在指定时间段后删除。此外,用户可以将它们移动到日志管理系统、备份服务器或基于云的存储设备以进行长期保留。
2.4.2 事件日志存档
事件是由应用程序、终端节点和网络设备生成的日志)。Wazuh服务器存储它收到的所有事件,无论它们是否触发规则。这些事件存储在Wazuh服务器的/var/ossec/logs/archives/archives.log和/var/ossec/logs/archives/archives.json文件中。安全团队可使用存档日志来查看安全事件的历史数据、分析趋势并生成报告以搜寻威胁。
默认情况下,Wazuh存档处于禁用状态,因为它将日志无限期地存储在 Wazuh 服务器上。启用后,Wazuh 管理器会创建存档文件来存储和保留安全数据,以用于合规性和取证目的。
2.4.2.1 启用存档
执行以下步骤以在Wazuh服务器上启用存档。
(1)编辑Wazuh manager的配置文件/var/ossec/etc/ossec.conf,并且将下列配置标签设置为yes。
XML
<ossec_config>
<global>
<jsonout_output>yes</jsonout_output>
<alerts_log>yes</alerts_log>
<logall>yes</logall>
<logall_json>yes</logall_json>
</ossec_config>
- **<logall>**启用或禁用所有日志消息的存档。启用后,Wazuh服务器以syslog格式存储日志。此标签允许的值为"yes"和"no"。
- **<logall_json>**启用或禁用事件日志记录。启用后,Wazuh服务器以JSON格式存储事件。此标签允许的值为"yes"和"no"。
2.5 Wazuh服务器队列
Wazuh服务器实现一个队列机制,可简化从受监控终端节点收集事件的过程。它保障从Wazuh 代理、syslog 端点和无代理设备到Wazuh服务器的数据流连续,防止event flooding。Wazuh服务器队列采用先进先出(FIFO)方法。Wazuh支持多个线程并行处理队列中的日志,使Wazuh能够有效地处理大量日志数据。
Wazuh服务器有两个用于管理事件流的队列,分别是:
- Wazuh agent通信队列(queue_rd)
- Wazuh分析引擎队列(queue_and)
2.5.1 Wazuh agent队列
queue_rd队列在Wazuh manager中的agent连接服务模块中实现,该服务负责接收Wazuh代理的事件日志,并将事件发送到Wazuh分析引擎进行解码和规则匹配。
2.5.1.1 配置
配置queue_rd属性,可以通过更改Wazuh server端/var/ossec/etc/ossec.conf配置文件中标签内容。如下所示:
XML
<remote>
<connection>secure</connection>
<port>1514</port>
<protocol>tcp,udp</protocol>
<queue_size>131072</queue_size>
<rids_closing_time>5m</rids_closing_time>
<connection_overtake_time>600</connection_overtake_time>
<agents>
<allow_higher_versions>no</allow_higher_versions>
</agents>
</remote>
- <queue_size>:设置queue_rd队列的大小。默认值是131072。此标签允许的队列值为1~262144。缓存队列只能存储agent event数据,不能缓存syslog event。此外,此选项只有在<connection>标签设置为"secure"时生效。
当观察到Wazuh出现事件日志丢失时,可以适当增加queue_rd队列大小,或者修改/var/ossec/etc/internal_options.conf配置文件中worker_pool对应的值来增加事件处理线程。
2.5.2 Wazuh分析引擎队列
queue_and队列在Wazuh manager中的分析引擎中实现,分析引擎负责将事件数据从队列中取出进行解码和规则匹配。