一、用户空间审计系统应用程序
在用户空间,审计系统由auditd、audispd、auditctl、autrace、ausearch和aureport等应用程序组成。
审计后台auditd应用程序通过netlink机制从内核中接收审计消息,然后,通过一个工作线程将审计消息写入到审计日志文件中,其中,还有一部分消息通过消息分发后台进程dispatcher调用syslog写入日志系统。
下面分别说明这些应用程序的功能。
1.审计后台auditd
在用户空间,审计系统通过auditd后台进程接收内核审计系统传送来的审计信息,将信息写入到/var/log/audit/audit.log 中,audit.log的路径可在/etc/auditd.conf 中指定
当auditd没有运行时,内核将审计信息传送给 syslog,这些消息通常保存在/var/log/messages文件中,可以用dmesg命令查看。
如果要启用内核中的审计功能,必须在系统启动时将audit=1传递给内核。也可以在运行时,使用下列命令来启用内核审计功能:
auditctl -e 1 |
审计系统后台应用程序auditd是Linux审计系统的用户空间部件,它负责将审计记录写入到硬盘中。ausearch或aureport工具用来查看写在文件中的审计记录,auditctl工具用来设置审计规则。系统启动时,auditctl读取/etc/audit.rules中的规则,审计后台可以通过auditd.conf文件定制配置。
运行auditd后台的命令如下:
auditd [ -f ] |
其中,选项-f表示让auditctl在前台运行,以方便调试,消息可以直接输出到stderr,而不是输出到log系统。
用于配置auditd后台的文件说明如下:
/etc/auditd.conf用于auditd后台的配置文件。 /etc/audit.rules启动时装载的审计规则。 |
2.auditctl
工具auditctl控制行为、得到状态、从内核审计系统增加或删除规则。命令格式如下:
auditctl [options] |
工具auditctl的命令行选项(options)很多,例如:-e [0|1]表示停止或启动内核审计功能;-a表示将规则追加到链表;-S表示系统调用号或名字;-F表示规则域。
工具auditctl设置规则的样例如下:
//查看程序所有的系统调用 auditctl -a entry,always -S all -F pid=1005 //查看指定用户打开的文件
auditctl -a exit,always -S open -F auid=510 //查看不成功的open系统调用 auditctl -a exit,always -S open -F success!=0
设置规则和显示规则的命令样例列出如下:
^-^$ auditctl -a entry,always -S all -F pid=1005
^-^$ auditctl -l LIST_RULES: entry,always pid=1005 (0x3ed) syscall=all |
工具auditctl的选项说明如表2-1所示。
表2-1 工具auditctl的选项说明
选 项 名 |
选项的值 |
说 明 |
-b <backlog> |
|
设置内核允许的缓冲区数,默认值为64 |
-e [0|1] |
|
关闭或启动内核审计系统 |
-f [0..2] |
|
设置失败标识0=silent 1=printk 2=panic,默认值为1。设置内核如何处理临界错误,如:backlog限制超出、内存错误等 |
-h |
|
帮助信息 |
-i |
|
当从文件中读取规则时忽略错误 |
-l |
|
列出所有的规则,每行一条规则 |
-k <key> |
|
设置审计规则上的过滤关键词key,key是不超过32字节长的任意字符串,它能唯一鉴别由watch产生的审计记录 |
-m text |
|
仅由root用户发送用户空间消息到审计系统。为文件系统watch设置许可过滤器。r=read,w=write,x=execute,a=attribute change。这些许可不是文件的标准许可,而是系统调用使用的,read和write系统调用将忽略这种设置,否则它们将淹没log |
-r <rate> |
|
设置每秒传输的消息数限制,默认值为0,表示无限制 |
-R <file> |
|
从file文件中读取规则 |
-s |
|
报告状态 |
-a <l,a> |
|
追加规则到l链表,a表示规则的动作 |
有效链表名l |
task |
追加规则到每个任务链表AUDIT_FILTER_TASK 。域应用任务创建时的uid、gid等 |
entry |
追加规则到系统调用进入链表AUDIT_FILTER_ENTRY,用于决定进入到系统调用时是否创建审计事件 |
|
exit |
追加规则到系统调用退出链表AUDIT_FILTER_EXIT 。用于决定退出系统调用时是否创建审计事件 |
|
user |
追加规则到用户消息过滤链表AUDIT_FILTER_USER ,内核在转播用户空间产生的事件到审计后台之前,用这个链表过滤这些事件。仅域为uid、auid、gid和pid时有效 |
|
exclude |
用于过滤不想看到的事件,对应内核消息过滤链表AUDIT_FILTER_TYPE |
|
规则的有效动作a |
never |
不产生审计记录 |
always |
分配一个审计上下文,在系统调用退出时填充 |
|
-A <l,a> |
|
添加规则到l链表头,动作为a |
-d <l,a> |
|
从带有a动作的l链表删除规则 |
-D |
|
删除所有的规则和watch |
-S [系统调用名或号|all] |
|
如果程序使用指定的系统调用,则它启动一项审计记录。如果给出域规则而没有指定系统调用,它将默认为所有系统调用 |
续表
选 项 名 |
选项的值 |
说 明 |
-F [n=v | n!=v | n<v | n>v | n<=v | n>=v] |
|
创建一个规则域:名字、操作、值。可以单个命令行传递最多64个域。每个域必须启动一个审计记录。可支持6种操作:等于、不等于、小于、大于、小于或等于和大于或等于 |
有效的规则域n |
a0, a1, a2, a3 |
对应系统调用的前4个参数。不支持字符串参数。常用于复合的套接字或IPC操作 |
arch |
系统调用的CPU构架 |
|
auid |
audit uid,是用户注册的最初的ID |
|
b32 |
用于32位系统调用表的arch |
|
b64 |
用于64位系统调用表的arch |
|
devmajor |
主设备号(Device Major Number) |
|
devminor |
次设备号(Device Minor Number) |
|
egid |
有效组ID |
|
euid |
有效用户ID |
|
exit |
从一个系统调用退出时的值 |
|
fsgid |
文件系统组ID |
|
gid |
组ID |
|
inode |
节点号 |
|
key |
设置过滤关键字,与-k选项一样 |
|
msgtype |
用于匹配消息类型编号,仅用于排除(exclude)过滤链表 |
|
obj_user |
资源的SELinux用户 |
|
obj_role |
资源的SELinux角色 |
|
obj_type |
资源的SELinux类型 |
|
obj_lev_low |
资源的SELinux低级别 |
|
obj_lev_high |
资源的SELinux高级别 |
|
path |
监视的文件的全路径,仅用于exit链表 |
|
pers |
操作系统(OS)个人特征序列号 |
|
pid |
进程ID |
|
ppid |
父进程ID |
|
subj_user |
程序的SELinux用户 |
|
subj_role |
程序的SELinux角色 |
|
subj_type |
程序的SELinux类型 |
|
subj_sen |
程序的SELinux敏感度(Sensitivity) |
|
subj_clr |
程序的SELinux的间隔(Clearance) |
|
sgid |
设置组ID |
|
success |
如果退出值大于或等于0,这个值为true/yes,否则为false/no。当写规则时,用1表示true/yes,用0表示false/no |
|
suid |
设置用户ID(Set User ID) |
|
uid |
用户ID(User ID) |
|
-w <path> |
|
为文件系统对象<path>插入一个watch(监视)。不支持匹配符 |
-W <path> |
|
移去文件系统对象<path>上的watch |
3.autrace
autrace是一个程序,它将添加审计规则、类似于strace跟踪一个进程,审计信息的结果将记录在审计log文件中。在目标程序执行的前后,它都将删除审计规则。
autrace用于模拟strace工具。语法列出如下:
autrace program |
一个使用sutrace程序的典型样例列出如下:
^-^$ auditd ^-^$ autrace /bin/ls /tmp
Waiting to execute: /bin/ls gconfd-root virtual-root.SReCx6 Cleaning up... No rules Trace complete. You can locate the records with 'ausearch -i -p 5722'
^-^$ vi /var/log/audit/audit.log type=DAEMON_START msg=audit(1174214581.293:1962) auditd start, ver=1.2.8, format=raw, auid=4294967295 pid=5477 res=success, auditd pid=54 type=CONFIG_CHANGE msg=audit(1174214581.514:38): audit_enabled=1 old=1 by auid=4294967295 subj=user_u:system_r:unconfined_t:s0 |
4.ausearch
工具ausearch用于查询审计后台的日志,它能基于不同搜索规则的事件查询审计后台日志。每个系统调用进入内核空间运行时有个唯一的事件ID,系统调用在进入内核后的运行过程的审计事件共享这个ID。
内核可以添加各种审计记录,例如:系统调用“open”的审计事件将引起内核发送一个带有文件名的PATH记录。
ausearch的语法列出如下:
ausearch [ options ] |
其中,options表示选项值,如:-a <audit event id>、-f <file name>等。
基于用户ID的搜索样例列出如下:
^-^$ ausearch -ui 4294967295 ---- time->Sun Mar 18 18:43:01 2007 type=DAEMON_START msg=audit(1174214581.293:1962) auditd start, ver=1.2.8, format=raw, auid=4294967295 pid=5477 res=success, auditd pid=54 ---- time->Sun Mar 18 18:43:01 2007 type=CONFIG_CHANGE msg=audit(1174214581.514:38): audit_enabled=1 old=1 by auid=4294967295 subj=user_u: system_r:unconfined_t:s0 |
5.aureport
工具aureport用于产生审计后台日志的总结报告,语法列出如下:
aureport [ options ] |
其中,options表示选项,如:-a报告所有的AVC(AccessVector Cache)消息;-c报告配置改变的消息;-e报告事件消息。
工具aureport运行后结果列出如下:
^-^$ aureport
Summary Report ====================== Range of time: 03/18/2007 18:43:01.293 - 03/18/2007 18:43:01.514 Number of changes in configuration: 1 Number of changes to accounts or groups: 0 Number of logins: 0 Number of failed logins: 0 Number of users: 0 Number of terminals: 0 Number of host names: 0 Number of executables: 0 Number of files: 0 Number of avc denials: 0 Number of failed syscalls: 0 Number of anomaly events: 0 Number of responses to anomaly events: 0 Number of process IDs: 1 Number of events: 2 |
6.audispd
audispd是消息分发的后台进程,用于将auditd后台发过来的一些消息通过syslog写入日志系统