如何在 CentOS 7 上使用 Linux 审计系统

介绍

Linux 审计系统帮助系统管理员创建一个审计轨迹,在服务器上每个操作的日志。我们可以跟踪安全相关事件,记录事件在日志文件中,并通过检查审计日志文件检测滥用或未经授权的活动。

本教程解释了审计系统,如何配置它,如何生成报告,以及如何阅读这些报告,我们还将看到如何搜索特定事件的审计日志。

前提条件

对于这个教程,你需要以下内容:

  • CentOS 7 Droplet (也适用于 CentOS 6)
  • 具有 sudo 特权的非根用户. 要设置此类型的用户,请遵循 CentOS 7 初始服务器设置 教程。

检查审计安装

审计体系有两个主要部分:

  1. 审计内核组件拦截用户应用程序的系统呼叫,记录事件,并将这些审计消息发送到审计内核 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)。在这种情况下,6265bash进程的PPID。

  • pid=6266

pid字段记录了进程ID(PID)。在这种情况下,6266cat进程的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或永久地在文件中添加规则。在教程中详细介绍了编写自定义规则和使用预定义规则集。

您还可以查看以下资源,以获取有关审计系统的更多信息:

Published At
Categories with 技术
comments powered by Disqus