Linux下安全审计audit 系统审计 记录root操作

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Linux下安全审计audit 系统审计 记录root操作相关的知识,希望能为你提供帮助。

Linux下安全审计audit 系统审计 1.审计介绍Linux 审计系统提供了一种跟踪系统上与安全相关的信息的方法。根据预先配置的规则,Audit 会生成日志条目,以尽可能多地记录有关系统上发生的事件的信息。此信息对于关键任务环境确定安全策略的违反者及其执行的操作至关重要。审计不会为您的系统提供额外的安全性;相反,它可用于发现违反您系统上使用的安全策略的情况。可以通过其他安全措施(例如 SELinux)进一步防止这些违规行为。
audit能够在日志中记录的信息有:

  • 时间的日期时间、类型和结果
  • 主体和客体的敏感度标签
  • 事件与触发事件的用户身份的关联
  • 对审计配置的所有修改和访问审计日志文件的尝试
  • 身份验证机制的所有用途,例如 SSH、Kerberos 等
  • 对任何受信任数据库的更改,例如??/etc/passwd??
  • 尝试将信息导入或导出系统
  • 根据用户身份、主题和对象标签以及其他属性包括或排除事件
使用审计系统也是许多与安全相关的认证的要求。审核旨在满足或超过以下认证或合规指南的要求:
  • 受控访问保护配置文件 (CAPP)
  • 标记安全保护配置文件 (LSPP)
  • 规则集基础访问控制 (RSBAC)
  • 国家工业安全计划操作手册 (NISPOM)
  • 联邦信息安全管理法案 (FISMA)
  • 支付卡行业 — 数据安全标准 (PCI-DSS)
  • 安全技术实施指南 (STIG)
审计还包括:
  • 由国家信息保障合作伙伴 (NIAP) 和最佳安全行业 (BSI) 评估。
  • 在 Red Hat Enterprise Linux 5 上通过 LSPP/CAPP/RSBAC/EAL4+ 认证。
  • 在 Red Hat Enterprise Linux 6 上通过操作系统保护配置文件/评估保证级别 4+ (OSPP/EAL4+) 认证。
2.审计能做什么 2.1 看文件访问
审计可以跟踪文件或目录是否已被访问、修改、执行,或者文件的属性是否已更改。这很有用,例如,检测对重要文件的访问并在这些文件之一损坏的情况下提供审计跟踪。
2.2 监控系统调用
可以将审计配置为每次使用特定系统调用时生成日志条目。这可以用来,例如,通过监控来跟踪更改系统时间??settimeofday??,??clock_adjtime??和其他时间相关的系统调用。
2.3 记录用户运行的命令
由于审计可以跟踪文件是否已被执行,因此可以定义许多规则来记录特定命令的每次执行。例如,可以为??/bin??目录中的每个可执行文件定义规则。然后可以通过用户 ID 搜索生成的日志条目,以生成每个用户执行命令的审计跟踪。
2.4 记录安全事件
该??pam_faillock??认证模块能够记录失败的登录尝试的。还可以设置审核以记录失败的登录尝试,并提供有关尝试登录的用户的其他信息。
2.5 搜索事件
Audit 提供了ausearch实用程序,该实用程序可用于过滤日志条目并根据许多条件提供完整的审计跟踪。
2.6 运行摘要报告
该aureport实用程序可用于生成,除其他事项外,记录的事件每日报告。然后系统管理员可以分析这些报告并进一步调查可疑活动。
2.7 监控网络访问
iptables和ebtables实用程序可以被配置为触发审计事件,从而允许系统管理员监控网络访问。
3.审计系统架构审计系统由两个主要部分组成:用户空间应用程序和实用程序,以及内核端系统调用处理。内核组件接收来自用户空间应用程序的系统调用,并通过三个过滤器之一过滤它们:usertaskexit。一旦系统调用通过这些过滤器之一,它就会通过排除过滤器发送,排除过滤器根据审核规则配置将其发送到审核守护程序以进行进一步处理。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KnMsoByf-1632449444073)(C:\\Users\\15856\\AppData\\Roaming\\Typora\\typora-user-images\\image-20210923164817910.png)]
用户空间审计守护进程从内核收集信息并在日志文件中创建日志文件条目。其他审计用户空间实用程序与审计守护进程、内核审计组件或审计日志文件交互:
  • audisp — 审计调度程序守护进程与审计守护进程交互并将事件发送到其他应用程序以进行进一步处理。这个守护进程的目的是提供一个插件机制,以便实时分析程序可以与审计事件交互。
  • auditctl — 审计控制实用程序与内核审计组件交互,以控制事件生成过程的许多设置和参数。
  • 其余的审计实用程序将审计日志文件的内容作为输入,并根据用户的要求生成输出。例如,aureport实用程序生成所有记录事件的报告。
4.安装审计包系统一般默认就有

yum install audit


5.配置审计服务审计守护进程可以在??/etc/audit/auditd.conf??配置文件中进行配置。此文件包含修改审核守护程序行为的配置参数。任何空行或井号 ( ??#??)后面的任何文本都将被忽略。
5.1 配置auditd CAPP环境
默认??auditd??配置应该适用于大多数环境。但是,如果您的环境必须满足受控访问保护配置文件(CAPP)设置的标准,这是通用标准认证的一部分,则必须使用以下设置配置审核守护程序:
  • 保存审核日志文件的目录(通常为??/var/log/audit/??)应驻留在单独的分区上。这可以防止其他进程占用此目录中的空间,并为审计守护程序提供对剩余空间的准确检测。
  • 该*??max_log_file??*参数指定单个审计日志文件的最大大小,必须设置为充分利用保存审计日志文件的分区上的可用空间。
  • 该*??max_log_file_action??参数决定一旦??max_log_file??*达到设置的限制时采取的操作,应设置??keep_logs??为防止审计日志文件被覆盖。
  • 该*??space_left??参数指定磁盘上剩余的可用空间量,在该??space_left_action??参数中设置的操作将被触发,必须设置为一个数字,以便管理员有足够的时间来响应并释放磁盘空间。该??space_left??*值取决于生成审核日志文件的速率。
  • 建议将*??space_left_action??*参数设置为??email??或??exec??使用适当的通知方法。
  • 该*??admin_space_left??参数指定??admin_space_left_action??*触发参数中设置的操作的绝对最小可用空间量,必须设置为一个值,以便留出足够的空间来记录管理员执行的操作。
  • 该*??admin_space_left_action??*参数必须设置为??single??使系统进入单用户模式并允许管理员释放一些磁盘空间。
  • 该*??disk_full_action??*参数指定在保存审核日志文件的分区上没有可用空间时触发的操作,必须设置为??halt??或??single??。这可确保系统在 Audit 无法再记录事件时关闭或以单用户模式运行。
  • 的*??disk_error_action??*,其中规定,被触发的情况下,上保存审计日志文件的分区检测到错误的动作,必须设置为??syslog??,??single??或??halt??,这取决于你的本地安全策略有关硬件故障的处理。
  • 所述*??flush??*配置参数必须设置为??sync??或??data??。这些参数确保所有审计事件数据与磁盘上的日志文件完全同步。
其余配置选项应根据您的本地安全策略进行设置。
6.定义审计规则审计系统根据一组规则运行,这些规则定义了要在日志文件中捕获的内容。可以指定三种类型的审计规则:
  • 控制规则 — 允许修改审计系统的行为及其某些配置。
  • 文件系统规则——也称为文件监视,允许审计对特定文件或目录的访问。
  • 系统调用规则——允许记录任何指定程序进行的系统调用。
可以使用auditctl实用程序在命令行上指定审计规则(请注意,这些规则在重新启动后不会持久),或写入??/etc/audit/audit.rules??文件。以下两节总结了定义审计规则的两种方法。
6.1 使用auditctl实用程序定义审计规则
??与审计服务和审计日志文件交互的所有命令都需要 root 权限。确保以 root 用户身份执行这些命令。??
该??auditctl??命令允许您控制审计系统的基本功能并定义决定记录哪些审计事件的规则。
6.1.1 定义控制规则以下是一些允许您修改审计系统行为的控制规则:
  • -b
    设置内核中现有审计缓冲区的最大数量,例如:
    auditctl -b 8192
  • -f
    auditctl -f 2
    上述配置会在发生严重错误时触发内核恐慌。
  • -e
    auditctl -e 2
  • -r
    设置每秒生成消息的速率,例如:
    auditctl -r 0
    上述配置对生成的消息没有设置速率限制。
  • -s
    报告审计系统的状态,例如:
    [root@proxy ~]# auditctl -s enabled 1 failure 2 pid 5613 rate_limit 0 backlog_limit 8192 lost 0 backlog 0 loginuid_immutable 0 unlocked
  • -l
    列出所有当前加载的审计规则,例如:
    [root@proxy ~]# auditctl -l No rules
  • -D
    删除所有当前加载的审计规则,例如:
    [root@proxy ~]# auditctl -D No rules
6.1.2 定义文件系统规则语法:
??auditctl -w path_to_file -p permission -k key_name??
解释:
  • path_to_file:被审计的文件或目录
  • 权限:
  • ??r??—对文件或目录的读取权限
  • ??w??—对文件或目录的写访问权限
  • ??x??—执行对文件或目录的访问
  • ??a??—更改文件或目录的属性
  • key_name:是一个可选字符串,可帮助您识别生成特定日志条目的规则或规则集
例如:
  • 要定义记录对/etc/passwd文件的所有写访问和每个属性更改的规则,请执行以下命令:
    auditctl -w /etc/passwd -p wa -k passwd_change
    请注意,-k选项后面的字符串是任意的。
  • 要定义一个规则来记录/etc/selinux/目录中所有文件的所有写访问权限和每个属性更改,请执行以下命令:
    auditctl -w /etc/selinux/ -p wa -k selinux_change
  • 要定义记录/sbin/insmod命令执行的规则,将模块插入 Linux 内核,请执行以下命令:
    auditctl -w /sbin/insmod -p x -k module_insertion
6.1.3 定义系统调用规则语法:
??auditctl -a action,filter -S system_call -F field=value -k key_name??
解释:
  • action和filter指定何时记录某个事件。action可以是always或nerver。filter指定将哪个内核规则匹配过滤器应用于事件。规则的匹配滤波器可以是以下中的一个:task、exit、user、exclude。
  • system_call通过名称指定系统调用。可以在/usr/include/asm/unistd_64.h文件中找到所有系统调用列表。多个系统调用可以组合成一个规则,每个都在-s选项后指定
  • filed=value指定其他选项,这些选项进一步修改规则以根据指定的体系结构、组ID、进程ID等匹配事件。
  • key_name是一个可选字符串,可帮助我们识别生成特定日志条目的规则或规则集。
例如:
  • 要定义一个规则,在程序每次使用adjtimexsettimeofday系统调用时创建日志条目,并且系统使用 64 位架构,请执行以下命令:
    auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
  • 定义一个规则,每次文件被ID为500或更大的系统用户删除或重命名时创建一个日志条目(该-F auid!=4294967295选项用于排除未设置登录UID的用户),执行以下命令:
    auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F "auid> =500" -F auid!="4294967295" -k delete
  • 也可以使用系统调用规则语法定义文件系统规则。以下命令为系统调用创建一个类似于-w /etc/shadow -p wa文件系统规则的规则:
    auditctl -a always,exit -F path=/etc/shadow -F perm=wa
6.2 在 /ETC/AUDIT/AUDIT.RULES 文件中定义持久审计规则和控制
要定义在重新启动后持续存在的审核规则,您必须将它们包含在??/etc/audit/audit.rules??文件中。此文件使用相同的??auditctl??命令行语法来指定规则。任何空行或井号 ( ??#??)后面的任何文本都将被忽略。
该??auditctl??命令还可用于从带有??-R??选项的指定文件中读取规则,例如:

auditctl -R/usr/share/doc/audit-2.8.5/rules/xxx.rules


定义控制规则
一个文件可以只包含修改审计系统的行为如下控制规则:??-b??,??-D??,??-e??,??-f??,和??-r??。
6.2.1 控制规则
# 删除之前的所有规则
-D

# 设置缓冲区大小
-b 8192

# 使配置不可变——需要重启才能更改审计规则
-e 2

# 发生故障时的恐慌
-f 2

# 每秒最多生成 100 条审计消息
-r 100

【Linux下安全审计audit 系统审计 记录root操作】
6.2.2 定义文件系统和系统调用规则文件系统和系统调用规则是使用??auditctl??语法定义的
例如:文件系统和系统调用规则??audit.rules??

-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
-w /sbin/insmod -px -k module_insertion

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid> =500 -F auid!=4294967295 -k delete


6.2.3 预配置的规则文件
在目录中,审计包根据各种认证标准提供了一组预配置的规则文件: ??/usr/share/doc/audit-*version*/rules??
  • ??nispom.rules?? ——符合《国家工业安全方案操作手册》第八章要求的审计规则配置。
  • ??capp.rules??— 满足??受控访问保护配置文件??(CAPP)设置的要求的审计规则配置,这是通用标准认证的一部分。
  • ??lspp.rules??— 符合??标记安全保护配置文件??(LSPP)设置要求的审计规则配置,这是通用标准认证的一部分。
  • ??stig.rules?? — 符合安全技术实施指南 (STIG) 规定要求的审计规则配置。
7.审计日志文件默认情况下,审计系统将日志条目存储在??/var/log/audit/audit.log??文件中;如果启用日志轮换,则轮换??audit.log??文件存储在同一目录中。
以下审核规则会记录每次读取或修改??/etc/ssh/sshd_config??文件的尝试:

-w /etc/ssh/sshd_config -p warx -k sshd_config


如果??auditd??守护进程正在运行,运行以下命令会在审计日志文件中创建一个新事件:

~]# cat /etc/ssh/sshd_config


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

type=SYSCALL msg=audit(1632445286.424:140): arch=c000003e syscall=2 success=yes exit=3 a0=7ffdc4adf839 a1=0 a2=1fffffffffff0000 a3=7ffdc4add9e0 items=1 ppid=7725 pid=8290 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=3 comm="cat" exe="/usr/bin/cat" key="sshd_config"
type=CWD msg=audit(1632445286.424:140):cwd="/root"
type=PATH msg=audit(1632445286.424:140): item=0 name="/etc/ssh/sshd_config" inode=37244245 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0




上述事件由三条记录(每条以??type=??关键字开头)组成,它们共享相同的时间戳和序列号。每条记录由若干对组成,由空格或逗号分隔。对上述事件的详细分析如下:
  • 第一条记录
  • type=SYSCALL
    type字段包含记录的类型。在此示例中,该SYSCALL值指定此记录是由对内核的系统调用触发的。
  • msg=audit(1364481363.243:24287)msg字段记录:
  • 表单中记录的时间戳和唯一 ID 。如果多条记录是作为同一审计事件的一部分生成的,则它们可以共享相同的时间戳和 ID。 ??audit(*time_stamp*:*ID*)??
  • 内核或用户空间应用程序提供的 各种特定于事件的对。 ??*name*=*value*??
  • arch=c000003e
    arch字段包含有关系统 CPU 架构的信息。值c000003e以十六进制表示法编码。ausearch使用命令搜索审计记录时,使用-i--interpret选项自动将十六进制值转换为人类可读的等效值。该c000003e值被解释为x86_64
  • syscall=2
    syscall字段记录发送到内核的系统调用的类型。值 ,2可以与/usr/include/asm/unistd_64.h文件中人类可读的等价物相匹配。在这种情况下,2open系统调用。请注意,ausyscall实用程序允许您将系统调用号转换为其人类可读的等效项。使用该ausyscall --dump命令显示所有系统调用及其编号的列表。
  • success=yes
    success字段记录了该特定事件中记录的系统调用是成功还是失败。
  • exit=3
    exit字段包含一个值,用于指定系统调用返回的退出代码。该值因系统调用而异。您可以使用以下命令将该值解释为人类可读的等效值:(ausearch --interpret --exit 3假设您的审核日志包含一个失败并显示退出代码的事件3)。
  • a0=7ffdc4adf839 a1=0 a2=1fffffffffff0000 a3=7ffdc4add9e0
    a0a3场记录的前四个参数,编码以十六进制表示,在此事件中的系统调用。这些参数取决于所使用的系统调用;它们可以由ausearch实用程序解释。
  • items=1
    items字段包含事件中的路径记录数。
  • ppid=7725
    ppid字段记录父进程 ID (PPID)。在这种情况下,7725bash进程的 PPID 。
  • pid=8290
    pid字段记录进程 ID (PID)。在这种情况下,8290cat进程的 PID 。
  • auid=0
    auid字段记录审计用户 ID,即 loginuid。该 ID 在登录时分配给用户,即使用户的身份发生变化(例如,通过使用su - john命令切换用户帐户)也会被每个进程继承。
  • uid=0
    uid字段记录启动分析进程的用户的用户 ID。可以使用以下命令将用户 ID 解释为用户名:. 在本例中,是 user 的用户 ID 。 ausearch -i --uid UID
    [root@proxy rules]# ausearch -i --uid 0 ---- type=PROCTITLE msg=audit(09/23/2021 21:01:26.424:140) : proctitle=cat /etc/ssh/sshd_config type=PATH msg=audit(09/23/2021 21:01:26.424:140) : item=0 name=/etc/ssh/sshd_config inode=37244245 dev=fd:00 mode=file,600 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(09/23/2021 21:01:26.424:140) :cwd=/root type=SYSCALL msg=audit(09/23/2021 21:01:26.424:140) : arch=x86_64 syscall=open success=yes exit=3 a0=0x7ffdc4adf839 a1=O_RDONLY a2=0x1fffffffffff0000 a3=0x7ffdc4add9e0 items=1 ppid=7725 pid=8290 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=3 comm=cat exe=/usr/bin/cat key=sshd_config
  • euid=500
    euid字段记录启动分析进程的用户的有效用户 ID。
  • suid=500
    suid字段记录启动分析进程的用户的设置用户 ID。
  • fsuid=500
    fsuid字段记录启动分析进程的用户的文件系统用户 ID。
  • egid=500
    egid字段记录了启动分析进程的用户的有效组 ID。
  • sgid=500
    sgid字段记录启动分析进程的用户的集合 ID。
  • fsgid=500
    fsgid字段记录启动分析进程的用户的文件系统组 ID。
  • tty=pts1
    tty字段记录调用分析进程的终端。
  • ses=3
    ses字段记录从中调用分析进程的会话的会话 ID。
  • comm="cat"
    comm字段记录用于调用分析进程的命令的命令行名称。在这种情况下,该cat命令用于触发此审核事件。
  • exe="/usr/bin/cat"
    exe字段记录了用于调用分析过程的可执行文件的路径。
  • key="sshd_config"
    key字段记录了与在审核日志中生成此事件的规则相关联的管理员定义的字符串。
??audit.log??文件中的 此事件如下所示:

type=SYSCALL msg=audit(1632445286.424:140): arch=c000003e syscall=2 success=yes exit=3 a0=7ffdc4adf839 a1=0 a2=1fffffffffff0000 a3=7ffdc4add9e0 items=1 ppid=7725 pid=8290 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=3 comm="cat" exe="/usr/bin/cat" key="sshd_config"
type=CWD msg=audit(1632445286.424:140):cwd="/root"
type=PATH msg=audit(1632445286.424:140): item=0 name="/etc/ssh/sshd_config" inode=37244245 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0




  • 第二条记录
  • type=CWD
    在第二条记录中,type字段值为CWD— 当前工作目录。此类型用于记录调用第一条记录中指定的系统调用的进程所执行的工作目录。
    此记录的目的是记录当前进程的位置,以防在关联的 PATH 记录中捕获到相对路径。这样就可以重建绝对路径。
  • msg=audit(1364481363.243:24287)
    msg字段与第一条记录中的值具有相同的时间戳和 ID 值。
  • cwd="/home/shadowman"
    cwd字段包含调用系统调用的目录的路径。
  • 第三条记录
  • type=PATH
    在第三条记录中,type字段值为PATH。审计事件包含PATH作为参数传递给系统调用的每个路径的-type 记录。在此审核事件中,只有一个路径 ( /etc/ssh/sshd_config) 用作参数。
  • msg=audit(1364481363.243:24287):
    msg字段拥有与第一条和第二条记录中的值相同的时间戳和 ID 值。
  • item=0
    item字段指示SYSCALL当前记录在类型记录中引用的项目总数中的哪个项目。这个数字是从零开始的;值0表示它是第一项。
  • name="/etc/ssh/sshd_config"
    name字段记录作为参数传递给系统调用的文件或目录的路径。在这种情况下,它是/etc/ssh/sshd_config文件。
  • inode=37244245
    inode字段包含与此事件中记录的文件或目录相关联的 inode 编号。以下命令显示与409248inode 编号关联的文件或目录:
    [root@proxy ~]# find / -inum 37244245 /etc/ssh/sshd_config
  • dev=fd:00
    dev字段指定包含此事件中记录的文件或目录的设备的次要和主要 ID。在这种情况下,该值代表/dev/fd/0设备。
  • mode=0100600
    mode字段记录文件或目录权限,以数字符号编码。在这种情况下,0100600可以解释为-rw-------,意味着只有 root 用户对/etc/ssh/sshd_config文件有读写权限。
  • ouid=0
    ouid字段记录对象所有者的用户 ID。
  • ogid=0
    ogid字段记录对象所有者的组 ID。
  • rdev=00:00
    rdev字段包含仅用于特殊文件的记录设备标识符。在这种情况下,它不被使用,因为记录的文件是一个普通文件。
8.搜索审计日志文件该ausearch工具允许你搜索审计日志文件中的特定事件。默认情况下,ausearch 会搜索??/var/log/audit/audit.log??文件。您可以使用该命令指定不同的文件。在一个命令中提供多个选项等效于使用AND运算符。 ??ausearch *options* -if *file_name*``ausearch??
8.1 使用??ausearch??搜索审计日志文件
  • 要在/var/log/audit/audit.log文件中搜索失败的登录尝试,请使用以下命令:
    ausearch --message USER_LOGIN --success no --interpret
  • 要搜索所有帐户、组和角色更改,请使用以下命令:
    ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i
  • 要使用用户的登录 ID ( auid)搜索某个用户执行的所有记录操作,请使用以下命令:
    ausearch -ua 500 -i
  • 要搜索从昨天到现在所有失败的系统调用,请使用以下命令:
    ausearch --start yesterday --end now -m SYSCALL -sv no -i
9.创建审计报告该aureport实用程序可以生成记录在审计日志文件中的事件总结和柱状报告。默认情况下,查询目录中的所有??audit.log??文件??/var/log/audit/??以创建报告。您可以使用该命令指定不同的文件来运行报告。 ??aureport *options* -if *file_name*??
9.1 使用??aureport??生成审计报告