wazuh日志审计--定制规则

2023-10-26

日志审计--定制规则

目录布局

规则集文件夹结构如下所示:

在接收到agent传来的日志后,manager会根据/var/ossec/ruleset/decoders里面的各种规则对日志进行处理,提取到了指定字段的值之后再根据/var/ossec/ruleset/rules里面的各种规则进行匹配,告警日志输出到/var/ossec/logs/alerts/alerts.json,logstash再将其解析后传输到elasticsearch上面。

更新规则集

每周运行update_ruleset,通过向系统中添加crontab作业,使Wazuh规则集安装保持最新。

一种方法是运行sudo crontab -e,并在文件的末尾添加以下行

@weekly root cd /var/ossec/bin && ./update_ruleset -r

 

Jeson规则解释器

Wazuh现在为JSON日志合并了一个集成的解码器,使之能够以这种格式从任何来源提取数据。

此解码器有能力提取以下数据类型:

示例一:

下面的示例展示了Wazuh如何解码JSON日志并为Suricata生成警报。

下面的示例展示了包含在文件0470-suricata_rules.xml中的规则是如何工作的。最初,有一个父规则检查' timestamp '和' event_type '字段是否存在,以确定日志的类型(Suricata),然后子规则使用提取的字段的值显示警报

JSON记录的ossec-logtest输出如下:

示例二:

我们使用这个输入日志::

2018 Apr 04 13:11:52 nba_program: this_is_an_example: " player_information: "{ "name": "Stephen", "surname": "Curry", "team": "Golden State Warriors", "number": 30, "position": "point guard"}

Docker解释器:

<decoder name="raw_json">
    <program_name>nba_program</program_name>
    <prematch>player_information: "</prematch>
    <plugin_decoder offset="after_prematch">JSON_Decoder</plugin_decoder>
</decoder>

Rule规则:

<rule id="100001" level="5">
    <decoded_as>raw_json</decoded_as>
    <description>Raw JSON event</description>
</rule>

解析结果:

**Phase 1: Completed pre-decoding.
    full event: '2018 Apr 04 13:11:52 nba_program: this_is_an_example: " player_information: "{ "name": "Stephen", "surname": "Curry", "team": "Golden State Warriors", "number": 30, "position": "point guard"}'
    timestamp: '2018 Apr 04 13:11:52'
    hostname: 'ubuntu18'
    program_name: 'nba_program'
log: 'this_is_an_example: " player_information: "{ "name": "Stephen", "surname": "Curry", "team": "Golden State Warriors", "number": 30, "position": "point guard   "}'
 
**Phase 2: Completed decoding.
    decoder: 'raw_json'
    name: 'Stephen'
    surname: 'Curry'
    team: 'Golden State Warriors'
    number: '30'
position: 'point guard'
 
**Phase 3: Completed filtering (rules).
    Rule id: '100001'
    Level: '5'
    Description: 'Raw JSON event'
**Alert to be generated.

示例三

我们使用如下日志:

2018 Jun 08 13:11:52 nba_email_db: json_data: { "name": "Stephen", "surname": "Curry", "email": "curry@gmail.com"}
新特性是混合插件解码器和正则表达式的能力,看看下面的日志:
<decoder name="json_parent">
    <program_name>nba_email_db</program_name>
</decoder>
 
<decoder name="json_child">
    <parent>json_parent</parent>
    <prematch>json_data: </prematch>
    <plugin_decoder offset="after_prematch">JSON_Decoder</plugin_decoder>
</decoder>
 
<decoder name="json_child">
    <parent>json_parent</parent>
    <regex>@(\S+)"</regex>
    <order>email.domain</order>
</decoder>
解析结果:
**Phase 1: Completed pre-decoding.
    full event: '2018 Apr 04 13:11:52 nba_email_db: json_data: { "name": "Stephen", "surname": "Curry", "email": "curry@gmail.com"}'
    timestamp: '2018 Apr 04 13:11:52'
    hostname: 'ubuntu18'
    program_name: 'nba_email_db'
    log: 'json_data: { "name": "Stephen", "surname": "Curry", "email": "curry@gmail.com"}'
 
**Phase 2: Completed decoding.
    decoder: 'json_parent'
    name: 'Stephen'
    surname: 'Curry'
    email: 'curry@gmail.com'
    email.domain: 'gmail.com'

 

自定制规则和解码器

场景一:自定义规则和解释器

    我们将使用local_decoder.xmllocal_rules.xml来实现一些小的更改。对于对现有解码器和规则进行更大规模的更改/添加,我们建议您创建一个新的解码器和/或规则文件在/var/ossec/etc/decoders/var/ossec/etc/rules下。

场景二:修改现有规则和解释器

修改规则如果我们想将SSH规则5710的级别值从5更改为10,我们将执行以下操作:

1、打开规则文件/var/ossec/ruleset/rules/0095-sshd_rules.xml

2、从规则文件中找到并复制对应要修改的rule代码

3、将代码粘贴到/var/ossec/etc/rules/local_rules中。,修改level值,并添加overwrite="yes",表示该规则覆盖已定义的规则。
<rule id="5710" level="10" overwrite="yes">

 

修改解释器

              1、/ruleset/decoders/0310-ssh_decoders.xml从默认文件夹转移到用户文件夹/var/ossec /etc/decoders,以保持更改。

              2、从OSSEC加载列表中排除原始的解码器文件ruleset/decoders/0310-ssh_decoders.xml。为此,在ossec .conf文件中使用标签<decoder_exclude>。因此,指定的解码器将不会从默认的解码器文件夹加载,而会加载保存在用户文件夹中的解码器文件。

              3、在/var/ossec /etc/decoders/0310-ssh_decoders.xml文件中执行更改。

例如:负责处理Windows日志的decoder就是/var/ossec/ruleset/decoders/0380-windows_decoders.xml
为了让自己修改后的规则库不会因为后期的软件包更新而被覆盖,如下操作

1、先手动复制一份原有的规则cp -a ruleset/decoders/0380-windows_decoders.xml etc/decoders/

2、修改etc/ossec.conf,在</ruleset>节点新增一行,将原有的解码器从ossec的载入列表中排除,看上去如下:

3在/var/ossec /etc/decoders/0310-ssh_decoders.xml文件中执行更改。

               

4、如果以后官方更新了0380-windows_decoders.xml,就需要手动合并新旧两个版本了。打开0380-windows_decoders.xml

              

合并后:

              

出现了两次security_id的取值,是按照先后顺序取到的。
因为无法匹配中英混合字符串,于是改为单次匹配提取,即将其原本一次性提取4个特征改为分为4次提取特征。
提取规则会跟下面有所重复,但是<order></order>是不一样的,而且是按字符串先后顺序只提取一次

比如第一次匹配到的安全ID是S-1-5-18,会作为subject.security_id的值。
第二次匹配到的安全ID是S-1-5-21-3320951223-3242959419-3755421162-500,会作为security_id的值。

每次修改规则之后,需要重新运行bin/ossec-logtest,才能验证规则是否有效。

验证通过后,重启manager以便让新规则生效,另外kibana会提示你刷新索引以便更新字段。

测试:

有这样一条日志Dec 25 20:45:02 MyHost example[12345]: User 'admin' logged from '192.168.1.100'
为了解码这条日志,需要编写自定义解码器,修改/var/ossec/etc/decoders/local_decoder.xml,name是解码规则的名称,program_name是匹配日志以example开头,regex表示用正则提取,order表示正则提取出来值依次是user,srcip。


现在修改/var/ossec/etc/rules/local_rules.xmllevel就是告警的等级。


然后运行/var/ossec/bin/ossec-logtest来测试写的规则是否能正常运作。另外这个命令还有好几个参数(-v),可以看到更详细的过程。

解释器语法:

官方链接:https://documentation.wazuh.com/3.13/user-manual/ruleset/ruleset-xml-syntax/decoders.html#parent

decoder它的属性将用于定义解码器。

parent:它将引用父解码器,当前的解码器将成为子解码器。

accumulate:它允许在多个日志消息上跟踪事件。

program_name:它定义了与解码器相关联的程序的名称。

prematch:它将在日志中寻找匹配,如果匹配,则将使用解码器。

regex:解码器将使用此选项来查找感兴趣的字段并提取它们。

orderregex将提取的值将存储在这些组中。

fts:第一次见过。

ftscomment:添加一个评论到fts

plugin_decoder:指定一个插件来进行解码。当用正则表达式提取是不可行的。

use_own_name:仅适用于子解码器。

json_null_field:添加决定如何存储JSON中的空值的选项。

json_array_structure:添加决定如何存储JSON中的数组结构的选项。

var:定义可以在同一文件中重用的变量。

decoder规则示例:

设置ossec的解码器名称:

<decoder name="ossec">

  ...

</decoder>

program_name规则示例:

定义译码器与syslogd进程相关:

<decoder name="syslogd_decoder">

  <program_name>syslogd</program_name>

  ...

</decoder>

规则语法:

官方链接:https://documentation.wazuh.com/3.13/user-manual/ruleset/ruleset-xml-syntax/rules.html

rule它开始一个新的规则和它的定义选项。

match:它将尝试在日志中找到匹配项,决定是否应该触发该规则。

regex:它的作用与match相同,但使用的是regex而不是sregex

decided_as:它将与由特定解码器解码的日志进行匹配。

if_sid:它的工作类似于父解码器。如果规则ID之前已经匹配,则它将匹配。

 

rule规则示例:

使用ID: 3151创建规则,如果规则3102在过去120秒内匹配了8次,则将触发10级警报。

<rule id="3151" level="10" frequency="8" timeframe="120">

  <if_matched_sid>3102</if_matched_sid>

  <same_source_ip />

  <description>sendmail: Sender domain has bogus MX record. </description>

  <description>It should not be sending e-mail.</description>

  <group>multiple_spam,pci_dss_11.4,gdpr_IV_35.7.d,nist_800_53_SI.4,</group>

</rule>

match规则示例: 

如果规则匹配id 100200并且日志包含队列溢出!短语在它,规则激活和触发一个3级警报。

<rule id="100001" maxsize="300" level="3">

  <if_sid>100200</if_sid>

  <match>Queue flood!</match>

  <description>Flooded events queue.</description>

</rule>

regex规则示例:

如果规则匹配id 100500,并且事件包含任何有效的IP,则触发规则并生成一个3级警报。

<rule id="100001" level="3">

  <if_sid>100500</if_sid>

  <regex>\d+.\d+.\d+.\d+</regex>

  <description>Matches any valid IP</description>

</rule>

正则表达语法:

正则表达式是定义模式的字符序列。

正则表达式有两种类型:regex (OS_Regex)和sregex (OS_Match)。

正则表达式(OS_Regex)语法

这是一个快速而简单的C语言正则表达式库。

这个库设计得很简单,同时仍然支持最常见的正则表达式。

支持表达式:   

   

编辑器:

   

        特殊字符:

           

        转义字符:

           

    注意事项(限制):

        1*+修饰符只能用于反斜杠表达式,而不能用于纯字符(例如,支持\d+,不支持0+)

              2、你不能在组中使用变更,例如(foo|bar)是不允许的

              3、不支持复杂的回溯,例如\p*\d*\s*\w*:不匹配单个冒号,因为\p*消耗冒号

              4. 匹配文字点,而\ . 匹配任何字符

              5\s只匹配ASCII空格(32),不匹配制表符等其他空格

              6、没有匹配文字插入符号、星号或加号的语法(尽管\p将匹配星号或加号以及其他一些字符)

Sregex (OS_Match) syntax

              这比OS_Regex快,但是只支持简单的字符串匹配和以下特殊字符。

测试解码器和规则

工具ossec-logtest允许我们测试事件是如何解码的,以及是否生成了警报。

运行工具/var/os /bin/os -logtest,粘贴以下日志:

Mar  8 22:39:13 ip-10-0-0-10 sshd[2742]: Accepted publickey for root from 73.189.131.56 port 57516

 

$ /var/ossec/bin/ossec-logtest

阶段2中显示的解码器名称将是父解码器的名称。此外,您可以使用“-v”选项来显示有关规则的更多信息:

 

$ /var/ossec/bin/ossec-logtest -v

自定义警报:

     配置示例:

ID T1110与暴力攻击有关。这种技术非常适合以下规则100002,该规则检测暴力破解攻击并生成警报。下面是一个如何将此技术扩展到该规则的例子。

将以下代码行添加到/var/ossec /etc/rules/local_rule.xml:

重启Wazuh,您将完成规则的配置。

如果你想配置一个规则使用两个以上的技术,你可以这样做:

     警报示例:……待更新

(个人学习笔记,若有侵权请联系我删除)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wazuh日志审计--定制规则 的相关文章

  • Vue总结第二天~自定义子组件、父子组件通信、插槽

    目录 一 组件 组件目录 1 注册组件 全局组件 局部组件和demo template模块 1 注册组件的基本步骤 2 全局组件demo 3 局部组件demo 4 template模块的简化 模板的分离写法 即将其内容封装到 templat
  • Matplotlib

    1 折线图 import matplotlib pyplot as plt import numpy as np x np linspace 1 1 50 1到1 有五十个点 y 2 x 1 plt figure num 1 figsize
  • 【计算机网络】第一章:计算机网络概述

    文章目录 1 1 计算机网络在信息时代的作用 1 2 因特网概述 1 3 三种交换方式 1 4 计算机网络的定义和分类 1 5 计算机网络的性能指标 1 6 计算机网络体系结构 计算机网络体系结构 计算机网络体系结构分层的必要性 计算机网络
  • 从gitHub当中更新项目synchronize Update fetch pull 项目的区别。

    11 从gitHub更新项目 方法一 右击你的项目 team synchronize workspace 这样他就会去gitHub那fetch回最新的版本 之后像svn一样 切换到team synchronize视图 注意服务器如有更新 而
  • Vue之插件的介绍

    简介 主要介绍Vue插件的概念 定义和使用 Vue的插件主要是用于增强功能 可以把它看作是一个工具库 可以提供很多强大的功能 比如一些强大的自定义指令 一些强大的工具方法 过滤器等 我们可以编写或者直接引入别人写的插件 就能获得强大的功能
  • odoo 权限

    创建安全组并分配用户 Odoo中的访问权限通过安全组成进行配置 给组指定权限 然后为组分配用户 每个功能区都有中枢应用所提供的基础安全组 在插件继承已有应用时 它们应对相应的组添加权限 参见本章稍后的向模型添加访问权限一节 在插件模块添中添
  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 1058 开始拿到这个题目的时候还纠结了半天 英语很差的话这个题是不可能AC的 而我就是其中之一 Humber Numbe
  • spring-boot-maven-plugin报错的修改与版本号查看

    我报错的原因是因为没加版本号 版本号是多少 可以下个everything搜spring boot maven plugin 前面的号码就是版本号了
  • [转]出租车轨迹处理(二):时空分析

    接下来就要进行一些简单的分析了 今天的目标是如何对某一感兴趣区域进行出租车数据的时空分析 一 轨迹数据预处理 这一步在上一篇文章中已经有了介绍 步骤无非就是 1 使用pandas读取数据 import pandas as pd import
  • Matlab实现粒子群算法(附上完整仿真代码)

    粒子群算法 Particle Swarm Optimization PSO 是一种群体智能算法 通过模拟自然界中鸟群 鱼群等生物群体的行为 来解决优化问题 在PSO算法中 每个个体被称为粒子 每个粒子的位置表示解空间中的一个解 每个粒子的速
  • AVL树的插入与删除(均为递归实现)

    一 引言 AVL树是带有平衡条件的二叉查找树 这个平衡条件必须要容易保持 而且它必须保证树的深度是O logN 一颗AVL树是其每个节点的左子树和右子树的高度最多差一的二叉查找树 主要介绍插入算法和删除算法 二 AVL树的结点定义 type
  • (二)RK3566 Android11固件烧录

    上一篇 一 RK3566 Android11 系统编译 文章目录 1 固件包烧录步骤 2 固件统一打包 3 固件升级 1 固件包烧录步骤 烧录工具位置 RKTools windows AndroidTool AndroidTool Rele
  • e17 enlightenment 介绍及配置

    为什么要有一个窗口管理器 为什么一定要有一个桌面背景 甚至是标题栏 或是如果把一个应用程序如firefox当成桌面背景行不行 桌面能不能再快一点 我不想把资源浪费在那些用不到的地方 Linux那么多虚拟桌面 为什么我不能在一个桌面全屏运行一
  • python django框架ORM模型及ORM操作数据库 笔记

    ORM模型介绍 随着项目的越来越大 采用写原生SQL的方式在代码中会出现大量的SQL语句 那么问题就出现了 1 SQL语句重复利用率不高 越复杂的SQL语句条件越多 代码越长 会出现很多相近的SQL语句 2 很多SQL语句是在业务逻辑中拼出
  • 深度卷积神经网络中的patch

    转载 https blog csdn net wills798 article details 97974617 在阅读基于深度卷积神经网络的图像识别 分类或检测的文献时经常看到 patch 不是很能理解 后来就总结了一下 通过阅读 pat

随机推荐

  • 【深度学习——点云】PointNet++

    这篇文章发表于NIPS 2017 是在PointNet基础上的工作 论文地址 PointNet Deep Hierarchical Feature Learning on Point Sets in a Metric Space 1 Mot
  • vue实现简单轮播图

    实现思路 将vue的框架封装在function中 在界面刷新时调用 将要轮播的图片存放在data中 还有下面的列表也分别保存在data中的一个数组中 然后每隔一段时间进行自动切换的函数写在methods中 注意函数要调用的话 就要在生命周期
  • 如何fork GitHub上的官方仓库

    在GitHub中 fork表示复制一个仓库到你自己的GitHub账号下 创建一个独立的副本 通过fork操作 你可以在自己的副本中进行修改 改进和实验 而不会影响到原始仓库或其他人的工作 当你fork一个仓库时 GitHub将会为你创建一个
  • Spring Boot(二)SpringBoot是如何启动Spring容器源码

    SpringApplication run 调用SpringApplication run启动springboot应用 1 SpringApplication run Application class args 2 使用自定义Spring
  • 使用R语言绘制散点图

    文章目录 学习目标 学习内容 内容小结 学习目标 我们所采用的学习内容来自B站的Lizongzhang老师的R语言的学习分享 今天学习的主要内容是关于 绘制散点图 学习内容 下面是学习的主要内容 直接上代码 大家可以查看视频 我也的注释也比
  • 求阶乘的三种方法

    方法一 递归算法 include
  • 【手把手带你用pid算法控制电机】——(4)串级PID控制电机

    前言 1 该系列教程是基于stm32f103c8t6最小系统板的hal库开发 用最通俗易懂的方式手把手带你学会使用Pid算法的速度环 位置环以及速度位置串级pid 2 出这一期Pid系列教程的想法是前段时间我参加了一个比赛 要用到串级Pid
  • 第1课:三位一体定位法,让写作事半功倍

    做最懂技术的传播者 最懂传播的工程师 课程内容分析 本课程的目标是 通过对一系列问题的梳理 找到适合自己的输出状态 确定与理想输出状态之间存在的差距 以及采取什么办法 减少差距 知识要点 1 受众需要什么 省时间的内容 收敛 看过就走 教你
  • Netty源码剖析之HashedWheelTimer时间轮

    版本信息 JDK1 8 Netty all 4 1 38 Final 时间轮的介绍 我们知道钟表分为很多块 每时钟滴答一次就往前走一个块 而时间轮就是使用这个思想 如下图 上图总共分为8块 每过100ms就往前走一块 然后周而复始 此时 我
  • HC32L130单片机入坑记

    解决问题的思路 经验就可提高工作效率 1 调试中遇到的问题及解决思路 1 程序debug过程中 进入hardware default中断中无限循环 解决办法 运用断点定位到程序debug出错的具体位置 程序最终执行的位置即为程序出错的位置
  • alook浏览器哪个好 夸克浏览器_夸克(Quark)浏览器的安装和使用

    前面的文章 我们大概介绍了一下夸克浏览器的 本片将着重将一下夸克浏览器的使用 下载安装 去夸克的官方网站下载安装包 上传到手机进行安装 去各大应用商店去下载安装 比如小米手机的小米应用商店 华为的华为应用商店 或者第三方的豌豆荚等应用商店去
  • flex & bison 基础概述

    1 前言 限于作者能力水平 本文可能存在谬误 因此而给读者带来的损失 作者不做任何承诺 2 本文目标 简单介绍 flex 和 bison 的基础使用方法 简要分析 flex bison 生成代码的工作流程 3 flex bison 3 1
  • 超详细讲解 H5 移动端适配方案

    目录 REM适配方案 1 前言 2 原理 3 适配代码 4 总结 vw适配方案 1 原理 2 适配代码 3 适配方案对比 1px问题 1 简述 2 代码测试 总结 REM适配方案 1 前言 设计师交付给前端开发一张宽度为750px的视觉稿
  • 重新安装ROG Armoury Crate

    文章目录 使用官方卸载工具卸载奥创 安装奥创 更新奥创之后 Aura Sync 坏了 无法调整灯光 打开 Aura Creator 提示服务运行异常 在任务管理器中随便禁用了几个奥创 Asus的服务后 再次打开 Aura Creator 提
  • 【人工智能】SVM 分类器的设计与应用(QDU)

    人工智能 Astar算法求解8数码问题 QDU 人工智能 利用 搜索的博弈树算法编写一字棋游戏 QDU 人工智能 Fisher 线性分类器的设计与实现 QDU 人工智能 感知器算法的设计实现 QDU 人工智能 SVM 分类器的设计与应用 Q
  • Linux中查看socket状态

    Linux中查看socket状态 cat proc net sockstat 这个是ipv4的 sockets used 137 TCP inuse 49 orphan 0 tw 3272 alloc 52 mem 46UDP inuse
  • 响应式布局(媒体查询+%)

    总结 核心思想 每一个最外层盒子给一个max width 盒子中的内容width全部使用 表示 使用 元素全部写在盒子里 当媒体查询满足情况是display block 注意 精确的是需要一样的 媒体查询相当于if 过渡的动画写在默认样式里
  • 读书笔记-看见未来:改变互联网世界的人们

    作者 余晨 推荐序二 未来从来不会自动地发生 世界正在重新 造物 它既是虚拟意义上的 又同时是实物意义上的 宙斯在假眠 而诸神则各逞其能 时代 曾经刊登过的一篇文章认为 今天的个人计算机革命和互联网之所以成为这样 乃是继承了20世纪60年代
  • LLVM汇编语言指导手册之指令手册

    下面是我对llvm汇编中一些不常用的指令的总结 shl 指令 语法
  • wazuh日志审计--定制规则

    日志审计 定制规则 目录布局 规则集文件夹结构如下所示 在接收到agent传来的日志后 manager会根据 var ossec ruleset decoders里面的各种规则对日志进行处理 提取到了指定字段的值之后再根据 var osse