天天看点

linux的审计功能(audit)

为了满足这样的需求:记录文件变化、记录用户对文件的读写,甚至记录系统调用,文件变化通知。

什么是audit

The Linux Audit Subsystem is a system to Collect information regarding events occurring on the system(s) 

Kernel events (syscall events)

User events (audit-enabled programs)

syslog会记录系统状态(硬件警告、软件的log), 但syslog属于应用层, log归咎与软件, 并不会记录所有动作. 于是audit来记录更多信息。

audit命令

auditctl audit系统管理工具,用来获取状态,增加删除监控规则。

ausearch 查询audit log工具

aureport 输出audit系统报告

auditctl示例

auditctl -w /etc/passwd -p war -k password_file

auditctl -w /tmp -p e -k webserver_watch_tmp

-w 监控文件路径 /etc/passwd, 

-p 监控文件筛选 r(读) w(写) x(执行) a(属性改变)

-k 筛选字符串,用于查询监控日志

auditctl -a exit,never -S mount

auditctl -a entry,always -S all -F pid=1005

-S 监控系统调用

-F 给出更多监控条件(pid/path/egid/euid等)

日志查询

设置了监控后,会在/var/log/audit/audit.log里出现日志。

可以用此命令查看日志:

ausearch -f /etc/passwd -x rm

-k  利用auditctl指定的key查询

-x  执行程序

# ausearch -ts today -k password-file

# ausearch -ts 3/12/07 -k password-file

-ts 指定时间后的log (start time)

-te 指定时间前的log (end time)

audit库

libaudit和libaudit-python

不过完全找不到文档。我也觉得这个东西用得上的时候不多。除非.....

PART TWO

2.6 Linux内核有用日志记录事件的能力,比如记录系统调用和文件访问。然后,管理员可以评审这些日志,确定可能存在的安全裂口,比如失败的登录尝试,或者用户对系统文件不成功的访问。这种功能称为Linux审计系统,在Red Hat Enterprise Linux 5中已经可用。 

要使用Linux Auditing System,可采用下面的步骤: 

(1) 配置审计守护进程。 

(2) 添加审计规则和观察器来收集所需的数据。 

(3) 启动守护进程,它启用了内核中的Linux Auditing System并开始进行日志记录。 

(4) 通过生成审计报表和搜索日志来周期性地分析数据。 

本章将详细讨论各个部分。 

25.1  配置审计守护进程 

Red Hat Enterprise Linux 5内核中的Linux Auditing System默认是关闭的。当启动审计守护进程时,启用这个内核特性。要在启动时不通过守护进程auditd来启用Linux Auditing System,只需用audit= 1参数来引导。如果这个参数设置为1,而且auditd没有运行,则审计日志会被写到/var/log/messages中。 

要使用auditd和实用程序来生成日志文件报表,必须安装audit RPM程序包。如果没有安装,则参见第3章“操作系统更新”了解关于程序包安装的指令。 

用了auditd,管理员就可以定制产生的审计日志。下面只是一部分可用的自定义配置: 

● 设置审计消息的专用日志文件 

● 确定是否循环使用日志文件 

● 如果日志文件的启动用掉了太多磁盘空间则发出警告 

● 配置审计规则记录更详细的信息 

● 激活文件和目录观察器 

这些设置值及更多设置值位于/etc/audit/auditd.conf文件中,它包含修改审计守护进程的行为的选项。每个选项均应在独立的一行上,后面跟着等于号(=)和这个选项的值。程序清单25-1显示了默认配置文件。 

程序清单25-1  默认审计守护进程参数 

     # 

     # This file controls the configuration of the audit daemon 

     # 

     log_file = /var/log/audit/audit.log 

     log_format = RAW 

     priority_boost = 3 

     flush = INCREMENTAL 

     freq = 20 

     num_logs = 4 

     dispatcher = /sbin/audispd 

     disp_qos = lossy 

     max_log_file = 5 

     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 

可以配置下面这些选项(参见程序清单25-1了解默认值): 

     log_file 

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

     log_format 

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

     priority_boost 

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

     flush 

多长时间向日志文件中写一次数据。值可以是NONE、INCREMENTAL、DATA和SYNC之一。如果设置为NONE,则不需要做特殊努力来将数据刷新到日志文件中。如果设置为INCREMENTAL,则用freq选项的值确定多长时间发生一次向磁盘的刷新。如果设置为DATA,则审计数据和日志文件一直是同步的。如果设置为SYNC,则每次写到日志文件时,数据和元数据是同步的。 

     freq 

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

     num_logs 

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

     dispatcher 

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

     disp_qos 

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

     max_log_file 

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

     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参数,因此不会删除日志文件。 

     space_left 

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

     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,则系统会关闭。 

     action_mail_acct 

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

     admin_space_left 

以兆字节表示的磁盘空间数量。用这个选项设置比space_left_action更多的主动性动作,以防万一space_left_action没有让管理员释放任何磁盘空间。这个值应小于space_left_action。如果达到这个水平,则会采取admin_space_left_ action所指定的动作。 

     admin_space_left_action 

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

     disk_full_action 

如果含有这个审计文件的分区已满,则采取这个动作。可能值为IGNORE、SYSLOG、SUSPEND、SINGLE和HALT。与这些值关联的动作与space_left _action中的相同。 

提示: 

如果不循环审计日志文件,则含有/var/log/audit/的分区可能变满并引起系统错误。因此,建议让/var/log/audit/位于一个单独的专用分区。 

     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命令停止守护进程时,会删除审计规则与观察器。要了解关于审计规则的更多信息,请参见下一节。 

25.2  编写审计规则与观察器 

Linux Auditing System可以用来为事件写规则,比如系统调用,比如用auditctl命令行实用程序观察文件或目录上的操作。如果用初始化脚本启动auditd(用 service auditd start命令),则规则和观察器可以添加到/etc/audit/audit.rules中,以便在启动守护进程时执行它们。只有根用户可以读或修改这个文件。 

/etc/audit.audit.rules中的每个规则和观察器必须单独在一行中,以#开头的行会被忽略。规则和观察器是auditctl命令行选项,前面没有auditctl命令。它们从上到下阅读文件。如果一个或多个规则或观察器互相冲突,则使用找到的第一个。 

25.2.1  编写审计规则 

要添加审计规则,可在/etc/audit/audit.rules文件中用下面的语法: 

     -a <list>,<action> <options> 

警告: 

如果在运行守护进程时添加规则/etc/audit/audit.rules,则一定要以根用户身份用service auditd restart命令启用修改。也可以使用service auditd reload命令,但是这种方法不会提供配置文件错误的消息。 

列表名必须是下列名称之一。 

     task 

每个任务的列表。只有当创建任务时才使用。只有在创建时就已知的字段(比如UID)才可以用在这个列表中。 

     entry 

系统调用条目列表。当进入系统调用确定是否应创建审计时使用。 

     exit 

系统调用退出列表。当退出系统调用以确定是否应创建审计时使用。 

     user 

用户消息过滤器列表。内核在将用户空间事件传递给审计守护进程之前使用这个列表过滤用户空间事件。有效的字段只有uid、auid、gid和pid。 

     exclude 

事件类型排除过滤器列表。用于过滤管理员不想看到的事件。用msgtype字段指定您不想记录到日志中的消息。 

这个动作必须下面的动作之一: 

     never 

不生成审计记录。 

     always 

分配审计上下文,总是把它填充在系统调用条目中,总是在系统调用退出时写一个审计记录。 

<options>可以包括下面几个选项中的一个或多个。 

     -s <syscall> 

根据名称或数字指定一个系统。要指定所有系统调用,可使用all作为系统调用名称。如果程序使用了这个系统调用,则开始一个审计记录。可以为相同的规则指定多个系统调用,每个系统调用必须用-S启动。在相同的规则中指定多个系统,而不是列出单独的规则,这样可以导致更好的性能,因为只需要评价一个规则。 

     - F <name[=,!=,<,>,<=]value> 

指定一个规则字段。如果为一个规则指定了多个字段,则只有所有字段都为真才能启动一个审计记录。每个规则都必须用-F启动,最多可以指定64个规则。如果用用户名和组名作为字段,而不是用UID和GID,则会将它们解析为UID和GID以进行匹配。下面是有效的字段名: 

         pid 

进程ID。 

         ppid 

父进程的进程ID。 

         uid 

用户ID。 

         euid 

有效用户ID。 

         suid 

设置用户ID。 

         fsuid 

文件系统用户ID。 

         gid 

组ID。 

         egid 

有效组ID。 

         sgid 

设置组ID。 

         fsgid 

文件系统组ID。 

         auid 

审计ID,或者用户登录时使用的原始ID。 

         msgtype 

消息类型号。只应用在排除过滤器列表上。 

         pers 

OS Personality Number。 

         arch 

系统调用的处理器体系结构。指定精确的体系结构,比如i686(可以通过uname -m命令检索)或者指定b32来使用32位系统调用表,或指定b64来使用64位系统调用表。 

         devmajor 

Device Major Number。 

         devminor 

Device Minor Number。 

         inode 

Inode Number。 

         exit 

从系统调用中退出值。 

         success 

系统调用的成功值。1表是真/是,0表示假/否。 

         a0,a1,a2,a3 

分别表示系统调用的前4个参数。只能用数字值。 

         key 

设置用来标记事件的审计日志事件消息的过滤键。参见程序清单25-2和程序清单25-3中的示例。当添加观察器时,类似于使用-k选项。参见“编写审计规则与观察器”了解关于-k选项的详细信息。 

         obj_user 

资源的SELinux用户。 

         obj_role 

资源的SELinux角色。 

         obj_type 

资源的SELinux类型。 

         obj_lev_low 

资源的SELinux低级别。 

         obj_lev_high 

资源的SELinux高级别。 

         subj_role 

程序的SELinux角色。 

         subj_type 

程序的SELinux类型。 

         subj_sen 

程序的SELinux敏感性。 

         subj_clr 

程序的SELinux安全级别(clearance)。 

-a选项向列表末尾添加规则。要向列表开头添加规则,可用-A替换-a。删除语法相同的规则,用-d替换-a。要删除所有规则,可指定-D选项。程序清单25-2含有一些示例审计规则,比如/etc/audit/audit.rules。 

程序清单25-2  示例审计规则 

     #Record all file opens from user 501 

     #Use with caution since this can quickly 

     #produce a large quantity of records 

     -a exit,always -S open -F uid=501 -F key=501open 

     #Record file permission changes 

     -a entry,always -S chmod 

提示: 

如果安装了audit程序包,则其他示例在/usr/share/doc/audit-<version>/目录的*.rules文件中。 

当发生了定义的规则中的动作时,如果有一个规则在/etc/audit/auditd.conf中定义则它会通过调度程序发送,然后会有一条日志消息写到/var/log/audit/audit.log中。例如,程序清单25-3中含有程序清单25-2中的第一个规则的日志项,日志文件从用户501 打开。这个规则包括一个过滤键,它出现在程序清单25-3中日志项的末尾。 

程序清单25-3  示例审计规则日志消息 

     type=SYSCALL msg=audit(1168206647.422:5227): arch=c000003e syscall=2 

     success=no exit=-2 a0=7fff37fc5a40 a1=0 a2=2aaaaaaab000 a3=0 items=1 

     ppid=26640 pid=2716 auid=501 uid=501 gid=501 euid=501 suid=501 fsuid=501 

     egid=501 sgid=501 fsgid=501 tty=pts5 comm="vim" exe="/usr/bin/vim" 

     key="501open" 

25.2.2  编写审计观察器 

Linux Auditing System也允许管理员观察文件和目录。如果一个观察器放在一个文件或目录上,则会记录成功或失败的动作,比如打开和执行文件或目录。要添加观察器,可使用-w选项,后面跟着一个要观察的文件或目录。 

警告: 

如果在守护进程运行时您添加了观察器/etc/audit/audit.rules,则一定要以根用户身份用service auditd restart命令启用修改。也可以用service auditd reload命令,但是它不会通知您关于配置文件错误的消息。 

程序清单25-4中含有包括在/etc/audit/audit.rules文件中的示例规则。如果与-w结合起来使用-k <key>选项,则由观察器产生的所有记录会含有一个警报词(限制为31个字节),因此可以将该观察器的记录轻松地从日志文件中过滤出来。要限制文件或目录观察器为某些动作,可使用-p选项,后面跟着下面的选项中的一个或多个:r表示观察读动作,w表示观察写动作,x表示观察执行动作,a表示在末尾添加动作。要删除一个观察器,可使用由后面跟着文件或目录的-W选项。 

程序清单25-4  示例审计观察器 

     #Watch for changes to sysconfig files 

     -w /etc/sysconfig -k SYSCONFIG 

     #Watch for changes to audit config files 

     -w /etc/audit/audit.rules -k AUDIT_RULES 

     -w /etc/audit/auditd.conf -k AUDIT_CONF 

     -w /var/log/audit/ -k LOG_AUDIT 

     #Watch to see who tries to start the VPN client 

     -w /usr/bin/vpnc -k VPNC -p x 

     #Watch password files 

     -w /etc/group -k PASSWD 

     -w /etc/passwd -k PASSWD 

     -w /etc/shadow -k PASSWD 

例如,程序清单25-4包括了关键过滤器PASSWD的口令文件上的一个观察器。程序清单25-5含有删除一个用户后/var/log/audit /audit.log中的日志项,它会修改正在观察的这些口令文件。正如程序清单25-3中带过滤键的规则的示例,这个键被添加到日志项的末尾,因此可以轻松地将它从日志项的其余部分过滤出来。 

程序清单25-5  审计观察器的示例日志项 

     type=SYSCALL msg=audit(1168227741.656:17915): arch=c000003e syscall=82 

     success=yes exit=0 a0=7fff00975dd0 a1=60a700 a2=0 a3=22 items=5 ppid=26575 

     pid=4147 auid=501 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 

     tty=pts4 comm="userdel" exe="/usr/sbin/userdel" key="PASSWD" 

25.2.3  定制auditctl 

配置审计系统参数的命令行选项也能包括在/etc/audit/audit.rules中。表25-1列出了这些选项。 

表25-1  配置审计系统参数的auditctl选项 

选    项 

说    明 

-b <backlog> 

允许的未完成审计缓冲区的最大数目。内核中的默认值为64。如果缓冲区已满,则内核引用通过-f选项设置的失败标志,以确定采取哪个动作 

-e [0,1] 

设置为0禁用审计,或者设置为1启用审计。对于为了故障检修或其他目的而临时禁用审计会很有用 

-f [0,1,2] 

设置用于通知内核如何处理关键错误(比如审计缓冲区已满或者内核内存用完)的失败标志。有效值是0(没有动作),1(用printk将消息记录到/var/log/messages)和2(混乱)。默认值为1,但是2更安全。 

-r <rate> 

以每秒钟的消息条数为单位的速率限制。如果设置为0,则没有限制。如果超出了速率限制,则内核会咨询-f选项中的失败标志来确定采取哪个动作 

-i 

当从一个文件中读取规则时忽略错误 

要验证设置了这些选项,可用auditctl -s命令查看状态。输出类似下面这样: 

     AUDIT_STATUS: enabled=1 flag=1 pid=1954 rate_limit=0 backlog_limit=256 

     lost=0 backlog=0 

25.3  启动和停止守护进程 

当配置守护进程和添加规则与观察器时,可以以根用户身份执行service auditd start命令启动守护进程。要停止它,可使用service auditd stop命令。要使它自动在运行时启动,则应作为根用户执行chkconfig auditd on命令。 

如果当您修改守护进程的配置时守护进程已经在运行,则应以根用户身份执行service auditd restart命令启用修改。要验证规则与观察器已经修改,应以根用户身份执行auditctl -1命令列出所有活动的规则和观察器。例如,程序清单25-6显示了程序清单25-2和25-4中的规则和观察器的auditctl -1输出。 

25.4  分析记录 

如果使用了auditd,则除非用/etc/audit/audtid.conf中的log_file参数修改了文件名,否则审计消息会写到/var /log/audit.log中。日志文件是文本文件,可以通过less实用程序或文本编辑器(比如Emacs或Vi)阅读。消息的格式为从内核中接收的格式,顺序也是接收时的顺序。aureport实用程序可以用来从日志文件中生成汇总报表。ausearch实用程序可以用来基于一些条件搜索报表。这些条件可以是:审计事件ID、文件名、UID或GID、消息类型和系统调用名等。 

除非将守护进程配置为循环日志文件和像前面“配置审计守护进程”一节中介绍的那样删除老文件,否则/var/log/audit/中的日志文件永远不会被删除。管理员应经常检查日志,删除老日志或者移到备份存储器中。如果不周期性地删除日志,它们会填满整个磁盘的。因为这个原因,所以建议把/var /log/audit/放在一个单独的专用分区上,这样就不会影响写其他日志文件或者引起其他系统错误。 

提示: 

要强制立即循环日志文件,可以以根用户身份执行service auditd rotate命令。老日志文件的文件名将为audit.log.N,其中N是一个数字。这个数字越大,日志文件越老。 

25.4.1  生成报表 

要生成审计消息的报表,可使用aureport。为了安全起见,/var/log/audit/目录和其中的所有审计日志文件只对根用户可读。因此,您必须作为根用户执行aureport命令。如果执行aureport时没有使用任何选项,则会显示程序清单25-7中所示的汇总报表。 

表25-2  生成特定报表的aureport选项 

选    项 

说    明 

-a 

报告关于访问向量缓冲(access vector cache,AVC)的消息 

-c 

报告关于配置修改的消息 

-cr 

报告关于crypto事件的消息 

-e 

报告关于事件的消息 

-f 

报告关于文件的消息 

-h 

报告关于主机的消息 

-l 

报告关于登录的消息 

-m 

报告关于账户修改的消息 

-ma 

报告关于Mandatory Access Control(MAC)事件的消息 

-p 

报告关于进程的消息 

-s 

报告关于系统调用的消息 

-tm 

报告关于终端的消息 

要以更可读的格式产生结果,比如用它们映射到的用户名替换UID,则也要使用-i选项: 

     aureport -<flag> -i 

要显示每个日志的启动和停止时间,可以添加-t选项: 

     aureport -<flag> -i -t 

要显示等于或早于特定时间的事件,可以添加-te选项,并在后面跟着结束日期和结束时间。用数字格式表示您所在地点的日期和时间,并以24小时制格式表示时间。例如,对于en_us.UTF-8这个地方,可使用日期格式MM/DD/YY: 

     aureport -<flag> -i -te <end date> <end time> 

要显示等于或者晚于特定时间的事件,添加-ts选项,后面跟着开始日期和时间。采用与-te选项相同的日期和时间格式化规则。 

     aureport -<flag> -i -ts <start date> <start time> 

要仅显示失败事件,则使用- -failure,注意这个选项前面有两条虚线而不是一条: 

     aureport -<flag> -i --failed 

要仅显示成功事件,则使用- -success,注意这个选项前面有两条虚线而不是一条: 

     aureport -<flag> -i --success 

有些报表也可以用- -summary选项以汇总格式生成;注意这个选项前面有两条虚线作前缀: 

     aureport -<flag> -i --summary 

要产生汇总报表而不是关于一个地区的报表,可使用-r选项: 

     aureport -r -i 

要产生来自一个日志文件的报表而不是默认报表,则可用-if选项指定它: 

     aureport -<flag> -i -if /var/log/audit/audit.log.1 

25.4.1  搜索记录 

除了生成事件报表并用aureport汇总外,管理员也可以用ausearch搜索审计记录。以根用户身份执行ausearch命令,后面跟着表 25-3中的一个或多个选项。如果指定了多个选项,则显示的结果会对两个请求都匹配。要检索匹配一个选项或另一个选项的条件,则执行两次不同的搜索并亲自组合结果。 

25.5  用审计跟踪进程 

autrace实用程序可以用来生成特定进程中的审计记录。当autrace在运行时,没有其他规则或观察器可以启用。对于其他审计实用程序,autrace必须以根用户身份运行。要审计跟踪一个进程,需采用下列步骤: 

(1) 暂时关闭所有规则与观察器: 

     auditctl -D 

(2) (可选)要把审计记录从进程中隔离开,需强制一个日志文件循环: 

     service auditd rotate 

autrace的日志将放在/var/log/audit/audit.log中。 

(3) 在命令行执行autrace: 

     autrace <command to trace> 

(4) 等待直到进程完成。将显示一条类似于下面这个消息: 

     Trace complete. You can locate the records with 'ausearch -i -p 10773' 

(5) 重启审计守护进程来重新启用规则和观察器: 

     service auditd restart 

(6) 用ausearch显示关于跟踪的详细信息。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

很久没写kidlinux了,今天的高度高点吧,呵呵。 

最近公司在做基于我们自己RBA框架的审计,为了对这个东西做测试,写图形界面吃尽了苦头,这个东西刚搞完又得过国家认证,最近很是紧张了一把。 

网上关于审计的资料太少了,有也是高深的不适合我们低级程序员阅读的。本着我为人人人人为我的精神,特拟此文。

审计(audit)是linux安全体系的重要组成部分,他是一种“被动”的防御体系。在内核里有内核审计模块,核外有核外的审计后台进程auditd。 

应用程序给内核发送审计消息,内核的审计模块再把消息转发给用户空间的后台进程auditd处理。大概就是这么回事,我不是太深入,如果需要更多的内容,自己去查阅相关资料。如果没有好的资料,我推荐一本,《linux安全体系分析与编程》作者倪继利 。这里是CSDN上该书的电子版

审计说穿了就是把和系统安全有关的事件记录下来:谁谁谁在什么时候做了什么事,结果是啥。

审计的消息来源主要有两方面:1.内核(我不太确定)、应用程序(audit-libs-devel包里面有编程接口)产生的。2.系统管理员添加的审计规则,匹配规则的事件都将被记录下来。

规则添加: 

1 添加文件监视: 

该规则能监视文件被读、写、执行、修改文件属性的操作,并记录 

auditctl -w /etc/passwd -p rwax 

上述命令记录/etc/passwd 被读、写、执行修改属性的操作 

2 系统调用入口监视(entry链表) 

该规则在进入系统调用的时候触发,记录此时的执行上下文 

auditctl -a entry,always -F UID=root -S mkdir 

上述命令记录uid为root的用户调用mkdir系统调用的情况 

3 系统调用出口(exit链表) 

同系统调用入口规则,不同的是在退出系统调用的时候被触发 

4 任务规则(task表) 

该规则在调用fork() 或者clone()产生新进程的时候触发,因此,该规则适用的“域”仅仅是此时可见的,例如uid gid pid 等等。(参见man auditctl和这里 

auditctl -a task,always -F uid=root

5 可信应用程序规则(user表) 

按照各种资料上的说法,这里的user表是用来过滤消息的,内核传递给审计后台进程之前先查询这个表。 

但是,不管怎么设置规则都达不到这个效果。如下: 

auditctl -a user,always -F uid=root 

添加上述规则,发现root的行为被记录。这样添加规则还是被记录: 

auditctl -a user,never -F uid=root 

后来发现我的CentOS里面system-config-audit上面,该链表被命名为“可信应用程序”。受此启发写了个小程序,向审计内核里写消息,发现这样的消息被过滤了。 

这点需要进一步验证。

6 过滤规则(exclude表) 

这个表是用来过滤消息的,也就是不想看到的消息可以在这里写规则进行过滤。 

例如:不想看到用户登陆类型的消息,可以如下添加规则: 

auditctl -a exclude,always -F msgtype=USER_LOGIN 

这里过滤是以“消息类型”为对象的。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面的图片说明了Linux Audit的各个组成之间是如何

相互作用的:

linux的审计功能(audit)
linux的审计功能(audit)

图片上实线代表数据流,虚线代表组件关之间的控制系

auditd

Audit 守护进程负负责把内核产生的信息写入到硬盘上,这些信息是由应用程序和系统活动所触发产生的。Audit守护进程如何启动取决于它的配置文件,/etc /sysconfig/auditd。Audit系统函数的启动受文件/etc/audit/auditd.conf的控制。有关auditd更多的信息参照第三节:配置Audit守护进程。

auditctl

auditctl功能用来控制Audit系统,它控制着生成日志的各种变量,以及内核审计的各种接口,还有决定跟踪哪些事件的规则。关于auditctl的更多信息参照第四节:用auditctl控制Audit系统。

audit rules

在/etc/audit/audit.rules中包含了一连串auditctl命令,这些命令在audit系统被启用的时候被立即加载。更所关于审计规则的信息请参看第五节:给audit系统传递变量

aureport

aureport的功能是能够从审计日志里面提取并产生一个个性化的报告,这些日志报告很容易被脚本化,并能应用于各种应用程序之中,如去描述结果,更多信息参看第六节:理解审计日志和生成审计报告

ausearch

这个功能能让我们从审计日志之中通过关键词或者是格式化录入日志中的其它特征变量查询我们想要看到的信息。详细信息请参看第七节:用ausearch查询audit守护进程的的日志。

audispd

这是一个审计调度进程,它可以为将审计的信息转发给其它应用程序,而不是只能将审计日志写入硬盘上的审计日志文件之中。

autrace

这个功能更总类似于strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中。更多详细信息请参看第八节:用autrace分析进程

继续阅读