SIEM中心日誌節點WEF搭建說明
*本文作者:mr.anderson,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
背景介紹
在 SIEM (安全應急事件管理) 搭建中,日誌是及其重要的一環。對於黑客掌上的明珠——域控, 它的日誌監控是非常重要的,本文將介紹如何通過 WEF(Windows Event Forwarding) 將windows 主機日誌彙總到一臺中心節點,並輸入到ElasticSearch ,最後通過Kibana 的展示。
此架構的優點:
查詢快速;
通過呼叫ES可以實現安全事件實時監控。
Windows WEF 環境配置
Windows Event Forwarding 在windows 2008時就已經啟用,主要用於日誌中心化收集和轉儲,好處很多。
執行必要條件
一臺在域控中的日誌收集節點 (server 端);
任意一臺需要傳送到日誌中心節點的域內主機 (client 端);
一個域控管理員許可權使用者;
Client 端的日誌讀取賬戶許可權需要開啟network services 許可權;
防火牆對域內的5985/5986埠白名單,用於日誌傳輸。
架構介紹
windows 的日誌轉發有兩種方式:
收集器已啟動;
源計算機已啟動。
考慮到安全性,可以選擇源計算機已啟動,好處是隻需要開啟域控到收集端的訪問,無需在域控中新增賬戶。一旦收集端出現安全風險,在防火牆配置正確的前提下,也不會影響任何域控,
此文將按照源計算機已啟動為方法做介紹,其中角色:
client 日誌傳送方; server 日誌收集方。
Client 端配置
Client 的 security log 許可權查詢和新增
使用管理員許可權開啟 powershell ,執行如下命令:
wevtutil gl security
該命令是用於檢查security 日誌讀取許可權是否允許network service 讀取。
返回應該是如下內容則配置成功:
PS C:\Windows\system32>wevtutil gl security ... channelAccess: O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;NS
如果缺少 (A;;0×1;;;NS) 表示network service 許可權沒有加到security 日誌項中。需要單獨新增,新增前記得先將結果儲存後,然後追加 network service許可權。
Client 的 security 日誌的 network 許可權新增
組策略-> 計算機配置 -> 管理模板 -> windows 元件 -> 事件日誌伺服器 -> 安全-> 配置日誌訪問
然後雙擊後,選擇已啟用,將 wevtutil gl security 中的值和(A;;0×1;;;NS)加入到配置項中 ,如
O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;NS)
Client 的傳送目標配置
組策略-> 計算機配置 -> 管理模板 -> windows 元件 -> 事件轉發 -> 配置目標訂閱管理器(即就是我們的server端地址)
選擇已啟用,並輸入:
Server=<a href="http://logcentra.domain.com:5985/wsman/SubscriptionManager/WEC">http://logcentra.domain.com:5985/wsman/SubscriptionManager/WEC</a>
Server 端配置
開啟日誌收集項
使用管理員許可權開啟powershell 或cmd ,執行winrm qcWinRM 服務,並激活日誌收集項:
執行成功後你會看到5985 5986埠開啟。
配置日誌接收項和接收的計算機
開啟事件檢視器,並選擇左側訂閱:
選擇右側的建立訂閱,並選擇你感興趣的item項。
選擇新增剛剛配置的域計算機,並輸入計算機名即完成日誌接收端配置。
轉發錯誤的日誌檢視
上述已經將整個日誌轉發流程配置完成了,但是肯定有疏漏的地方,如果想要排錯,建議在 client 端的日誌發起方檢視日誌,檢視位置在:
事件管理器 -> 應用程式和服務日誌 -> Microsoft -> windows -> Eventlog-forwardingPlugin
其他命令
命令列匯入自定義訂閱日誌規則:
wecutil cs DomainComputers.xml wecutil cs DomainControllers.xml
Windows 下的 nxlog 轉發配置
nxlog [ https://nxlog.co/ ] 是用於將windows 日誌json 化以後轉發到 ES 或者 Logstash 的開源工具。
其中的關鍵配置分為輸入端和輸出端,輸入端當然是windows 的事件日誌,由於我們是轉發日誌,所以需要在 Select Path 輸入 ForwardedEvents。
輸入端:
<Input in> Moduleim_msvistalog Exec to_json(); Query<QueryList>\ <Query Id="0">\ Select Path="ForwardedEvents">*</Select>\ </Query>\ </QueryList> </Input>
輸出端用於將日誌輸出到制定服務,該例項是將日誌輸出到 logstash。
輸出端配置:
<Output out> Module om_ssl Host IP_Address Port Port_Number CaFile %ROOT%\cert\ca.pem OutputType LineBased </Output> <Output out_debug> Moduleom_file File"C:\\nxlog_debug.log" </Output>
可以看到日誌傳輸是使用自簽發證書加密的,保證了日誌傳輸安全性。
logstash 日誌配置
input { tcp { port => Port type => "nxlogs" ssl_cert => "/etc/logstash/conf.d/ssl/logstash.crt" ssl_key => "/etc/logstash/conf.d/ssl/logstash.key" ssl_extra_chain_certs => ["/etc/logstash/conf.d/ssl/ca.pem"] ssl_verify => false ssl_enable => true codec => 'json' } } filter { if [type] == "nxlogs" { date { match => ["[EventTime]", "YYYY-MM-dd HH:mm:ss"] } } } output { #stdout{} elasticsearch { hosts => ["IP:PORT"] index => "ad-monitor-%{+YYYY.MM.dd}" user => "name" password => "password" } }
Nxlog 和 Logstash 的加密證書配置命令
ca 私鑰生成
openssl genrsa -out ca.key 2048
簽發個人 CA
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem
建立 logstash 的私鑰
openssl genrsa -out logstash.key 2048
建立 logstash 的證書申請
openssl req -new -key logstash.key -out logstash.csr
使用 ca 證書去前方剛剛建立的logstash 證書申請並生成證書,過期時間為10年(不安全,但是方便)
openssl x509 -req -in logstash.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out logstash.crt -days 3650 -sha256
Kibana 展示結果