首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 用户空间审计工具 audit(1)

Linux 用户空间审计工具 audit(1)

前言Linux auditd 工具可以将审计记录写入日志文件。包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞。本文首先介绍用户空间审计系统的结构,然后介绍主要的        audit 工具的使用方法。
Linux 用户空间审计系统简介Linux        内核有用日志记录事件的能力,包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞(如多次失败的登录尝试,或者用户对系统文件不成功的访问),这就是本文介绍的        linux 用户空间审计系统, 图 1 是 linux 用户空间审计系统示意图 。
图 1 Linux audit 架构示意图说明:图 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 命令选项 项目  可选参数  説明  filter  user,exit,task,exclude  filter 详细说明哪个内核规则匹配过滤器应用在事件中。以下是其中之一的与规则匹配的过
滤器:              task、exit、user 以及 exclude  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 审计规则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 命令列出所有活动的规则和观察器。
返回列表