目錄
一、什么是wazuh
二、wazuh的安裝
1.倉庫安裝
?2.虛擬機OVA安裝
?3.其他安裝方式
三、淺析wazuh的規則、解碼器等告警原理以及主動響應
1.主動響應(active-response)
2.告警信息(alerts)
3.規則以及解碼器(rules and decoders)
3.1.規則
3.2.解碼器?
4.linux后門rootkit檢測與基線檢查(back door)
5.配置文件ossec.conf
四、添加代理
五、用戶自定義規則
六、示例SQL注入檢測
七、總結
一、什么是wazuh
Wazuh 是一個免費的開源安全平臺,統一了 XDR 和 SIEM 功能。它可以保護本地、虛擬化、容器化和基于云的環境中的工作負載。
Wazuh 幫助組織和個人保護其數據資產免受安全威脅。它被全球數千個組織廣泛使用,從小型企業到大型企業。
Wazuh的使用場景有:
- 入侵檢測
- 日志數據分析
- 完整性檢查
- 漏洞檢測
- 配置評估
- 應急響應
- 云、容器安全等
此外,Wazuh 已經與 Elastic Stack 完全集成,提供了一個搜索引擎和數據可視化工具,允許用戶通過他們的安全警報進行導航。
二、wazuh的安裝
1.倉庫安裝
添加wazuh的官方倉庫來安裝wazuh的安裝包
具體流程可以跟著wazuh的官方文檔來一步步走
Wazuh documentation
?2.虛擬機OVA安裝
在官方上下載OVA文件,可能比較大,幾個g左右
下載完成后,可以在Vmware中直接導入虛擬機
右上角--->文件--->打開--->選擇下載好的OVA文件
之后選擇安裝路徑,跟著引導程序一步步走
?3.其他安裝方式
可以選擇鏡像下載、部署在docker、k8s上、使用ES安裝、使用ansible安裝等等
可以根據官方文檔自行選擇,具體步驟跟著官方來就可以了
三、淺析wazuh的規則、解碼器等告警原理以及主動響應
1.主動響應(active-response)
主動響應的主要作用是檢測到危險或者是告警之后,在一定條件下(比如告警等級大于7或者觸發了某條或多條規則),可以做出一系列反應來禁止入侵者訪問或登錄你的系統
主動響應的腳本在/var/ossec/active-response/bin目錄下
這里面有許多腳本,比如
- disable-account? ? ? ? ? ? 禁止賬戶登錄
- firewalld-drop? ? ? ? ? ? ? ? 防火墻攔截
- host-deny? ? ? ? ? ? ? ? ? ? ? 禁止ip訪問
- restart-wazuh? ? ? ? ? ? ? ? 重啟wazuh服務
等等
2.告警信息(alerts)
當入侵者或正常用戶執行了某些命令、做了某些操作,觸發了wazuh的規則,那么wazuh就會在日志中記錄并告警
這個日志的目錄是在/var/ossec/logs/alerts目錄下
分為有日期的告警日志和總告警日志
以.json結尾的文件是json格式的日志,主要用于ELK分析展示
以.log結尾的文件是我們查看起來比較方便的格式
我們來仔細看一條告警信息
這條告警信息觸發了規則ID5715,告警等級3,顯示ssh認證成功
源IP地址:192.168.239.1
源端口:49688
用戶:root
而告警信息同樣也會在wazuh的可視化界面中展示出來,而且在界面中告警信息更加清晰
瀏覽器URL中輸入https://<ip address>
用戶名和密碼默認為admin:admin
進入后轉到如下界面,這里就是wazuh的告警信息
展開其中一條仍然可以看到我們剛剛在alerts.log日志中的信息,而且比日志看起來更方便
官方文檔說告警等級可以從1-13,默認值為3
3.規則以及解碼器(rules and decoders)
3.1.規則
wazuh的規則在/var/ossec/ruleset/rules目錄下
而用戶的自定義規則是在/var/ossec/etc/rules目錄下
為什么不把用戶自定義的規則放在wazuh的規則目錄下,而是放在單獨的自定義規則目錄下呢?
這是因為wazuh的規則是在實時更新的,如果用戶自定義的規則放在wazuh的規則目錄下,有可能在更新的時候刪除掉用戶自定義的規則
說完目錄后,我們來看一條具體規則的內容是什么
規則ID:5715
父分類規則ID:5700
匹配方法正則:? /^Accepted|authenticated.$/
描述信息:sshd: authentication success.
剩下的mitre和id等不太了解,可以查找官方文檔
Wazuh documentation
5715規則使用正則匹配的ssh日志信息,以Accept開頭或者以authenticated結尾,這就匹配上了
wazuh的核心配置文件在/var/ossec/etc/ossec.conf中
為什么那些規則可以匹配我們日志中的信息?
就是因為在配置文件中寫入了日志的目錄,便于wazuh查找和分析日志
3.2.解碼器?
那從日志匹配到wazuh的可視化界面的告警信息,這其中到底發生了什么?
這就不得不提到解碼器的作用了
下面這是依據我的理解畫的一張原理圖
可以看到解碼器在其中有很重要的地位
Wazuh中的解碼器就是從特定類型的事件中提取相關數據。解碼分為預解碼階段和解碼階段。
- 預解碼階段:從已知字段(如syslog記錄頭中的字段)提取靜態信息。這通常包括時間戳、主機名和程序名,這些值通常在所有syslog消息中都能找到,而不管哪個應用程序生成它們。
- 解碼階段:將從事件中提取更多的動態信息,如源IP地址、用戶名、URL等等。一個或多個解碼器專門用于從許多不同的應用程序和日志源中提取字段數據。
一旦日志事件被解碼,Wazuh就可以根據其規則集對其進行評估,以確定是否應該生成警報。如果日志沒有解碼,Wazuh規則將被限制在尋找出現在日志事件中任何地方的通用子字符串,從而大大降低了生成告警的質量。
上面這段解釋來源我看到的一篇文章,我認為寫得很好
Wazuh解碼與規則匹配 - FreeBuf網絡安全行業門戶
簡單來說,解碼器能夠從日志中提取一些關鍵信息,比如時間,主機ip,用戶名,端口號等等
然后發送給規則,規則再進行匹配,生成告警,最后發送到可視化界面
解碼器在/var/ossec/ruleset/decoders目錄下
?下面來分析一下解碼器,比如說就下面這些解碼器
首先第一個解碼器的名字是sshd,匹配以sshd開頭的內容
第二個解碼器的名字是sshd-success,父解碼器是sshd
匹配的是以Accepted開頭的內容
然后匹配Accepted之后的內容,for、form、port關鍵字之前或之后的內容
提取出user、srcip、srcport三個字段
再與ssh日志比對看看
for后面接的是root,也就是user字段
from后面接的是登錄IP,是srcip字段
port后面接的是登錄IP的端口號,srcport字段
了解完了大致原理后,我們來測試一下
使用ssh故意登錄失敗多次,看wazuh的告警信息會有什么變化
這里用kali嘗試ssh暴力破解
完成后看看wazuh的告警信息
可以看到觸發了很多規則,告警等級最高的是第三條,嘗試暴力破解來進入系統
那我們來分析一下解碼器和規則是怎么觸發的,這次我們就用可視化界面查看規則和解碼器
首先查看解碼器PAM(告警信息里有decodername字段)
兩個父解碼器名稱"pam",匹配以pam_unix結尾,以pam_unix開頭
因為咱們的ssh日志里沒有by字段,不是第一種的日志格式,所以直接跳過看下面幾條
解碼器名稱"pam-fields",父解碼器名稱"pam"
匹配logname=、uid=、euid=三個字段后的內容
后面還有其他信息,依次解碼出來后發送給規則匹配
再來看規則
父規則5500,匹配authentication failure; logname=
告警信息PAM: User login failed.
再來看解碼器sshd(仔細找與自己sshd日志信息匹配的解碼器)
對比著日志信息看
父解碼器sshd,匹配以Failed開頭的內容
然后匹配for、from、port三個字段的信息
提取出user、srcip、srcport三個字段的信息
再來看規則
官方文檔是這樣描述frequency、timeframe和ignore字段的
https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/rules.html?highlight=frequency
frequency:觸發前規則必須匹配的次數
timeframe:以秒為時間單位的時間范圍,旨在和frequency一起使用
ignore:觸發此規則后忽略該規則的時間(以秒為單位)(以避免洪水)
我的理解:規則id:5763,告警等級10,在120秒內如果觸發8次5760規則,那就觸發5763規則
告警信息:sshd: brute force trying to get access to the system. Authentication failed.
那我們來看5760規則
它的父規則5700和5716
匹配Failed password或者Failed keyboard或者authentication error
告警信息:sshd: authentication failed.
再看5700和5716
5700規則是一個父規則,解碼器sshd?
5716規則以5700規則為父規則
匹配以Failed開頭或者以error: PAM: Authentication開頭
這樣一來整個規則鏈就梳理通了
4.linux后門rootkit檢測與基線檢查(back door)
后門檢測和基線檢查的腳本在/var/ossec/etc/rootcheck目錄下
可以看到有很多基線檢查,比如
debian_linux操作系統的基線檢查、MySQL的基線檢查
rhel_linux操作系統的基線檢查、Windows2012R2操作系統的基線檢查等等
圖中紅框部分就是后門檢測的腳本
先來看檢測rookit后門的腳本
可以看到wazuh檢測了很多后門或者蠕蟲可能存在的文件位置,基本上涵蓋了百分之90的后門
這里我們可以測試一下,就在文件目錄下寫一個名為mcliZokhb的文件
新建后打開wazuh是檢測不到的,因為配置文件ossec.conf規定12個小時檢查一次,可以去修改輪循時間
這里我們就直接重啟wazuh服務
systemctl restart wazuh-manager.service
重啟后打開,可以看到wazuh成功識別了這個后門文件,告警等級7?
再看檢測木馬的腳本
?可以看到wazuh檢測了linux基礎命令被惡意代碼替換,hosts文件被惡意軟件劫持等等
可以說wazuh真的很強大
5.配置文件ossec.conf
wazuh的配置文件路徑在/var/ossec/etc/ossec.conf
配置文件詳情最好查閱官方文檔
Wazuh documentation
json_output:是否以json格式輸出
alerts_log:是否輸出告警日志
email_notification:是否郵箱認證
忽略檢查的文件目錄?
集群配置,這里綁定的是自身的服務器?
?
?這里的localfile記錄的是日志的路徑
具體內容還是應該去官方文檔查找更為精確
四、添加代理
目前我們只是安裝了wazuh的服務端,沒有任何客戶端連接,這是沒有任何意義的
我們需要讓其他服務器成為wazuh的客戶端,也就是添加代理,端口號為1514
這里我們添加一臺Ubuntu系統的服務器
沒啥可說的,選擇操作系統?
注意這里填的是wazuh-server的IP地址,而非client
然后復制它提供給你的命令到client去執行
執行成功后你就可以在wazuh這里看到代理成功了
如果出現問題,首先確保client和server之間能互相通信
通信沒問題就去查看wazuh服務器的日志,在/var/ossec/logs/ossec.log
根據報錯信息去解決問題,也可以根據官方文檔來排除問題
在連接上代理之后,wazuh會自動對client服務器進行基線檢查
在真實項目中可以根據wazuh的基線檢查來檢查服務器的安全性并做相應修改
五、用戶自定義規則
除了wazuh自帶的規則,我們還可以自定義一些規則,來告警某單方面的漏洞
官方文檔提供了這方面的需求
Detecting common Linux persistence techniques with Wazuh
這里我們就來寫入動態鏈接庫劫持的規則
具體的步驟和代碼跟著官方走就行
記得安裝auditd監控工具,它可以監控文件的完整性并記錄日志
添加完規則后,我們可以嘗試往/etc/ld.so.preload文件下隨便寫入一個動態鏈接庫
查看一下/var/log/audit/audit.log的日志信息
可以看到audit.log的日志信息已經記錄了可能發生了動態鏈接庫劫持攻擊
?再來查看wazuh的告警信息,成功告警,告警等級10,規則ID100125
這樣,這個規則就成功添加了并且也成功觸發了
六、示例SQL注入檢測
這里我們以SQL注入為例,在我們的代理服務器上進行SQL注入,看wazuh如何檢測和響應
首先要把Nginx的日志路徑加載到client端的配置文件里面去,wazuh默認加載好了的
如果路徑不同,修改即可?
然后我們隨便寫一些注入語句
來看wazuh的告警
已經出現了告警,顯示嘗試SQL注入
那既然已經出現了告警,我們怎么去防御呢,wazuh有它自身的Active-response
如何配置,官方文檔也給出了步驟
How to configure active response - Active response
wazuh有兩種封堵方式:
- 根據告警等級來封堵,比如說當告警等級大于7時,自動進行封堵,但這也容易造成誤判,范圍太大
- 根據規則ID來封堵,當觸發了某條規則時,自動進行封堵,但這范圍太小,面對多條規則不便于寫配置文件
所以這兩種方式要根據項目中的實際情況來判斷
這里我們使用規則ID封堵IP方式來演示
官方文檔:
File integrity monitoring and YARA - Malware detection
在wazuh服務器,也就是manager的配置文件里寫入如下內容
當觸發31103和31171這兩條規則時,執行firewall-drop命令,600秒后恢復
<active-response><command>firewall-drop</command><location>local</location><rules_id>31103,31171</rules_id><timeout>600</timeout>
</active-response>
之后隨便測試一些注入語句,然后再刷新,發現已經被防火墻攔截了
?查看iptables,發現已經被封堵了,恢復時間600秒
七、總結
總之呢,wazuh這個HIDS監控系統,功能確實很強大,有可視化的告警信息和主動響應,定制性也很強,用戶可以自定義規則,讓你以后在HW的過程中大大減少你的工作量
當然還有其他的安全監控系統,比喻說洋蔥(SecurityOnion)
還有NIDS,主要是監控網絡流量,比如說Suricata
這些都是很好用的工具,多了解總是沒有壞處的