*本文作者: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;;0x1;;;NS) 表示network service 权限没有加到security 日志项中。需要单独添加,添加前记得先将结果保存后,然后追加 network service权限。
Client 的 security 日志的 network 权限添加
组策略-> 计算机配置 -> 管理模板 -> windows 组件 -> 事件日志服务器 -> 安全-> 配置日志访问
然后双击后,选择已启用,将 wevtutil gl security 中的值和(A;;0x1;;;NS)加入到配置项中 ,如
O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;NS)
Client 的发送目标配置
组策略-> 计算机配置 -> 管理模板 -> windows 组件 -> 事件转发 -> 配置目标订阅管理器(即就是我们的server端地址)
选择已启用,并输入:
Server=http://logcentra.domain.com:5985/wsman/SubscriptionManager/WEC
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>
Module im_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>
Module om_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 展示结果
参考
基础搭建指南和规则文件的命令行导入:
介绍在日志收集端常见的规则导入脚本:
https://hackernoon.com/the-windows-event-forwarding-survival-guide-2010db7a68c4
日志转发收集内容基线
*本文作者:mr.anderson,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
来源:freebuf.com 2019-03-19 14:00:25 by: mr.anderson
请登录后发表评论
注册