安装审计包
yum install auditd #centos
sudo apt-get install auditd #Ubuntu
配置审计服务
审计守护进程可以在/etc/audit/auditd.conf
配置文件中进行配置。此文件包含修改审核守护进程行为的配置参数。任何空行或#后面的文本都将被忽略
配置auditd capp 环境
默认auditd配置应该适用于多数环境。但是,如果您的环境必须满足受控访问保护配置文件(CAPP)设置的标准
- 保存审核日志文件的目录(通常为/var/log/audit)驻留在单独的分区上。这可以防止其他进程占用此目录中的空间,并为审计守护进程提供对剩余空间的准确检测
- 该*max_log_file*参数指定单个审计日志文件的最大大小,必须设置为充分利用保存审计日志文件的分区上的的可用空间
- 该*max_log_file_action*参数一旦max_log_file达到设置时采取的操作,应设置keep_logs为防止审计日志文件被覆盖
定义审计规则
审计系统根据一组审计规则运行,这些规则定义了日志文件中捕获的内容,可以指定三种类型的审计规则
- 控制规则--允许修改审计系统的行为以及某些配置
- 文件系统规则-也称为文件监视,允许审计对特定文件或目录的访问
- 系统调用规则--允许记录任何指定程序进行的系统调用
可以使用auditctl程序在命令行指定审计规则(请注意,这些规则在重新启动后不会持久),或写入/etc/audit/audit.rules文件
使用auditctl应用程序定义审计规则
与审计服务和审计日志文件交互的所有命令都需要root权限。确保以root用户执行这些命令
auditctl命令允许您控制审计系统的基本功能并决定记录哪些事件的规则
定义控制规则
以下是一些允许您修改审计系统行为的控制规则
- -b 设置内核中现有审计缓存区的最大数值
-
auditctl -b 8192
- -f 该选项允许确定希望内核如何处理关键错误,有0,1,2三个值,0是不输出日志,1位输出printk日志,2会大量输出日志信息。默认值位1
-
auditctl -f 2
- -e 设置启用标志,有0,1,2三个值。当设置为0时,可以用来临时禁用审计;设置为1时,将启用审计。设置为2时,锁定审计,使其不能被更改
auditctl -e 2
- -r 设置每秒生成消息的速率,设置为0时,表示没有设置限速
-
auditctl -r 0
- -s 报告审计系统的状态
- -l 列出所有加载的审计规则
- -D 删除所有当前加载的审计规则
定义文件系统规则
语法:
auditctl -w path_to_file -p permission -k key_name
解释:
- path_to_file:被审计的文件或目录
- 权限
• r 对文件或目录的读取权限
•w 对文件或目录的写访问权限
• x 执行对文件或目录的访问
•a 更改文件或目录的属性
- key_name:是一个可选字符串
例如:
- 要记录对/etc/passwd 文件的所有写访问和每个写属性更改的规则,命令如下
-
auditctl -w /etc/passwd -p wa -k passwd_change
定义系统调用规则
语法:
auditctl -a action,filter -F filed=value -S system_call -k key_name
解释
- action和fileter 指定如何记录某个事件。action 可以是never和always.而filter指定将哪个内核规则匹配过滤与此事件。规则的匹配过滤可以使以下找中的任意一个
• task 添加规则到每个任务列表。只有在创建时就已知的字段(比如uuid,gid)才可以用这个 列表
• exclude 添加规则到事件排除过滤列表。使用此表来过滤不希望看到是事情
• exit 添加规则到系统调用列表。退出系统时调用此列表用于确定是否建立审计事件
• user 添加规则到用户消息过滤列表
- system_call通名称指定系统调用。可以在/usr/include/asm/unistd_64.h文件中找到所有系统调用列表
- filed=value 指定其他选项,这些选项进一步修改规则以个根据指定的体系架构、组ID、进程id等匹配事件
filed 字段如下
字段名 | 描述 |
pid | 进程id |
ppid | 父进程的进程id |
uid | 用户id |
euid | 有效用户id |
suid | 保护的用户id |
fsuid | 文件系统id |
gid | 组群id |
egid | 有效组群id |
sgid | 保护的组群id |
fgid | 文件系统组id |
msgtype | 用来匹配事件的记录类型 |
pers | 操作系统个性编码 |
path | 查看文件的完整路径 |
arch | 系统调用的cpu架构 |
auid | 审计id,用户登录时使用的原始id |
dir | 查看完成的路径 |
devmajor | 主设备号 |
devminor | 次设备号 |
inode | inode号 |
exit | 系统调用的返回值 |
success | 系统调用成功值。1表示成功,0表示失败 |
a0,a1,a2,a3 | 分别表示系统调用的前4个参数,只能用数字表示 |
key | 设置用来标记事件的审计日志事件消息的过滤关键字 |
perm | 文件操的权限过滤 |
obj_user | 对象的SELinux用户 |
obj_role | 对象的SELinux角色 |
obj_type | 对象的SELinux类型 |
obj_lev_low | 对象的SELinux低级别 |
obj_lev_high | 对象的SELinux高级别 |
subj_sen | 程序的SELinux敏感度 |
.subj_user | 程序的SELinux角色 |
subj_type | 程序的SELinux类型 |
subj_clr | 程序的SELinux清楚率 |
subj_role | 程序的SELinux角色 |
subj_sen | 程序的SELinux敏感度 |
filetype | 目标文件的类型 |
例如:
- 要定义一个规则,程序每次使用adjtime或settimeofday 系统调用时创建日志。并且使用64位
-
auditctl -a always,exit -F arch=b64 -S adjtime -S settimeofday -k time_change
- 定义一个规则,,每次文件被ID为500或更大的系统用户删除或重命时创建一个日志条目(该
-F auid!=4294967295
选项用于排除未设置登录UID的用户) -
auditctl -a always,exit -F 'auid>=500' -F "auid!=4294967295" -S unlink -S rename -S renameat -k detele
- 也可以使用系统调用规则语法定义文件系统规则
-
auditctl -a always,exit -F path=/etc/shadow -F perm=wa
- 查看特定程序的所有系统调用
-
auditctl -a entry,always -S all -F pid=1008
删除规则
语法:
audit -d action,filter -F filed=value -S sytem_call -k key_name
每个选项的用法与添加规则的用法一样
使用ausearch搜索审计日志文件
- 要在/var/log/audit/audit.log 文件中搜索失败的登录尝试
-
ausearch --message USER_LOGIN --success no --interpret
- 要搜索所有账户、角色和角色更改,请使用以下命令
-
ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i
- 要使用用户的登录ID(auid)搜索某个用户执行的所有记录操作
-
ausearch -ua 500 -i
- 要搜索从昨天到现在所有失败的系统调用
-
ausearch --start yesterday --end now -m SYSCALL -sv no -i
- 要搜索某个规则审计
-
ausearch -i -k my_key(与规则对应)