前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上使用Linux审计系统

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

原创
作者头像
何处惹尘埃
修改2018-10-29 17:11:30
6.9K0
修改2018-10-29 17:11:30
举报

介绍

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

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

准备

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

  • CentOS 7 腾讯云CVM(与CentOS 6配合使用).没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 具有sudo权限的非root用户。对CentOS 7进行初始服务器设置。所有命令都将以此用户身份运行。

验证审核安装

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

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

审计系统使用以下包:auditaudit-libs。这些软件包默认安装在新的CentOS 7 腾讯云CVM(以及新的CentOS 6 腾讯云CVM)上。最好通过以下方式验证是否在服务器上安装了它们:

代码语言:javascript
复制
sudo yum list audit audit-libs

您应该在输出中看到Installed Packages下的两个包:

代码语言:javascript
复制
Installed Packages
audit.x86_64
audit-libs.x86_64

配置审核

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

代码语言:javascript
复制
sudo nano /etc/audit/auditd.conf

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

代码语言:javascript
复制
num_logs = 10

您还可以配置以MB为单位的最大日志文件大小以及达到大小后要执行的操作:

代码语言:javascript
复制
max_log_file = 30
max_log_file_action = ROTATE

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

代码语言:javascript
复制
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。

对于此示例,我们假设我们在服务器上配置了一个审计规则,其中label(keysshconfigchange用于记录对/etc/ssh/sshd_config文件的每次访问或修改。如果您愿意,可以使用以下方法临时添加此规则:

代码语言:javascript
复制
sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange

运行以下命令以查看sshd_config文件会在审核日志文件中创建一个新事件

代码语言:javascript
复制
sudo cat /etc/ssh/sshd_config

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

代码语言:javascript
复制
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=关键字开头),它们共享相同的timestamp(1434371271.277)和id(135496)。每个记录由几个名称=值对组成,由空格或逗号分隔。我们将详细了解其中一些字段的含义。

在第一条记录中:

  • type=SYSCALL

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

  • msg=audit(1434371271.277:135496):

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

  • arch=c000003e

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

  • syscall=2

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

代码语言:javascript
复制
sudo ausyscall 2

输出显示:

代码语言:javascript
复制
open

注意:您可以使用sudo ausyscall --dump命令查看所有系统调用的列表及其编号。

  • success=yes

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

  • ppid=6265

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

  • pid=6266

pid字段记录进程ID(PID)。在这种情况下,6266cat进程的PID 。

  • auid=1000

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

  • uid=0

uid字段记录启动分析过程的用户的用户标识。在这种情况下,该cat命令由root用户用uid 0启动。

  • comm="cat"

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

  • exe="/usr/bin/cat"

exe字段记录用于触发此审核消息的命令的路径。

  • key="sshconfigchange"

key字段记录与在日志中生成此事件的审核规则关联的管理员定义的字符串。通常在创建自定义审核规则时设置密钥,以便更轻松地从审核日志中搜索特定类型的事件。

对于第二条记录:

  • type=CWD

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

  • cwd="/home/sammy"

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

第三条记录:

  • type=PATH

在第三个记录中,类型是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的所有审核事件,并解释用户名。

代码语言:javascript
复制
sudo ausearch -m LOGIN --start today -i

下面的命令将搜索事件ID为27020的所有事件(前提是存在具有该id的事件)。

代码语言:javascript
复制
sudo ausearch -a 27020

此命令将搜索触摸文件/etc/ssh/sshd_config并解释它们的所有事件(如果有的话):

代码语言:javascript
复制
sudo ausearch -f /etc/ssh/sshd_config -i

生成审计报告

您可以使用aureport工具获取审核消息摘要,而不是阅读原始审核日志。它以人类可读的格式提供报告。这些报告可用作更复杂分析的构建块。如果在没有任何选项的情况下运行aureport,它将显示审计日志中存在的不同类型事件的摘要。与搜索选项一起使用时,它将显示与搜索条件匹配的事件列表。

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

代码语言:javascript
复制
sudo aureport -x --summary

输出看起来像这样具有不同的值:

代码语言:javascript
复制
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

第一列显示命令执行的次数,第二列显示已执行的命令。请注意,默认情况下不会记录所有命令。仅记录与安全相关的内容。

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

代码语言:javascript
复制
sudo aureport --failed

输出看起来类似于:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
sudo aureport -f -i

输出如下:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
sudo aureport -f -i --summary

注意:只要输入采用原始日志数据格式,aureport工具也可以从stdin而不是日志文件中获取输入。

使用autrace分析进程

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

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

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

代码语言:javascript
复制
sudo autrace /bin/date

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

代码语言:javascript
复制
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以便得到格式良好的可读输出:

代码语言:javascript
复制
sudo ausearch -p 27020 --raw | aureport -f -i

此命令从审核日志中搜索具有事件ID27020的事件,以原始日志格式提取事件并将其传递给aureport事件,然后将其解释并以更好的格式提供结果以便于阅读。

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

代码语言:javascript
复制
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中永久添加规则。

想要了解更多关于使用Linux审计系统的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Use the Linux Auditing System on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 验证审核安装
  • 配置审核
  • 了解审核日志文件
  • 搜索审核日志以查找事件
  • 生成审计报告
  • 使用autrace分析进程
  • 结论
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档