auditd审计程序使用详解

auditd(Linux审核守护程序)简介

auditd是Linux审计系统的用户空间组件。它负责把审计记录写到磁盘上。查看日志是通过ausearch或aureport工具完成的。配置审计系统或加载规则是通过auditctl工具完成的。在启动过程中,/etc/audit/audit.rules中的规则由auditctl读取并加载到内核。另外,还有一个augenrules程序,它读取位于/etc/audit/rules.d/中的规则,并将其编译成audit.rules文件。审计守护程序本身有一些配置选项,管理员可能希望对其进行自定义。它们可以在 auditd.conf 文件中找到。

auditd安装

Red Hat/CentOS/Fedora: 通常已经默认安装(包:audit和audit-libs)

yum install -y auditd*

Debian/Ubuntu:

apt-get install -y auditd aud -plugins

auditd相关工具与配置文件

相关命令

  • auditctl : 即时控制审计守护进程的行为的工具,比如如添加规则等等
  • aureport : 查看和生成审计报告的工具
  • ausearch : 查找审计事件的工具
  • auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中
  • autrace : 一个用于跟踪进程的命令
  • aulast: 与last类似,但使用审计框架安装
  • aulastlog: 与lastlog类似,也使用审计框架
  • ausyscall: 映射syscall ID和名称
  • auvirt: 显示关于虚拟机的审计信息

相关配置文件

  • /etc/audit/auditd.conf : auditd工具的配置文件
  • /etc/audit/rules.d/audit.rules:包含审核规则的文件
  • /etc/audit/audit.rules : 记录审计规则的文件

audit各审计组件相互之间的交互方式

auditd.conf配置文件

/etc/audit/auditd.conf文件包含了特定于审计守护进程的配置信息。它应该每行包含一个配置关键字、一个等号,后面跟着适当的配置信息。可以识别的关键字有:log_file、log_format、log_group、priority_boost、flush、freq、num_logs、disp_qos、dispatcher、name_format、name、max_log_file、max_log_file_action、space_left、action_mail_acct、space_left_action、admin_space_left、admin_space_left_action、disk_full_action、disk_error_action、tcp_listen_port、tcp_listen_queue、tcp_max_per_addr、use_libwrap、tcp_client_ports、tcp_client_max_idle、enable_krb5、krb5_principal、krb5_key_file。下面描述这些关键字。

配置详情

local_events

本地的事件是否记录,设置为no的场景应该是只作为远程日志收集的服务器,但自身的日志大多数时候也是有必要记录的

write_logs

日志是否落盘,设置为no的场景应该是将会把日志存储到远程服务器的客户端(没有足够空间的情况下)

log_file

此关键字指定存储审计记录的日志文件的完整路径名。它必须是一个普通文件。

log_format

日志格式描述了信息应该如何存储在磁盘上。有两个选项:raw和nolog。如果设置为RAW,审计记录将按照内核发送的格式存储。如果该选项设置为NOLOG,那么所有审计信息将被丢弃,而不会写入磁盘。该模式不影响发送到审计事件分配器的数据。

log_group

此关键字指定应用于日志文件权限的组。默认为root。组名可以是数字,也可以拼写出来。

priority_boost 

这是一个非负数,告诉审计守护进程应该提高多少优先级。默认值为4。没有变化是0。

flush

有效值为none、incremental、data和sync。如果设置为none,则不会进行特殊操作将审计记录刷新到磁盘。如果设置为增量,那么freq参数用于确定显式刷写磁盘的频率。data参数告诉审计守护进程始终保持磁盘文件的数据部分同步。sync选项告诉审计守护进程在每次写入磁盘时保持数据和元数据完全同步。

freq

这是一个非负数,告诉审计守护进程在发出显式刷写到磁盘命令之前要写入多少条记录。只有将flush关键字设置为incremental时,这个值才有效。

num_logs

如果rotate指定了max_log_file_action,则该关键字指定了保留的日志文件数。如果数字是<2、日志不旋转。这个数字必须小于等于99。默认值为0,表示没有旋转。随着要旋转的日志文件数量的增加,可能需要向上调整内核积压工作表的设置,因为旋转文件需要更多的时间。这通常在/etc/audit/audit.rules中完成。如果配置日志轮换,守护进程将检查多余的日志并删除它们,以保持磁盘空间可用。只有在启动和重新配置导致空间检查时,才会进行多余的日志检查。

disp_qos 

此选项控制您想要在审计守护进程和调度程序之间进行阻塞/无损通信还是非阻塞/有损通信。在审计守护进程和分配器之间有一个128k的缓冲区。对于大多数应用来说,这已经足够了。如果选择了lossy,那么当队列满时,进入分派器的事件将被丢弃。(如果log_format不是nlog,事件仍然写入磁盘。)否则,auditd守护进程将等待队列有一个空位,然后将日志记录到磁盘。风险在于,当守护进程等待网络IO时,事件不会被记录到磁盘上。有效值有:lossy和lossless。默认值为Lossy。

dispatcher

dispatcher是一个由审计守护进程在启动时启动的程序。它将把所有审计事件的副本传递给应用程序的stdin。请确保您信任添加到这一行的应用程序,因为它以root权限运行。

name_format 

该选项控制计算机节点名如何插入到审计事件流中。它有以下选项:none、hostname、fqd、numeric和user。None表示没有向审计事件插入计算机名。Hostname是gethostname系统调用返回的名称。fqd意味着它接收主机名并通过dns解析为该机器的完全限定域名。Numeric类似于fqd,只是它可以解析机器的IP地址。为了使用这个选项,你可能想测试` hostname -i `或` domainname -i `是否返回一个数字地址。此外,如果使用dhcp,则不建议使用此选项,因为随着时间的推移,同一台机器可能有不同的地址。User是一个从name选项中定义的管理员字符串。默认值为none。

name 

这是管理员定义的字符串,如果user被指定为name_format选项,它将标识该机器。

max_log_file

这个关键字指定了以兆字节为单位的最大文件大小。当达到这个限制时,它将触发一个可配置的操作。给定的值必须是数值。

max_log_file_action

此参数告诉系统当系统检测到已达到最大文件大小限制时采取什么操作。有效值为ignore、syslog、suspend、rotate和keep_logs。如果设置为ignore,审计守护进程什么都不做。Syslog表示它将向Syslog发出警告。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。rotate选项将导致审计守护进程旋转日志。需要注意的是,数值大的日志比数值小的日志要早。这与logrotate实用程序使用的约定相同。keep_logs选项类似于rotate,只是它不使用num_logs设置。这可以防止审计日志被覆盖。

action_mail_acct

此选项应包含有效的电子邮件地址或别名。默认地址为root。如果电子邮件地址不是本机的,你必须确保在你的机器和网络上正确配置了电子邮件。此外,该选项要求计算机上存在/usr/lib/sendmail。

space_left

这是一个以兆字节为单位的数值,它告诉审计守护进程何时执行可配置的操作,因为系统的磁盘空间开始不足。

space_left_action

这个参数告诉系统,当系统检测到磁盘空间开始变少时,应该采取什么行动。有效值为:ignore、syslog、email、exec、suspend、single和halt。如果设置为ignore,审计守护进程什么都不做。Syslog表示它将向Syslog发出警告。Email意味着它将向action_mail_acct中指定的电子邮件帐户发送警告,同时将消息发送到syslog。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。Halt选项将导致审计守护进程关闭计算机系统。

admin_space_left

这是一个以兆字节为单位的数值,它告诉审计守护进程何时执行可配置的操作,因为系统磁盘空间不足。这应该被视为耗尽磁盘空间之前执行某些操作的最后机会。该参数的数值应该小于space_left的数值。

admin_space_left_action

此参数告诉系统当系统检测到磁盘空间不足时采取什么操作。有效值为:ignore、syslog、email、exec、suspend、single和halt。如果设置为ignore,审计守护进程什么都不做。Syslog表示它将向Syslog发出警告。Email意味着它将向action_mail_acct中指定的电子邮件帐户发送警告,同时将消息发送到syslog。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。停止

disk_full_action

这个参数告诉系统,当系统检测到日志文件写入的分区已满时,应该采取什么行动。有效值为ignore、syslog、exec、suspend、single和halt。如果设置为ignore,审计守护进程将发出syslog消息,但不采取其他操作。Syslog表示它将向Syslog发出警告。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。Halt选项将导致审计守护进程关闭计算机系统。

disk_error_action

这个参数告诉系统,在将审计事件写入磁盘或循环日志时,如果检测到错误,应该采取什么操作。有效值为ignore、syslog、exec、suspend、single和halt。如果设置为ignore,审计守护进程将不执行任何操作。Syslog表示对Syslog连续发出的警告不超过5次。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。Halt选项将导致审计守护进程关闭计算机系统。

tcp_listen_port

这是一个范围为1的数值。65535,如果指定,将导致auditd在对应的TCP端口上监听来自远程系统的审计记录。审计守护进程可以链接到tcp_wrapper。您可能希望通过主机中的一个条目来控制访问。允许和拒绝文件。

tcp_listen_queue 

这是一个数值,表示允许的挂起(请求但未接受的)连接数。默认值为5。如果在同一时间启动的主机太多,例如停电后,这个值设置得太小可能会导致连接被拒绝。

tcp_max_per_addr

这是一个数值,表示一个IP地址允许的并发连接数。默认值为1,最大1024。设置得太大可能导致对日志服务器的拒绝服务攻击。还要注意,内核有一个内部的最大值,即使auditd通过config允许这样做,最终也会阻止该操作。默认值在大多数情况下应该足够了,除非运行自定义编写的恢复脚本来转发未发送的事件。在这种情况下,你只需要增加足够大的数字就可以让它进来。

use_libwrap

该设置确定是否使用tcp_wrapper来识别来自允许的计算机的连接尝试。合法的取值包括“yes”和“no”。默认值为“yes”。

tcp_client_ports

这个参数可以是一个数值,也可以是两个由破折号分隔的值(不允许有空格)。它表明客户端端口允许传入的连接。如果没有指定,则允许任何端口。允许取值为1 ~ 65535。例如,要要求客户端使用特权端口,请将此参数指定为1-1023。你还需要在audio -remote.conf文件中设置local_port选项。确保客户发送从特权端口安全功能,以防止不可信用户日志注入攻击。

tcp_client_max_idle

该参数表示在auditd发出报警之前,客户端可能空闲的秒数(即根本没有数据)。如果客户端机器出现问题,无法干净地关闭连接,则用于关闭非活动连接。注意,这是一个全局设置,必须比任何单独的客户端heartbeat_timeout设置高,最好是2倍。默认为零,禁用此检查。

enable_krb5

如果设置为“yes”,Kerberos 5将用于身份验证和加密。默认值为no。

krb5_principal

这是此服务器的主体。默认值是auditd。有了这个默认值,服务器将查找存储在/etc/audit/audit.中名为auditd/[email protected]的键key进行身份验证,其中hostname是服务器主机的规范名称,通过DNS查找其IP地址返回。

krb5_key_file

此客户端主体的密钥位置。注意,密钥文件必须为root用户所有,模式为0400。默认的是/etc/audit/audit.key

注意事项

在CAPP环境中,审计跟踪被认为是非常重要的,如果无法创建审计跟踪,则必须拒绝对系统资源的访问。在这种环境中,建议将/var/log/audit放在单独的分区中。这是为了确保空间探测是准确的,并且没有其他进程出现并消耗它的一部分。

flush参数应该设置为sync或data。

Max_log_file和num_logs需要调整,以便您能够完全使用分区。需要注意的是,需要旋转的文件越多,返回接收审计事件所需的时间就越长。Max_log_file_action keep_logs应该设置。

Space_left应该设置为一个数字,使管理员有足够的时间对任何警报消息作出反应,并执行一些维护以释放磁盘空间。这通常涉及运行aureport -t报告并将最旧的日志移动到归档区域。space_left的值与站点有关,因为每次部署产生事件的速率都不同。space_left_action建议被设置为电子邮件。如果需要类似snmp陷阱的东西,可以使用exec选项发送一个。

Admin_space_left应该设置为记录管理员操作所需的审计分区上的磁盘空间大小。Admin_space_left_action将设置为single,以便仅在控制台使用该机器。

当分区上不再有空间时,将触发disk_full_action。所有访问都应该终止,因为不再存在审计功能。可以设置为single或halt。

disk_error_action应该设置为syslog、single或halt,具体取决于您处理硬件故障的本地策略。

指定一个允许的客户端端口可能会使客户端难以重启其审计子系统,因为在连接关闭的TIME_WAIT状态超时之前,客户端无法用相同的主机地址和端口重新创建连接。

auditctl使用

审计系统根据一组规则运行,这组规则定义了日志文件中所获取的内容。有三种类型的审核规则可以详细说明:

  • 控制规则 — 允许审计系统的行为和它的一些被修改的配置。
  • 文件系统规则 — 也被称为文件监视,允许审计进入特定文件或者目录。
  • 系统调用规则 — 允许记录任何指定程序所做的系统调用。

审核规则可以在命令行上使用 auditctl ,auditctl 命令控制审计系统的基本功能并且限定规则来决定哪些审计项目要记录。注意:

  1. 所有与审计服务交互的命令以及审核日志文件都需要 root 权限。
  2. 通过命令生成的规则,重启后会失效。保持永久生效需写入文件。

auditctl常用参数

[root@VM-0-15-centos ~]# auditctl -v
auditctl version 2.8.5
[root@VM-0-15-centos ~]# auditctl -l
No rules
[root@VM-0-15-centos ~]# auditctl -w /tmp -p rwxa -k test
[root@VM-0-15-centos ~]# auditctl -l
-w /tmp -p rwxa -k test
[root@VM-0-15-centos ~]# auditctl -D
No rules

默认情况下审计规则是空的,这里添加了一条文件系统规则 监控 /tmp 目录的变动。

  • -w path :指定要监控的路径
  • -p :指定触发审计的文件/目录的访问权限rwxa
    指定的触发条件,r 读取权限,w 写入权限,x 执行权限,a 属性(attr)
  • -k:在审核规则上设置过滤名称,方便后面使用ausearch查找
  • -D:删除所有规则和监控
  • -W: 删除指定path的规则和-w对应,参数都要一样才能删除
  • -b:在 Kernel 中设定最大数量的已存在的审核缓冲区

[root@VM-0-15-centos ~]# auditctl -b 1024

  • -s:报告审核系统状态

[root@VM-0-15-centos ~]# auditctl -s
enabled 1
failure 1
pid 532
rate_limit 0
backlog_limit 8192

  • -r:设定每秒生成信息的速率

[root@VM-0-15-centos ~]# auditctl -r 0

以上配置在生成信息方面不设定限制速率。

在 /etc/audit/audit.rules 文件中定义持久的审核规则和控制

为了定义在重新启动时可以一直有效的审核规则,必须把它们包含在 /etc/audit/audit.rules 文件中。这个文件使用相同的 auditctl 命令行语法来详细说明规则。任何在 # 之后的空行或者文本(#)可以忽略。

  • -R:读取来自指定文件的规则

[root@VM-0-15-centos ~]# cat /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
-w /sbin/insmod -p x -k module_insertion
[root@VM-0-15-centos ~]# auditctl -R /etc/audit/rules.d/audit.rules
No rules
enabled 1
...
[root@VM-0-15-centos ~]# auditctl -l
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux -p wa -k selinux_changes
-w /sbin/insmod -p x -k module_insertion

ausearch使用

使用ausearch命令可以搜索审计记录,必须以root用户身份执行ausearch命令。

ausearch 常用参数

  • -f,–file <文件名> 根据文件名搜索
  • -c,–comm 根据命令行名称搜索
  • -ui,–uid <用户id> 根据用户id搜索
  • -p,–pid <进程id> 根据进程id搜索
  • -k,–key 根据key字段搜索
  • -te,–end [结束日期] [结束时间] 搜索的结束日期和时间
  • -ts,–start [开始日期] [开始时间] 开始数据和搜索时间

ausearch 审计结果type详解

默认情况下,审计日志储存在 /var/log/audit/audit.log 文件中。这里以监控文件/etc/hostname的变动情况为例,监测有哪些进程读取过该文件。

[root@VM-0-15-centos ~]# auditctl -w /etc/hostname -p r -k host
[root@VM-0-15-centos ~]# auditctl -l
-w /etc/hostname -p r -k host
[root@VM-0-15-centos ~]# cat /etc/hostname
VM-0-15-centos
[root@VM-0-15-centos ~]# ausearch -i -k host -ts recent
----
type=CONFIG_CHANGE msg=audit(02/11/2022 17:05:57.190:8258477) : auid=root ses=51293 op=add_rule key=host list=exit res=yes
----
type=PROCTITLE msg=audit(02/11/2022 17:06:12.184:8258478) : proctitle=cat /etc/hostname
type=PATH msg=audit(02/11/2022 17:06:12.184:8258478) : item=0 name=/etc/hostname inode=262653 dev=fd:01 mode=file,644 ouid=root ogid=root rdev=00:00 objtype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=CWD msg=audit(02/11/2022 17:06:12.184:8258478) :  cwd=/root
type=SYSCALL msg=audit(02/11/2022 17:06:12.184:8258478) : arch=x86_64 syscall=open success=yes exit=3 a0=0x7ffdafdae631 a1=O_RDONLY a2=0x1fffffffffff0000 a3=0x7ffdafdabf20 items=1 ppid=19502 pid=22601 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=51293 comm=cat exe=/usr/bin/cat key=host

以上事件由四个记录组成(每个以 type= 作为开始),msg=audit(02/11/2022 17:06:12.184:8258478) ,msg记录的时间戳和唯一 ID,格式为 audit(time_stamp:ID)。如果多个记录是作为同一审计事件的一部分而产生的,则它们共享相同的时间戳和 ID。
每个记录包含好几对 name=value ,由空格或者逗号分开。

type=PROCTITLE

type 字段包含记录的类型。在本例中,PROCTITLE 值指定此记录提供触发此审计事件的完整命令行,该事件是由对内核的系统调用触发的。

type=PATH

每个审核事件包含一个 PATH 对于每条路径种类的记录作为一个参数,传输给系统调用。在审核事件中,只有一条路径被用来作为参数。
为了更清晰展示所有的键值对,把一行的内容拆分成了一列。

item=0

item 输入栏表明在所有项目中,哪个项目在 SYSCALL 类型记录中,参考了当前记录。这个是数字是以零为基准;值 0 意味着它是第一项。

name=/etc/hostname

name 输入栏记录了文件或者目录的所有路径,作为参数被传输给系统调用。在这里它是 /etc/hostname 文件。

inode=262653

inode 输入栏包含索引结点数字,与记录在事件中的文件和目录有关。以下命令体现了与 262653 索引结点数字相关的文件和目录。例如:
[root@VM-0-15-centos ~]# find / -inum 262653 -print
/etc/hostname

dev=fd:01

dev 输入栏明确说明了设备的次要和主要 ID,它包含记录在事件中的文件和目录。在这种情况下,值代表 /dev/fd/1 设备。

mode=file,644

mode 输入栏记录了文件和目录权限。在这种情况下,644 可以被解释为 -rw-r--r--,意味着对于 /etc/hostname 文件,只有 root 用户拥有读和写,其他用户只有读权限。

ouid=root

ouid 输入栏记录了对象所有者的用户 。

ogid=root

ogid 输入栏记录对象拥有者的群组 。

rdev=00:00

rdev 输入栏包含记录的设备识别器只用于特殊文件。在这种情况下,正常文件是不用来作为记录文件的。

objtype=NORMAL

记录了每个路径记录在给定系统调用的上下文中的操作意图。

cap_fp=none

cap_fp 字段记录了与设置文件或目录对象的基于文件系统的允许能力有关的数据。

cap_fi=none

cap_fi 字段记录了与文件或目录对象的基于继承文件系统的能力设置有关的数据。

cap_fe=0

cap_fe 字段记录了文件或目录对象基于文件系统能力的有效位的设置。

cap_fver=0

cap_fver 字段记录了文件或目录对象基于文件系统能力的版本。

type=PATH 参数详解

type=SYSCALL

type 字段包含记录的类型。在本例中,SYSCALL 值指定此记录是由对内核的系统调用触发的。

arch=x86_64

arch 字段包含系统的 CPU 架构信息。

syscall=open

syscall字段记录了发送到内核的系统调用的类型。

success=yes

success 字段记录了该特定事件中记录的系统调用是成功还是失败。

exit=3

exit 字段包含一个值,指定系统调用返回的退出码。此值因不同的系统调用而不同。

a0=0x7ffdafdae631 a1=O_RDONLY a2=0x1fffffffffff0000 a3=0x7ffdafdabf20

a0至a3字段记录了该事件中系统调用的前四个参数,用十六进制符号编码。这些参数取决于使用的系统调用。

items=1

items 字段包含系统调用记录后面的 PATH 辅助记录的数量。

ppid=19502

ppid 字段记录了父进程ID(PPID)。

pid=22601

pid 字段记录了进程 ID(PID)。

auid=root

auid字段记录了审计用户 ID,即loginuid。此 ID 在登录时分配给用户,并被每个进程继承,即使用户的身份改变了,例如使用 su - zgao 命令切换用户帐户。

uid=root

uid 字段记录了启动分析过程的用户的用户 ID。

gid=root

gid 字段记录了启动分析过程的用户的组 ID。

euid=root

euid 字段记录了启动分析过程的用户的有效用户 ID。

suid=root

suid 字段记录了启动分析过程的用户的设置用户 ID。例如一些设置了s位的程序。

fsuid=root

fsuid 字段记录了启动分析进程的用户的文件系统用户 ID。

egid=root

egid 字段记录了启动分析过程的用户的有效组 ID。

sgid=root

sgid 字段记录了启动分析过程的用户的组 ID。

fsgid=root

fsgid 字段记录了启动分析进程的用户的文件系统组 ID。

tty=pts0

tty 字段记录了分析过程被调用的终端。

ses=51293

ses 字段记录了分析过程被调用的会话的会话 ID。

comm=cat

comm 字段记录了用于调用分析过程的命令行名称。在本例中,cat 命令用于触发此审计事件。

exe=/usr/bin/cat

exe 字段记录了用于调用分析过程的可执行文件的路径。

key=host

key 记录了与在审计日志中生成该事件的规则相关联的管理员定义的字符串。该值为执行auditctl时定义的。

type=SYSCALL 参数详解

type=CWD

type 字段值为 CWD – 当前工作目录。此类型用于记录从中调用第一条记录中指定的系统调用的进程的工作目录。

这里 cwd=/root 表示当前进程的执行路径为 /root 目录。

aureport使用

使用aureport命令可以生成审计信息的报表,必须以root用户执行。如果执行aureport命令时没有使用任何选项,那么会显示汇总报表。

[root@VM-0-15-centos ~]# aureport
Summary Report
======================
Range of time in logs: 01/01/1970 08:00:00.000 - 02/14/2022 15:25:16.804
Selected time for report: 01/01/1970 08:00:00 - 02/14/2022 15:25:16.804
Number of changes in configuration: 0
Number of changes to accounts, groups, or roles: 0
Number of logins: 1
Number of failed logins: 8927
Number of authentications: 3
Number of failed authentications: 24090
Number of users: 2
Number of terminals: 6
.....

aureport常用参数

  • -t,–log 日志时间范围报告
  • -x,–executable 可执行文件名报告
  • -r,–response 响应异常报告
  • -te,–end [结束日期] [结束时间] 报告的结束日期和时间
  • -l,–login 登录报告

[root@VM-0-15-centos ~]# aureport -t
Log Time Range Report
=====================
/var/log/audit/audit.log.2: 02/14/2022 02:47:30.301 - 02/14/2022 09:09:13.506
/var/log/audit/audit.log.1: 02/14/2022 09:09:13.506 - 02/14/2022 13:00:10.180
/var/log/audit/audit.log: 02/14/2022 13:00:10.180 - 02/14/2022 15:35:57.426
[root@VM-0-15-centos ~]# aureport -l | head -n 10
Login Report
============================================
# date time auid host term exe success event
============================================
1. 02/13/2022 15:21:55 root 112.85.42.124 ssh /usr/sbin/sshd no 8478563
2. 02/13/2022 15:22:01 root 112.85.42.124 ssh /usr/sbin/sshd no 8478580
3. 02/13/2022 15:22:35 root 87.107.87.82 ssh /usr/sbin/sshd no 8478593

autrace使用

除了使用设置的规则监视系统以外,还可以使用 autrace 命令对各个进程执行专门的审计。autrace 的工作方式类似于 strace,但它收集的信息略有不同。autrace 的输出将写入到 /var/log/audit/audit.log,看上去与标准审计日志项没有任何不同。

对进程执行 autrace 时,需从队列中清除所有审计规则,以免这些规则与 autrace 本身添加的规则相冲突。使用 auditctl -D 命令删除审计规则。这会停止所有一般审计。

这里我们以执行whoami为例。

 [root@VM-0-15-centos ~]# auditctl -D
No rules
[root@VM-0-15-centos ~]# autrace /usr/bin/whoami
Waiting to execute: /usr/bin/whoami
root
Cleaning up...
Trace complete. You can locate the records with 'ausearch -i -p 5280'

使用 autrace 需跟踪的可执行文件的完整路径。完成跟踪后,autrace 会提供跟踪的事件 ID,因此可以使用 ausearch 分析整个数据追踪。要将审计系统恢复为重新使用审计规则集,请使用 systemctl restart auditd 重启动审计守护程序。

使用ausearch查询审计结果。

[root@VM-0-15-centos ~]# ausearch -i -p 5280 -ts recent | head -n 3
---
type=PROCTITLE msg=audit(02/14/2022 15:47:25.880:8603375) : proctitle=autrace /usr/bin/whoami
type=SYSCALL msg=audit(02/14/2022 15:47:25.880:8603375) : arch=x86_64 syscall=mmap success=yes exit=(null)(Unknown error 2027839488) a0=0x0 a1=0x1000 a2=PROT_READ|PROT_WRITE a3=MAP_PRIVATE|MAP_ANONYMOUS items=0 ppid=5278 pid=5280 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=51951 comm=autrace exe=/usr/sbin/autrace key=(null)

如果想更直观的展示进程的调用链可以结合aureport使用。

[root@VM-0-15-centos ~]# ausearch -ts recent  -p 5280 --raw | aureport --file --summary
File Summary Report
===========================
total  file
===========================
4  /var/run/nscd/socket
3  /etc/sysconfig/strcasecmp-nonascii
2  /etc/ld.so.preload
2  /etc/ld.so.cache
1  /usr/bin/whoami
1  /lib64/ld-linux-x86-64.so.2
1  /lib64/libc.so.6
1  /usr/lib/locale/locale-archive
1  /etc/nsswitch.conf
1  /lib64/libnss_files.so.2
1  /etc/passwd

这就展示了我们执行whoami命令过程中所有设计到文件和路径信息。

auditspd使用

审计系统还允许外部应用程序实时访问和使用 auditd 守护程序。此功能由审计调度程序提供。例如,入侵检测系统可以通过此程序使用 auditd 来接收增强的检测信息。

audispd 是用于控制审计调度程序的守护程序。它通常由 auditd 启动。audispd 会提取审计事件并将其分发到想要对其进行实时分析的程序。auditd 的配置储存在 /etc/audisp/audispd.conf 中。

[root@VM-0-15-centos ~]# cat /etc/audisp/audispd.conf
q_depth = 250
overflow_action = SYSLOG
priority_boost = 4
max_restarts = 10
name_format = HOSTNAME
#name = mydomain
plugin_dir = /etc/audisp/plugins.d/

案例分析:审记linux系统指定用户的文件访问

在我的部分机器中,为了直接给其他用户root权限。例如useradd 新增一个普通用户,采用修改/etc/passwd 文件的方式将其uid改为了0。此时一个普通用户就变成了root用户,但是该用户的gid=1000并没有改变。

案例背景

查询系统中uid为0的用户。

[root@VM-0-15-centos ~]# awk -F: '$3==0{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
zgao:x:0:1000::/home/zgao:/bin/bash

这种特殊情况下怎么监控该用户访问过哪些文件呢?
因为uid改变了,直接监控uid=0还会监控到root的文件访问,这里gid未改变可使用gid作为过滤项查找。

auditctl -a exit,always -F arch=x86_64 -S open -F gid=1000

  • -F arch=x86_64 定义使用什么体系结构(uname -m)来监视正确的系统调用(一些系统调用在主结构之间是不明确的)。
  • -S open 选择“open”系统调用
  • -F gid=80 相关用户组GID

[root@VM-0-15-centos ~]# auditctl -a exit,always -F arch=x86_64 -S open -F gid=1000 -k user1000
[root@VM-0-15-centos ~]# auditctl -l
-a always,exit -F arch=b64 -S open -F gid=1000 -F key=user1000
[root@VM-0-15-centos ~]#  su - zgao
Last login: Mon Feb 14 16:38:32 HKT 2022 from 203.205.141.113 on pts/1
[root@VM-0-15-centos ~]# ausearch -k user1000 --raw | aureport --summary --file
File Summary Report
===========================
total  file //由于记录的文件访问过多,只展示部分
===========================
30  /dev/
30  /dev/null
25  /etc/ld.so.cache
23  /etc/ld.so.preload
...
8  /etc/passwd
...
2  /etc/login.defs
2  /dev/tty
2  /home/zgao/.cache/abrt/
2  /home/zgao/.cache/abrt/lastnotification.0QVUzqxw
...
1  /etc/profile.d/vim.sh
1  /home/zgao/.bash_profile
1  /home/zgao/.bashrc
1  /etc/bashrc
1  /etc/inputrc

这里就监控了 su - zgao 用户的情况下,监控用户文件的访问情况。对于某些特殊情况的下系统审计能起到很好的效果。

你可能感兴趣的:(Linux,linux,运维,服务器,审计)