Audit

下面是一份 Novell 的简明文档:

http://www.novell.com/documentation/sled10/pdfdoc/auditqs_sp1/auditqs_sp1.pdf

有需要的可以参考一下,看懂了上面的下面的也能理解了。

在正式配置之前,有几个地方需要注意:

/etc/sysconfig/auditd

AUDITD_DISABLE_CONTEXTS 默认表示禁止系统调用的审计,如果你想全面审计,包括文件目录以及系统调用审计,将其设置为 no。

/etc/audit/auditd.conf

flush 建议设置为 INCREMENTAL,此时要配合 freq 来通知 audit daemon 每多少秒向内核请求将数据写入磁盘;如果是在安全要求十分高的场合下,可以设置为 data 或者 sync,二者都是将数据同步写入磁盘,不同点是后者在写入数据的同时还写入数据(metadata)。

max_log_file_action 建议设置为 ROTATE,也就是根据上面的 max_log_file 的数量来进行轮转。而 keep_logs 会保留所有的日志文件,前提是你的 /var 目录比较大。

admin_space_left_action/disk_full_action/disk_error_action 建议设置为 suspend,也就是通知 audit daemon 停止向磁盘写入数据,但是依然保持该 daemon 的运行;如果使用 single 或者 halt 后果会比较严重,前者是转到单用户模式下,后者会直接关机。

auditctl -e:开启/关闭 audit。后面可以接 0/1/2,0 代表关闭 audit,1 开启,2 表示开启后锁闭配置文件 audit.rules ,也就是说任何想修改规则的行为都会被记录并且被禁止,除非重启主机。

auditclt -f:控制 failure flag。后面同样是接 0/1/2,建议选择 1,也就是将出错信息写入到 message 文件中,audit 停止运行;如果是 2,将直接报 panic,系统直接关闭,等同于直接拔电源。

上面的几组值在 /etc/audit/audit.rules 下同样可以设定。使用 auditctl 只能保持当前的规则,/etc/init.d/auditd restart 后会消失;而将这些规则写入 audit.rules 内的话会永久保留。

注意:修改完文件要重启

以下在 CentOS X86_64 下的 audit.rules 下配置,请根据不同的环境进行修改。

添加基本的审计配置参数

-D
-b 8192
-f 1

添加 audit 日志文件和配置文件的审计

-w /var/log/audit/
-w /var/log/audit/audit.log

#-w /var/log/audit/audit_log.1
#-w /var/log/audit/audit_log.2
#-w /var/log/audit/audit_log.3
#-w /var/log/audit/audit_log.4

-w /etc/audit/auditd.conf -p wa
-w /etc/audit/audit.rules -p wa
-w /etc/libaudit.conf -p wa
-w /etc/sysconfig/auditd -p wa

审计文件系统对象

-a entry,always -F arch=b64 -S chmod -S fchmod -S chown -S fchown -S lchown
-a entry,always -F arch=b64 -S creat -S open -S truncate -S ftruncate
-a entry,always -F arch=b64 -S mkdir -S rmdir
-a entry,always -F arch=b64 -S unlink -S rename -S link -S symlink

-a entry,always -F arch=b64 -S setxattr
-a entry,always -F arch=b64 -S lsetxattr
-a entry,always -F arch=b64 -S fsetxattr
-a entry,always -F arch=b64 -S removexattr
-a entry,always -F arch=b64 -S lremovexattr
-a entry,always -F arch=b64 -S fremovexattr

-a entry,always -F arch=b64 -S mknod
-a entry,always -S mount -S umount2

注意:监控系统调用可能会引起高负荷的日志活动,这会让内核承受更大的负荷,由此可能引起系统 backlog 和 date limits 的超标。所以要慎重衡量哪些系统调用需要放到 audit.rules 中。

监控安全配置文件和数据库

-w /etc/at.allow  
-w /etc/at.deny  

-w /etc/cron.deny -p wa
-w /etc/cron.d/ -p wa
-w /etc/cron.daily/ -p wa
-w /etc/cron.hourly/ -p wa
-w /etc/cron.monthly/ -p wa
-w /etc/cron.weekly/ -p wa
-w /etc/crontab -p wa
-w /var/spool/cron/root

-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow

-w /etc/login.defs -p wa
-w /etc/securetty
-w /var/log/faillog
-w /var/log/lastlog

-w /etc/hosts -p wa
-w /etc/sysconfig/

-w /etc/inittab -p wa
-w /etc/init.d/
-w /etc/init.d/audit -p wa

-w /etc/ld.so.conf -p wa

-w /etc/localtime -p wa

-w /etc/sysctl.conf -p wa

-w /etc/modprobe.d/
-w /etc/modprobe.conf.local -p wa
-w /etc/modprobe.conf -p wa

-w /etc/pam.d/

-w /etc/ssh/sshd_config

#-w /etc/stunnel/stunnel.conf
#-w /etc/stunnel/stunnel.pem

-a exit,always -S sethostname
-w /etc/issue -p wa
-w /etc/issue.net -p wa

注意:如果审计的是目录的话,只能对该目录本身的属性进行审计,也就是诸如拥有者,目录权限之类的进行审计,并不能审计目录下面的文件。如果想审计下面的文件,需要一一列出。另外不支持通配符/正则。

监控其他的系统调用

-a entry,always -F arch=b64 -S clone -S fork -S vfork

-a entry,always -S umask

-a entry,always -S adjtimex -S settimeofday

过滤系统调用参数

除了上述监控文件系统对象和监控其他的系统调用,还可以更严格的监控应用程序,通过使用过滤机制

-a entry,always -F arch=b64 -S access -F a1=4
-a entry,always -F arch=b64 -S access -F a1=6
-a entry,always -F arch=b64 -S access -F a1=7

这部分涉及到的内容比较深,我也不是很了解,有兴趣的可以自己探索。

使用 Keys 来管理审计事件记录

假设你在 audit.rules 下加了如下的一条规则

-w /etc/audit/audit.rules -p wa

如果没有 key,如果要查找 SYSCALL 或者 PATH 事件,你可能要使用 grep 等类似的工具才能过滤到你想要的内容。使用 key 就能简化上述的过程

-w /etc/audit/audit.rules -p wa -k CFG_audit.rules

-k 后面的内容是你自己定义的。现在要找特定的内容就容易多了

# ausearch -k CFG_audit.rules

以上的都设置完毕了,就要生成各种报告了。

生成审计报告

aureport 常见的参数:
-c:配置修改
-e:事件
-f:文件
-h:主机
-l:登陆
-m:帐号修改
-p:进程
-s:系统调用
-tm:终端
–tty:tty 消息

从 myfile 读取审计信息,myfile 可以是本地的或者是异地
# aureport -if myfile

上面的命令没有加任何参数,aurepot 只输出标准的报告,要生成更详细的报告,比如,生成一段特定时间内的报告
# aurepoty -l -ts 12:00 -te 14:00 -if myfile

显示失败事件
# aureport –failed

显示成功事件
# aureport –success

列出未被成功访问的文件
# aureport -f -i –failed –summary

我们还可以图形化报告
下载如下两个脚本:
# wget http://people.redhat.com/sgrubb/audit/visualize/mkbar
# wget http://people.redhat.com/sgrubb/audit/visualize/mkgraph

在 centos 上需要安装 gnuplot
# yum install gnuplot

生成整体的事件报告
# aureport -e -i –summary | /path/mkbar events

生成文件事件
# aureport -f -i –summary | /path/mkbar files

生成登陆事件报告
# aureport -l -i –summary | /path/mkbar login

生成用户事件报告
# aureport -u -i –summary | /path/mkbar users

生成系统调用事件报告
# aureport -s -i –summary | /path/mkbar syscalls

要了解不同 audit 对象之间的关系,比如用户跟系统调用,使用 mkgraph 脚本

users 和 executables
# aureport -u -i | awk '/^[0-9]/ { print $4" "$7 }' | sort | uniq | mkgraph users_vs_exec

users 和 files
# aureport -f -i | awk '/^[0-9]/ { print $8" "$4 }' | sort | uniq | mkgraph users_vs_files

system calls 和 commands
# aureport -s -i | awk '/^[0-9]/ { print $4" "$6 }' | sort | uniq | mkgraph syscall_vs_com

system calls 和 files
# aureport -s -i | awk '/^[0-9]/ { print $5" "$4 }' | sort | uniq | mkgraph syscall_vs_file

使用 mkgraph 要用到 graphviz:
下载 graphvia 的源:
# wget http://www.graphviz.org/graphviz-rhel.repo
# yum makecache
# yum install graphviz*

参考:
http://doc.opensuse.org/products/draft/SLES/SLES-security_draft/cha.audit.scenarios.html
http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
http://thomasknowles.blogspot.com/2011/03/linux-file-access-auditing.html