美文网首页HIDS之Wazuh的使用记录
Wazuh完整性监测和命令监测注册表并邮件告警

Wazuh完整性监测和命令监测注册表并邮件告警

作者: jjf012 | 来源:发表于2018-08-30 10:44 被阅读0次

背景知识

  1. 防火墙与注册表的关系
    以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

  2. 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_commandcommand,差别在于前者是获取完整输出,后者是只取单行输出。
每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节点的说明

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>
可以同时设置多种条件的邮件告警

email_alerts节点的解释

如果有的告警等级低于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发信了再更新

下一篇,Wazuh结合audit监测攻击行为

相关文章

  • Wazuh完整性监测和命令监测注册表并邮件告警

    背景知识 防火墙与注册表的关系以Windows Server 2008 r2为例,防火墙在注册表中的位置是HKEY...

  • 如何使用WGCLOUD监测打印机状态

    WGCLOUD的数通监测模块, 可以监测我们的打印机状态,比如是否在线,延迟响应时间,发送故障告警通知(邮件、钉钉...

  • 监测CA证书过期时间

    监测CA证书过期时间 : 1.低于阈值时间发送邮件告警,2.推到pushgateway,让prometheus监控...

  • 异常告警前后台需求评审会——2018-12-05

    1、异常告警配置后台,将遥信告警和遥测告警类型改为信号状态、监测参数告警,这两类告警都是对实时采集测量参数的告警,...

  • typeScript编译选项

    1、编译单个文件命令tsc xx.ts2、监测单个文件,如果xx.ts发生了更改,会被监测并自动编译tsc xx....

  • linux网络相关命令

    linux网络相关命令分为:监测,传输,远端登录 命令包括: ping - 监测网络连通性 traceroute ...

  • Linux watch命令

    Linux watch命令可以动态监测一个命令的运行结果,常见用法如下: 举例: 动态监测CPU温度变化,命令: ...

  • Linux Shell常用技巧(八)

    1. Linux的实时监测命令(watch): watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结...

  • 《Linux与shell脚本编程大全》笔记之shell命令补充

    监测进程命令 ps命令 当程序运行在系统上时,我们称之为进程,而监测进程需要ps命令。默认ps命令显示的信息有 P...

  • 2020-12-30

    在线监测室要求: 新建监测站房面积应满足不同监控站房的功能需要并保证水污染源在线监测系统的摆放、运转和维护,使用面...

网友评论

    本文标题:Wazuh完整性监测和命令监测注册表并邮件告警

    本文链接:https://www.haomeiwen.com/subject/nkskwftx.html