Linux审计101

任何关心Linux服务器的安全性、稳定性和正常功能的人都需要对其系统进行审计。审计可以包括从记录简单的Bash命令到跟踪复杂的系统进程的任何内容。Linux审计可能是一个复杂的过程,但是这里有一些基本的工具和技术,您可以使用这些工具和技术来简化这个任务。

首先,让我们讨论一些简单的方法,您可以了解哪些用户做了没有达到审计级别的事情。例如,您可以使用Bash的内置命令检查shell命令的历史记录历史.它显示当前用户执行的最后一个命令。要查看执行的日期和时间,请使用该命令重新配置历史记录的设置export HISTTIMEFORMAT='%F %T '

历史命令只对当前用户生效。要查看其他用户的活动,只要你有权限,读取他们主目录中名为.bash_history的隐藏文件。然而,需要注意的是:Bash的历史可能不完整,这使得记录毫无意义。如果你看到的话。/ myscript.sh,您所知道的就是用户执行了一个脚本;您无法知道这个脚本中有什么内容,或者它做了什么,当然,除非这个脚本保持可用并不变。

要查看当前登录的用户以及每个用户正在做什么,请使用该命令/usr/bin/w,它会给你完整的信息。

许多服务,包括一些流行的数据库,提供简单的审计日志。为MySQL在用户的主目录中有一个名为.mysql_history的隐藏文件记录用户在MySQL控制台中所有的操作。一个类似的文件PostgreSQL被称为.psql_history。

历史日志中经常包含密码或其他敏感数据。例如,可以考虑在创建MySQL或PostgreSQL用户时显示的命令。因此,确保历史日志文件只能被每个用户读取(当然也可以写入);它们应该将chmod权限标志设置为600。如果您更关心安全性而不是审计,那么您可以完全删除这些历史文件,然后在它们的位置上创建一个到/dev/null的软链接。以MySQL为例,运行此命令-s /dev/null ~/.mysql_history

这些基本的练习只是一个开始。它们只触及用户的操作和系统上发生的事情的表面,而且攻击者删除显示其痕迹的日志是微不足道的。因此,您需要一个高级的审计解决方案,不仅可以显示恶意活动,还可以将这些信息存储在安全的(最好是远程的)地方。

先进的Linux审计

Linux审计系统Linux内核实现在CentOS以及其他支持深入和高级审计的发行版。它在内核级工作,可以监视系统上的每个进程和活动。它使用auditd守护进程记录它发现的内容。

在大多数Linux发行版中,auditd是预安装的,并随系统自动启动和停止。它根据自己的审计规则记录信息,并传递我们文章中描述的SELinux消息Linux服务器硬化

Auditd的配置由不同目录中的几个文件控制。守护进程的配置文件是/etc/audit/audit .conf,其中包含除审计规则之外的所有设置。在您仍然探索审计时,保留默认值。重要的设置包括max_log_file(默认为6),日志文件的最大大小,单位为兆字节。一旦日志文件达到此限制,设置中指定的操作max_log_file_action(默认旋转)发生。设置num_logs(默认值5)指定日志文件的数量,从而决定保留多少日志文件。

/etc/audit/audit.rules文件包含审计规则,这些规则控制哪些事件应该被审计和记录。您可以在这个文件中指定三种类型的选项:控制、文件系统和系统调用。

控制选项管理系统而不是审计规则。例如,audit.rules文件应该总是以一个指令开始,即删除任何现有的审计规则(- d).另一个有用的控制选项是- e 2,这使得配置是不可变的,并且需要重新启动服务器以使新的更改生效。

文件系统规则与文件和目录递归相关,每个规则看起来像这样:

-w path-to-file -p permission -k keyword

所有文件系统规则以- w,代表手表。权限是一个读取(r),写(w),执行(x),和/或更改属性(一个)的文件。关键字是您选择连接到一个或多个审计规则的直观方法。同一个关键字可以用于多个规则。

一个示例应该有助于说明文件系统规则是如何工作的。下面的规则指示auditd监视文件/etc/shadow (Linux密码文件),以便读取、写入或修改其属性:

-w /etc/shadow -p rwa -k shadow_watch

当规则触发时,auditd将日志条目写入其日志文件/var/log/audit/audit.log。

如果您对audit.rules文件做了任何更改,您必须使用命令重新启动(或重新加载)auditd守护进程服务auditd重启.如果输入上面的规则,您可以通过重新启动守护进程来测试它,然后尝试读取/etc/shadow。属性搜索当前的auditd日志ausearch命令中带有规则的关键字:看-我.结果应该类似于:

类型=路径味精=审计(11/18/2012 16:24:19.963:61):项目= 0的名字= http://www.openlogic.com/etc/shadow inode = 163882 dev = fd: 00模式=文件,000根rdev ouid =根ogid = = 00:00 obj = system_u: object_r: shadow_t: s0类型=慢性消耗病味精=审计(11/18/2012 16:24:19.963:61):慢性消耗病= http://www.openlogic.com/root type =系统调用味精=审计(11/18/2012 16:24:19.963:61):arch=i386 syscall=open success=no exit=-13(Permission denied) a0=bfde58e9 a1=8000 a2=0 a3=1 items=1 ppid=2148 pid=2149 auid=root uid=anatoli gid=anatoli euid=anatoli suid=anatoli fsuid=anatoli egid=anatoli sgid=anatoli fsgid=anatoli tty=pts0 ses=1 comm=cat exe=http://www.openlogic.com/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0。c1023关键= shadow_watch

ausearch参数-我告诉命令解释数字;例如,uid 503被翻译成“anatoli”。上面的日志摘录显示用户anatoli尝试使用可执行文件读取文件/etc/shadow (name)/bin/cat(exe)。日志显示成功=没有,尝试不成功,退出代码是-13,这意味着许可被拒绝。

ausearch实用程序让您过滤您的结果。要看到所有不成功的尝试,使用sv没有,其中sv代表成功值。带shadow关键字的完整命令为Ausearch -k shadow_watch -sv no.有关返回值和ausearch的更多信息,请运行该命令查看其手册页男人ausearch

第三种类型的选项是系统调用(syscall),它提供应用程序和Linux内核之间的接口。这些审计规则作用于指定的接口,检测并记录事件。系统调用审计规则的结构如下:

——< em > < / em >, < em >过滤器< / em > s < em >系统调用< / em > - f字段= < em >值< / em > < / em > - k < em >关键字

第一个——一个表示追加——即在规则集的末尾追加规则。你也可以用——一个把它放在列表的最前面,或者- d删除规则。

可能的值是总是从来没有,即总是或从不创建事件日志。

对于第三个论点,过滤器,常用的值有两个:退出用户.的退出值表示当操作完成时,在系统调用退出时执行。的用户Filter用于用户空间事件,可以进一步过滤为uidauidgid,pid

下一个论点是- s后跟一个系统调用名。有数百个系统调用,要查看所有的系统调用,去由于手册页-通常可以使用多个函数来得到相似的结果。例如,如果您想要查看某个文件或目录是否已被删除,您可以使用拆开unlinkat重命名,或renameat

之前的最后一个论证- k为关键字- f,表示微调过滤字段。如果你回到ausearch - k shadow_watch结果,您可以看到许多字段,这些字段可用于微调规则,从而得到结果。一个经过微调的规则示例如下:

-a always,exit -S unlink -S unlinkat -S rename -S rename -F auid>=500 -F auid!= 4294967295 - k删除

该规则涵盖可能导致文件消失的系统调用。两个微调规则(- f)声明要触发规则,用户ID应该高于500(普通用户),但应该与4294967295不同,4294967295是审计系统ID的表示。有关微调字段的进一步信息,请查看audit.rules手册页。

为了让你更快地开始使用审计规则,CentOS 6在/usr/share/doc/audit-2.2/stig.rules文件中提供了一些示例规则。仅仅使用它们而不做任何调整就为审计提供了坚实的基础。

Auditd测井解释

设置好要跟踪的事件后,可以通过在/var/log/audit/audit.log中解释auditd的日志文件来执行实际的审计。该文件包含的信息与ausearch但格式对用户更不友好。如果您决定直接读取日志文件,可能会遇到一个问题,即时间是以Unix时间戳格式给出的,这意味着您必须将时间戳转换为可读的日期和时间,以便告诉事件何时发生。

许多工具可以使阅读和分析auditd日志中的信息变得更容易。例如,aureport实用程序允许您从auditd日志文件生成报告。运行就aureport为您提供一个易于理解的摘要报告。它包括所有重要审计事件组的计数器,例如对帐户、组或角色的更改数。还提供了详细的报告,可以根据类型(文件系统或系统调用)、字段和时间对它们进行过滤。这里有一些有用的aureport选项:

  • ——身份验证-显示授权尝试。属性可以进一步扩展aureport命令——失败论证只能表明失败的尝试——开始限制报告的时间范围。因此,要查看昨天失败的登录,请使用命令Aureport -auth -failed -start昨天
  • ——关键-列出审计规则中定义的关键字的事件
  • ——文件—显示指定文件和目录的事件
  • ——系统调用—对已配置在审计规则中记录的系统呼叫事件进行报告

有关这些报告的更多详细信息和aureport的更多信息,请查看其手册页(男人aureport).

审计硬化

审计报告必须提供真实可靠的信息。为了实现这一点,审计周期必须得到保护和加强。审计加固加强了确保审计过程的可靠性、完整性和安全性的最佳实践。

加强的第一步是通过使用控制选项确保auditd的配置是不可变的- e 2.接下来,确保日志存储在一个安全的集中位置。最好的地方是一个专门用于接收远程syslog事件的服务器。

一个名为audispd (auditd的调度程序)的实用程序可以帮助完成这个任务,它的一个插件audisp-remote也可以帮助完成这个任务。Audisp-remote允许将事件发送到远程syslog服务器。它的配置可以在/etc/ audip / audip -remote.conf文件中找到。下面是一个示例配置,指定远程rsyslog服务器10.0.0.1正在侦听TCP 514端口:

Remote_server = 10.0.0.1 port = 514 transport = TCP

将事件记录下来并安全存储到一个偏远的地方,有助于让人安心。当然,并不能保证远程服务器不会被破坏或破坏,但是这样做为更好的系统管理和安全性又多了一步。这就是为什么可靠的远程日志是金融和政府环境的必要条件。

Linux审计可以像读取简单的历史日志文件一样简单,但如果您决定认真对待它,它可能是一个真正的挑战。要进行可靠的审计,请使用强大的Linux内核选项以及auditd和audispd补充服务。

加入网络世界社区足球竞猜app软件脸谱网LinkedIn对自己最关心的话题发表评论。
相关:

版权©2012足球竞彩网下载

SD-WAN买家指南:向供应商(和您自己)提出的关键问题