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

介绍

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

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

准备

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

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

验证审核安装

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

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

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

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,请编辑以下选项:

num_logs = 10

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

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。

对于此示例,我们假设我们在服务器上配置了一个审计规则,其中label(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文件中的此事件如下所示:

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转换为人类可读的等效项:

sudo ausyscall 2

输出显示:

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的所有审核事件,并解释用户名。

sudo ausearch -m LOGIN --start today -i

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

sudo ausearch -a 27020

此命令将搜索触摸文件/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工具也可以从stdin而不是日志文件中获取输入。

使用autrace分析进程

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

注意:请注意,运行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

此命令从审核日志中搜索具有事件ID27020的事件,以原始日志格式提取事件并将其传递给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中永久添加规则。

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


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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

3分钟带你学会git向github推送!

如果你是一个程序员,你还不知道git和github的话,就说明你low了;那也没关系,赶紧戳链接去下载就行~~ git:分布式的版本管理工具,具体的我就不在这里...

22170
来自专栏阮一峰的网络日志

Content Security Policy 入门教程

跨域脚本攻击 XSS 是最常见、危害最大的网页安全漏洞。 ? 为了防止它们,要采取很多编程措施,非常麻烦。很多人提出,能不能根本上解决问题,浏览器自动禁止外部注...

33750
来自专栏北京马哥教育

利用TCMalloc优化Nginx的性能

TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员。与标准的glibc库的Ma...

25950
来自专栏黑白安全

8种DOS命令

  它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:...

23620
来自专栏LIN_ZONE

Linux各目录及每个目录的详细介绍(转载)

Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:

14420
来自专栏软件开发

一个小时学会Maven

在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。

76730
来自专栏软件开发

Maven快速学习教程

在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。

95840
来自专栏散尽浮华

Nginx+upstream针对后端服务器容错的运维笔记

熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一、nginx的upstr...

1.3K90
来自专栏PHP在线

6个常见的 PHP 安全性攻击

  了解常见的PHP应用程序安全威胁,可以确保你的PHP应用程序不受攻击。因此,本文将列出 6个常见的 PHP 安全性攻击,欢迎大家来阅读和学习。   ...

39850
来自专栏difcareer的技术笔记

Android启动过程分析-从按下电源键到第一个用户进程[转载]正文

对Android最初的启动过程一直没有清晰的认识,看到一篇好文,转载一下: http://blog.jobbole.com/67931/ http://ww...

7820

扫码关注云+社区

领取腾讯云代金券