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 API RESTful 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算法對其進行簽名。