linux 安全审计
  H4g1yVQJFTw1 2023年11月02日 66 0
yum install audit
service auditd start

linux 安全审计_系统调用

linux 安全审计_字段_02

要定义一条规则,记录 /etc/passwd 文件的所有写入访问权限和每个属性更改,请执行以下命令:

~]# auditctl -w /etc/passwd -p wa -k passwd_changes

请注意,在 -k 选项后面的字符串是任意的。

要定义一条规则,记录 /etc/selinux/ 目录中所有文件的写入访问和每个属性更改,请执行以下命令:

~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes

要定义一个规则来记录 /sbin/insmod 命令的执行(在 Linux 内核中插入模块),请执行以下命令:

~]# auditctl -w /sbin/insmod -p x -k module_insertion

要定义当程序每次使用 adjtimex 或 settimeofday 系统调用时创建日志条目的规则,且系统使用 64 位构架,请执行以下命令:

~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change

要定义规则,在每次删除文件时创建一个日志条目,或者由 ID 为 1000 或更高版本的系统用户重命名,请执行以下命令:

~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete

请注意,-F auid!=4294967295 选项用于排除未设置登录 UID 的用户。

也可以使用系统调用规则语法定义文件系统规则。以下命令为系统调用创建类似于 -w /etc/shadow -p wa 文件系统规则的规则:

~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa

配置审计服务

Audit 守护进程可以在 /etc/audit/auditd.conf 文件中配置。此文件由用于修改 Audit 守护进程行为的配置参数组成。hash 符号(#)后面的空行和文本将被忽略。详情请查看 auditd.conf(5) man page。

为安全环境配置 auditd

默认 auditd 配置应当适合大多数环境。但是,如果您的环境必须满足严格的安全策略,建议在 /etc/audit/auditd.conf 文件中对 Audit 守护进程配置进行以下设置:

log_file

包含 Audit 日志文件的目录(通常为 /var/log/audit/)应位于单独的挂载点。这可以防止其他进程消耗此目录中的空间,并为 Audit 守护进程提供准确检测剩余空间。

max_log_file

指定单个审计日志文件的最大大小,必须设置该文件才能充分利用保存审计日志文件的分区上的可用空间。

max_log_file_action

决定在 max_log_file 中设置的限制后执行的操作,应设置为 keep_logs,以防止覆盖 Audit 日志文件。

space_left

指定在 space_left_action 参数中设置操作的磁盘上保留的可用空间量。必须设置一个数字,让管理员有足够的时间来响应和释放磁盘空间。space_left 值取决于审计日志文件的生成速度。

space_left_action

建议使用适当的通知方法将 space_left_action 参数设置为 email 或 exec

admin_space_left

指定触发 admin_space_left_action 参数中设置操作的绝对最小可用空间量,必须设置为保留足够空间以记录管理员执行的操作的值。

admin_space_left_action

应将 设置为 single 以将系统置于单用户模式并允许管理员释放一些磁盘空间。

disk_full_action

指定在保存 Audit 日志文件的分区上没有可用空间时触发的操作,必须设置为 halt 或 single。当 Audit 无法记录事件时,这可确保系统以单用户模式关闭或运行。

disk_error_action

指定在包含 Audit 日志文件的分区上检测到错误时触发的操作,必须设置为 syslog单一 或停止  具体取决于您处理硬件故障的本地安全策略。

flush

应设置为 incremental_async。它与 freq 参数相结合,该参数决定了在强制与硬盘进行硬盘同步前可以将多少条记录发送到磁盘。freq 参数应设置为 100。这些参数可确保审计事件数据与磁盘上的日志文件同步,同时保持良好的活动性能。

其余配置选项应根据您的本地安全策略设置。

了解 Audit 日志文件

默认情况下,审计系统将日志条目存储在 /var/log/audit/audit.log 文件中;如果启用了日志轮转,则轮转 audit.log 文件存储在同一个目录中。

以下审计规则记录每次尝试读取或修改 /etc/ssh/sshd_config 文件:

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

如果 auditd 守护进程正在运行,例如使用以下命令在 Audit 日志文件中创建新事件:

~]$ cat /etc/ssh/sshd_config

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

type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287):  cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0  objtype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967

以上事件由四个记录组成,它们共享相同的时间戳和序列号。记录始终以 type= 关键字开头。每个记录由多个 name=值对 组成,值对由空格或逗号分开。对上述事件的详细分析如下:

第一次记录

type=SYSCALL

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

有关所有可能类型值及其解释列表,请参阅 Audit Record Types

msg=audit(1364481363.243:24287):

msg 字段记录:

  • 时间戳和记录的唯一 ID,格式为 audit(time_stamp:ID)。如果多个记录是作为同一审计事件的一部分生成的,则可以共享相同的时间戳和 ID。时间戳在 1970 年 1 月 1 日使用 Unix 时间格式 - 秒,自 00:00:00 UTC 起。
  • 各种特定于事件 的名称= 内核或用户空间应用程序提供的值对.

arch=c000003e

arch 字段包含系统的 CPU 架构信息。该值 c000003e 以十六进制表示法编码。使用 ausearch 命令搜索 Audit 记录时,请使用 -i 或 --interpret 选项自动将十六进制值转换为其人类可读的等效值。c000003e 值被解释为 x86_64

syscall=2

syscall字段记录了发送到内核的系统调用的类型。值 2 可以与其 /usr/include/asm/unistd_64.h 文件中的人类可读等效值匹配。在本例中,2 是 open 系统调用。请注意,ausyscall 实用程序允许您将系统调用号转换为其人类可读的等效项。使用 ausyscall --dump 命令显示所有系统调用的列表及其编号。详情请查看 ausyscall(8) man page。

success=no

success 字段记录了该特定事件中记录的系统调用是成功还是失败。在这种情况下,调用没有成功。

exit=-13

exit 字段包含一个值,指定系统调用返回的退出代码。此值因不同的系统调用而异。您可以使用以下命令将值解读为其人类可读的等效值:

~]# ausearch --interpret --exit -13

请注意,上例假定您的审计日志包含带有退出代码 -13 的事件。

a0=7fffd19c5592a1=0a2=7fffd19c5592a3=a

a0a3字段记录了该事件中系统调用的前四个参数,用十六进制符号编码。这些参数取决于使用的系统调用,可以通过 ausearch 实用程序来解释。

items=1

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

ppid=2686

ppid 字段记录了父进程ID(PPID)。在这种情况下,2686 是父进程的 PPID,如 bash

pid=3538

pid 字段记录了流程 ID(PID)。在本例中,3538 是 cat 进程的 PID。

auid=1000

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

uid=1000

uid 字段记录了启动分析过程的用户的用户 ID。使用以下命令可以解读用户 ID:ausearch -i --uid UID.

gid=1000

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

euid=1000

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

suid=1000

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

fsuid=1000

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

egid=1000

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

sgid=1000

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

fsgid=1000

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

tty=pts0

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

ses=1

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

comm="cat"

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

exe="/bin/cat"

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

subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

subj 字段记录了被分析的进程在执行时被标记的 SELinux 上下文。

key="sshd_config"

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

第二记录

type=CWD

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

此记录的目的是记录当前进程的位置,以便在相关 PATH 记录中捕获相对路径。这样,可以重建绝对路径。

msg=audit(1364481363.243:24287)

msg 字段持有与第一条记录中的值相同的时间戳和 ID 值。时间戳在 1970 年 1 月 1 日使用 Unix 时间格式 - 秒,自 00:00:00 UTC 起。

cwd="/home/user_name"

cwd 字段包含系统调用所在目录的路径。

第三个记录

type=PATH

在第三条记录中,type 字段值为 PATH。Audit 事件包含作为参数传递给系统调用的每个路径的 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=409248

inode 字段包含与该事件中记录的文件或目录相关联的 inode 号。以下命令显示与 409248 索引节点编号关联的文件或目录:

~]# find / -inum 409248 -print
/etc/ssh/sshd_config

dev=fd:00

dev 字段指定了包含该事件中记录的文件或目录的设备的次要和主要 ID。在本例中,值表示 /dev/fd/0 设备。

mode=0100600

mode 字段记录文件或目录权限,以数字表示法编码,如 st_mode 字段中 stat 命令返回。如需更多信息,请参阅 stat(2) man page。在这种情况下,0100600 可以解释为 -rw-------,这意味着只有 root 用户对 /etc/ssh/sshd_config 文件具有读取和写入权限。

ouid=0

ouid 字段记录了对象所有者的用户 ID。

ogid=0

ogid 字段记录了对象所有者的组 ID。

rdev=00:00

rdev 字段包含一个记录的设备标识符,仅用于特殊文件。在这种情况下,不会使用它,因为记录的文件是常规文件。

obj=system_u:object_r:etc_t:s0

obj 字段记录了 SELinux 上下文,在执行时,记录的文件或目录被贴上了标签。

objtype=NORMAL

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

cap_fp=none

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

cap_fi=none

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

cap_fe=0

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

cap_fver=0

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

第四个记录

type=PROCTITLE

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

proctitle=636174002F6574632F7373682F737368645F636F6E666967

proctitle 字段记录了用于调用分析过程的命令的完整命令行。该字段采用十六进制表示法编码,不允许用户影响 Audit 日志解析器。文本解码到触发此审计事件的命令。使用 ausearch 命令搜索 Audit 记录时,请使用 -i 或 --interpret 选项自动将十六进制值转换为其人类可读的等效值。636174002F6574632F7373682F737368645F636F6E666967 值解释为 cat /etc/ssh/sshd_config

以上分析的审计事件仅包含事件可以包含的所有可能字段的子集。有关所有事件字段及其说明的列表,请参阅 Audit Event 字段有关所有事件类型及其说明的列表,请参阅审计记录类型

例 7.6. 其他 audit.log 事件

以下审计事件记录 auditd 守护进程的成功启动ver 字段显示已启动的 Audit 守护进程版本。

type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=1000 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success

以下审计事件记录了用户 UID 为 1000 的失败尝试以 root 用户身份登录。

type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=1000

搜索 Audit 日志文件

ausearch 实用程序允许您搜索 Audit 日志文件特定事件。默认情况下,ausearch 搜索 /var/log/audit/audit.log 文件。您可以使用 ausearch 选项 -if file_name 命令指定不同的文件。在一个 ausearch 命令中提供多个选项相当于在字段类型和相同字段类型的多个实例之间使用 AND 运算符

例 7.7. 使用 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 1000 -i

要搜索直到现在为止所有失败的系统调用,请使用以下命令:

~]# ausearch --start yesterday --end now -m SYSCALL -sv no -i
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  G5UoiZ5izCEW   2023年11月13日   32   0   0 字段
  9JCEeX0Eg8g4   2023年11月19日   22   0   0 逆序日志文件x系统
  eHipUjOuzYYH   2023年11月13日   24   0   0 cssico字段
  L83A5jZvvg3Q   2023年11月22日   17   0   0 HTTP重定向字段
  L83A5jZvvg3Q   2023年11月22日   27   0   0 客户端HTTP字段