正文
CentOS 7上编写自定义系统审计规则
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
1)简介
Linux审计系统创建审计跟踪,这是一种跟踪系统上各种信息的方法。它可以记录大量数据,如事件类型,日期和时间,用户ID,系统调用,进程,使用的文件,SELinux上下文和敏感度级别。它可以跟踪文件是否已被访问,编辑或执行。它甚至可以跟踪文件属性的更改。它能够记录系统调用的使用情况,用户执行的命令,登录尝试失败以及许多其他事件。默认情况下,审计系统仅记录日志中的少数事件,例如登录的用户,使用sudo的用户以及与SELinux相关的消息。它使用审计规则来监视特定事件并创建相关的日志条目。可以创建审计规则。
2)查看审核规则
[root@s- log]# sudo auditctl -l #查看当前审计规则
No rules #默认值,没任何规则
[root@s- log]# man auditctl
[root@s- log]# auditctl -s #查看审计系统的当前状态
enabled 1 #值为1,表示在服务器上启用了审核
failure
pid 646 #审计守护程序的进程号,pid为o表示守护程序未运行
rate_limit
backlog_limit
lost 0 #表示由于审计队列益出而丢弃了多少事件的纪录
backlog 0 #表示当前有多少事件纪录排队等待auditd来读取他们
loginuid_immutable unlocked
[root@s- log]#
3)添加审计规则
可以用个命令
auditctl
添加自定义审核规则。默认情况下,规则将添加到当前列表的底部,但也可以插入顶部。要使规则永久化,您需要将它们添加到文件
/etc/audit/rules.d/audit.rules
中。每当
auditd
服务启动时,它都会激活文件中的所有规则。审核规则在第一个匹配胜利的基础上工作 - 当规则匹配时,它不会进一步评估规则。正确的规则排序很重要。
如果您使用的是CentOS 6,则会找到审核规则文件
/etc/audit/audit.rules
。
Linux审计系统创建审计跟踪,这是一种跟踪系统上各种信息的方法。它可以记录大量数据,如事件类型,日期和时间,用户ID,系统调用,进程,使用的文件,SELinux上下文和敏感度级别。它可以跟踪文件是否已被访问,编辑或执行。它甚至可以跟踪文件属性的更改。它能够记录系统调用的使用情况,用户执行的命令,登录尝试失败以及许多其他事件。默认情况下,审计系统仅记录日志中的少数事件,例如登录的用户,使用sudo的用户以及与SELinux相关的消息。它使用审计规则来监视特定事件并创建相关的日志条目。可以创建审计规则。
[root@s- log]# sudo auditctl -l #查看当前审计规则 No rules #默认值,没任何规则 [root@s- log]# man auditctl [root@s- log]# auditctl -s #查看审计系统的当前状态 enabled 1 #值为1,表示在服务器上启用了审核 failure pid 646 #审计守护程序的进程号,pid为o表示守护程序未运行 rate_limit backlog_limit lost 0 #表示由于审计队列益出而丢弃了多少事件的纪录 backlog 0 #表示当前有多少事件纪录排队等待auditd来读取他们 loginuid_immutable unlocked [root@s- log]#
3)添加审计规则
可以用个命令
auditctl
添加自定义审核规则。默认情况下,规则将添加到当前列表的底部,但也可以插入顶部。要使规则永久化,您需要将它们添加到文件
/etc/audit/rules.d/audit.rules
中。每当
auditd
服务启动时,它都会激活文件中的所有规则。审核规则在第一个匹配胜利的基础上工作 - 当规则匹配时,它不会进一步评估规则。正确的规则排序很重要。
如果您使用的是CentOS 6,则会找到审核规则文件
/etc/audit/audit.rules
。
可以用个命令
auditctl
添加自定义审核规则。默认情况下,规则将添加到当前列表的底部,但也可以插入顶部。要使规则永久化,您需要将它们添加到文件
/etc/audit/rules.d/audit.rules
中。每当
auditd
服务启动时,它都会激活文件中的所有规则。审核规则在第一个匹配胜利的基础上工作 - 当规则匹配时,它不会进一步评估规则。正确的规则排序很重要。
如果您使用的是CentOS 6,则会找到审核规则文件
/etc/audit/audit.rules
。
审计规则有三种类型:
- 控制规则:这些规则用于更改审计系统本身的配置和设置。
- 文件系统规则:这些是文件或目录监视。使用这些规则,我们可以审核对特定文件或目录的任何类型的访问。
- 系统调用规则:这些规则用于监视由任何进程或特定用户进行的系统调用。
控制规则
让我们看看我们可以添加的一些控制规则:
-
auditctl -b <backlog>
- 设置允许的最大未完成审核缓冲区数。如果所有缓冲区都已满,则内核会查询失败标志以进行操作。CentOS服务器上设置的默认积压限制为320.您可以使用以下命令查看:
sudo auditctl -s
在输出中,您可以看到当前的 backlog_limit 值:
AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0
如果您的积压值大于当前设置的 backlog_limit ,则可能需要增加 backlog_limit 以使审核日志记录正常运行。例如,要将值增加到1024,请运行:
sudo auditctl -b 1024
输出将显示状态:
AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=1024 lost=0 backlog=0
-
auditctl -f [0 1 2]
- 设置失败标志(0 =无声,1 =打印.2 =恐慌)。此选项可让您确定内核如何处理严重错误。如果设置为0,将以静默方式丢弃无法记录的审核消息。如果设置为1,则将消息发送到内核日志子系统。如果设置为2,则会触发内核崩溃。查询此标志的示例条件包括超出积压限制,超出内核内存和超出速率限制。默认值为1.除非服务器上的审计守护程序有任何重大问题,否则无需更改此值。 -
auditctl -R <filename>
- 从指定的文件中读取审核规则。当您测试一些临时规则并希望再次从audit.rules
文件中使用旧规则时,这非常有用。
我们通过
auditctl
添加的规则不是永久性的。要使它们在重新启动后保持不变,您可以将它们添加到文件
/etc/audit/rules.d/audit.rules
中。此文件使用相同的
auditctl
命令行语法来指定规则,但前面没有
auditctl
命令本身。将忽略散列符号(#)后面的任何空行或任何文本。默认规则文件如下所示:
# This file contains the auditctl rules that are loaded # whenever the audit daemon is started via the initscripts. # The rules are simply the parameters that would be passed # to auditctl. # First rule - delete all -D # Increase the buffers to survive stress events. # Make this bigger for busy systems -b 320 # Feel free to add below this line. See auditctl man page
要将积压值更改为8192,您可以将 -b 320 更改为 -b 8192 并使用以下命令重新启动审计守护程序:
sudo service auditd restart
如果不重新启动守护程序,它仍将在下次服务器重新引导时从配置中设置新值。
文件系统规则
可以在文件和目录上设置文件系统监视。我们还可以指定要监视的访问类型。文件系统规则的语法是:
auditctl -w path_to_file -p permissions -k key_name
path_to_file
是被审计的文件或目录。
permissions
是记录的权限。该值可以是r(读取),w(写入),x(执行)和 a(属性更改)中的一个或组合。
key_name
是一个可选字符串,可帮助您识别生成特定日志条目的规则。
我们来看一些例子。
sudo auditctl -w /etc/hosts -p wa -k hosts_file_change
上述规则要求审计系统监视对文件
/etc/hosts
的任何写访问或属性更改,并使用我们指定的自定义键字符串
hosts_file_change
将它们记录到审计日志中。
如果您希望将此规则设为永久性,请将其添加到底部的文件
/etc/audit/rules.d/audit.rules
中,如下所示:
-w /etc/hosts -p wa -k hosts_file_change
要确保成功添加规则,您可以运行:
sudo auditctl -l
如果一切顺利,输出应显示:
LIST_RULES: exit,always watch=/etc/hosts perm=wa key=hosts_file_change
我们还可以将手表添加到目录中。
sudo auditctl -w /etc/sysconfig/ -p rwa -k configaccess
上述规则将向目录
/etc/sysconfig
及其下的所有文件和目录添加监视,以进行任何读取,写入或属性更改访问。它还将使用自定义密钥
configaccess
标记日志消息。
添加规则以监视
/sbin/modprobe
命令的执行(此命令可以从服务器添加/删除内核模块):
sudo auditctl -w /sbin/modprobe -p x -k kernel_modules
注意: 您无法将监视表插入顶级目录。这是内核禁止的。也不支持通配符,并会生成警告。
要在审核日志中搜索特定事件,可以使用命令
ausearch
。例如,要在审核日志中搜索标有
configaccess
键的所有事件,您可以运行:
sudo ausearch -k configaccess
系统调用规则
通过审核系统调用,您可以远远超出应用程序级别跟踪服务器上的活动。系统调用规则的语法是:
auditctl -a action,filter -S system_call -F field=value -k key_name`
哪里:
-
在上述命令中将
-a
替换为-A
将在顶部而不是在底部插入该规则。 -
action
和filter
指定何时记录某个事件。action
可以是always
或never
。filter
指定将哪个内核规则匹配过滤器应用于事件。规则的匹配滤波器可以是下列之一:task
,exit
,user
,和exclude
。action,filter
在大多数情况下将是always,exit
,它会告诉auditctl
你想退出时审核本系统调用。 -
system_call
按名称指定系统调用。可以将多个系统调用分组为一个规则,每个规则在-S
选项后指定。也可以使用all
这个词。您可以使用该sudo ausyscall --dump
命令查看所有系统调用的列表及其编号。 -
field=value
指定其他选项,这些选项可根据指定的体系结构,用户ID,进程ID,路径等修改规则以匹配事件。 -
key_name
是一个可选字符串,可帮助您稍后识别生成特定日志条目的规则或一组规则。
现在让我们看一些示例系统调用规则。
要定义一个审计规则,该规则创建一个标记的日志条目
rename
,每次ID为1000或更大的用户重命名文件时,请运行:
sudo auditctl -a always,exit -F arch=b64 -F "auid>=1000" -S rename -S renameat -k rename
该
-F arch=b64
说审计的规则系统调用的64位版本。
要定义记录特定用户(使用UID 1001)访问的文件的规则,并使用
userfileaccess
标记日志条目:
sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess
如果您希望将此规则设为永久性,请将其添加到底部的文件
/etc/audit/rules.d/audit.rules
中,如下所示:
-a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess
您还可以使用系统调用规则语法定义文件系统规则。例如,以下规则:
sudo auditctl -a always,exit -F path=/etc/hosts -F perm=wa -k hosts_file_change
与我们在前面部分中看到的文件系统规则完成相同的工作:
sudo auditctl -w /etc/hosts -p wa -k hosts_file_change
要使用系统调用规则递归查看目录,可以使用
-F "dir=/path/to/dir"
选项。
注:
请注意,所有进程早于审计守护程序本身将有
4294967295
的
auid
。要从规则中排除这些规则,您可以添加
-F "auid!=4294967295"
到规则。要避免此问题,可以添加
audit=1
到内核引导参数。这使得内核审计系统即使在审计守护程序启动之前也可以启动,并且所有进程都具有正确的登录uid。
删除审核规则
要删除所有当前审核规则,可以使用
auditctl -D
命令。要用
-w
选项删除使用添加的文件系统监视规则,您可以在原规则中替换
-w
为
-W
。使用选项添加系统调用规则
-a
或者
-A
可以使用
-d
原始规则的选项删除系统调用规则。例如,假设我们添加了以下规则:
sudo auditctl -w /etc/passwd -p wa -k passwdaccess
使用以下方法查看规则集:
sudo auditctl -l
输出应包括:
LIST_RULES: exit,always watch=/etc/passwd perm=wa key=passwdaccess
要删除此规则,我们可以使用以下命令,只需替换
-w
为
-W
:
sudo auditctl -W /etc/passwd -p wa -k passwdaccess
现在,使用以下方法查看规则集:
sudo auditctl -l
该规则现在不应该在列表中。
注意:
如果
audit.rules
文件中添加了永久性审计规则,则审计守护程序重新启动或系统重新引导将从文件中加载所有规则。要永久删除审核规则,您需要从文件中删除它们。
锁定审计规则
可以使用
auditctl -e [0 1 2]
禁用或启用审计系统并使用锁定审计规则。例如,要暂时禁用审核,请运行:
auditctl -e 0
当
1
作为参数传递时,它将启用审计。要锁定审计配置以使其无法更改,请将
2
作为参数传递。这使得当前的审计规则集不可变。无法再添加,删除或编辑规则,也无法再停止审计守护程序。对于希望此功能处于活动状态的任何人来说,锁定配置是
audit.rules
中的最后一个命令。将审核并拒绝任何在此模式下更改配置的尝试。只能通过重新引导服务器来更改配置。
结论
Linux审核系统提供的信息对于入侵检测非常有用。您现在应该能够添加自定义审核规则,以便您可以记录特定事件。以上都可以通过man auditctl 来查看命令文档翻译得来