Linux Note – auditd

Linux的审计系统包括内核审计子系统和一些进程,auditd服务则是Linux审计子系统的用户空间进程。内核的审计模块将收集的审计消息发送给用户空间的后台进程auditd进行处理。在默认的情况下,审计结果会发送到/var/log/audit/audit.log文件中。如果auditd没有运行,审计消息会发送给rsyslog。
audit_components
(图片来源:http://doc.opensuse.org)
审计消息的来源主要有两方面:
a).内核、应用程序(audit-libs-devel提供的API)。
b).系统管理员添加的审计规则,匹配规则的事件都将被记录下来。

auditd守护进程是audit RPM包中的组成,基本的服务器都会有这个组件。它包含三个配置文件:
/etc/sysconfig/auditd 启动初始化参数,通常由
/etc/audit/auditd.conf 主配置文件
/etc/audit/audit.rules 规则文件。该文件中的规则永久生效。相关文档参见manual: http://man7.org/linux/man-pages/man7/audit.rules.7.html

1. 添加审计规则

内核审计子系统的审计规则可以通过auditctl命令来添加(manual: http://man7.org/linux/man-pages/man8/auditctl.8.html
auditctl的常见操作如下:

auditctl -e to enable or disable audit
auditctl -f to control the failure flag
auditctl -r to control the rate limit for audit messages
auditctl -b to control the backlog limit
auditctl -s to query the current status of the audit daemon

而其中的审计规则,分为下面三大类:
(1). file system 规则
该规则能监视文件被读、写、执行、修改文件属性的操作。当发生某个问价的读写时,发送一条审计规则。如:

auditctl -w /etc/passwd -p rwax
-p [r|w|x|a]
Describe the permission access type that a file system watch
will trigger on. r=read, w=write, x=execute, a=attribute
change.

(2). syscall 规则
会根据定义的列表规则有不同的行为,常见的列表规则设置如下:

例如:记录uid为root的用户调用mkdir系统调用的情况
auditctl -a exit,always -F UID=root -S mkdir
(3). control规则
控制规则通常是在配置审计子系统时候产生,比如删除审计规则,设置审计的backlog队列,让auditctl忽略语法错误等操作。

2. 审计消息

通常可以通过ausearch来查看审计消息(a tool to query audit daemon logs, view manual:http://man7.org/linux/man-pages/man8/ausearch.8.html)
一条审计消息的格式如下:
type=SYSCALL msg=audit(1168206647.422:5227): arch=c000003e syscall=2 success=no exit=-2 a0=7fff37fc5a40 a1=0 a2=2aaaaaaab000 a3=0 items=1 ppid=26640 pid=2716 auid=501 uid=501 gid=501 euid=501 suid=501 fsuid=501 egid=501 sgid=501 fsgid=501 tty=pts5 comm=”vim” exe=”/usr/bin/vim”
其中:
msg=audit(time_stamp:event_number)
uid和gid是触发这条审计消息的原始uid和gid,而suid和guid是由于SUID和SGID位被设置后触发这条审计消息时的实际UID/GID.
exe是触发这条审计消息的可执行文件名称。
key通常是一个自定义的可辨识度高的规则的过滤词。例如ausearch –key “passwd-modify”
对于file system的规则,还可以通过ausearch –file 来查找。

3. 审计报告

aureport(a tool that produces summary reports of audit daemon logs)工具可以用来创建简洁的审计报告(brief report)。Manual: http://man7.org/linux/man-pages/man8/aureport.8.html
例如报告系统的syscalls:
# aureport -s | more
2
其中syscall#已经在syscallent.h头文件中定义:

4. 追踪程序

autrace 可以用来通过审计子系统调查该程序使用了哪些syscall。当运行autrace时,会禁用所有自定义的额外规则。而结束trace时,则需要auditctl -D 来清空规则。
1

5. 一份很实用的audit.rule配置文件

下面这个rule满足了基本的安全需求:监控了unlink(rm), rmdir,stime(sets the system’s idea of the time and date), setrlimit(set resource limits)等危险行为和敏感的文件的改写。
cat /etc/audit/audit.rules

6. 使用syslog/rsyslog来管理日志

使用audit dispatching来配置,audispd的配置文件是/etc/audisp/audisp.conf.
为了让audispd能够把日志发送到syslog,需要在syslog插件的配置文件/etc/audisp/plugins.d/syslog.conf中设置active = yes.
将auditd日志发送到远程rsyslog服务器的方法:http://serverfault.com/questions/202044/sending-audit-logs-to-syslog-server

参考文档

Linux Manual
Introducing the Components of Linux Audit http://doc.opensuse.org/products/draft/SLES/SLES-security_sd_draft/cha.audit.comp.html
linux服务——auditd http://blog.csdn.net/updba/article/details/7389779

^^

Posted in C|C++, Linux.