Wazuh是一个开源的、免费的企业级安全监控解决方案,专注于威胁检测、完整性监控、事件响应和合规性。它由部署在受监控系统的端点安全代理和管理服务器组成,服务器收集并分析代理收集的数据。Wazuh支持多平台,包括Windows、Linux、macOS、HP-UX、Solaris和AIX,能够跨场所、虚拟化、容器化和基于云的环境保护工作负载 。
目录
1 介绍
2 Wazuh server
2.1 Wazuh manager
2.1.1 Agent注册服务
2.1.1.1 配置
2.1.2 Agent连接服务
2.1.2.1 配置
2.1.3 分析引擎
2.1.3.1 数据源
2.1.3.2 解码
2.1.3.3 规则匹配与告警
2.2 索引集成
2.2.1 Wazuh indexer
2.2.1.1 Filebeat
2.2.1.1.1 配置
2.2.1.2 Wazuh indexer 连接器
2.2.1.2.1 配置
2.2.2 第三方索引
2.3 告警管理
2.3.1 告警阈值
2.3.1.1 配置
2.3.2 转发告警
2.3.2.1 告警转发到syslog系统
2.3.2.2 告警转发到电子邮件系统
2.3.2.3 告警转发到数据库
2.4 事件日志
2.4.1 日志压缩与轮转
2.4.2 事件日志存档
2.4.2.1 启用存档
2.5 Wazuh服务器队列
2.5.1 Wazuh agent队列
2.5.1.1 配置
2.5.2 Wazuh分析引擎队列
Wazuh是一个开源的安全平台,它集成了扩展检测和响应(XDR)以及安全信息和事件管理(SIEM)的功能。它能够保护本地、虚拟化、容器化和基于云环境的工作负载。Wazuh主要包含四个主要的组件分别是Wazuh agent、Wazuh server、Wazuh indexer和Wazuh dashboard。
IOC是Indicator of Compromise,即“威胁指标”。这是一种用于识别安全威胁的特定模式或异常行为的指标,例如恶意IP地址、域名、URL或文件哈希等。Wazuh使用这些指标来帮助检测可能表明安全漏洞或攻击的活动
除了基于代理的监控能力外,Wazuh还支持监控无代理设备,例如防火墙、交换机、路由器或者网络IDS等。例如Wazuh可以通过Syslog获取设备数据,也可以通过SSH或者其它API来定期获取目标设备的数据。下面是Wazuh的组件和数据流示意图。
Wazuh server是Wazuh的核心组件,该组件用于分析从agents、网络设备和其它API接收的数据,它通过将收到的数据与预定义的规则集相关联进行匹配,对于异常事件生成告警信息。
Wazuh server主要包括两个组件,分别是Wazuh manager和Filebeat。Wazuh server负责数据分析和告警,Filebeat负责将分析后的数据转发到Wazuh indexer组件。
Wazuh manager负责数据分析和告警。它可以通过Syslog、email或者第三方API将告警信息转发出去。
Wazuh manager有多个服务和组件组成,这些组件和服务负责不同的功能。例如与Wazuh agent的注册、身份验证和加密通信,聚合安全事件,解码日志,匹配规则和告警等。
注册服务主要用于将Wazuh agent注册到Wazuh manager中。注册服务简化了agent的注册流程,并确保所注册的agent经过了身份验证,以及两者之间通信安全。
Wazuh agent在终端设备上安装并启动后,它会自动与Wazuh manager发起agent注册流程。manager生成唯一的身份验证秘钥用于加密其与agent之间的通信。当然,用户可以为注册流程配置额外的安全措施,例如密码验证、manager身份验证和agent身份验证等。
下面是Wazuh server默认的配置文件信息,配置文件默认路径为/var/ossec/etc/ossec.conf。配置文件中块包含了注册服务的配置信息。
no
yes
1515
no
yes
1h
1h
yes
yes
no
HIGH:!ADH:!EXP:!MD5:!RC4:!3DES:!CAMELLIA:@STRENGTH
no
etc/sslmanager.cert
etc/sslmanager.key
no
manager的连接服务主要用于监听来自agent的事件,此服务维护与agent之间持久且安全的通信通道。agent使用此安全通道将数据发送给manager进行分析。默认情况下,安全通道使用TCP协议建立。
下面是Wazuh server默认的配置文件信息,配置文件默认路径为/var/ossec/etc/ossec.conf。下面是关于agent连接服务相关的配置信息。
secure
1514
tcp
131072
Wazuh的分析引擎支持多种日志类型的解析,例如Windows事件、SSH日志、Web服务器日志等。分析引擎使用解码器识别所处理的日志类型,并使用规则匹配解码后的日志信息。如果有规则命中则会触发告警或者动作执行,例如封锁IP、删除恶意软件等。
Wazuh支持多种数据源,从而全面的监控终端设备,支持复杂的威胁检测,减少漏洞暴露。下面是Wazuh支持的常见的数据源:
解码是分析结构化或非结构化数据(例如来自不同数据源的日志)以提取可用于监控和告警的有意义信息的过程。在 Wazuh 中解码的主要目的是将原始数据转换为 Wazuh manager可以解释和处理的格式。它涉及两个过程:
可以使用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输出的解析日志中预解码阶段的信息,可以看到在预解码阶段可以从日志中成功读取时间戳、主机名和日志生成程序名称。
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 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
解码器:
^sshd
sshd
^Accepted
^ \S+ for (\S+) from (\S+) port (\S+)
user, srcip, srcport
name, user, location
名为"sshd"的解码器要求解析由"sshd"程序产生的日志信息,与当前实例日志匹配。名为"sshd-success"的解码器从当前示例日志中提取"Stepen"、"192.168.1.133"和"49765"信息。
可以使用Wazuh自带的Wazuh logtest工具演示解码阶段,操作步骤可参考预解码阶段说明。该工具解码阶段结果输出如下:
**Phase 2: Completed decoding.
name: 'sshd'
parent: 'sshd'
dstuser: 'Stephen'
srcip: '192.168.1.133'
srcport: '49765'
解码日志后,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
示例规则如下:
5700
^Accepted|authenticated.$
sshd: authentication success.
authentication_success,pci_dss_10.2.5,
默认情况下,Wazuh 服务器会为级别高于 2 的任何规则生成告警。用户可以创建自定义解码器和规则来分析Wazuh原生不支持的日志。
Wazuh索引集成在Wazuh manager和Wazuh indexer之间架起一座桥梁。它将数据从Wazuh manager转发到Wazuh indexer中建立索引。Wazuh索引集成有两个部件组成,分别是Filebeat和 Wazuh indexer插头。
此组件是一个轻量级数据传输器,旨在将 Wazuh manager产生的告警和存档事件安全地转发到 Wazuh indexer进行索引和存储。它读取Wazuh分析引擎的输出并实时发送事件。
下面是Wazuh server端默认的Filebeat配置信息,此配置文件默认位置为/etc/filebeat/filebeat.yml。
# Wazuh - Filebeat configuration file
output.elasticsearch.hosts:
- 127.0.0.1:9200
# - :9200
# - :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
Wazuh index 连接器负责从Wazuh indexer接收漏洞数据,并将其安全地转发到 Wazuh indexer。这些数据以 JSON 格式存在,并遵循 Elastic Common Schema (ECS),以确保数据的一致性和可靠性。
index 连接器的配置默认在Wazuh server的/var/ossec/etc/ossec.conf中,如下所示:
yes
https://127.0.0.1:9200
/etc/filebeat/certs/root-ca.pem
/etc/filebeat/certs/filebeat.pem
/etc/filebeat/certs/filebeat-key.pem
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。 |
告警是Wazuh管理器在处理从Wazuh代理和无代理设备收到的事件后生成的通知。默认情况下,告警存储在/var/ossec/logs/alerts/alerts.log和/var/ossec/logs/alerts/alerts.json文件中。
默认情况下,Wazuh服务器使用Filebeat将生成的告警转发到Wazuh索引器中进行索引。此外,您还可以将Wazuh管理器配置为将告警转发syslog服务器、电子邮件系统和数据库等其它系统中。
警报阈值是触发警报必须超过的最低严重性级别。Wazuh管理器根据所命中规则集中的规则等级来判定事件严重等级。默认情况下,只有等级大于等于3会触发告警。
告警阈值在Wazuh server端/var/ossec/etc/ossec.conf文件中的标签中配置。下面示例中展示了如何设置告警阈值。
3
12
如果需要将告警日志进行转发,默认情况下,Wazuh管理器将警报转发到Wazuh索引器。除此之外,Wazuh管理器支持通过配置,将告警转发到其它的系统用于分析和备份。
用户可以使用syslog_output选项配置Wazuh服务器,使其将告警信息发送到syslog服务器。将警报转发到syslog服务器对于集中监控和自定义报告非常有用。
对于syslog_output选项的配置可在Wazuh服务器的/var/ossec/etc/ossec.conf文件中配置。如下所示:
9
192.168.1.241
除此之外,用户也可以在配置文件中配置多个
192.168.1.240
9
192.168.1.241
在上面示例中Wazuh服务器将所有告警信息发送192.168.1.240所标识的syslog服务器中,而只将严重等级大于9的告警发送到192.168.1.241所标识的syslog服务器中。
Wazuh提供了一项功能,可以将告警发送电子邮件系统中。用户可以将其配置为在触发规则时或根据自定义设置向一个或多个电子邮件地址发送电子邮件警报。此配置可以帮助用户获取每日事件报告等。
下面示例为Wazuh服务器匹配到规则ID为553时触发的将告警信息以邮件的形式发送的内容:
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选项如下所示,包含发送者、接受者以及服务器名称等。
yes
[email protected]
mail.test.com
[email protected]
下面配置将告警转发到电子邮件系统。
10
除此之外,针对将告警转发到电子邮件系统Wazuh提供更加精细的配置选项,详细配置信息可参考Wazuh官方文档。
Wazuh支持将警报转发到数据库系统。可通过更改配置来指定Wazuh管理器将告警转发到数据库中。如果想要使配置生效,需要对支持数据库类型的Wazuh管理器进行源码编译安装。当前Wazuh支持MySQL和PostgreSQL数据库。详细配置信息可参考Wazuh官方文档。
日志是从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中。 |
日志文件会迅速累积并占用系统中的大量磁盘空间。为了防止这种情况,Wazuh Manager在日志轮转过程中压缩日志,这有助于有效管理磁盘使用情况并保持系统性能。Wazuh管理器每天或在日志文件达到特定阈值(如文件大小、时间等)时压缩日志文件并将其存档。在日志轮转过程中,Wazuh 会创建一个原始名称的新日志文件,以便于持续写入新事件。
日志文件每天压缩一次,并使用MD5、SHA1和SHA256哈希算法进行数字签名。压缩的日志文件存储在嵌套目录中,此嵌套目录分别由原始日志名称、年、月组成。例如/var/ossec/logs/archives/archives.log在2024年4月13号执行压缩存储,则日志文件存储在...../archives/2024/Apr/文件夹下。例如:
# 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为包含压缩后文件校验码。
根据用户的需要,用户可以将压缩文件配置为在指定时间段后删除。此外,用户可以将它们移动到日志管理系统、备份服务器或基于云的存储设备以进行长期保留。
事件是由应用程序、终端节点和网络设备生成的日志)。Wazuh服务器存储它收到的所有事件,无论它们是否触发规则。这些事件存储在Wazuh服务器的/var/ossec/logs/archives/archives.log和/var/ossec/logs/archives/archives.json文件中。安全团队可使用存档日志来查看安全事件的历史数据、分析趋势并生成报告以搜寻威胁。
默认情况下,Wazuh存档处于禁用状态,因为它将日志无限期地存储在 Wazuh 服务器上。启用后,Wazuh 管理器会创建存档文件来存储和保留安全数据,以用于合规性和取证目的。
执行以下步骤以在Wazuh服务器上启用存档。
(1)编辑Wazuh manager的配置文件/var/ossec/etc/ossec.conf,并且将下列配置标签设置为yes。
yes
yes
yes
yes
Wazuh服务器实现一个队列机制,可简化从受监控终端节点收集事件的过程。它保障从Wazuh 代理、syslog 端点和无代理设备到Wazuh服务器的数据流连续,防止event flooding。Wazuh服务器队列采用先进先出(FIFO)方法。Wazuh支持多个线程并行处理队列中的日志,使Wazuh能够有效地处理大量日志数据。
Wazuh服务器有两个用于管理事件流的队列,分别是:
queue_rd队列在Wazuh manager中的agent连接服务模块中实现,该服务负责接收Wazuh代理的事件日志,并将事件发送到Wazuh分析引擎进行解码和规则匹配。
配置queue_rd属性,可以通过更改Wazuh server端/var/ossec/etc/ossec.conf配置文件中标签内容。如下所示:
secure
1514
tcp,udp
131072
5m
600
no
当观察到Wazuh出现事件日志丢失时,可以适当增加queue_rd队列大小,或者修改/var/ossec/etc/internal_options.conf配置文件中worker_pool对应的值来增加事件处理线程。
queue_and队列在Wazuh manager中的分析引擎中实现,分析引擎负责将事件数据从队列中取出进行解码和规则匹配。