本文是How To Use the Linux Auditing System on CentOS 7的中文版,翻译不到之处,还请指出和多多包涵。本文并不会完全遵从原文的一些格式,而是加入自己学习的理解。
引言
Linux审计系统可帮助系统管理员创建审核跟踪记录,即服务器上每个操作的日志。我们可以通过检查审计日志文件audit.log来跟踪与安全相关的事件,将事件记录在日志文件中,来检测滥用或未授权的活动。我们可以选择要监视服务器上的哪些操作以及监视的程度。 审计不会为您的系统提供额外的安全性,但是有助于跟踪任何违反系统策略的行为,并使您能够采取其他安全措施来防止这些行为。
本教程介绍了审计系统,如何配置它,如何生成报告以及如何阅读这些报告。我们还将了解如何在审核日志中搜索特定事件。
前提
对于这篇教程,你需要准备如下:
- CentOS 7 系统(或CentOS 6)
- 具有sudo权限的非root用户。 要设置此类用户,请按照CentOS 7初始服务器设置教程进行操作。 所有命令都将以此用户身份运行。
验证Audit安装
audit系统分为两个主要部分:
- audit内核组件拦截来自用户程序的系统调用,记录事件,并且将这些审计信息发送到audit守护进程(audit daemon即auditd);
- auditd收集来自内核的信息,在日志文件中创建记录项
Audit系统使用如下包:audit和audit-libs。CentOS 7上已经默认安装。可以通过如下命令验证您的系统中是否已经安装好:
[lz@mail ~]$ sudo yum list audit audit-libs
完整输出如下,可以看到已经安装完成:
[lz@mail ~]$ sudo yum list audit audit-libs 已加载插件:fastestmirror, langpacks Repository base is listed more than once in the configuration Repository updates is listed more than once in the configuration Repository extras is listed more than once in the configuration Repository centosplus is listed more than once in the configuration Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.163.com * updates: mirrors.aliyun.com 已安装的软件包 audit.x86_64 2.6.5-3.el7_3.1 @updates audit-libs.x86_64 2.6.5-3.el7_3.1 @updates 可安装的软件包 audit-libs.i686 2.6.5-3.el7_3.1 updates
Audit配置
auditd主要的配置文件是/etc/audit/auditd.conf。这个文件由配置参数组成,包括记录事件的地方,磁盘空间不足的时候如何处理和日志轮换等。
可以使用nano编辑文件(个人比较喜欢使用vim):
[lz@mail ~]$ sudo vim /etc/audit/auditd.conf
例如,要将服务器上保留的审核日志文件数增加到10,可以编辑以下选项:
num_logs = 10
你也可以配置最大的日志文件大小,以MB计算,一旦当文件大小达到时应该采取何种行为。
max_log_file = 30 max_log_file_action = ROTATE
每当更改配置时,你都需要重新启动auditd服务,使得更改生效:
[lz@mail ~]$ sudo service auditd restart [sudo] password for lz: Stopping logging: [ 确定 ] Redirecting start to /bin/systemctl start auditd.service
另外的一个配置文件是/etc/audit/rules.d/audit.rules(如果你使用的是CentOS 6,那么文件是/etc/audit/audit.rules)。用来永久增加审计规则(auditing rules)
[lz@mail ~]$ sudo vim /etc/audit/rules.d/audit.rules
当auditd正在运行的时,审计信息将会记录到文件/var/log/audit/audit.log。
[lz@mail ~]$ sudo vim /var/log/audit/audit.log
理解审计日志文件
审计系统日志审计信息默认保存到文件/var/log/audit/audit.log中。审计日志文件包含大量的有用信息,但是阅读和理解日志文件对于很多用户来说有些苦难,由于提供了大量的信息,使用了缩写和代码等。
这部分,我们将试图去理解审计日志文件中典型的审计信息的一些字段内容。
Note : 'If auditd is not running for whatever reason, audit messages will be sent to rsyslog.' 注意:如果auditd由于任何原因没有运行的话,审计信息将会被发送到rsyslog。
举个例子,假设我们在服务器上配置了一个带标签(key)的审计规则sshconfigchange用来记录对文件/etc/ssh/sshd_config的访问或修改。如果你愿意,可以使用如下命令临时增加规则:
[lz@mail ~]$ sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange
运行如下命令来查看sshd_config文件,将会在审计日志文件audit.log增加一个事件:
[lz@mail ~]$ sudo cat /etc/ssh/sshd_config
可以通过如下命令查看最近产生的审计日志记录:
[lz@mail ~]$ sudo tail /var/log/audit/audit.log
audit.log中的审计日志信息如下:
type=SYSCALL msg=audit(1532417498.350:302): arch=c000003e syscall=2 success=yes exit=3 a0=7fff8b7537cb a1=0 a2=1fffffffffff0000 a3=7fff8b752df0 items=1 ppid=6370 pid=6371 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="cat" exe="/usr/bin/cat" key="sshconfigchange" type=CWD msg=audit(1532417498.350:302): cwd="/home/lz" type=PATH msg=audit(1532417498.350:302): item=0 name="/etc/ssh/sshd_config" inode=38123646 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL
上面的事件包含三条记录(每条以type=关键字的形式开头),共用相同的的时间戳(1532417498.350)和id(302)。每条记录由多个name=value对通过空格或冒号分隔。我们将详细看看这些字段代表什么,如下表所示。
type=SYSCALL |
type字段代表审计信息的类型。 在这个例子中,SYSCALL表明这条消息是由到系统内核的系统调用触发的。 |
msg=audit(1532417498.350:302) |
审计信息的时间戳和ID以audit(time_stamp:ID)的形式组成。 多个审计信息/记录可以共享同样的时间戳和ID,如果它们是同一个审计事件生成的部分。在我们这个例子中,我们可以看到审计时间产生的三条信息具有同样的时间戳(1532417498.350)和ID(302)。 |
arch=c000003e |
arch字段包含系统的CPU体系结构信息。 c000003e的值在16进制代表x86_64。 |
syscall=2 |
syscall字段表示发送到内核的系统调用的类型。 在这个例子中,2代表的是系统调用open。ausyscall可以将系统调用数字编号转化为人们可读的形式。例如,运行如下命令将数值2转化成为其人们可读的形式: [lz@mail ~]$ sudo ausyscall 2 Note:你可以使用sudo ausyscall --dump命令查看系统调用和其数字编号对应的列表。 |
success=yes |
success字段表明特定事件的系统调用是否执行成功。 在这个例子中,系统调用时成功的。当执行命令sudo cat /etc/ssh/sshd_config时,用户lz能打开和读文件sshd_config。 |
ppid=6370 | ppid字段记录了父进程的进程ID。 |
pid=6371 | pid字段记录了进程号PID。 |
auid=1000 |
auid是audit UID或者说是触发该审计信息用户的原始UID。 即使初始登陆后使用su或sudo提升权限,审计系统也会记录原始UID。 |
uid=0 |
uid字段记录启动分析进程的用户ID。 此例中,cat命令由root用户启动,uid=0。 |
comm="cat" | comm记录了触发审计信息的命令名字。 |
exe="/usr/bin/cat" | exe字段记录了触发审计信息的命令的路径。 |
key="sshconfigchange" |
key字段记录了管理员自定义的字符串和审计规则在日志文件中产生的事件。 Keys通常在创建自定义审核规则,使得在审计日志更容易查找特定类型的事件。 |
type=CWD |
cwd字段包含调用系统调用的目录的路径。 此例中,从目录执行了在第一条记录中触发open 系统调用的cat命令/home/lz。 |
cwd="/home/lz" |
cwd字段包含调用系统调用的目录的路径。 此例中,从目录执行了在第一条记录中触发open 系统调用的cat命令/home/lz。 |
type=PATH |
第三条记录类型是PATH。 审计事件包含作为参数传递给系统调用的每个路径的PATH记录。在审计事件中,只有一个路径(/etc/ssh/sshd_config)被用作参数。 |
name="/etc/ssh/sshd_config" |
name字段记录了作为参数传入到系统调用的文件或目录的完整路径。 在这个例子中,是/etc/ssh/sshd_config文件。 |
ouid=0 |
ouid字段记录了目标拥有者的用户ID。 此处的目标是文件/etc/ssh/sshd_config |
搜索审核日志以查找事件
Linux审计系统附带了一个名为ausearch的强大工具,用于搜索审计日志。使用ausearch,您可以筛选和搜索事件类型。 它还可以通过将数值转换为人类可读的值(如系统调用或用户名)
来为您解释事件。
让我们来看几个例子:
以下命令将从审核日志中搜索今天类型为LOGIN的所有审核事件,并解释用户名。
[lz@mail ~]$ sudo sudo ausearch -m LOGIN --start today -i
下面的命令将搜索事件ID为27020的所有事件(前提是存在具有该id的事件)。
[lz@mail ~]$ sudo ausearch -a 27020
此命令将搜索所有关于文件/etc/ssh/sshd_config的所有事件并解释它们:
[lz@mail ~]$ sudo ausearch -f /etc/ssh/sshd_config -i
生成审计报告
您可以使用工具aureport获取审核消息摘要,而不是阅读原始审核日志。 它以人类可读的格式提供报告。 这些报告可用作更复杂分析的构建块。 当aureport在没有任何选项的情况下运行时,它将显示审计日志中存在的不同类型事件的摘要。 与搜索选项一起使用时,它将显示与搜索条件匹配的事件列表。
让我们尝试一些aureport的例子。 如果要生成有关服务器上所有命令执行的摘要报告,请运行:
[lz@mail ~]$ sudo aureport -x --summary
输出样例:
[lz@mail ~]$ sudo aureport -x --summary Executable Summary Report ================================= total file ================================= 5233 /usr/sbin/xtables-multi 2604 /usr/lib/systemd/systemd 1764 /usr/sbin/crond 1066 /usr/bin/sudo 753 /usr/sbin/saslauthd 267 /usr/libexec/gdm-session-worker 90 /usr/bin/kmod 88 /usr/sbin/postconf 85 /usr/lib/polkit-1/polkit-agent-helper-1 29 /usr/lib/systemd/systemd-update-utmp 23 /usr/sbin/groupadd 20 /usr/sbin/useradd 13 /usr/bin/perl 10 /usr/bin/passwd 8 /usr/libexec/postfix/master 8 /usr/sbin/httpd 5 /usr/sbin/userdel 5 /usr/bin/cmp 4 /usr/sbin/runuser 4 /usr/sbin/groupmod 2 /usr/sbin/groupdel 2 /usr/sbin/setenforce 1 /usr/bin/cat
第一列显示命令执行的次数,第二列显示已执行的命令。 请注意,默认情况下不会记录所有命令。 仅记录与安全相关的内容。
生成有关使用系统调用和用户名访问的文件的报告:
[lz@mail ~]$ sudo aureport -f -i
输出样例;
[lz@mail ~]$ sudo aureport -f -i | tail -5 119. 2016年12月30日 09:05:45 /etc/postfix/master.cf open yes /usr/sbin/postconf unset 150 120. 2016年12月30日 09:05:45 /usr/sbin/sendmail open yes /usr/bin/cmp unset 172 121. 2016年12月30日 09:05:46 /etc/postfix/master.cf open yes /usr/libexec/postfix/master unset 183 122. 2016年12月30日 09:36:10 /etc/postfix/master.cf open yes /usr/libexec/postfix/master unset 524 123. 2018年07月24日 15:31:38 /etc/ssh/sshd_config open yes /usr/bin/cat lz 302
要以摘要格式查看相同内容,您可以运行:
[lz@mail ~]$ sudo aureport -f -i --summary
[lz@mail ~]$ sudo aureport -f -i --summary File Summary Report =========================== total file =========================== 93 /etc/postfix/master.cf 15 /var/www/extsuite/extmail/cgi/index.cgi 8 index.cgi 5 /usr/sbin/sendmail 3 /var/spool/postfix/pid/master.pid 3 /var/www/extsuite/extmail/libs/Ext/DB.pm 2 /var/www/extsuite/extmail/html/index.html 2 sid_0993bffcc2951e5404ffa4510b23e87e 1 master.pid 1 index.html 1 DB.pm 1 session 1 /var/www/extsuite/extman/session/sid_0993bffcc2951e5404ffa4510b23e87e 1 /etc/ssh/sshd_config
注:只要输入采用原始日志数据格式,aureport工具也可以从stdin而不是日志文件中获取输入。
使用autrace分析进程
要审核单个流程,我们可以使用autrace工具。 此工具跟踪进程执行的系统调用。 这可用于调查可疑的木马或有问题的过程。 autrace的输出写入/var/log/audit/audit.log,看起来类似于标准审计日志条目。 执行后,autrace将为您提供示例ausearch命令以调查日志。 始终使用二进制文件的完整路径来跟踪autrace,例如sudo autrace /bin/ls/tmp。
注:请注意,运行autrace将删除所有自定义审核规则。 它用跟踪您指定的进程所需的特定规则替换它们。
autrace完成后,它将清除它添加的新规则。 出于同样的原因,当审计规则设置为不可变时,autrace将不起作用。
让我们尝试一个例子,比如说,我们要跟踪进程日期并查看它使用的文件和系统调用。 运行以下命令:
[lz@mail ~]$ sudo autrace /bin/date autrace cannot be run with rules loaded. Please delete all rules using 'auditctl -D' if you really wanted to run this command.
需要先删除所有的规则才能运行。
[lz@mail ~]$ sudo auditctl -D No rules [lz@mail ~]$ sudo autrace /bin/date Waiting to execute: /bin/date 2018年 07月 24日 星期二 18:46:34 CST Cleaning up... Trace complete. You can locate the records with 'ausearch -i -p 7619'
您可以使用上面输出中的ausearch命令查看相关日志,甚至将其传递给aureport以获得格式良好的人类可读输出:
[lz@mail ~]$ sudo ausearch -p 7619 --raw | aureport -f -i
输出样例:
[lz@mail ~]$ sudo ausearch -p 7619 --raw | aureport -f -i File Report =============================================== # date time file syscall success exe auid event =============================================== 1. 2018年07月24日 18:46:34 /bin/date execve yes /usr/bin/date lz 642 2. 2018年07月24日 18:46:34 /etc/ld.so.preload access no /usr/bin/date lz 645 3. 2018年07月24日 18:46:34 /etc/ld.so.cache open yes /usr/bin/date lz 646 4. 2018年07月24日 18:46:34 /lib64/libc.so.6 open yes /usr/bin/date lz 650 5. 2018年07月24日 18:46:34 /usr/lib/locale/locale-archive open yes /usr/bin/date lz 668 6. 2018年07月24日 18:46:34 /etc/localtime open yes /usr/bin/date lz 672
此命令从审核日志中搜索事件ID为7619的事件,以原始日志格式提取它,并将其传递给aureport,后者又以更好的格式解释并提供结果,以便于阅读。
结语
我们在本教程中介绍了Linux审计系统的基础知识。 您现在应该很好地了解审计系统的工作方式,如何阅读审计日志以及可用的不同工具,以便您更轻松地审计服务器。
默认情况下,审计系统仅记录日志中的少数事件,例如登录的用户和使用sudo的用户。 还会记录与SELinux相关的消息。 审计守护程序使用规则来监视特定事件并创建相关的日志条目。 可以创建自定义审计规则,以便在日志中监视和记录我们想要的任何内容。 这是审计系统对系统管理员变得强大的地方。 我们可以使用命令行工具auditctl添加规则,也可以在文件/etc/audit/rules.d/audit.rules中永久添加规则。 编写自定义规则和使用预定义规则集将在CentOS 7上的编写自定义系统审计规则教程中详细讨论。
References
How To Use the Linux Auditing System on CentOS 7