Linux 提供了用来记录系统安全信息的审计系统,使用 audit 系统可以在应用程序执行期间获取比如发生错误的时间,哪个文件导致错误以及原因,什么进程导致了错误等等信息。
用户空间审计系统
Linux内核拥有包括记录系统调用和文件访问等的日志记录事件的能力,管理员可以检查这些日志,确定是否存在安全漏洞,比如多次失败的登录尝试,或者用户对系统文件不成功的访问等。
1、Linux 内核中的几种系统调用
- User 记录用户空间中产生的事件,它的作用是过滤消息的,内核传递给审计后台进程之前先查询它
- Task 跟踪应用程序的子进程(fork),当一个任务被创建时,也就是父进程通过 fork 和克隆创建子进程时记录该事件
- Exit 当一个系统调用结束时判断是否记录该调用
- Exclude:删除不合格事件,Exclude 是用来过滤消息的,也就是不想看到的消息可以在这里写规则进行过滤。
2、Linux 用户空间审计系统由 auditd、audispd、auditctl、autrace、ausearch 和 aureport 等应用程序组成
- auditctl : 即时控制审计守护进程的行为的工具,如添加规则等
- auditd :audit 守护进程负责把内核产生的信息写入到硬盘上,这些信息由应用程序和系统活动触发产生。用户空间审计系统通过 auditd 后台进程接收内核审计系统传送来的审计信息,将信息写入到 /var/log/audit/audit.log
- aureport : 查看和生成审计报告的工具
- ausearch : 查找审计事件的工具
- auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中
- autrace : 一个用于跟踪进程的命令。类似于 strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中
3、audit架构说明
- audit 是内核中的一个模块,内核的运行情况都会在 audit 中记录,当然这个记录的规则是由超级用户来设置的
- 内核的 audit 模块是由应用层的一个应用程序 auditd 来控制的
- audit 产生的数据都会传送到 auditd 中,然后再由 auditd 进行其它操作
- auditd.conf 是 auditd 的配置文件,确定 auditd 是如何启动的,日志文件放在哪里等等
- audit.rules 是 audit 的规则文件,确定 audit 的日志中记录哪些操作
- audit.rules通过一个对 audit 进行控制的应用程序 auditctl 进行操作,root 用户也可以直接调用 auditctl 进行操作
- auditd 收到的数据后会有两个去处,默认的是将日志保存在 audit.log 文件中,默认路径/var/log/audit/audit.log,另一个通过 audispd 将日志进行分发
4、使用安全审计系统
- 安装软件包
- 设置配置文件、配置常用命令,添加审计规则
- 启用 audit 守护进程并开始进行日志记录
- 通过生成审计报表和搜索日志来周期性地分析数据。
5、audit 和 syslog 日志系统的关系
- audit 主要用来记录安全信息,用于对系统安全事件的追溯
- syslog 日志系统用来记录系统中的各种信息,如硬件警报和软件日志等
- syslog 属于应用层,没办法记录太多信息
- audit 来记录内核信息,包括文件的读写,权限的改变等
audit配置以及用法
1、安装 audit
#yum install audit*.* -y
也可以选择源码安装
2、audit 配置文件
- /etc/audit/auditd.conf 是守护程序的默认配置文件
- /etc/audit/audit.rules 是记录审计规则的文件(初始审计规则文件是空的)
- /etc/audit/auditd.conf 文件包括如下几个部分:一般先设置 auditd 的日志文件,然后设置是否循环使用日志文件,配置日志文件大小和报警信息,设置审计规则信息和目录观察器
CentOS示例
#设置日志文件
log_file = /var/log/audit/audit.log
#设置日志文件轮询的数目,它是 0~99 之间的数
#如果设置为小于 2,则不会循环日志
#如果没有设置 num_logs 值,它就默认为 0,意味着从来不循环日志文件
num_logs = 5
#设置日志文件是否使用主机名称,一般选 NONE
name_format = NONE
#设置日志文件大小,以兆字节表示的最大日志文件容量
max_log_file = 6
#设置日志文件到达最大值后的动作,这里选择 ROTATE(轮询)
max_log_file_action = ROTATE
3、auditctl 命令
auditctl [ ] filter, action -S syscall -F condition -k label
#filter可选user,exit,task,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 表示设置审计规则上的过滤关键
4、audit 审计规则
audit 审计规则分成三个部分
- 控制规则:这些规则用于更改审计系统本身的配置和设置,可以在/etc/audit/audit.rules 中设置
- 文件系统规则:这些是文件或目录监视。 使用这些规则,我们可以审核对特定文件或目录的任何类型的访问,可以通过 auditctl 命令设置,监控文件系统行为(依靠文件、目录的权限属性来识别),也可以加入到文件/etc/audit/rules.d/audit.rules 中即可实现对该文件的监视
auditctl -w /etc/passwd -p wa
auditctl -w /etc/hosts -p wa -k hosts_change
- 系统调用规则:这些规则用于监视由任何进程或特定用户进行的系统调用,可能会引起高负荷的日志活动,这会让内核承受更大的负荷,所以要慎重衡量哪些系统调用需要放到 audit.rules 中
#file 是用户自己设置的一个规则名字
auditctl -a always,exit -F arch=b64 -F auid=10001 -S open -k file
通过 auditctl 命令添加的规则不是永久有效的,重新启动后有效的,可以将命令添加到文件/etc/audit/rules.d/audit.rules 中
5、auditd 守护进程
service auditd start #启动
service auditd stop #停止
systemctl enable auditd #自启动
service auditd restart #重启
service auditd reload #重加载配置
service auditd rotate #旋转日志文件
service auditd resume #推迟审核事件日志之后重新开始
service auditd status #显示运行状态
6、aureport生成审计消息的报表
示例
aureport #生成汇总报表
aureport -ts 9:00 -te 18:00 -f –i #生成一段特定时间内的报告
aureport -u --failed --summary –i #生成所有用户失败事件的总结报告
aureport -s -i --summary #生成系统调用事件报告
7、ausearch搜索记录
audit 系统附带了一个功能强大的工具,称为 ausearch 搜索审计日志,使用 ausearch可以过滤和搜索事件类型,还可以通过将数值转换为更加直观的值(如系统调用或用户名)来解释事件
示例
ausearch --messag e USER _LO G IN --success no --i nterpret #搜索系统登录失败
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 #搜索所有的账户,群组,角色变更
ausearch --start 04/27/2019 --end 04/29/2019 no w -m SYSCALL -sv no –i #搜寻从指定时间段的失败的系统调用
ausearch -k key | less #使用关键字(key)搜索审计事件记录(使用关键字可提高效率,但需要建立关键字审计规则)