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

【安全】使用auparse解析auditd审计日志

使用auparse解析auditd审计日志

1 审计日志特点

查看auditd.log的日志,审计日志的格式如下:

type=SYSCALL msg=audit(1703148319.954:11680975): arch=c000003e syscall=2 success=yes exit=5 a0=1102430 a1=0 a2=1b6 a3=24 items=1 ppid=7752 pid=7761 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts6 ses=7 comm="python" exe="/usr/bin/python2.7" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
type=CWD msg=audit(1703148319.954:11680975):  cwd="/root/"
type=PATH msg=audit(1703148319.954:11680975): item=0 name="/mnt/file_747.txt" inode=101222977 dev=08:03 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:mnt_t:s0 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1703148319.954:11680975): proctitle=707974686F6E0066696C655F726561642E7079

从外层看审计日志有两个字段:type和msg,type表示类型,意思是当前行的日志的含义,msg就是审计日志的信息。在msg里面又包含很多字段,在这些字段的开始部分的括号中有两个字段,分别表示日志时间戳和序列号:audit(timestamp:serial),时间戳是毫秒级别,而序列号是一个自增的整数,同一个事件的多行日志的时间戳和序列号是一样的。在序列号后面就是若干字段。

以上面的例子来讲解下日志的内容:

  • 第一条日志的类型是SYSCALL,表示这个是系统调用,系统调用号是2(ausyscall 2),表示open系统调用,success=yes表示调用成功,exit=5表示调用的返回值是5,也就是文件描述符的值,后面的a0~a3表示系统调用的参数,然后就是进程的一些信息,如pid、ppid、uid、comm、exe等
  • 第二条日志的类型是CWD,表示这个是当前工作路径,日志的内容就只有输出当前工作路径
  • 第三条日志的类型是PATH,表示系统调用过程中访问的路径,这里就是打开的文件的信息,例如,文件名为/mnt/file_747.txt,文件的inode号、mode等
  • 最后一条日志的类型是PROCTITLE,表示进程标题,也就是cmd,但是这个是需要解析的,无法直接看出cmd

对于这个事件的日志来说,还有一条日志没有打印出来:type=EOE msg=audit(1703151485.085:11729997):,这条日志的类型是EOE(End OF Event),表示事件的结束,由于这条日志没有内容,因此,auditd在输出到日志文件时过滤了这条日志。

虽然上面将这个事件的几条日志放在一起,但是当时间量比较大时,auditd.log中的日志是不保证顺序的,也就是说,多个事件的日志之间会串。

2 使用auparse直接audispd转发的日志

当使用audispd的af_unix插件转发审计日志时,可以直接通过connect和read读取审计日志,会发现一次可以读取到多条日志,就有可能出现日志被截断以及乱序的问题,此时,可以通过auparse进行解析。

auparse是libaudit中的解析审计日志的模块,可以很方便的提取出审计日志中的字段:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <libaudit.h>
#include <auparse.h>void handle_event(auparse_state_t *au, auparse_cb_event_t cb_event_type,void *user_data) {int type = 0;auparse_first_record(au);do {type = auparse_get_type(au);printf("type=%d\n", type);const char *val = auparse_get_record_text(au);printf("msg=%s\n", val);auparse_first_field(au);do {printf("%s=%s (%s)\n", auparse_get_field_name(au), auparse_get_field_str(au), auparse_interpret_field(au));} while(auparse_next_field(au) > 0);} while(auparse_next_record(au) > 0);printf("\n");
}int main(int argc, char *argv[]) {int sockfd;struct sockaddr_un serv_addr;ssize_t len;char buffer[1024];if (argc != 2) {printf("Usage: %s <socket_path>\n", argv[0]);exit(1);}sockfd = socket(AF_UNIX, SOCK_STREAM, 0);if (sockfd < 0) {perror("socket");exit(1);}serv_addr.sun_family = AF_UNIX;strcpy(serv_addr.sun_path, argv[1]);if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("connect");exit(1);}printf("Connected to the Unix Socket: %s\n", argv[1]);auparse_state_t *au = auparse_init(AUSOURCE_FEED, 0);if(au == NULL) {printf("auparse_init failed");exit(1);}auparse_add_callback(au, handle_event, NULL, NULL);while ((len = read(sockfd, buffer, sizeof(buffer) - 1)) > 0) {buffer[len] = '\0';auparse_feed(au, buffer, len);}if (len < 0) {perror("read");}close(sockfd);return 0;
}

在创建socket,然后connect连接到unix socket后,就调用auparse_add_callback注册事件处理的回调函数handle_event,当通过read读取到数据后,就调用auparse_feed将审计日志给到解析器,在回调函数中就可以调用auparse_类函数把数据当做链表进行处理:

  • auparse_first_record + auparse_next_record:遍历多条审计日志
  • auparse_first_field + auparse_next_field:遍历一条审计日志的多个字段
  • auparse_get_type:获取审计日志的类型
  • auparse_get_record_text:获取审计日志的完整内容

通过auparse就可以快速方便的实现字段的解析和提取,但是需要注意的是,一旦调用auparse_feed将数据给到auparse,auparse会先放到队列,然后进行解析,因此,如果审计日志量级比较大,有可能放到队列的操作会失败,也就是调用auparse_feed失败,如果想增大日志处理的吞吐量,可以创建一个比较大缓存队列,收到日志后,先放到队列,然后再从队列中取出后调用auparse_feed。

相关文章:

【安全】使用auparse解析auditd审计日志

使用auparse解析auditd审计日志 1 审计日志特点 查看auditd.log的日志&#xff0c;审计日志的格式如下&#xff1a; typeSYSCALL msgaudit(1703148319.954:11680975): archc000003e syscall2 successyes exit5 a01102430 a10 a21b6 a324 items1 ppid7752 pid7761 auid0 uid0…...

flink watermark 实例分析

WATERMARK 定义了表的事件时间属性&#xff0c;其形式为: WATERMARK FOR rowtime_column_name AS watermark_strategy_expression rowtime_column_name 把一个现有的列定义为一个为表标记事件时间的属性。该列的类型必须为 TIMESTAMP(3)/TIMESTAMP_LTZ(3)&#xff0c;且是 sche…...

系列十二(面试)、Java中的GC回收类型有哪些?

一、Java中的GC回收类型 1.1、概述 Java中的GC回收类型主要包含以下几种&#xff0c;即&#xff1a;UseSerialGC、UseParallelGC、UseConcMarkSweepGC、UseParNewGC、UseParallelOldGC、UseG1GC。 1.2、源码...

华为数通方向HCIP-DataCom H12-831题库(多选题:201-220)

第201题 在多集群RR组网中,每个集群中部署了一台RR设备及其客户机,各集群的RR与为非客户机关系,并建立IBGP全连接。以下关于BGP路由反射器发布路由规则的描述,正确的有哪些? A、若某RR从EBGP对等体学到的路由,此RR会传递给其他集群的RR B、若某RR从非客户机IBGP对等体学…...

NLP论文阅读记录 - | 使用GPT对大型文档集合进行抽象总结

文章目录 前言0、论文摘要一、Introduction二.相关工作2.1Summarization2.2 神经网络抽象概括2.2.1训练和测试数据集。2.2.2 评估。 2.3 最先进的抽象摘要器 三.本文方法3.1 查询支持3.2 文档聚类3.3主题句提取3.4 语义分块3.5 GPT 零样本总结 四 实验效果4.1数据集4.2 对比模型…...

华为全屋wifi6蜂鸟套装标准

华为政企42 华为政企 目录 上一篇华为安防监控摄像头下一篇华为企业级无线路由器...

系列二十八、如何在Oracle官网下载JDK的api文档

一、官网下载JDK的api文档 1.1、官网地址 https://www.oracle.com/java/technologies/javase-jdk21-doc-downloads.html 1.2、我分享的api.chm 链接&#xff1a;https://pan.baidu.com/s/1Bf55Fz-eMTErmQDtZZcewQ?pwdyyds 提取码&#xff1a;yyds 1.3、参考 https://ww…...

STM32-ADC模数转换器

目录 一、ADC简介 二、逐次逼近型ADC内部结构 三、STM32内部ADC转换结构 四、ADC基本结构 五、输入通道 六、转换模式 6.1单次转换&#xff0c;非扫描模式 6.2连续转换&#xff0c;非扫描模式 6.3单次转换&#xff0c;扫描模式 6.4连续转换&#xff0c;扫描模式 七、…...

谷歌手机安装证书到根目录

1、前提你已经root&#xff0c;安装好面具 2&#xff0c;下载movecert模块&#xff0c;自动帮你把证书从用户证书移动成系统证书 视频教程&#xff0c;手机为谷歌手机 https://www.bilibili.com/video/BV1pG4y1A7Cj?p11&vd_source9c0a32b00d6d59fecae05b4133f22f06 软件下…...

代码随想录 322. 零钱兑换

题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。…...

【图的应用二:最短路径】- 用 C 语言实现迪杰斯特拉算法和弗洛伊德算法

目录 一、最短路径 二、迪杰斯特拉算法 三、弗洛伊德算法 一、最短路径 假若要在计算机上建立一个交通咨询系统&#xff0c;则可以采用图的结构来表示实际的交通网络。如下图所示&#xff0c;图中顶点表示城市&#xff0c;边表示城市间的交通联系。 这个咨询系统可以回答旅…...

Qt之判断一个点是否在多边形内部(射线法)

算法思想: 以被测点Q为端点,向任意方向作射线(一般水平向右作射线),统计该射线与多边形的交点数。如果为奇数,Q在多边形内;如果为偶数,Q在多边形外。计数的时候会有一些特殊情况。这种方法适用于任意多边形,不需要考虑精度误差和多边形点给出的顺序,时间复杂度为O(n)…...

压力测试过程中内存溢出(堆溢出、栈溢出、持久代溢出)情况如何解决

在压力测试过程中&#xff0c;可能会遇到内存溢出的问题&#xff0c;其中常见的包括堆内存溢出、栈内存溢出和持久代溢出。解决这类问题需要首先理解各种内存溢出的原因和特点。 堆内存溢出&#xff1a;这种情况通常发生在稳定性压测一段时间后&#xff0c;系统报错&#xff0…...

【工业智能】音频信号相关场景

【工业智能】音频信号相关场景 DcaseDcase introduction&#xff1a;dcase2024有10个主题的任务&#xff1a; ASD硬件设备产品商 方法制造业应用场景 zenodo音频事件检测 与计算机视觉CV相对应&#xff0c;计算机听觉computer audition&#xff0c;简称CA。 Dcase 这里推荐一个…...

(PC+WAP)装修设计公司网站模板 家装公司网站源码下载

(PCWAP)装修设计公司网站模板 家装公司网站源码下载 PbootCMS内核开发的网站模板&#xff0c;该模板适用于装修设计、家装公司类等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b; PCWAP&#xff0c;同一个后台&#xff0c…...

使用opencv实现图像中几何图形检测

1 几何图形检测介绍 1.1 轮廓(contours) 什么是轮廓&#xff0c;简单说轮廓就是一些列点相连组成形状、它们拥有同样的颜色、轮廓发现在图像的对象分析、对象检测等方面是非常有用的工具&#xff0c;在OpenCV 中使用轮廓发现相关函数时候要求输入图像是二值图像&#xff0c;这…...

补题与周总结:leetcode第 376 场周赛

文章目录 复盘与一周总结2967. 使数组成为等数数组的最小代价&#xff08;中位数贪心 回文数判断&#xff09;2968. 执行操作使频率分数最大&#xff08;中位数贪心 前缀和 滑窗&#xff09; 复盘与一周总结 wa穿了第3题&#xff0c;赛时其实想到了思路&#xff1a;中位数贪心…...

js指纹库,可跟踪用户唯一性

fingerprintjs官网 资料&#xff1a; Browserleaks - Check your browser for privacy leaks...

Shell三剑客:awk(内部变量)

一、$0 &#xff1a;完整的输入记录 [rootlocalhost ~]# awk -F: {print $0} passwd.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/s…...

JVM中的虚拟机栈的动态链接部分存放到底是什么

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;每个线程在执行一个方法时都会创建一个栈帧&#xff08;Stack Frame&#xff09;&#xff0c;栈帧中包含了方法的运行时数据。栈帧通常包括局部变量表、操作数栈、动态链接、方法返回地址等部分。 动态链接 动态链接&a…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...