理解Linux Audit Service.

1、概述

    Linux audit经过分析系统上正在发生的细节信息,可以有效帮助您提升系统的安全。可是,它自己不提供额外的安全性保障----它不会保护你的系统免受代码故障或者任何类型的漏洞攻击。Audit服务对跟踪这些安全问题很是有用,而且有效帮助咱们采起何种针对性的安全措施。html

    Audit由几个组件组成,每一个组件都为整个框架提供重要功能。Linux audit(kauditd) 内核模块拦截系统调用并记录相关事件。 auditd守护进程将审计报告写入磁盘。各类命令行实用程序负责显示,查询和存档审计跟踪。node

1. 将用户与进程关联linux

    Audit将进程映射到启动它们的用户标识。这使得管理员或安全人员可以精确地跟踪哪一个用户拥有哪一个进程而且可能在系统上进行恶意操做。git

2. 审查审计线索github

    Linux Audit 提供了将审计报告写入磁盘并将其转​​换为可读格式的工具。缓存

3. 审查特定的审计事件安全

    Audit提供了一个实用程序,容许您筛选特定感兴趣事件的审计报告。你能够根据下面的内容过滤:session

  • User架构

  • Group并发

  • Audit ID

  • Remote Host Name

  • Remote Host Address

  • System Call

  • System Call Arguments

  • File

  • File Operations

  • Success or Failure 

4. 应用选择性审计

    Audit提供了筛选感兴趣事件的审计报告并调整审计以仅记录所选事件的手段。您能够建立本身的一组规则,并让审计守护进程仅记录您感兴趣的规则。

5. 保证报告数据的可用性

    审计报告由root拥有,所以只能由root用户移除。未经受权的用户不能删除审计日志。

6. 防止审计数据丢失

    若是内核内存不足,审计守护进程的积压被超过,或者超过了速率限制,审计能够触发系统关闭,以防止事件逃离审计的控制。此关闭将当即中止由审核内核组件触发的系统,而不会将最新日志同步到磁盘。默认配置是将警告记录到系统日志中,而不是挂起系统。

    若是系统在记录时磁盘空间不足,则能够将审计系统配置为执行干净关闭。缺省配置指示审计守护程序在磁盘空间不足时中止记录。

2、Linux Audit Service 架构

                                                                                                                    (Linux Audit framwork)

(1)组件

1.auditd
审计守护进程负责将经过审计内核接口生成并由应用程序和系统活动触发的审计消息写入磁盘。审计守护进程启动的方式由systemd控制。审计系统功能(启动时)由/etc/audit/auditd.conf控制。

2.auditctl
auditctl实用程序控制审计系统。它控制审计界面的日志生成参数和内核设置,以及肯定哪些事件被跟踪的规则集。

3. audit rules
文件/etc/audit/audit.rules包含一系列auditctl命令,它们在启动审计守护程序后当即在系统引导时加载。

4. aureport
aureport实用程序容许您从审核事件日志中建立自定义报告。这种报告生成能够很容易地编写脚本,输出能够被各类其余应用程序使用,例如,绘制这些结果。

5. ausearch
ausearch实用程序可使用各类密钥或记录格式的其余特征在审计日志文件中搜索某些事件。

6.audispd
审计调度程序守护进程(audispd)可用于将事件通知转发给其余应用程序,而不是将它们写入审计日志中的磁盘(或除此以外)。

7.autrace
autrace实用程序以与strace相似的方式跟踪各个进程。 autrace的输出被记录到审计日志中。打印上次登陆用户的列表,与上次相似。 aulast经过审计日志(或给定的审计日志文件)进行搜索,并根据审计日志中的时间范围显示全部用户登陆和注销的列表。

8.aulastlog
为相似于lastlog的机器的全部用户打印上次登陆。登陆名称,端口和上次登陆时间将被打印。

(2) Audit 进程的配置 

Audit进程的配置文件是保存在/etc/audit/auditd.conf里的。

log_file = /var/log/audit/audit.log log_format = RAW log_group = root priority_boost = 4 flush = INCREMENTAL freq = 20 num_logs = 5 disp_qos = lossy dispatcher = /sbin/audispd name_format = NONE ##name = mydomain max_log_file = 6 max_log_file_action = ROTATE space_left = 75 space_left_action = SYSLOG action_mail_acct = root admin_space_left = 50 admin_space_left_action = SUSPEND disk_full_action = SUSPEND disk_error_action = SUSPEND ##tcp_listen_port = tcp_listen_queue = 5 tcp_max_per_addr = 1 ##tcp_client_ports = 1024-65535 tcp_client_max_idle = 0 cp_client_max_idle = 0

1. log_file
审计日志文件的完整路径。若是您配置守护进程向除默认/var/log/audit/外的目录中写日志文件时,必定要修改它上面的文件权限,使得只有根用户有读、写和执行权限。全部其余用户都不能访问这个目录或这个目录中的日志文件。

2. log_format
写日志时要使用的格式。当设置为RAW时,数据会以从内核中检索到的格式写到日志文件中。当设置为NOLOG时,数据不会写到日志文件中,可是若是用dispatcher选项指定了一个,则数据仍然会发送到审计事件调度程序中。

3. priority_boost
审计应采用多少优先级推动守护进程。必须是非负数。0表示没有变化。

4. flush
多长时间向日志文件中写一次数据。值能够是NONE、INCREMENTAL、DATA和SYNC之一。若是设置为NONE,则不须要作特殊努力来将数据刷新到日志文件中。若是设置为INCREMENTAL,则用freq选项的值肯定多长时间发生一次向磁盘的刷新。若是设置为DATA,则审计数据和日志文件一直是同步的。若是设置为SYNC,则每次写到日志文件时,数据和元数据是同步的。

5. freq
若是flush设置为INCREMETNAL,审计守护进程在写到日志文件中前从内核中接收的记录数。

6. num_logs
max_log_file_action设置为ROTATE时要保存的日志文件数目。必须是0~99之间的数。若是设置为小于2,则不会循环日志。若是递增了日志文件的数目,就可能有必要递增/etc/audit/audit.rules中的内核backlog设置值,以便留出日志循环的时间。若是没有设置num_logs值,它就默认为0,意味着历来不循环日志文件。

7. dispatcher
当启动这个守护进程时,由审计守护进程自动启动程序。全部守护进程都传递给这个程序。能够用它来进一步定制报表或者以与您的自定义分析程序兼容的不一样格式产生它们。自定义程序的示例代码能够在/usr/share/doc/audit- <version>/skeleton.c中找到。因为调度程序用根用户特权运行,所以使用这个选项时要极其当心。这个选项不是必需的。

8. disp_qos
控制调度程序与审计守护进程之间的通讯类型。有效值为lossy和lossless。若是设置为lossy,若审计守护进程与调度程序之间的缓冲区已满 (缓冲区为128千字节),则发送给调度程序的引入事件会被丢弃。然而,只要log_format没有设置为nolog,事件就仍然会写到磁盘中。若是设置为lossless,则在向调度程序发送事件以前和将日志写到磁盘以前,调度程序会等待缓冲区有足够的空间。

9. max_log_file
以兆字节表示的最大日志文件容量。当达到这个容量时,会执行max_log_file _action指定的动做。

10. max_log_file_action
当达到max_log_file的日志文件大小时采起的动做。值必须是IGNORE、SYSLOG、SUSPEND、ROTATE和KEEP_LOGS之一。若是设置为IGNORE,则在日志文件达到max_log_file后不采起动做。若是设置为SYSLOG,则当达到文件容量时会向系统日志/var/log/messages中写入一条警告。若是设置为SUSPEND,则当达到文件容量后不会向日志文件写入审计消息。若是设置为ROTATE,则当达到指定文件容量后会循环日志文件,可是只会保存必定数目的老文件,这个数目由num_logs参数指定。老文件的文件名将为audit.log.N,其中 N是一个数字。这个数字越大,则文件越老。若是设置为KEEP_LOGS,则会循环日志文件,可是会忽略num_logs参数,所以不会删除日志文件。

11. space_left
以兆字节表示的磁盘空间数量。当达到这个水平时,会采起space_left_action参数中的动做。

12. space_left_action
当磁盘空间量达到space_left中的值时,采起这个动做。有效值为IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和 HALT。若是设置为IGNORE,则不采起动做。若是设置为SYSLOG,则向系统日志/var/log/messages写一条警告消息。若是设置为 EMAIL,则从action_mail_acct向这个地址发送一封电子邮件,并向/var/log/messages中写一条警告消息。若是设置为 SUSPEND,则再也不向审计日志文件中写警告消息。若是设置为SINGLE,则系统将在单用户模式下。若是设置为SALT,则系统会关闭。

13. action_mail_acct
负责维护审计守护进程和日志的管理员的电子邮件地址。若是地址没有主机名,则假定主机名为本地地址,好比root。必须安装sendmail并配置为向指定电子邮件地址发送电子邮件。

14. admin_space_left
以兆字节表示的磁盘空间数量。用这个选项设置比space_left_action更多的主动性动做,以防万一space_left_action没有让管理员释听任何磁盘空间。这个值应小于space_left_action。若是达到这个水平,则会采起admin_space_left_action所指定的动做。

15. admin_space_left_action
当自由磁盘空间量达到admin_space_left指定的值时,则采起动做。有效值为IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和HALT。与这些值关联的动做与space_left_action中的相同。

16. disk_full_action
若是含有这个审计文件的分区已满,则采起这个动做。可能值为IGNORE、SYSLOG、SUSPEND、SINGLE和HALT。与这些值关联的动做与space_left_action中的相同。
提示:
若是不循环审计日志文件,则含有/var/log/audit/的分区可能变满并引发系统错误。所以,建议让/var/log/audit/位于一个单独的专用分区。

17. disk_error_action
若是在写审计日志或循环日志文件时检测到错误时采起的动做。值必须是IGNORE、SYSLOG、SUSPEND、SINGLE和HALT之一。与这些值关的动做与space_left_action中的相同。
/etc/sysconfig/auditd文件能够用来设置带EXTRAOPTIONS参数的auditd的命令行选项。惟一的命令行选项-f以调试模式安排守护进程。若是启用了调试模式,则会出现标准错误消息而不是日志文件。AUDITD_LANG设置值能够用来修改守护进程的位置。若是设置为 none,则全部位置信息会从审计环境中删除。若是AUDITD_CLEAN _STOP选项设置为yes,则当用service auditd stop命令中止守护进程时,会删除审计规则与观察器。

18. tcp_listen_port
指定Audit进程监听的端口区间(1~65535)

19. tcp_listen_queue
设置暂时挂起链接的最大值,不要设置过小的值,由于在某些状况下,例如断电后,挂起链接的数量可能会很高。

20. tcp_client_ports
设置容许的客户端端口号范围。

21. tcp_client_max_idle
指定客户端最大挂起次数在必定的时间内。

22. tcp_max_per_addr
表示容许来自一个IP地址的并发链接数的数值。

(3)Audit系统的控制命令

1. auditctl
“auditctl -e” 控制Audit功能的开关
“auditctl -f” 设置错误级别[0..2] 0=silent, 1=printk, 2=panic
“auditctl -r” 控制Audit消息的速率
“auditctl -b” 设置Audit服务的最大缓存空间,若是缓存空间满了,指定的错误级别动做会被触发。
“auditctl -s” 查看Audit进程当前的状态
AUDIT_STATUS: enabled=1 flag=2 pid=3105 rate_limit=0 backlog_limit=8192 lost=0(丢失的Audit消息数) backlog=0(未输出的Audit缓冲区大小)

2. audit rules
要添加审计规则,可在/etc/audit/audit.rules文件中用下面的语法:
-a <list>,<action> <options>

 

audit rule 规则定义在auditctl(8)中。

如:
添加一条audit规则,记录maj用户的所用open系统调用
#auditctl-a entry,always -S open -F uid=500
open表示:要查看某一特定用户打开的文件
在另外一个终端以maj用户登陆,登陆后执行一个ls命令便可

删除这条audit规则
#auditctl-d entry,always -S open -F uid=500

如不想看到用户登录类型的消息,能够以下添加规则:
#auditctl -a exclude,always -F msgtype=USER_LOGIN
这里过滤是以“消息类型”为对象的。

监视/etc/passwd文件被读、写、执行、修改文件属性的操做记录
#auditctl -w /etc/passwd -p rwax

查看程序全部的系统调用
#auditctl -a entry,always-S all -F pid=1005

查看指定用户打开的文件
#auditctl -a exit,always-S open -F auid=510

查看不成功的open系统调用
auditctl-a exit,always -S open -F success!=0

(4) Audit log

type=SYSCALL msg=audit(1234874638.599:5207): arch=c000003e syscall=2 success=yes exit=4 a0=62fb60 a1=0 a2=31 a3=0 items=1 ppid=25400 pid =25616 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1164 comm="less" exe="/usr/bin/less" key="doc_log" type=CWD msg=audit(1234874638.599:5207):  cwd="/root" type=PATH msg=audit(1234874638.599:5207): item=0 name="/var/log/audit/audit.log" inode=1219041 dev=08:06 mode=0100644 ouid=0 ogid=0 rdev=00:00

type: audit消息类型, 消息类型有100多种,能够查看https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sec-audit_record_types
msg: 消息的ID, 它有两个部分组成, 分号以前的是Unix的时间戳,分号以后的是真正的event ID, 同一个应用程序的相同system call拥有相同的event ID, 同一个应用的不一样system call则不一样。
arch: 调用system call的CPU构架, 能够经过ausearch -i来指定搜索相关的log。
syscall: system call的类型, 能够查看https://github.com/torvalds/linux/blob/master/arch/sh/include/asm/unistd.h。
success: system call是成功或者失败。
exit: system call的返回值。
a0 to a3: 系统调用的前四个参数的数字化,能够经过ausearch解码查看。
items: 传递到应用程序的字符串数量。
ppid: 父进程的PID。
pid: 该进程的PID。
auid: audit ID, 针对某一用户一个进程会被分配一个audit ID, 该audit ID会被传递给子进程,尽管在系统中用户切换,该audit ID将始终保持一致。 这样咱们能够针对对某一用户进行trace。
uid: user ID。
gid: group ID。
euid, suid, fsuid: Effective user ID, set user ID, and file system user ID.
egid, sgid, fsgid: Effective group ID, set group ID, and file system group ID.
tty: 应用程序开启的终端,这种状况下pseudo-terminal used in an SSH session.
ses: 用户登陆的session ID.
comm: 出如今任务列表中,应用程序的名称。
exe: 二进制程序的解析路径。
subj: 进程执行时selinux上下文
key: 若是audit了不少的目录文件,分配一个key string方便后面咱们经过ausearch去过滤这类log。
cwd: 进程的执行目录.
另外一种audit log格式:
inode: 指出了与文件或目录相对应的inode number,能够经过下面的命令查看inode对应的文件或目录:find/ -inum <inode number> -print.
dev: 指出文件或目录对应的device ID,在例子中,对应/dev/fd/0这个设备.
mode: 对应文件或目录的权限,这里0100600被解析为-rw-------.
ouid: 对应文件的owner’s user ID.
ogid: 对应文件的owner’s group ID.

限于篇幅,下一篇将列出有用的audit log查看的查看和跟踪命令---(Linux audit log分析工具---aureport、ausearch、autrace)。

相关文章
相关标签/搜索