介绍
Linux 审计系统帮助系统管理员创建一个审计轨迹,在服务器上每个操作的日志。我们可以跟踪安全相关事件,记录事件在日志文件中,并通过检查审计日志文件检测滥用或未经授权的活动。
本教程解释了审计系统,如何配置它,如何生成报告,以及如何阅读这些报告,我们还将看到如何搜索特定事件的审计日志。
前提条件
对于这个教程,你需要以下内容:
- CentOS 7 Droplet (也适用于 CentOS 6)
- 具有 sudo 特权的非根用户. 要设置此类型的用户,请遵循 CentOS 7 初始服务器设置 教程。
检查审计安装
审计体系有两个主要部分:
- 审计内核组件拦截用户应用程序的系统呼叫,记录事件,并将这些审计消息发送到审计内核 2。
审计系统使用以下套件: audit 和 audit-libs. 这些套件默认安装在新的 CentOS 7 Droplet 上(以及新的 CentOS 6 Droplet)。
1sudo yum list audit audit-libs
在输出中,您应该在安装包
下看到两个包:
1Installed Packages
2audit.x86_64
3audit-libs.x86_64
配置审计
「auditd」的主要配置文件是「/etc/audit/auditd.conf」。 此文件由配置参数组成,其中包括在哪里记录事件,如何处理完整的磁盘,以及日志旋转。
1sudo nano /etc/audit/auditd.conf
例如,要将存储在服务器上的审计日志文件的数量增加到 10,请编辑以下选项:
1[label /etc/audit/auditd.conf]
2num_logs = 10
您还可以配置最大日志文件大小为 MB,并在达到大小后采取哪些行动:
1[label /etc/audit/auditd.conf]
2max_log_file = 30
3max_log_file_action = ROTATE
当您对配置进行更改时,您需要使用以下方式重新启动 auditd 服务:
1sudo service auditd restart
让这些变化生效。
另一个配置文件是 /etc/audit/rules.d/audit.rules
(如果您在 CentOS 6 上,则文件是 /etc/audit/audit.rules
)。
当auditd
运行时,审计消息将被记录在/var/log/audit/audit.log
文件中。
了解审计日志文件
默认情况下,审计系统会将审计消息记录到 `/var/log/audit/audit.log’ 文件中。 审计日志文件包含大量有用的信息,但由于提供的大量信息、使用的缩写和代码等,对于许多用户来说,读取和理解日志文件可能很困难。
<$>[注] '注: 如果「auditd」不出于任何原因运行,则会发送审计消息到 rsyslog。
对于这个例子,让我们假设我们在服务器上配置了一个审计规则,标记为(key
) sshconfigchange
,以记录对文件 /etc/ssh/sshd_config
的每个访问或修改。
1sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange
运行以下命令来查看sshd_config
文件会在审计日志文件中创建一个新的 事件:
1sudo cat /etc/ssh/sshd_config
audit.log
文件中的此事件看起来如下:
1[label /var/log/audit/audit.log]
2
3type=SYSCALL msg=audit(1434371271.277:135496): arch=c000003e syscall=2 success=yes exit=3 a0=7fff0054e929 a1=0 a2=1fffffffffff0000 a3=7fff0054c390 items=1 ppid=6265 pid=6266 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=113 comm="cat" exe="/usr/bin/cat" key="sshconfigchange"
4
5type=CWD msg=audit(1434371271.277:135496): cwd="/home/sammy"
6
7type=PATH msg=audit(1434371271.277:135496): item=0 name="/etc/ssh/sshd_config" inode=392210 dev=fd:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL
上述事件由三個記錄組成(每個都以「type=」鍵字開始),這些記錄共享相同的時刻印(1434371271.277
)和id(135496
)。
在第一个记录中:
type=SYSCALL
类型
字段包含审计消息的类型,在这种情况下,SYSCALL
值表示该消息是由系统呼叫到内核所触发的。
msg=审计(1434371271.277:135496):
审计信息的时刻印和ID以形式audit(time_stamp:ID)
。多个审计信息/记录可以共享相同的时刻印和ID,如果它们是作为同一审计事件的一部分生成的。
arch=c000003e
该arch
字段包含有关系统的CPU架构的信息. 值,c000003e,以六十进制符号表示,代表x86_64.
syscall = 2
syscall
字段表示发送到内核的系统呼叫类型. 在这种情况下,2是开放
系统呼叫。 ausyscall
实用程序允许您将系统呼叫号码转换为可人读的等级。
1sudo ausyscall 2
产出显示:
1open
<$>[注]
注: 您可以使用sudo ausyscall --dump
命令查看所有系统呼叫的列表及其号码。
- 成功=是的
成功
字段显示该事件中的系统调用是否成功或失败,在这种情况下,调用成功,用户 sammy 可以在运行sudo cat /etc/ssh/sshd_config
命令时打开并读取sshd_config
文件。
ppid=6265
ppid
字段记录了家长进程ID(PPID)。在这种情况下,6265
是bash
进程的PPID。
pid=6266
pid
字段记录了进程ID(PID)。在这种情况下,6266
是cat
进程的PID。
auid=1000
「auid」是引发此审计消息的用户的审计 UID 或原始 UID. 审计系统将记住您的原始 UID,即使您在初始登录后通过 su 或 sudo 提升权限。
uid=0
uid
字段记录了开始分析过程的用户ID,在这种情况下,cat
命令是由 user root 与 uid 0 启动的。
comm="cat"
comm
记录了触发此审计消息的命令的名称。
exe="/usr/bin/cat"
exe
字段记录了触发此审核消息的命令的路径。
key="sshconfigchange"
密钥
字段记录了与在日志中生成此事件的审计规则相关的管理员定义的字符串,通常在创建自定义审计规则时设置密钥,以便从审计日志中更容易搜索特定类型的事件。
对于第二个记录:
类型=CWD
在第二个记录中,类型为CWD
- 当前工作目录. 此类型用于记录从该工作目录中执行第一个记录中指定的系统呼叫的过程。
cwd="/home/sammy"
cwd
字段包含通往系统呼叫的目录的路径,在我们的情况下,在第一个记录中触发打开
syscall 的cat
命令是从/home/sammy
目录中执行的。
第三个纪录:
type=PATH
在第三个记录中,类型为PATH
。一个审计事件包含一个PATH
记录,每个路径被传递到系统调用作为一个参数,在我们的审计事件中,只有一个路径(`/etc/ssh/sshd_config)被用作参数。
msg=审计(1434371271.277:135496):
msg
字段显示与第一和第二记录相同的时刻印和ID组合,因为这三个记录都是相同的审计事件的一部分。
name="/etc/ssh/sshd_config"
名称
字段记录了传送到系统调用(打开)作为参数的文件或目录的完整路径,在这种情况下,它是 /etc/ssh/sshd_config
文件。
ouid=0
ouid
字段记录了对象的所有者的用户 ID. 在这里,对象是文件 /etc/ssh/sshd_config
。
<$>[注] 注: 有关审计记录类型的更多信息可从本教程末尾的链接中找到。
搜索事件的审计日志
Linux 审计系统提供了一个强大的工具,名为ausearch
,用于搜索审计日志. 使用ausearch
,您可以过滤和搜索事件类型. 它还可以为您解释事件,将数字值转换为可人读的值,如系统呼叫或用户名。
让我们看看几个例子。
下列命令将搜索从今天开始的所有审计事件的审计日志,并解释用户名。
1sudo ausearch -m LOGIN --start today -i
下面的命令会搜索与事件 id 27020 相关的所有事件(前提是具有该事件 id 的事件)。
1sudo ausearch -a 27020
此命令会搜索触摸文件 /etc/ssh/sshd_config
的所有事件(如果有),并解释它们:
1sudo ausearch -f /etc/ssh/sshd_config -i
生成审计报告
代替阅读原始审计日志,您可以使用aureport
工具获取审计消息的摘要。它提供可人读的格式的报告。这些报告可以用作构建块来进行更复杂的分析。当aureport
运行时没有任何选项,它会显示审计日志中存在的不同类型的事件的摘要。当与搜索选项一起使用时,它会显示符合搜索标准的事件列表。
如果您想生成服务器上所有命令执行的汇总报告,请运行:
1sudo aureport -x --summary
输出将看起来像这样,具有不同的值:
1Executable Summary Report
2=================================
3total file
4=================================
5117795 /usr/sbin/sshd
61776 /usr/sbin/crond
7210 /usr/bin/sudo
8141 /usr/bin/date
924 /usr/sbin/autrace
1018 /usr/bin/su
第一列显示了执行命令的次数,第二列显示了执行的命令. 请注意,并非所有命令都是默认登录的。
以下命令将为您提供所有失败事件的统计数据:
1sudo aureport --failed
结果看起来很像:
1Failed Summary Report
2======================
3Number of failed logins: 11783
4Number of failed authentications: 41679
5Number of users: 3
6Number of terminals: 4
7Number of host names: 203
8Number of executables: 3
9Number of files: 4
10Number of AVC's: 0
11Number of MAC events: 0
12Number of failed syscalls: 9
要生成有关使用系统呼叫和用户名访问的文件的报告:
1sudo aureport -f -i
样品产量:
1File Report
2===============================================
3# date time file syscall success exe auid event
4===============================================
51. Monday 15 June 2015 08:27:51 /etc/ssh/sshd_config open yes /usr/bin/cat sammy 135496
62. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147481
73. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config lgetxattr yes /usr/bin/ls root 147482
84. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147483
95. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147484
106. Tuesday 16 June 2015 05:40:08 /bin/date execve yes /usr/bin/date root 148617
要在概述格式中查看相同的内容,您可以运行:
1sudo aureport -f -i --summary
<$>[注]
注: aureport
工具也可以从 stdin 获取输入,而不是日志文件,只要输入处于原始日志数据格式。
使用 autrace 分析一个过程
要审核一个单独的过程,我们可以使用outrace
工具。这个工具跟踪一个过程执行的系统调用。这在调查可疑的木马或有问题的过程中很有用。outrace
的输出写在/var/log/audit/audit.log
上,看起来类似于标准的审计日志条目。执行后,outrace
将为您提供一个示例ause
命令来调查日志。始终使用完整的二进制路径跟踪outrace
,例如sudo autrace /bin/ls /tmp
。
<$>[注]
注: 请注意,运行Autrace
将删除所有自定义审计规则。 它将取代您指定过程所需的特定规则。 在Autrace
完成后,它将清除新规则。
让我们试试一个例子,例如,我们想跟踪过程的日期
,并查看它使用的文件和系统调用。
1sudo autrace /bin/date
你应该看到类似于以下的东西:
1Waiting to execute: /bin/date
2Wed Jun 17 07:22:03 EDT 2015
3Cleaning up...
4Trace complete. You can locate the records with 'ausearch -i -p 27020'
您可以使用上面的输出中的ausearch
命令查看相关日志,甚至可以将其传输到aureport
,以获得格式齐全的可读输出:
1sudo ausearch -p 27020 --raw | aureport -f -i
此命令从审计日志中搜索与事件ID 27020
的事件,以原始日志格式提取它,并将其传输到 aureport
,这反过来解释并以更好的格式提供结果,以便更容易阅读。
你应该看到类似于以下的输出:
1File Report
2===============================================
3# date time file syscall success exe auid event
4===============================================
51. Wednesday 17 June 2015 07:22:03 /bin/date execve yes /usr/bin/date sammy 169660
62. Wednesday 17 June 2015 07:22:03 /etc/ld.so.preload access no /usr/bin/date sammy 169663
73. Wednesday 17 June 2015 07:22:03 /etc/ld.so.cache open yes /usr/bin/date sammy 169664
84. Wednesday 17 June 2015 07:22:03 /lib64/libc.so.6 open yes /usr/bin/date sammy 169668
95. Wednesday 17 June 2015 07:22:03 /usr/lib/locale/locale-archive open yes /usr/bin/date sammy 169683
106. Wednesday 17 June 2015 07:22:03 /etc/localtime open yes /usr/bin/date sammy 169691
结论
在本教程中,我们已经涵盖了Linux审计系统的基本知识,您现在应该对审计系统的运作方式有很好的了解,如何阅读审计日志,以及可用的不同工具,以便您更容易审计您的服务器。
默认情况下,审计系统只记录在日志中的一些事件,例如用户登录和用户使用sudo。SELinux相关的消息也被登录。审计台使用规则监控特定事件并创建相关日志条目。可以创建自定义审计规则来监控和记录日志中我们想要的任何事情。这就是审计系统对系统管理员来说变得强大的地方。我们可以使用命令行工具auditctl
或永久地在文件中添加规则。在教程中详细介绍了编写自定义规则和使用预定义规则集。
您还可以查看以下资源,以获取有关审计系统的更多信息: