【安全】使用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的日志,审计日志的格式如下: typeSYSCALL msgaudit(1703148319.954:11680975): archc000003e syscall2 successyes exit5 a01102430 a10 a21b6 a324 items1 ppid7752 pid7761 auid0 uid0…...
flink watermark 实例分析
WATERMARK 定义了表的事件时间属性,其形式为: WATERMARK FOR rowtime_column_name AS watermark_strategy_expression rowtime_column_name 把一个现有的列定义为一个为表标记事件时间的属性。该列的类型必须为 TIMESTAMP(3)/TIMESTAMP_LTZ(3),且是 sche…...
系列十二(面试)、Java中的GC回收类型有哪些?
一、Java中的GC回收类型 1.1、概述 Java中的GC回收类型主要包含以下几种,即: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 链接:https://pan.baidu.com/s/1Bf55Fz-eMTErmQDtZZcewQ?pwdyyds 提取码:yyds 1.3、参考 https://ww…...
STM32-ADC模数转换器
目录 一、ADC简介 二、逐次逼近型ADC内部结构 三、STM32内部ADC转换结构 四、ADC基本结构 五、输入通道 六、转换模式 6.1单次转换,非扫描模式 6.2连续转换,非扫描模式 6.3单次转换,扫描模式 6.4连续转换,扫描模式 七、…...
谷歌手机安装证书到根目录
1、前提你已经root,安装好面具 2,下载movecert模块,自动帮你把证书从用户证书移动成系统证书 视频教程,手机为谷歌手机 https://www.bilibili.com/video/BV1pG4y1A7Cj?p11&vd_source9c0a32b00d6d59fecae05b4133f22f06 软件下…...
代码随想录 322. 零钱兑换
题目 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。…...
【图的应用二:最短路径】- 用 C 语言实现迪杰斯特拉算法和弗洛伊德算法
目录 一、最短路径 二、迪杰斯特拉算法 三、弗洛伊德算法 一、最短路径 假若要在计算机上建立一个交通咨询系统,则可以采用图的结构来表示实际的交通网络。如下图所示,图中顶点表示城市,边表示城市间的交通联系。 这个咨询系统可以回答旅…...
Qt之判断一个点是否在多边形内部(射线法)
算法思想: 以被测点Q为端点,向任意方向作射线(一般水平向右作射线),统计该射线与多边形的交点数。如果为奇数,Q在多边形内;如果为偶数,Q在多边形外。计数的时候会有一些特殊情况。这种方法适用于任意多边形,不需要考虑精度误差和多边形点给出的顺序,时间复杂度为O(n)…...
压力测试过程中内存溢出(堆溢出、栈溢出、持久代溢出)情况如何解决
在压力测试过程中,可能会遇到内存溢出的问题,其中常见的包括堆内存溢出、栈内存溢出和持久代溢出。解决这类问题需要首先理解各种内存溢出的原因和特点。 堆内存溢出:这种情况通常发生在稳定性压测一段时间后,系统报错࿰…...
【工业智能】音频信号相关场景
【工业智能】音频信号相关场景 DcaseDcase introduction:dcase2024有10个主题的任务: ASD硬件设备产品商 方法制造业应用场景 zenodo音频事件检测 与计算机视觉CV相对应,计算机听觉computer audition,简称CA。 Dcase 这里推荐一个…...
(PC+WAP)装修设计公司网站模板 家装公司网站源码下载
(PCWAP)装修设计公司网站模板 家装公司网站源码下载 PbootCMS内核开发的网站模板,该模板适用于装修设计、家装公司类等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; PCWAP,同一个后台,…...
使用opencv实现图像中几何图形检测
1 几何图形检测介绍 1.1 轮廓(contours) 什么是轮廓,简单说轮廓就是一些列点相连组成形状、它们拥有同样的颜色、轮廓发现在图像的对象分析、对象检测等方面是非常有用的工具,在OpenCV 中使用轮廓发现相关函数时候要求输入图像是二值图像,这…...
补题与周总结:leetcode第 376 场周赛
文章目录 复盘与一周总结2967. 使数组成为等数数组的最小代价(中位数贪心 回文数判断)2968. 执行操作使频率分数最大(中位数贪心 前缀和 滑窗) 复盘与一周总结 wa穿了第3题,赛时其实想到了思路:中位数贪心…...
js指纹库,可跟踪用户唯一性
fingerprintjs官网 资料: Browserleaks - Check your browser for privacy leaks...
Shell三剑客:awk(内部变量)
一、$0 :完整的输入记录 [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虚拟机(JVM)中,每个线程在执行一个方法时都会创建一个栈帧(Stack Frame),栈帧中包含了方法的运行时数据。栈帧通常包括局部变量表、操作数栈、动态链接、方法返回地址等部分。 动态链接 动态链接&a…...
Leetcode 55 跳跃游戏
题意理解: 非负整数数组 nums, 最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 需要跳到nums最后一个元素即为成功。 目标:是否能够跳到最后一个元素。 解题思路: 使用贪心算法来解题,需要理解…...
构建陪诊预约系统:技术实战指南
在医疗科技的飞速发展中,陪诊预约系统的应用为患者和陪诊人员提供了更为便捷和贴心的服务。本文将带领您通过技术实现,构建一个简单而实用的陪诊预约系统,以提升医疗服务的效率和用户体验。 技术栈选择 在开始之前,我们需要选择…...
windows和linux将文件删除至回收站【C++】【Go】语言实现
目录 C Windows平台 Linux平台 开平台,代码合并 Go 实现步骤 Go语言实现示例 go单独的windows版本实现 代码解释 C 在C中,将文件移动到回收站的实现在Linux和Windows平台上是不同的。首先,我会为你提供在Windows平台上实现的代码示例…...
10 Vue3中v-html指令的用法
概述 v-html主要是用来渲染富文本内容,比如评论信息,新闻信息,文章信息等。 v-html是一个特别不安全的指令,因为它会将文本以HTML的显示进行渲染,一旦文本里面包含一些恶意的js代码,可能会导致整个网页发…...
华为数通方向HCIP-DataCom H12-831题库(多选题:181-200)
第181题 如图所示,R1、R2、R3、R4都部署为SPF区域0,链路的cost值如图中标识。R1、R2R3、R4的Loopback0通告入OSPF。R1、R2、R3与R4使用Loopback0作为连接接口,建立BGP对等体关系,其中R4为RR设备,R1、R2、R3是R4的客户端。当R4的直连地址172.20,1,4/32通告入BGP后,以下关R…...
DC-磁盘管理
2023年全国网络系统管理赛项真题 模块B-Windows解析 题目 在DC2上安装及配置软RAID 5。在安装好的DC2虚拟机中添加三块10G虚拟磁盘。组成RAID 5,磁盘分区命名为卷标H盘:Raid5。手动测试破坏一块磁盘,做RAID磁盘修复,确认RAID 5配置完毕。配置步骤 关闭虚拟机,添加3块10G磁…...
使用Docker运行镜像文件与设置端口
1,创建镜像文件前准备 # 使用基础镜像FROM alpine:latest# 设置工作目录WORKDIR /app# 复制应用程序文件到镜像中COPY . .# 暴露容器的端口 不会自动将容器的端口映射到宿主机上 docker run -d -p <宿主机端口>:7080 <镜像名称>EXPOSE 7080# 定义容器启…...
Centos 8.5 Oracle12c安装
由于多次安装踩坑,所以本次写了一份12c安装的完整版。可以直接使用。 一、安装数据库基本信息 名称 值 主机名 database 操作系统 CentOS Linux release 8.5.2111 Oracle用户名/密码 oracle Oracle 版本 12c Enterprise Edition Release 12.2.0.1.0 oracle…...
Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现
Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 在Apache Tomcat中发现了一个被归类为关键的漏洞,该漏洞在8.5.4(Application Server Soft ware)以下。受影响的是组…...
ChatGLM3-6B 的调用参数说明,chat 与stream_chat 接口函数的参数说明
ChatGLM3-6B 是一个语言大模型,最近在评估这个模型,但发现它的文档有限,只能从demo代码中猜测调用的参数的含义,准确度是有限的;于是,通过查看源代码来研究,目前整理笔记如下: Chat…...
网站标题优化排名/百度网站官网入口网址
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便一、目标样式我们要实现上图中的效果,需要如下的操作:1.从工具栏上的”Smobiler Components”拖动一个一个TableView控件到窗体界面上2.…...
如何做网站 seo/今天热点新闻
1 序列化与反序列化 如果要将一个系统内的数据通过网络传输给其它系统或客户端,我们通常都需要先把这些数据转化为字符串或字节串,而且需要规定一种统一的数据格式才能让数据接收端正确解析并理解这些数据的含义。XML是早期被广泛使用的数据交换格式&…...
网站后台运营怎么做/今天的头条新闻
3月25日 周日去练了半天滑翔机,四块电池,慢速飞,重点是做动作和通场。一切顺利。3月26日,单位有事,暂停一天。3月27日,练习一天。上午去了看了看口试题目,回忆了下,想不起来的翻了翻…...
如何做网站赌博的教程/怎么做seo
android:stretchMode"columnWidth" <!--如何填满空余的位置,模拟器采用WVGA800*480,每排4列,有4*100+5*3=415,还余65px的空间,如果是columnWidth࿰…...
濮阳做网站的公司有哪些/枸橼酸西地那非片功效效及作用
G - 一行盒子 你有一行盒子,从左到右依次编号为1, 2, 3,…, n。你可以执行四种指令: 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令)。 2 X Y表示把盒子X移动到盒子Y右边(如果X已经在Y的右边则忽略…...
自己做网站需要买什么/游戏推广论坛
一、Android Studio使用夜神模拟器进行调试开发: 1、首先打开Android Studio工具,然后再运行夜神模拟器 2、打开夜神模拟器bin运行目录(如cd D:\Nox\bin) 3、cmd执行命令:nox_adb.exe connect 127.0.0.1:62001&…...