Linux 用户空间审计工具 audit

前言

Linux auditd 工具可以将审计记录写入日志文件。包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞。本文首先介绍用户空间审计系统的结构,然后介绍主要的 audit 工具的使用方法。

Linux 用户空间审计系统简介

Linux 内核有用日志记录事件的能力,包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞(如多次失败的登录尝试,或者用户对系统文件不成功的访问),这就是本文介绍的 linux 用户空间审计系统, 图 1 是 linux 用户空间审计系统示意图 。

图 1 Linux audit 架构示意图
Linux 用户空间审计工具 audit_第1张图片

说明:图 1 的实线代表数据流,虚线代表组件之间的控制关系。图 1 包括有两大部分:图 1 中间的是 Linux 内核中的几种系统调用(user, task, exit, exclude),图 1 右侧是一系列应用程序(auditd、audispd、auditctl、autrace、ausearch 和 aureport 等)。Linux 内核中的几种系统调用是:

  • User :记录用户空间中产生的事件;它的作用是过滤消息的,内核传递给审计后台进程之前先查询它。
  • Task:跟踪应用程序的子进程(fork);当一个任务被创建时,也就是父进程通过 fork 和克隆创建子进程时记录该事件;
  • Exit:当一个系统调用结束时判断是否记录该调用;
  • Exclude:删除不合格事件;Exclude 是用来过滤消息的,也就是不想看到的消息可以在这里写规则进行过滤。

从图 1 可以看到 audit 是内核中的一个模块,内核的运行情况都会在 audit 中记录,当然这个记录的规则是由超级用户来设置的。内核的 audit 模块是由应用层的一个应用程序 auditd 来控制的。audit 产生的数据都会传送到 auditd 中,然后再由 auditd 进行其它操作。auditd.conf 是 auditd 的配置文件,确定 auditd 是如何启动的,日志文件放在哪里等等。audit.rules 是 audit 的规则文件,确定 audit 的日志中记录哪些操作。它通过一个对 audit 进行控制的应用程序 auditctl 进行操作。root 用户也可以直接调用 auditctl 进行操作。auditd 收到的数据后会有两个去处。默认的是将日志保存在 audit.log 文件中,默认路径/var/log/audit/audit.log。另一个通过 audispd 将日志进行分发。要使用安全审计系统可采用下面的步骤:首先安装软件包。然后设置配置文件、配置常用命令,添加审计规则,然后启用 audit 守护进程并开始进行日志记录,最后通过生成审计报表和搜索日志来周期性地分析数据。

Linux 用户空间审计系统由 auditd、audispd、auditctl、autrace、ausearch 和 aureport 等应用程序组成。下面依次说明:

  • auditctl : 即时控制审计守护进程的行为的工具,如添加规则等。
  • auditd :audit 守护进程负责把内核产生的信息写入到硬盘上,这些信息由应用程序和系统活动触发产生。用户空间审计系统通过 auditd 后台进程接收内核审计系统传送来的审计信息,将信息写入到 /var/log/audit/audit.log。
  • aureport : 查看和生成审计报告的工具。
  • ausearch : 查找审计事件的工具
  • auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中。
  • autrace : 一个用于跟踪进程的命令。类似于 strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中。

audit 和 syslog 日志系统的关系

audit 主要用来记录安全信息,用于对系统安全事件的追溯;而 syslog 日志系统用来记录系统中的各种信息,如硬件警报和软件日志等。但是 syslog 属于应用层,没办法记录太多信息。audit 来记录内核信息,包括文件的读写,权限的改变等。

安装 audit 软件包并且配置审计守护进程

使用 yum 工具安装软件包

清单 1.安装软件包
1
#yum install audit*.* -y

用户也可以从源码安装,源码下载地址:http://people.redhat.com/sgrubb/audit/

了解 audit 配置文件

audit 配置文件简介

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

理解/etc/audit/audit.conf 文件

/etc/audit/auditd.conf 守护程序的默认配置文件是 Linux 安全审计系统最关键文件。/etc/audit/auditd.conf 文件包括如下几个部分:一般先设置 auditd 的日志文件,然后设置是否循环使用日志文件,配置日志文件大小和报警信息,设置审计规则信息

和目录观察器。下面简单设置一个 /etc/audit/auditd.conf

清单 2. /etc/audit/auditd.conf 配置例子
1
2
3
4
5
6
7
8
9
10
11
#vi /etc/audit/auditd.conf
#第 5 行设置日志文件
log_file = /var/log/audit/audit.log
#第 11 行设置日志文件轮询的数目,它是 0~99 之间的数。如果设置为小于 2,则不会循环日志。如果没有设置 num_logs 值,它就默认为 0,意味着从来不循环日志文件
num_logs = 5
#第 14 行设置日志文件是否使用主机名称,一般选 NONE
name_format = NONE
#第五行设置日志文件大小,以兆字节表示的最大日志文件容量。当达到这个容量时,会执行 max_log_file _action 指定的动作
max_log_file = 6
#第 17 行设置日志文件到达最大值后的动作,这里选择 ROTATE(轮询)
max_log_file_action = ROTATE

清单 2 是笔者在 CentOS 7 下的配置,其他参数可以选择缺省值。

auditctl 命令简介

auditctl 命令是 Linux 用户空间审计系统的最主要的部分,命令格式:

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

主要参数说明见表 1

表 1. auditctl 命令选项

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

-F 表示规则域。

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

了解 audit 审计规则

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/audit/rules.d/audit.rules 中即可实现对该文件的监视。

清单 3 例子的审核规则记录了每次读取或者修改/etc/hosts 文件的尝试:

清单 3. 审核规则记录了每次读取或者修改/etc/hosts 文件的尝试
1
#auditctl -w /etc/hosts -p wa -k hosts_change

系统调用规则

监控系统调用可能会引起高负荷的日志活动,这会让内核承受更大的负荷。所以要慎重衡量哪些系统调用需要放到 audit.rules 中。如果审计的是目录的话,只能对该目录本身的属性进行审计。如果想审计下面的文件,需要一一列出。

系统调用的监控:

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

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

显示规则和删除规则:

-D 删除所有规则

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

-w 写入文件或者目录。

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

-l 列出所有规则

清单 4 的命令用来定义特定用户(这里假设是 UID 为 10001)访问日志,规则是 userfile:

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

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

启动 auditd 守护进程

可以使用如下命令启动服务进程:

#service auditd start

要使它自动在运行时启动,则应作为根用户执行命令:

#systemctl enable auditd

要停止它,可使用 service auditd stop 命令,重启 auditd, 可使用 service auditd restart 命令,service auditd reload 或者 service auditd force-reload 命令用来重新加载 auditd 在/etc/audit/auditd.conf 文件中的配置。service auditd rotate 命令在/var/log/audit/目录中旋转日志文件。service auditd resume 命令在推迟审核事件日志之后重新开始,例如存在没有足够的磁盘分区空间来保存审核日志文件情况。service auditd status 命令显示运行状态。要验证规则,应以根用户身份执行 auditctl -1 命令列出所有活动的规则和观察器。

配置 auditd 的日志文件到远程主机

假设 audit 服务器名称是 cyq1 ,ip 地址 192.168.0.1 ;audit 客户端名称是 cyq2 ,ip 地址 192.168.0.2 。

首先修改服务器端配置文件:

清单 5 修改服务器端配置文件
1
2
3
4
5
vi /etc/audit/auditd.conf
#修改第 25 行设置监听端口为 60
tcp_listen_port =60
然后重启服务
#service auditd restart

然后在客户端安装相关软件包并且配置文件

清单 6 客户端安装相关软件包并且配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#yum -y install audispd-plugins
修改配置文件
#vi /etc/audisp/plugins.d/au-remote.conf
# 修改第 6 行,把审核日志发送到日志服务器
active =yes
#vi /etc/audisp/audisp-remote.conf
#修改第 6 行
remote_server =cyq1
#修改第 7 行设置监听端口为 60
port = 60
#vi /etc/audit/auditd.conf
#修改第 6 行
log_format =NOLOG
然后重启服务
#service auditd restart

使用 aureport 命令生成审计消息的报表

要生成审计消息的报表,可使用 aureport 命令。如果执行 aureport 时没有使用任何选项,则会显示如汇总报表。下面是几个例子:

清单 7 生成一段特定时间内的报告
1
# aureport -ts 8:00-te 17:30 -f –i
清单 8 生成所有用户失败事件的总结报告:
1
# aureport -u --failed --summary –i
清单 9 生成系统调用事件报告# aureport -s -i --summary
1
使用 ausearch 命令使用搜索记录功能

audit 系统附带了一个功能强大的工具,称为 ausearch 搜索审计日志。 使用 ausearch ,您可以过滤和搜索事件类型。 它还可以通过将数值转换为更加直观的值(如系统调用或用户名)来解释事件。以根用户身份执行 ausearch 命令,当显示结果时,每个记录用 4 条虚线组成的一行隔开,每个记录前均显示时间标记。图 2 是 ausearch –f /etc/group 中的结果 。

图 2 ausearch –f /etc/group 中的结果
Linux 用户空间审计工具 audit_第2张图片

这里简单介绍一下图 2 的输出结果。

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

下面是几个例子:

清单 10 搜索系统登录失败,使用如下命令:
1
# ausearch --messag e USER _LO G IN --success no --i nterpret
清单 11 搜索所有的账户,群组,角色变更,使用以下命令:
1
# ausearch -m ADD _USER -m DEL_USER -m ADD _GROUP -m USER _CHAUT HTOK -m D EL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i
清单 12 搜寻从制定时间段的失败的系统调用,使用以下命令:
1
# ausearch --start 02/07/2017 --end 02/21/2017 no w -m SYSCALL -sv no –i

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

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

首先使用 auditctl 命令建立一个规则:

清单 13 使用 auditctl 命令建立一个规则
1
# auditctl -w /etc/passwd -p rwa -k passwd_changes

上面这个规则的意思是记录访问或修改 / etc / passwd 用户帐户数据库的任何尝试。一旦有人修改了数据库文件,可以使用如下关键字( key)搜索审计事件记录

清单 14 使用关键字( key)搜索审计事件记录
1
# ausearch -k passwd_changes | less

上面的命令显示访问或修改 / etc / passwd 文件的日志信息,其他信息忽略。

使用图形化工具 seaudit

seaudit 是 SElinux 故障诊断工具包(setools-gui)的组件。seaudit 允许用户查看和过滤日志文件的内容。它支持 syslog 和 auditd 两种日志格式,并提供查询以检查基于 SELinux 的策略日志消息。打开 seaudit 工具可以看到审计信息。从"工具"菜单中选择"监控日志",或单击"切换"监视器按钮打开和关闭实时日志监视功能。当此功能开启时,seaudit 会定期检查新消息间隔,默认为每秒。还可以配置间隔首选项对话框。如图 3 。

图 3 配置视图
Linux 用户空间审计工具 audit_第3张图片

使用 seaudit 工具可以生成报表方法是从 tools 菜单选择"Creat Report",在"Input"选项你可以选择输出所有 audit 的日志文件或者当前的视图文件。在"Output"选项你可以选择输出 HTML 或者 txt 格式两种报告格式。然后点击"create Report"按钮保存报表文件即可。用户可以使用浏览器查看生成的报表文件查看日志文件见图 4。

图 4 使用浏览器查看生成的报表文件
Linux 用户空间审计工具 audit_第4张图片

说明:使用 seaudit 工具建立 HTML 格式的报表的话先要下载两个格式文件 seaudit-report.conf 和 seaudit-report.css 到/usr/sharre/setools-3.3/目录下,下载网站是https://github.com/TresysTechnology/setools3/tree/master/seaudit 。

总结

Linux 提供了用来记录系统安全信息的审计系统,使用 Audit 系统您可以在应用程序执行期间获取以下信息。发生错误的时间、哪个文件导致错误、原因是什么?、什么进程导致了错误等等。如果你能熟练掌握它,我认为这是非常有用的系统管理和安全管理工具。

参考资料

Linux 审核系统项目页 :http://people.redhat.com/sgrubb/audit/。

Linux Audit Quick Start SUSE Linux Enterprise 11 SP1 http://www.suse.com/documentation/sled11/pdfdoc/sled11_auditquickstart/sled11_auditquickstart.pdf

红帽企业版 Linux 7 安全性指南 :https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/pdf/Security_Guide/Red_Hat_Enterprise_Linux-7-Security_Guide-zh-CN.pdf


转载至https://www.ibm.com/developerworks/cn/linux/l-lo-use-space-audit-tool/index.html

你可能感兴趣的:(Linux)