当前位置: 首页 > news >正文

【主机入侵检测】Wazuh解码器之JSON解码器

在这里插入图片描述

前言

Wazuh 是一个开源的安全平台,它使用解码器(decoders)来从接收到的日志消息中提取信息。解码器将日志信息分割成字段,以便进行分析。Wazuh 解码器使用 XML 语法,允许用户指定日志数据应该如何被解析和规范化。解码器的工作分为两个阶段:预解码(pre-decoding)和解码(decoding)。在预解码阶段,如果存在类似 syslog 的头部,会提取时间戳、主机名和程序名等一般信息。在随后的解码阶段,解码器解析并解释剩余的日志数据,提取更多相关信息。
Wazuh 内置了一个专门用于 JSON 格式日志的 JSON 解码器。用户还可以创建自定义解码器,以适应特定的需求并提高检测能力。

JSON 解码器

JSON解码器能够提取数字、字符串、布尔值、空值、数组和对象等数据类型。提取的字段被存储为动态字段(即不属于Wazuh内置类型字段),可以被规则引用。下面示例展示Wazuh对Suricata(开源的网络入侵检测)生成的告警日志进行解码操作,Suricata告警日志为JSON格式。

Suricata日志

{
“timestamp”: “2023-05-02T17:46:48.515262+0000”,
“flow_id”: 1234,
“in_iface”: “eth0”,
“event_type”: “alert”,
“src_ip”: “16.10.10.10”,
“src_port”: 5555,
“dest_ip”: “16.10.10.11”,
“dest_port”: 80,
“proto”: “TCP”,
“alert”: {
“action”: “allowed”,
“gid”: 1,
“signature_id”: 2019236,
“rev”: 3,
“signature”: “ET WEB_SERVER Possible CVE-2014-6271 Attempt in HTTP Version Number”,
“category”: “Attempted Administrator Privilege Gain”,
“severity”: 1
},
“payload”: “21YW5kXBtgdW5zIGRlcHJY2F0QgYWI”,
“payload_printable”: “this_is_an_example”,
“stream”: 0,
“host”: “suricata.com”
}

JSON解码器无需依赖Suricata解码器即可从JSON日志中提取每个字段的内容。接下来,我们可以在Wazuh服务器上运行Wazuh自带的wazuh-logtest工具来解析这段日志,该工具会将预解码、解码阶段和规则匹配结果输出到终端,方便我们学习解码器运行过程。该工具默认在/var/ossec/bin/wazuh-logtest路径下。下面是该工具对日志解析结果:

Type one log per line{"timestamp":"2023-05-02T17:46:48.515262+0000","flow_id":1234,"in_iface":"eth0","event_type":"alert","src_ip":"16.10.10.10","src_port":5555,"dest_ip":"16.10.10.11","dest_port":80,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2019236,"rev":3,"signature":"ET WEB_SERVER Possible CVE-2014-6271 Attempt in HTTP Version Number","category":"Attempted Administrator Privilege Gain","severity":1},"payload":"21YW5kXBtgdW5zIGRlcHJY2F0QgYWI","payload_printable":"this_is_an_example","stream":0,"host":"suricata.com"}**Phase 1: Completed pre-decoding.**Phase 2: Completed decoding.name: 'json'alert.action: 'allowed'alert.category: 'Attempted Administrator Privilege Gain'alert.gid: '1'alert.rev: '3'alert.severity: '1'alert.signature: 'ET WEB_SERVER Possible CVE-2014-6271 Attempt in HTTP Version Number'alert.signature_id: '2019236'dest_ip: '16.10.10.11'dest_port: '80'event_type: 'alert'flow_id: '1234'host: 'suricata.com'in_iface: 'eth0'payload: '21YW5kXBtgdW5zIGRlcHJY2F0QgYWI'payload_printable: 'this_is_an_example'proto: 'TCP'src_ip: '16.10.10.10'src_port: '5555'stream: '0'timestamp: '2023-05-02T17:46:48.515262+0000'**Phase 3: Completed filtering (rules).id: '86601'level: '3'description: 'Suricata: Alert - ET WEB_SERVER Possible CVE-2014-6271 Attempt in HTTP Version Number'groups: '['ids', 'suricata']'firedtimes: '1'mail: 'False'
**Alert to be generated.

Wazuh解码器的预解码阶段和解码阶段的解码结果分别对应着上面(Phase 1和Phase 2),规则匹配阶段为(Phase 3)。通过查看每个阶段的输出我们可以看到,Wazuh在预解码和解码阶段已经成功的将Suricata日志中关键信息提取,并且在规则匹配阶段命中了ID为86601的规则。

偏移(offset)

Wazuh解码器的offset属性允许解码器跳过日志的一部分来进行解码操作。此机制适用于所解码的日志中既包含JSON格式数据,还包含其它类型的数据。例如,我们收到一段日志如下所示,既包含JSON数据,也包含日志的元信息。

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”}

分析上面的日志信息,真正的JSON格式数据是字符串"player_information"之后的信息,我们需要告诉JSON解码器从该字符串开始进行解码操作。下面是我们通过配置offset属性来完成跳过功能。

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

重点关注<prematch>标签和<plugin_decoder offset=“after_prematch”>标签,其它的标签含义会在后面的文章中介绍。前者表示该解码器要想执行解码操作,日志中必须包含"player_information: "字符串。后者表示使用JSON_Decoder作为解码插件,解码所匹配的日志,offset属性表示跳过<prematch>所匹配的字符串,即"player_information: "

配置好解码器后使用wazuh-logtest工具解析解析这段日志结果如下:

Type one log per line2018 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"}**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'program_name: 'nba_program'**Phase 2: Completed decoding.name: 'raw_json'name: 'Stephen'number: '30'position: 'point guard'surname: 'Curry'team: 'Golden State Warriors'

正是我们期望的结果,JSON解码器会忽略掉日志中非JSON格式的日志内容。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能计算方法与实现2|模拟退火算法原理|工具箱及其应用
  • 斯洛文尼亚秋季徒步旅游 | 领略最美秋色!
  • 随身WiFi实测,真相让你大跌眼镜!随身携带的随身wifi哪个比较好?什么品牌的随身wifi好用?
  • 高级编程--第四章 输入和输出处理
  • PhpStorm 中配置调试功能的详尽指南
  • pyenv -- 一款macos下开源的多版本python环境安装管理工具 国内加速版安装 + 项目venv虚拟环境 pip加速 使用与总结
  • React学习-hooks
  • 【多线程】概述
  • 安全检查报告模板
  • 用c写一个谁考了第k名
  • Maptr
  • 2024数博会技术成果回顾 | KPaaS助力企业数智化转型
  • .net通过类组装数据转换为json并且传递给对方接口
  • 基于Spring和MybatisPlus下的Oracle转mysql语句语法适配修改
  • 使用Aqua进行WebUI测试(Pytest)——介绍篇(附汉化教程)
  • $translatePartialLoader加载失败及解决方式
  • [译]如何构建服务器端web组件,为何要构建?
  • C++入门教程(10):for 语句
  • CODING 缺陷管理功能正式开始公测
  • crontab执行失败的多种原因
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • C语言笔记(第一章:C语言编程)
  • Druid 在有赞的实践
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • jdbc就是这么简单
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • React Native移动开发实战-3-实现页面间的数据传递
  • 产品三维模型在线预览
  • 彻底搞懂浏览器Event-loop
  • 计算机常识 - 收藏集 - 掘金
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端知识点整理(待续)
  • 微信小程序填坑清单
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​TypeScript都不会用,也敢说会前端?
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #define 用法
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #预处理和函数的对比以及条件编译
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)STL算法之元素计数
  • (a /b)*c的值
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (纯JS)图片裁剪
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (六)软件测试分工
  • (十六)视图变换 正交投影 透视投影
  • (十三)Flask之特殊装饰器详解
  • (四)汇编语言——简单程序
  • (转)3D模板阴影原理
  • (转)jdk与jre的区别