来源:https://documentation.wazuh.com/current/getting-started/index.html
一、总体框架
Wazuh是一个安全检测、可视化和安全合规开源项目。它最初是OSSEC HIDS的一个分支,后来与Elastic Stack和OpenSCAP集成在一起,发展成为一个更全面的解决方案。下面是这些工具的简要描述以及它们的作用:
1.1OSSEC HIDS
OSSEC HIDS是一种基于主机的入侵检测系统(HIDS),用于安全检测、可见性和遵从性监控。它基于一个多平台代理,将系统数据(如:日志消息、文件散列和检测到的异常)转发给一个中央管理器,并在其中对其进行进一步分析和处理,从而产生安全警报。代理将事件数据通过安全且经过身份验证的通道传递给中央管理器,以便进行分析。
此外,OSSEC HIDS提供了一个集中的syslog服务器和一个无代理的配置监视系统,该系统提供了对防火墙、交换机、路由器、接入点、网络设备等无代理设备上的事件和更改的安全洞察。
1.2OpenSCAP
OpenSCAP是一种OVAL(开放漏洞评估语言)和XCCDF(可扩展配置检查表描述格式)解释器,用于检查系统配置和检测脆弱应用程序。
这是一种众所周知的工具,用于检查安全合规性和使用工业标准安全基线对企业环境的加固。
1.3Elastic Stack
Elastic Stack是一个软件套件(Filebeat、Logstash、Elasticsearch、Kibana),用于收集、解析、索引、存储、搜索和显示日志数据。它提供了一个web前端,该前端提供事件的高级仪表板视图,支持深入到事件数据存储的高级分析和数据挖掘。
二、组件
Wazuh的主要组件是运行在每个受监控主机上的代理,以及分析从代理和syslog等无代理源接收到的数据的服务器。此外,服务器将事件数据转发到一个Elasticsearch集群,在这里对信息进行索引和存储。
2.1Wazuh agent
Wazuh代理运行在Windows、Linux、Solaris、BSD和Mac操作系统上。它用于收集不同类型的系统和应用程序数据,这些数据通过加密和经过身份验证的通道转发给Wazuh服务器。为了建立这个安全通道,使用了一个包含唯一预共享密钥的注册过程。
代理可以用来监视物理服务器、虚拟机和云实例(例如Amazon AWS、Azure或谷歌云)。预编译的代理安装包可用于Linux、HP-UX、AIX、Solaris、Windows和Darwin (Mac OS X)。
在基于Unix的操作系统上,代理运行多个进程,这些进程通过本地Unix域套接字相互通信。其中一个进程负责向Wazuh服务器发送通信和数据。在Windows系统上,只有一个代理进程使用互斥对象运行多个任务。
不同的代理任务或过程以不同的方式监视系统(例如,监视文件完整性、读取系统日志消息和扫描系统配置)。
下图表示在代理级别上发生的内部任务和流程:
所有代理进程都有不同的目的和设置。以下是他们的简要说明:
Rootcheck:这个过程执行多个与检测rootkit、恶意软件和系统异常相关的任务。它还对系统配置文件运行某些基本的安全检查。
日志收集器Log Collector:此代理组件用于读取操作系统和应用程序日志消息,包括平面日志文件、标准Windows事件日志甚至Windows事件通道。还可以将其配置为定期运行并捕获特定命令的输出。
Syscheck:这个过程执行文件完整性监视(FIM),也可以监视Windows系统上的注册表项。它能够检测文件的内容、所有权和其他属性的变化,以及记录文件的创建和删除。虽然它在默认情况下执行定期的FIM扫描,但它也可以配置为与操作系统内核通信,以便实时检测文件更改并生成文本文件的详细更改报告(diffs)。
OpenSCAP:该模块使用已发布的OVAL(开放漏洞评估语言)和XCCDF(可扩展配置检查表描述格式)基线安全概要。通过定期扫描系统,它可以找到不符合众所周知的标准的脆弱的应用程序或配置,例如在CIS(互联网安全中心)基准测试中定义的那些。
代理守护进程Agent Daemon:这个进程接收所有其他代理组件生成或收集的数据。它通过经过身份验证的通道将数据压缩、加密并交付给服务器。这个进程运行在一个独立的“chroot”(更改根)环境中,这意味着它对被监视系统的访问是有限的。这提高了代理的整体安全性,因为它是连接到网络的唯一进程。
2.2Wazuh server
服务器组件负责分析从代理接收的数据,并在事件匹配规则时触发警报(例如检测到入侵、文件更改、配置不符合策略、可能的rootkit等)。
服务器通常运行在独立的物理机器、虚拟机或云实例上,并运行代理组件,其目的是监视服务器本身。以下是主要服务器组件列表:
注册服务Registration service:通过提供和分发每个代理特有的预共享身份验证密钥来注册新代理。此流程作为网络服务运行,支持通过TLS/SSL和/或通过固定密码进行身份验证。
远程守护进程服务Remote daemon service:这是从代理接收数据的服务。它使用预共享密钥来验证每个代理的身份,并加密代理和管理器之间的通信。
分析守护进程Analysis daemon:这是执行数据分析的进程。它利用解码器识别正在处理的信息类型(如Windows事件、SSHD日志、web服务器日志等),然后从日志消息(如源ip、事件id、用户等)中提取相关数据元素。接下来,通过使用规则,它可以识别解码后的日志记录中的特定模式,这些模式可能触发警报,甚至可能调用自动对策(主动响应),比如防火墙上的IP禁令。
RESTful APIRESTful API:这提供了一个接口来管理和监视代理的配置和部署状态。它也被一个Kibana应用程序Wazuh web界面所使用。
2.3Elastic Stack
Elastic Stack是一个流行的用于日志管理的开源项目的统一套件,包括Elasticsearch、Logstash、Kibana、Filebeat等。与Wazuh解决方案特别相关的项目有:
Elasticsearch:一个高度可伸缩,全文搜索和分析引擎。弹性搜索被分配,意味着数据(索引)被分成shard,并且每个shard可以具有零个或更多个副本。
Logstash:收集和解析要保存到存储系统中的日志的工具(例如,Elasticsearch)。收集到的事件还可以使用输入、过滤和输出插件进行丰富和转换。
Kibana:一个灵活和直观的web界面,用于挖掘、分析和可视化数据。它运行在一个Elasticsearch集群上索引的内容之上。
Filebeat:一种轻量级转发器,用于在网络中传送日志,通常用于Logstash或Elasticsearch。
Wazuh与Elastic Stack集成,提供已解码的日志消息提要,这些日志消息将由Elasticsearch索引,以及用于警报和日志数据分析的实时web控制台。此外,Wazuh用户界面(运行在Kibana之上)可用于管理和监视您的Wazuh基础设施。
Elasticsearch索引是具有某些相似特征(如某些公共字段和共享数据保留需求)的文档集合。Wazuh每天使用多达三种不同的索引来存储不同的事件类型:
Wazuh -alerts:每当事件触发规则时,Wazuh服务器生成警报的索引。
wazuh-events:从代理接收的所有事件(归档数据)的索引,无论它们是否触发规则。
wazuh-monitoring:索引与代理状态相关的数据。web接口使用它表示单个代理处于或已经处于“活动”、“断开”或“从未连接”的情况。
索引是由文档组成的。对于上面的索引,文档是单个警报、归档事件或状态事件。
将Elasticsearch索引分成一个或多个shard,并且每个shard可以选择性地具有一个或多个副本。每一主和副本shard是单个的Lucene索引。因此,一个Elasticsearch索引是由许多Lucene索引组成的。当搜索在Elasticsearch索引上运行时,将并行地对所有shard执行搜索,并合并结果。将Elasticsearch索引分成多个shard和复制品用于多节点的弹性搜索集群,目的是缩小搜索和获得高可用性。单节点Elasticsearch集群通常每个索引只有一个shard,没有副本。
三、体系结构
Wazuh架构基于运行在受监视主机上的代理,这些主机将日志数据转发到中央服务器。此外,还支持无代理设备(如防火墙、交换机、路由器、接入点等),并可以通过syslog和/或其配置更改的定期探针主动提交日志数据,以便稍后将数据转发到中央服务器。中央服务器对输入的信息进行解码和分析,并将结果传递给一个Elasticsearch集群进行索引和存储。
一个Elasticsearch集群是一个或多个节点(服务器)的集合,这些节点(服务器)相互通信,对索引执行读写操作。小型Wazuh部署(<50个代理)可以由单节点集群轻松处理。当存在大量受监控系统、预期会有大量数据和/或需要高可用性时,建议使用多节点集群。
当Wazuh服务器和Elasticsearch集群在不同的主机上时,Filebeat可使用TLS加密将Wazuh警报和/或存档事件安全地转发到Elasticsearch服务器。
下图说明了Wazuh服务器和Elasticsearch集群在不同主机上运行时组件是如何分布的。注意,对于多节点集群,将有多个Elastic堆栈服务器,Filebeat可以将数据转发到这些服务器:
在较小的Wazuh部署中,使用单节点Elasticsearch实例的Wazuh和Elastic堆栈都可以部署在单个服务器上。在这个场景中,Logstash可以直接从本地文件系统读取Wazuh警报和/或归档事件,并将它们提供给本地Elasticsearch实例。
四、通信与数据流
4.1代理-服务器通信
Wazuh代理使用OSSEC消息协议通过端口1514 (UDP或TCP)将收集到的事件发送到Wazuh服务器。然后,Wazuh服务器解码并使用分析引擎对接收到的事件进行规则检查。触发规则的事件会被添加警告数据,如规则id和规则名称。根据规则是否触发,可以将事件存储到以下一个或两个文件:
文件/var/ossec/logs/archives/archives.json包含所有事件,不管它们是否触发了规则。
文件/var/ossec/logs/alerts/alerts.json只包含触发规则的事件。
Wazuh消息协议使用的是192位Blowfish加密,完全实现了16轮,或者AES加密,每块128位,密钥256位。
4.2Wazuh-Elastic通信
在大型部署中,Wazuh服务器使用Filebeat使用TLS加密将警报和事件数据发送到弹性堆栈服务器上的loghide (5000/TCP)。对于单主机架构,Logstash可以直接从本地文件系统读取事件/警报,而无需使用Filebeat。
Logstash对输入的数据进行格式化,并可选择在将数据发送到Elasticsearch(端口9200/TCP)之前丰富GeoIP信息。一旦数据被索引到Elasticsearch,就会使用Kibana(端口5601/TCP)来挖掘和可视化信息。
Wazuh APP运行在Kibana内部,不断查询RESTful API (Wazuh管理器上的端口55000/TCP),以便显示服务器和代理的配置和状态相关信息,并在需要时重新启动代理。此通信使用TLS加密,并使用用户名和密码进行身份验证。
五、所需端口
对于安装Wazuh和Elastic堆栈,必须有几个网络端口可用并打开,以便不同组件之间能够正确通信。
六、档案数据存储
除了发送到Elasticsearch之外,警报和非警报事件都存储在Wazuh服务器上的文件中。这些文件可以是JSON格式(. JSON)和/或纯文本格式(日志-没有解码字段,但更紧凑)。这些文件每天使用MD5和SHA1校验和进行压缩和签名。目录和文件名结构如下:
建议根据Wazuh Manager服务器的存储容量对归档文件进行轮换和备份。通过使用cron作业,您可以很容易地安排只在管理器上保留一个特定的存档文件时间窗口(例如,去年或过去三个月)。
另一方面,您可以选择完全不存储归档文件,而仅仅依赖于Elasticsearch来存储归档文件,特别是在运行定期的Elasticsearch快照备份和/或具有碎片副本的多节点Elasticsearch集群以获得高可用性时。您甚至可以使用cron作业将快照索引移动到最终的数据存储服务器,并使用MD5和SHA1算法对其进行签名。