背景知识
-
防火墙与注册表的关系
以Windows Server 2008 r2为例,防火墙在注册表中的位置是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy
家用网络防火墙
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile
公用网络防火墙
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile
-
Wazuh的功能
完整性监控
——基于hash值监测指定的文件、文件夹、注册表的是否有改动
命令监控
——agent把执行命令的输出结果当作日志与规则进行匹配
于是大脑里面构造了两种思路
1、监测注册表的值的完整性,细写原有的完整性告警。
2、用reg命令读取值,自定义告警规则中用<check_diff />
来比对两次命令执行的结果是否一致。
编写告警规则
方法一,syscheck
修改ossec.conf,新增一个syscheck
节点。
<syscheck>
<disabled>no</disabled>
<frequency>30</frequency>
<windows_registry>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules</windows_registry>
<windows_registry>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile</windows_registry>
<windows_registry>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile</windows_registry>
</syscheck>
另外要忽略掉一些注册表项目的监测,在原有的项上接着添加。(为啥要去掉?因为老是误报)
<registry_ignore>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters</registry_ignore>
<registry_ignore>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess</registry_ignore>
新增告警规则
新增一条rule,满足规则594时触发(规则594是Registry Integrity Checksum Changed
)
<group name="windows,firewall,">
<rule id="100002" level="10">
<if_sid>594</if_sid>
<match>StandardProfile</match>
<description>Windows Standard Firewall Status Changed</description>
<group>firewall</group>
</rule>
<rule id="100003" level="10">
<if_sid>594</if_sid>
<match>PublicProfile</match>
<description>Windows Public Firewall Status Changed</description>
<group>firewall</group>
</rule>
<rule id="100004" level="8">
<if_sid>594</if_sid>
<match>FirewallRules</match>
<description>Windows Firewall Rule Status Changed</description>
<group>firewall</group>
</rule>
</group>
用./bin/ossec-logtest
验证配置文件是否正确,然后重启wazuh-manager
服务
在Windows 高级防火墙随便添加个规则后,大约1分钟后看到了告警。后面不会再继续告警。可以猜测是与原始的hash值与最后一次改动的hash值进行比对。

方法二,命令监测
有full_command
和command
,差别在于前者是获取完整输出,后者是只取单行输出。
每30秒通过reg命令查看注册表指定项的值,并与上一次查询的结果对比,如果有变化则会出发告警。重新开启防火墙的时候因为输出结果与上次不一致,导致告警。
修改客户端上的ossec.conf
<localfile>
<log_format>full_command</log_format>
<alias>windows-firewall-check</alias>
<command>reg query hklm\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile /v EnableFirewall</command>
<frequency>30</frequency>
</localfile>
<localfile>
<log_format>full_command</log_format>
<alias>windows-firewall-check</alias>
<command>reg query hklm\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile /v EnableFirewall</command>
<frequency>30</frequency>
</localfile>
<localfile>
<log_format>full_command</log_format>
<alias>windows-firewall-check</alias>
<command>reg query hklm\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules</command>
<frequency>30</frequency>
</localfile>
添加告警规则
<rule id="100002" level="10">
<if_sid>530</if_sid>
<match>StandardProfile</match>
<check_diff />
<description>Windows Standard Firewall Status Changed</description>
<group>firewall</group>
</rule>
<rule id="100003" level="10">
<if_sid>530</if_sid>
<match>PublicProfile</match>
<check_diff />
<description>Windows Public Firewall Status Changed</description>
<group>firewall</group>
</rule>
<rule id="100004" level="10">
<if_sid>530</if_sid>
<match>FirewallRules</match>
<check_diff />
<description>Windows Firewall Rule Changed</description>
<group>firewall</group>
</rule>
启用禁用windows防火墙,触发告警。

但是事情到这里并没有结束,有些问题是只有实操的时候才发现的。那就是因为防火墙规则太多,命令输出的结果太长以至于被截断,导致没有监测到不同的部分,于是就没有告警。
最后结合了二者,用命令行监控防火墙运行状态,用注册表监测防火墙规则变动。
<group name="windows,firewall,">
<rule id="100002" level="10">
<if_sid>530</if_sid>
<match>StandardProfile</match>
<check_diff />
<description>Windows Standard Firewall Status Changed</description>
</rule>
<rule id="100003" level="10">
<if_sid>530</if_sid>
<match>PublicProfile</match>
<check_diff />
<description>Windows Public Firewall Status Changed</description>
</rule>
<rule id="100004" level="8">
<if_sid>594</if_sid>
<match>FirewallRules</match>
<description>Windows Firewall Rule Changed</description>
</rule>
</group>
方法三,SYSMON
默认可以检测防火墙的状态,手写新增防火墙规则监测
<TargetObject name="Technique=Disabling Security Tools,Tactic=Defense Evasion,MitreRef=1089" condition="begin with">HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules</TargetObject>
在事件查看器中可以看到详细的添加项Details
Registry value set:
RuleName: Technique=Disabling Security Tools,Tactic=Defense Evasion,MitreRef=1089
EventType: SetValue
UtcTime: 2019-02-01 09:17:59.987
ProcessGuid: {0eedf899-f528-5c4f-0000-0010886b0100}
ProcessId: 336
Image: C:\Windows\system32\svchost.exe
TargetObject: HKLM\System\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\{D9F452D0-481E-485D-BD04-E2AC0AA8C1CE}
Details: v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|LPort=445|Name=test|Desc=test|
邮件告警基本设置
在后面用osquery检测反弹shell测试邮件告警时,认识到默认的邮件告警并不是一触发规则就立刻告警,只是标记为需要通过邮件发送的告警。
在管理端安装yum install postfix
直接发送告警邮件。
配置邮件别名
vim /etc/aliases
# Person who should get root's mail
root: test@test.com
在root后面添加互联网邮件地址,然后执行newaliases
刷新数据库,启动postfix
服务。
修改管理端ossec.conf的global节点。
<global>
<jsonout_output>yes</jsonout_output>
<alerts_log>yes</alerts_log>
<logall>no</logall>
<logall_json>no</logall_json>
<email_notification>yes</email_notification>
<smtp_server>localhost</smtp_server>
<email_from>ossecm@root</email_from>
<email_to>xxxx@xxx.com</email_to>
<email_maxperhour>12</email_maxperhour>
<queue_size>131072</queue_size>
</global>
alert
节点覆盖范围是全局,告警等级不低于指定值才会发信,这里设置告警等级大于等于10的才能发信。
<alerts>
<log_alert_level>3</log_alert_level>
<email_alert_level>10</email_alert_level>
</alerts>
邮件告警详细设置
设置<email_alerts>
,基于告警规则id发信,do_not_delay
是立即发送而不是放入发信队列里面。
<email_alerts>
<email_to>xxxx@qq.com</email_to>
<rule_id>100002, 100003, 100004</rule_id>
<do_not_delay />
</email_alerts>
基于事件源发送:<event_location>server1</event_location>
,允许使用任何单个代理名称,主机名,IP地址或日志文件
基于告警等级:<level>4</level>
,如果低于10 就不会发送。
基于规则组:<group>pci_dss_10.6.1</group>
可以同时设置多种条件的邮件告警
如果有的告警等级低于10,但是又想要强制发送邮件的话,设置<options>alert_by_email</options>
<rule id="502" level="3">
<if_sid>500</if_sid>
<options>alert_by_email</options>
<match>Ossec started</match>
<description>Ossec server started.</description>
</rule>
options可选值:
- alert_by_email:始终通过电子邮件提醒。
- no_email_alert:永远不会通过电子邮件提醒
- no_log:不记录此警报。
最后收到的告警邮件是这样的
Wazuh Notification.
2018 Aug 29 16:06:02
Received From: (192.168.45.13) 192.168.45.13->syscheck-registry
Rule: 100004 fired (level 8) -> "Windows Firewall Rule Changed"
Portion of the log(s):
Integrity checksum changed for: 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules'
Old md5sum was: '8524a1e2417fbaa8025bb060e9e57501'
New md5sum is : '98b4ecd02fe9db4f7c880e1ad1a884e4'
Old sha1sum was: '54d797c0c4c5e7b295dd18eada2080c86b0dd5c3'
New sha1sum is : 'e654d5f2b55c778499ecbe7180813a696e44718f'
--END OF NOTIFICATION
Wazuh Notification.
2018 Aug 29 16:05:19
Received From: (192.168.45.13) 192.168.45.13->windows-firewall-check
Rule: 100002 fired (level 10) -> "Windows Standard Firewall Status Changed"
Portion of the log(s):
ossec: output: 'windows-firewall-check':
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile
EnableFirewall REG_DWORD 0x1
--END OF NOTIFICATION
后续要是换成SMTP发信了再更新
网友评论