目前很多国产linux操作系统都带了审计管理,audit。

audit 工具可以将审计记录写入日志文件。包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全*漏*洞,如多次失败的登录尝试,或者用户对系统文件失败的访问。

架构和原理

系统运维-审计管理audit_搜索

说明:实线代表数据流,虚线代表组件之间的控制关系。包括有两大部分:

中间的是内核中的几种系统调用(user,task,exit,exclude),右侧是一系列应 用程序(auditd、audispd、auditctl、autrace、ausearch 和 aureport 等)。 Linux 内核中的几种系统调用是: User:记录用户空间中产生的事件;它的作用是过滤消息的,内核传递给审 计后台进程之前先查询它。

Task:跟踪应用程序的子进程(fork);当一个任务被创建时,也就是父进程通过 fork 和克隆创建子进程时记录该事件;

Exit:当一个系统调用结束时判断是否记录该调用;

Exclude:删除不合格事件;Exclude 是用来过滤消息的,也就是不想看到 的消息可以在这里写规则进行过滤。

audit 是内核中的一个模块,内核的运行情况都会在 audit 中记录,这个记 录的规则是由超级用户来设置的。内核的 audit 模块是由应用层的一个应用程序 auditd 来控制的。audit 产生的数据都会传送到 auditd 中,然后再由 auditd 进行其它操作。auditd.conf 是 auditd 的配置文件。audit.rules 是 audit 的 规则文件,确定 audit 的日志中记录哪些操作。它通过一个对 audit 进行控制的 应用程序 auditctl 进行操作。root 用户也可以直接调用 auditctl 进行操作。 auditd 收到的数据后会有两个去处。默认的是将日志保存在 audit.log 文件中, 默认路径/var/log/audit/audit.log。另一个通过 audispd 将日志进行分发。

用户空间审计系统由 auditd、audispd、auditctl、autrace、ausearch和 aureport 等应用程序组成。

auditctl:即时控制审计守护进程的行为的工具,如添加规则等。

auditd:audit 守护进程负责把内核产生的信息写入到硬盘上,这些信息由 应用程序和系统活动触发产生。用户空间审计系统通过 auditd 后台进程接收内核系统传送过来的审计信息,将信息写入到/var/log/audit/audit.log

aureport:查看和生成审计报告的工具。

ausearch:查找审计事件的工具 auditspd:转发事件通知给其他应用程序,而不是写入到审计日志文件中。 autrace:一个用于跟踪进程的命令。类似于 strace,跟踪某一个进程,并 将跟踪的结果写入日志文件之中。

安装和配置

dnf install audit -y

audit 安 装 后 会 生 成 2 个 配 置 文 件 :/etc/audit/auditd.conf 和/etc/audit/audit.rules。/etc/audit/auditd.conf 是守护程序的默认配置文件。 /etc/audit/audit.rules 是记录审计规则的文件。首次安装 audit 后,审计规则文 件是空的。

/etc/audit/auditd.conf 守护程序的默认配置文件是其关键文件

#vi/etc/audit/auditd.conf

#设置日志文件
log_file = /var/log/audit/audit.log
#设置日志文件轮询的数目,它是 0~99 之间的数。如果设置为小于 2,则
#不会循环日志。如果没有设置 num_logs 值,它就默认为 0,意味着从来不循环日志
num_logs = 5
#设置日志文件是否使用主机名称
name_format = NONE
#设置日志文件大小,以兆字节表示的最大日志文件容量。当达到这个容量
时,会执行 max_log_file_action 指定的动作
max_log_file = 6
#设置日志文件到达最大值后的动作,这里选择 ROTATE(轮询)
max_log_file_action = ROTAT

auditctl命令

auditctl [选项] filter,action -S syscall -F condition -k labe


项目

可选参数

说明

filter

user,exit,task,exclude

filter 详细说明哪个内核规则匹配过

滤器应用在事件中。过滤器:task、 exit、user 以及 exclud

action

always,never

是否审核事件(always 表示是)

(never 表示否)

syscall

all,2,open 等

所 有 的 系 统 调 用 都 可 以 在

/usr/include/asm/unistd_64.h 文 件中找到。

condition

euid=0,arch=b64

详细说明其他选项,进一步修改规则

来与特定架构、组 ID、进程 ID 和其 他内容为基础的事件相匹

label

任意文字

标记审核事件并检索日志

-S 表示系统调用号或名字;

-F 表示规则域; -k 表示设置审计规则上的过滤关键。

audit审计规则

  • 控制规则

这些规则用于更改审计系统本身的配置和设置。

控制规则可以在/etc/audit/audit.rules 中设置。主要包括:

-D#删除所有当前装载的审核规则#

-b 8192#在内核中设定最大数量的已存在的审核缓冲区为 8Mb#

-e 2 #锁定审核配置#

  • 文件系统规则

这些事文件或者目录监视,使用这些规则,可以审核特定文件或者目录的任何类型的访问

可以通过 auditctl 命令设置。监控文件系统行为(依靠文件、目录的权限

属性来识别) 规则格式:

-w 路径;

-p 权限;

-k 关键字;

其中-p权限的动作分为四种

r — 读取文件或者目录;

w — 写入文件或者目录;

x — 运行文件或者目录;

a — 改变在文件或者目录中的属性。

#监控/etc/passwd
auditctl -w /etc/passwd -p wa

#记录每次读取或者修改/etc/hosts文件的尝试
auditctl -w /etc/hosts -p wa -k hosts_change
  • 系统调用规则

这些规则用于监视由任何进程或特定用户进行的系统调用

系统调用的监控:

-a 添加一条系统调用监控规则;

-S 显示需要监测的系统调用的名称;

显示规则和删除规则

-D 删除所有规则;

-d 删除一条规则和-a 对应;

-w 写入文件或者目录;

-W 删除一条规则和-w 对应;

-l 列出所有规则。

#定义记录哪些文件,特定用户(UID为10001)访问和标签的日志条目规则
auditctl -a always,exit -F arch=b64 -F auid=10001 -S open -k userfile

userfile 是用户自己设置的一个规则名字,以上的都设置完毕了,就可以生成报告了。另外通过 auditctl 命令添加的规则不是永久有效的。为了让 他 们 在 重 新 启 动 后 有 效 的 , 可 以 将 其 添 加 到 文 件 /etc/audit/rules.d/audit.rules 中

守护进程

#启动
systemctl start auditd
#自起
systemctl enable auditd
#停止
systemctl stop auditd
#列出所有活动的规则和观察器

aureport

生成审计报表

#生成特定时间段的报告
aureport -ts 8:00 -te 17:30 -f -i

#生成所有用户失败事件的总结报告
aureport -u --failed --summary -i

#生成系统调用事件的报告
aureport -s -i --summary

ausearch

过滤和搜索事件类型,还可以将数值转换为加直观的值(如系统调用或用户名)来解释事件。以 root 用户执行 ausearch命令,当显示结果时,每个记录用 4 条虚线组成的一行隔开,每个记录前均显 示时间标记

ausearch -f /etc/passwd

系统运维-审计管理audit_日志文件_02

输出结果介绍:

  • time:审计时间;
  • name:审计对象;
  • cwd:当前路径;
  • syscall:相关的系统调用;
  • auid:审计用户 ID;
  • uid 和 gid:访问文件的用户 ID 和用户组 ID;
  • comm:用户访问文件的命令
  • exe 可执行文件路径

使用举例

#搜索系统登录失败
usearch --message USER_LOGIN --success no –interpret

#搜索账户,群组,校色变更
ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m\
USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m\
ROLE_ASSIGN -m ROLE_REMOVE -i

#搜索从制定时间段的失败的系统调用
ausearch --start yesterday --end now -m SYSCALL -sv no -i


使用关键字搜索审计事件记录

auditd 生成的日志文件内容比较多,如果没有设置关键字,要查找搜索审计事件记录,使用关键字(key)可以提高效率。

#使用auditctl建立一个规则
#是记录访问或修改/etc/passwd 用户帐户数据库的任
#何尝试。一旦有人修改了数据库文件,可以使用如下关键字(key)搜索审计事
#件记录
auditctl -w /etc/passwd -p rwa -k passwd_changes

#使用关键字key搜索审计事件记录
#显示访问或修改/etc/passwd 文件的日志信息,其他信息忽略
ausearch -k passwd_changes | less