前言
audit子系统在linux安全领域应用广泛。本文主要介绍linux审计系统原理、安装配置、使用方法,以及内核中syscall 审计源码分析,争取展现一个立体的linux audit。
本文篇幅较长且包含大量源码,对某个方面感兴趣的,建议直接滑动跳至相关章节。
注:本文所有kernel 源码均来自kernel 4.18.0,实验平台是centos8.1
什么是audit?
linux audit子系统是一个用于收集记录系统、内核、用户进程发生的行为事件的一种安全审计系统。该系统可以可靠地收集有关上任何与安全相关(或与安全无关)事件的信息,它可以帮助跟踪在系统上执行过的一些操作。
linux审计系统可以通过提供系统上事件详细信息,来提高系统的安全性。但是它并不能像selinux那样为系统提供额外的安全性包含措施。审核仅需要为user提供系统上发生的event细节,user根据这些信息追踪event并采取相应的其他安全措施。
audit和syslog有本质区别。syslog记录的信息有限,主要目的是软件调试,对于用户的操作行为(如某用户修改删除了某文件)却无法通过这些日志文件来查看。而audit的目的则不同,它是linux安全体系的重要组成部分,是一种“被动”的防御体系。
在内核里有内核审计模块,记录系统中的各种动作和事件,比如系统调用,文件修改,执行的程序,系统登入登出和记录所有系统中所有的事件,它的主要目的是方便管理员根据日记审计系统是否允许有异常,是否有入侵等等,说穿了就是把和系统安全有关的事件记录下来。
audit有什么用?
- 查看文件访问
- 监控系统调用
- 记录用户指令的cmd指令
- 记录系统安全事件(如入侵行为)
- 监控网络访问
如何开启audit?
1、首先内核需要打开 CONFIG_AUDIT 、CONFIG_AUDITSYSCAL配置;
2、audit功能默认是关闭的,可以通过cmdline中加上“audit= 1”开启审计日志会被写到/var/log/messages中(auditd守护进程没有运行时);
3、用户空间配置使用audit,首先需要安装audit并配置:
1)安装:sudo yum install audit*.* -y
2)开启audit服务(守护进程auditd):service auditd start
3)查看是否开启:service auditd status(auditctl -s)
开启了autid服务后,所有的审计日志会记录在/var/log/audit/audit.log文件中。
配置audit
audit 安装后会生成 2 个配置文件:
- /etc/audit/auditd.conf
- /etc/audit/audit.rules
/etc/audit/auditd.conf 是守护程序的默认配置文件,/etc/audit/audit.rules 是记录审计规则的文件。下面分别看下两个文件格式和配置项。
【1】/etc/audit/auditd.conf
下面是centos8上截取的audit配置文件(部分):
#
# This file controls the configuration of the audit daemon
#
local_events = yes
write_logs = yes
# 设置日志文件
log_file = /var/log/audit/audit.log
log_group = root
log_format = ENRICHED
flush = INCREMENTAL_ASYNC
freq = 50
# 设置日志文件大小,单位是MB
max_log_file = 8
# 日志文件滚动的数目,如果设置为小于 2,则不会循环记录。没设置则位0,不循环日志文件
num_logs = 5
priority_boost = 4
name_format = NONE
##name = mydomain
# 日志文件到达最大值后的动作,ROTATE是滚动记录
max_log_file_action = ROTATE
… …
【2】/etc/audit/audit.rules
audit可以自定义对指定的文件或命令进行审计(如监视rm命令被执行、/etc/passwd文件内容被改变),只要配置好对应规则即可,配置规则可以通过命令行(auditctl 临时生效)或者编辑配置文件(audit.rules)两种方式来实现。下面是centos8上截取的audit规则文件(部分):
## First rule - delete all
-D
## Increase the buffers to survive stress events.
## Make this bigger for busy systems
-b 8192
## This determine how long to wait in burst of events
--backlog_wait_time 60000
## Set failure mode to syslog
-f 1
其实就是把auditctl的命令直接拿过来即可,auditctl里支持的选项都可以在这个文件里指定,后面介绍auditctl命令再细看。
常用audit命令
audit常用命令
auditctl audit系统管理工具,用来获取状态,增加删除监控规则。
ausearch 查询audit log工具
aureport 输出audit系统报告
【1】auditctl
usage: auditctl [options]
-a <l,a> Append rule to end of <l>ist with <a>ction
-A <l,a> Add rule at beginning of <l>ist with <a>ction
-b <backlog> Set max number of outstanding au