Linux auditd 工具可以将审计记录写入日志文件。包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞。本文首先介绍用户空间审计系统的结构,然后介绍主要的 audit 工具的使用方法。
Linux 内核有用日志记录事件的能力,包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞(如多次失败的登录尝试,或者用户对系统文件不成功的访问),这就是本文介绍的 linux 用户空间审计系统, 图 1 是 linux 用户空间审计系统示意图 。
说明:图 1 的实线代表数据流,虚线代表组件之间的控制关系。图 1 包括有两大部分:图 1 中间的是 Linux 内核中的几种系统调用(user, task, exit, exclude),图 1 右侧是一系列应用程序(auditd、audispd、auditctl、autrace、ausearch 和 aureport 等)。Linux 内核中的几种系统调用是:
从图 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 等应用程序组成。下面依次说明:
audit 主要用来记录安全信息,用于对系统安全事件的追溯;而 syslog 日志系统用来记录系统中的各种信息,如硬件警报和软件日志等。但是 syslog 属于应用层,没办法记录太多信息。audit 来记录内核信息,包括文件的读写,权限的改变等。
1
|
#yum install audit*.* -y
|
用户也可以从源码安装,源码下载地址:http://people.redhat.com/sgrubb/audit/
audit 安装后会生成 2 个配置文件: /etc/audit/auditd.conf 和/etc/audit/audit.rules 。/etc/audit/auditd.conf 是守护程序的默认配置文件。/etc/audit/audit.rules 是记录审计规则的文件。首次安装 audit 后, 审计规则文件是空的。
/etc/audit/auditd.conf 守护程序的默认配置文件是 Linux 安全审计系统最关键文件。/etc/audit/auditd.conf 文件包括如下几个部分:一般先设置 auditd 的日志文件,然后设置是否循环使用日志文件,配置日志文件大小和报警信息,设置审计规则信息
和目录观察器。下面简单设置一个 /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 命令是 Linux 用户空间审计系统的最主要的部分,命令格式:
1
|
auditctl [选项] filter,action -S syscall -F condition -k label
|
主要参数说明见表 1
-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/audit/rules.d/audit.rules 中即可实现对该文件的监视。
清单 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:
1
|
# auditctl -a always,exit -F arch=b64 -F auid=10001 -S open -k userfile
|
说明:userfile 是用户自己设置的一个规则名字,以上的都设置完毕了,就可以生成各种报告了。另外通过 auditctl 命令添加的规则不是永久有效的。 为了让他们在重新启动后有效的,可以将其添加到文件/etc/audit/rules.d/audit.rules 中。
可以使用如下命令启动服务进程:
#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 命令列出所有活动的规则和观察器。
假设 audit 服务器名称是 cyq1 ,ip 地址 192.168.0.1 ;audit 客户端名称是 cyq2 ,ip 地址 192.168.0.2 。
首先修改服务器端配置文件:
1
2
3
4
5
|
vi /etc/audit/auditd.conf
#修改第 25 行设置监听端口为 60
tcp_listen_port =60
然后重启服务
#service auditd restart
|
然后在客户端安装相关软件包并且配置文件
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 时没有使用任何选项,则会显示如汇总报表。下面是几个例子:
1
|
# aureport -ts 8:00-te 17:30 -f –i
|
1
|
# aureport -u --failed --summary –i
|
1
|
使用 ausearch 命令使用搜索记录功能
|
audit 系统附带了一个功能强大的工具,称为 ausearch 搜索审计日志。 使用 ausearch ,您可以过滤和搜索事件类型。 它还可以通过将数值转换为更加直观的值(如系统调用或用户名)来解释事件。以根用户身份执行 ausearch 命令,当显示结果时,每个记录用 4 条虚线组成的一行隔开,每个记录前均显示时间标记。图 2 是 ausearch –f /etc/group 中的结果 。
这里简单介绍一下图 2 的输出结果。
下面是几个例子:
1
|
# ausearch --messag e USER _LO G IN --success no --i nterpret
|
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
|
1
|
# ausearch --start 02/07/2017 --end 02/21/2017 no w -m SYSCALL -sv no –i
|
auditd 生成的日志文件内容非常多,如果没有设置关键字,要查找搜索审计事件记录,比较麻烦。使用关键字( key) 可以提高效率:
首先使用 auditctl 命令建立一个规则:
1
|
# auditctl -w /etc/passwd -p rwa -k passwd_changes
|
上面这个规则的意思是记录访问或修改 / etc / passwd 用户帐户数据库的任何尝试。一旦有人修改了数据库文件,可以使用如下关键字( key)搜索审计事件记录
1
|
# ausearch -k passwd_changes | less
|
上面的命令显示访问或修改 / etc / passwd 文件的日志信息,其他信息忽略。
seaudit 是 SElinux 故障诊断工具包(setools-gui)的组件。seaudit 允许用户查看和过滤日志文件的内容。它支持 syslog 和 auditd 两种日志格式,并提供查询以检查基于 SELinux 的策略日志消息。打开 seaudit 工具可以看到审计信息。从"工具"菜单中选择"监控日志",或单击"切换"监视器按钮打开和关闭实时日志监视功能。当此功能开启时,seaudit 会定期检查新消息间隔,默认为每秒。还可以配置间隔首选项对话框。如图 3 。
使用 seaudit 工具可以生成报表方法是从 tools 菜单选择"Creat Report",在"Input"选项你可以选择输出所有 audit 的日志文件或者当前的视图文件。在"Output"选项你可以选择输出 HTML 或者 txt 格式两种报告格式。然后点击"create Report"按钮保存报表文件即可。用户可以使用浏览器查看生成的报表文件查看日志文件见图 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