一、sysmon告警介绍
sysmon提供21种事件告警:
Event ID 1:进程创建
Event ID 2:进程更改文件创建时间
Event ID 3:网络连接
Event ID 4:sysmon服务状态变更
Event ID 5:进程终止
Event ID 6:驱动程序加载
Event ID 7:映像加载
Event ID 8:远程连接线程创建
Event ID 9:内存读取
Event ID 10:进程允许访问
Event ID 12:注册表事件(键值配置)
Event ID 13: 注册表事件(项目创建和删除)
Event ID 14:注册表事件(键值键名修改)
Event ID 15:创建文件留事件
Event ID 17:管道事件(管道创建)
Event ID 18:管道事件(管道连接)
Event ID 19:WMI事件(WMI事件过滤动作执行)
Event ID 20:WMI事件(WMI事件注册动作执行)
Event ID 21:WMI事件(WMI事件绑定过滤器动作执行)
Event ID 255:错误
二、监控设计
①:Windows机器固定周期从内网搭建网站获取配置脚本,并每周进行一次Sysmon64.exe -c 的更新,以实现自动同步配置的需求(bat脚本+Windows周期任务实现)
②:winlogbeat收集sysmon日志并将日志输出到logstash中
③: logstash进行筛选,remove掉不需要的项(根据需要调整,笔者只监控告警id 3网络连接、id 4 sysmon服务状态变更、id 8 远程连接线程创建和id 255 错误)
④:ES提供数据查询功能,logstash的email插件提供告警功能
⑤:通过Python脚本邮件合并、筛选发现的威胁项
环境要求:sysmon部署环境需要是win7及以上,win2008 R2及以上。
三、sysmon+winlogbeat一键部署
https://github.com/Hudi233/sysmonwinlogbeat
四、logstash配置
input {
beats {
port => 5044
}
}
filter {
if [event_data][DestinationIp] !~ "^100\.|^10\." and [event_data][DestinationIp] =~ "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" {
geoip {
source => "[event_data][DestinationIp]"
fields => ["city_name", "country_name"]
database => "./ELK/logstash-6.4.0/GeoLite2-City.mmdb"
}
}
if [event_data][DestinationIp] =~ "^100\.|^10\.|^127\.0\.0\.1" {
drop { }
}
}
output {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "sysmon"
}
if [event_data][DestinationIp] !~ "^100\.|^10\.|^127\.0\.0\.1" {
email {
to => 'xxx@xxx.com'
from => 'xxx@xxx.com'
subject => 'Alert - %{event_id}'
body => "Content:\n%{message}\n%{geoip}"
address => 'xxx.com'
authentication => "plain"
password => '***'
username => 'xxx@xxx.com'
}
}
}