如何使用Linux审核系统在CentOS 7

Linux审核系统可以帮助系统管理员创建一个审计跟踪,日志服务器上的每一个动作。我们可以跟踪安全有关的事件,记录在日志文件中的事件,并通过检查审核日志文件检测滥用或未经授权的活动。 本教程介绍了审计制度,如何配置,如何生成报告,以及如何阅读这些报告。我们还将看到如何搜索的审计日志特定事件。

介绍

Linux审核系统可以帮助系统管理员创建一个审计跟踪,日志服务器上的每一个动作。 我们可以跟踪安全相关事件,将事件记录在日志文件中,并通过检查审计日志文件来检测滥用或未授权的活动。 我们可以选择在服务器上监视哪些操作以及到什么程度。 审核不会为您的系统提供额外的安全性,而是帮助跟踪任何违反系统策略的行为,并允许您采取其他安全措施来防止它们。

本教程介绍了审核系统,如何配置它,如何生成报告以及如何阅读这些报告。 我们还将了解如何搜索审核日志以查找特定事件。

先决条件

对于本教程,您需要以下内容:

  • CentOS 7 Droplet(也适用于CentOS 6)
  • 具有sudo权限的非root用户。 要设置这种类型的用户,按照与CentOS 7初始服务器设置教程。 所有命令将作为此用户运行。

验证审核安装

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

  1. 审核内核组件拦截来自用户应用程序的系统调用,记录事件,并将这些审核消息发送到审核守护程序
  2. auditd守护进程从内核收集的信息,并在日志文件中创建条目

审计系统使用以下包: auditaudit-libs 默认情况下,这些软件包安装在新的CentOS 7 Droplet(和新的CentOS 6 Droplet)上。 最好使用以下方式验证您是否已在服务器上安装它们:

sudo yum list audit audit-libs

您应该看到同时根据包Installed Packages中的输出:

Installed Packages
audit.x86_64
audit-libs.x86_64

配置审计

对于主配置文件auditd/etc/audit/auditd.conf 此文件由配置参数组成,包括记录事件的位置,如何处理完整磁盘和日志轮换。 要编辑此文件,您需要使用sudo:

sudo nano /etc/audit/auditd.conf

例如,要将服务器上保留的审核日志文件数增加到10个,请编辑以下选项:

/etc/audit/auditd.conf
num_logs = 10

您还可以配置最大日志文件大小(以MB为单位),并在达到大小后采取什么操作:

/etc/audit/auditd.conf
max_log_file = 30
max_log_file_action = ROTATE

当您更改配置时,需要使用以下命令重新启动auditd服务:

sudo 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现在。

对于这个例子,让我们假设我们有一个标签(在服务器上配置的审核规则keysshconfigchange记录每次访问或修改文件/etc/ssh/sshd_config 如果您愿意,可以使用以下方式暂时添加此规则:

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange

运行以下命令来查看sshd_config文件创建在审计日志文件的新事件

sudo cat /etc/ssh/sshd_config

此事件在audit.log文件如下所示:

/var/log/audit/audit.log

type=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"

type=CWD msg=audit(1434371271.277:135496):  cwd="/home/sammy"

type=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 )和身份证( 135496 )。 每个记录包含由一个空格或逗号分隔的多个名称=值对。 我们将详细了解这些字段中的一些代表。

在第一条记录中:

  • type=SYSCALL

type字段包含审计消息的类型。 在这种情况下, SYSCALL值显示该消息是由系统调用内核触发。

  • msg=audit(1434371271.277:135496):

审计信息形式的时间戳和ID audit(time_stamp:ID) 如果多个审计消息/记录是作为同一审计事件的一部分生成的,则它们可以共享相同的时间戳和ID。 在我们的示例中,我们可以在审计事件生成的所有三个消息上看到相同的时间戳(1434371271.277)和ID(135496)。

  • arch=c000003e

arch字段包含有关系统的CPU体系结构的信息。 值c000003e以十六进制表示,表示x86_64。

  • syscall=2

syscall字段表示已发送到内核系统调用的类型。 在这种情况下,图2是open系统调用。 ausyscall实用程序允许您的系统调用数转换为他们的人类可读的等价物。 例如,运行以下命令将值2转换为其人类可读的等价物:

sudo ausyscall 2

输出显示:

open

注意:您可以使用sudo ausyscall --dump命令来查看所有系统的列表,包括他们的号码的呼叫一起。

  • success=yes

success字段显示在特定事件中的系统调用是成功还是失败。 在这种情况下,呼叫成功。 用户sammy能够打开和读取文件sshd_config的时候sudo cat /etc/ssh/sshd_config命令运行。

  • ppid=6265

ppid场记录父进程ID(PPID)。 在这种情况下, 6265是的PPID bash过程。

  • pid=6266

pid现场记录进程ID(PID)。 在这种情况下, 6266是的PID cat过程。

  • auid=1000

auid是审计UID或谁触发这个审核消息的用户的UID原。 即使您在初始登录后通过su或sudo升级权限,审核系统也会记住您的原始UID。

  • uid=0

uid字段记录谁开始分析的过程中,用户的用户ID。 在这种情况下, cat的命令开始由用户root UID为0。

  • comm="cat"

comm记录触发此审核消息的命令的名称。

  • exe="/usr/bin/cat"

exe场记录的路径被用来触发该审核消息的命令。

  • key="sshconfigchange"

key领域使用记录生成日志此事件中的审核规则相关联的管理员定义的字符串。 通常在创建自定义审核规则时设置键,以便更容易从审核日志中搜索某些类型的事件。

对于第二条记录:

  • type=CWD

在第二个记录,类型是CWD -当前工作目录。 此类型用于记录触发第一条记录中指定的系统调用的进程被执行的工作目录。

  • cwd="/home/sammy"

cwd字段包含路径从中调用系统调用的目录。 在我们的例子中, cat从而引发了命令open的第一个记录系统调用是从目录中执行/home/sammy

对于第三条记录:

  • type=PATH

在第三个记录类型是PATH 审计事件包含一个PATH为传递给系统调用的参数,每个路径的记录。 在我们的审计事件,只有一条路径( /etc/ssh/sshd_config )作为参数。

  • msg=audit(1434371271.277:135496):

msg字段显示相同的时间戳和ID组合如在第一和第二记录,因为所有三个记录是相同的审计事件的一部分。

  • name="/etc/ssh/sshd_config"

name现场记录传递给系统调用(打开)作为参数文件或目录的完整路径。 在这种情况下,它是/etc/ssh/sshd_config文件。

  • ouid=0

ouid场记录对象的所有者的用户ID。 在这里,对象是文件/etc/ssh/sshd_config

注:审计记录类型的更多信息,可从本教程末尾的链接。

搜索审核日志中的事件

Linux审核系统附带了一个功能强大的工具,称为ausearch搜索审计日志。 随着ausearch ,您可以过滤和搜索事件类型。 它还可以通过将数值转换为人类可读的值(如系统调用或用户名)来解释事件。

让我们来看几个例子。

以下命令将从今天开始搜索类型为LOGIN的所有审核事件的审核日志,并解释用户名。

sudo ausearch -m LOGIN --start today -i

下面的命令将搜索事件id为27020的所有事件(如果有一个具有该id的事件)。

sudo ausearch -a 27020

这个命令将搜索的所有事件(如果有的话)Touch文件/etc/ssh/sshd_config并将其解释:

sudo ausearch -f /etc/ssh/sshd_config -i

生成审计报告

而不是读的原始审计日志,你可以使用该工具的审核消息的摘要aureport 它提供人类可读格式的报告。 这些报告可以用作更复杂分析的构建块。 aureport不带任何选项运行,它会显示不同类型目前在审计日志中的事件的摘要。 当与搜索选项一起使用时,它将显示与搜索条件匹配的事件列表。

让我们尝试了几个例子aureport 如果要生成服务器上所有命令执行的摘要报告,请运行:

sudo aureport -x --summary

输出将看起来像这样与不同的值:

Executable Summary Report
=================================
total  file
=================================
117795  /usr/sbin/sshd
1776  /usr/sbin/crond
210  /usr/bin/sudo
141  /usr/bin/date
24  /usr/sbin/autrace
18  /usr/bin/su

第一列显示命令执行的次数,第二列显示已执行的命令。 请注意,并非所有命令都默认记录。 只记录与安全相关的。

以下命令将提供所有失败事件的统计信息:

sudo aureport --failed

输出看起来类似于:

Failed Summary Report
======================
Number of failed logins: 11783
Number of failed authentications: 41679
Number of users: 3
Number of terminals: 4
Number of host names: 203
Number of executables: 3
Number of files: 4
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 9

生成有关使用系统调用和用户名访问的文件的报告:

sudo aureport -f -i

样品输出:

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Monday 15 June 2015 08:27:51 /etc/ssh/sshd_config open yes /usr/bin/cat sammy 135496
2. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147481
3. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config lgetxattr yes /usr/bin/ls root 147482
4. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147483
5. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147484
6. Tuesday 16 June 2015 05:40:08 /bin/date execve yes /usr/bin/date root 148617

要以摘要格式查看相同内容,您可以运行:

sudo aureport -f -i --summary

注意: aureport工具还可以从只要输入是在原始日志数据格式标准输入代替日志文件输入。

使用autrace分析进程

要审核个人的过程,我们可以使用autrace工具。 此工具跟踪进程执行的系统调用。 这可以用于调查可疑的木马或有问题的过程。 的输出autrace写入/var/log/audit/audit.log ,看起来类似于标准的审核日志条目。 执行后, autrace会为你展示一个例子ausearch命令调查日志。 始终使用的完整路径二进制跟踪与autrace,例如sudo autrace /bin/ls /tmp

注:请注意,运行autrace将删除所有自定义审计规则。 它用要跟踪您指定的过程所需的特定规则替换它们。 autrace完成后,它会清除它添加新的规则。 出于同样的原因, autrace当你的审计规则设置不变将无法工作。

让我们试着一个例子,比方说,我们要跟踪的过程date并查看它使用的文件和系统调用。 运行以下命令:

sudo autrace /bin/date

您应该看到类似于以下内容的内容:

Waiting to execute: /bin/date
Wed Jun 17 07:22:03 EDT 2015
Cleaning up...
Trace complete. You can locate the records with 'ausearch -i -p 27020'

您可以使用ausearch从上面的输出命令查看相关的日志,甚至将它传递给aureport获得格式良好的可读的输出:

sudo ausearch -p 27020 --raw | aureport -f -i

这与事件ID的事件命令搜索27020从审计日志,提取它在原始日志格式,并将其传递到aureport ,这反过来解释并给出一个更好的格式的结果更容易阅读。

您应该看到类似以下的输出:

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Wednesday 17 June 2015 07:22:03 /bin/date execve yes /usr/bin/date sammy 169660
2. Wednesday 17 June 2015 07:22:03 /etc/ld.so.preload access no /usr/bin/date sammy 169663
3. Wednesday 17 June 2015 07:22:03 /etc/ld.so.cache open yes /usr/bin/date sammy 169664
4. Wednesday 17 June 2015 07:22:03 /lib64/libc.so.6 open yes /usr/bin/date sammy 169668
5. Wednesday 17 June 2015 07:22:03 /usr/lib/locale/locale-archive open yes /usr/bin/date sammy 169683
6. Wednesday 17 June 2015 07:22:03 /etc/localtime open yes /usr/bin/date sammy 169691

结论

我们已经介绍了本教程中Linux审核系统的基础知识。 您现在应该很好地了解审核系统如何工作,如何阅读审核日志以及可用的不同工具,以便您更轻松地审核服务器。

默认情况下,审计系统只记录日志中的几个事件,例如用户登录和使用sudo的用户。 还记录与SELinux相关的消息。 审计守护程序使用规则来监视特定事件并创建相关日志条目。 可以创建自定义审核规则,以便在日志中监视和记录任何我们想要的。 这是审计系统对系统管理员变得强大的地方。 我们可以使用命令行工具添加规则auditctl或永久在文件/etc/audit/rules.d/audit.rules 编写自定义规则和使用预定义的规则集进行了详细的讨论编写自定义系统审计制度在CentOS 7教程。

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