LINUX安全体系分析与编程.doc

上传人:11****ws 文档编号:2991316 上传时间:2019-05-16 格式:DOC 页数:120 大小:768.50KB
下载 相关 举报
LINUX安全体系分析与编程.doc_第1页
第1页 / 共120页
LINUX安全体系分析与编程.doc_第2页
第2页 / 共120页
LINUX安全体系分析与编程.doc_第3页
第3页 / 共120页
LINUX安全体系分析与编程.doc_第4页
第4页 / 共120页
LINUX安全体系分析与编程.doc_第5页
第5页 / 共120页
点击查看更多>>
资源描述

1、Linux 安全体系分析与编程2.2 审计系统 2.2 审计系统Linux 提供了用来记录系统安全信息的审计系统,审计系统分为用户空间和内核空间审计系统,用户空间审计系统用来设置规则和审计系统状态、将内核审计系统传来的审计消息写入 log 文件。内核审计系统用于产生和过滤内核的各种审计消息。本节重点分析内核审计系统产生和过滤审计消息的机制。2.2.1 审计系统构架审计系统提供了一种记录系统安全信息的方法,为系统管理员在用户违反系统安全法则时提供及时的警告信息。审计系统的审计信息包括:可被审计的事件名称、事件状态(成功或失败)和安全信息等。审计系统可以将记录系统内部发生的事件的信息根据用户的需求

2、,提供不同的报表功能,从而实现对系统信息的追踪、审查、统计和报告等功能。Linux 审计系统子系统之间通信如图 2-3 所示。应用程序 auditctl 用来设置审计消息过滤规则、查询内核审计系统状态等,它通过 netlink 机制与内核审计系统的 socket 线程进行双向通信。内核其他线程的审计信息通过内核审计API 写入套接字缓冲区队列 audit_skb_queue 中,内核线程 kauditd 通过 netlink 机制将审计消息定向发送给用户空间的审计后台 auditd 的主线程,auditd主线程再通过事件队列将审计消息传给审计后台的写 log 文件线程,由写 log文件线程将审

3、计消息写入 log 文件。另一方面,审计后台还通过一个与套接字绑定的管道将审计消息发送给 dispatcher 应用程序。2.2.2 用户空间审计系统应用程序在用户空间,审计系统由 auditd、audispd、auditctl、autrace、ausearch 和 aureport 等应用程序组成。审计后台 auditd 应用程序通过 netlink 机制从内核中接收审计消息,然后,通过一个工作线程将审计消息写入到审计日志文件中,其中,还有一部分消息通过消息分发后台进程 dispatcher 调用 syslog 写入日志系统。下面分别说明这些应用程序的功能。1审计后台 auditd在用户空间

4、,审计系统通过 auditd 后台进程接收内核审计系统传送来的审计信息,将信息写入到/var/log/audit/audit.log 中,audit.log 的路径可在/etc/auditd.conf 中指定。图 2-3 Linux 审计系统子系统之间通信当 auditd 没有运行时,内核将审计信息传送给 syslog,这些消息通常保存在/var/log/messages 文件中,可以用 dmesg 命令查看。如果要启用内核中的审计功能,必须在系统启动时将 audit=1 传递给内核。也可以在运行时,使用下列命令来启用内核审计功能:auditctl -e 1审计系统后台应用程序 auditd

5、是 Linux 审计系统的用户空间部件,它负责将审计记录写入到硬盘中。ausearch 或 aureport 工具用来查看写在文件中的审计记录,auditctl 工具用来设置审计规则。系统启动时,auditctl 读取/etc/audit.rules 中的规则,审计后台可以通过 auditd.conf 文件定制配置。运行 auditd 后台的命令如下:auditd -f 其中,选项-f 表示让 auditctl 在前台运行,以方便调试,消息可以直接输出到 stderr,而不是输出到 log 系统。用于配置 auditd 后台的文件说明如下:/etc/auditd.conf 用于 auditd

6、后台的配置文件。/etc/audit.rules 启动时装载的审计规则。2auditctl工具 auditctl 控制行为、得到状态、从内核审计系统增加或删除规则。命令格式如下:auditctl options工具 auditctl 的命令行选项(options)很多,例如:-e 0|1表示停止或启动内核审计功能;-a 表示将规则追加到链表;-S 表示系统调用号或名字;-F 表示规则域。工具 auditctl 设置规则的样例如下:/查看程序所有的系统调用auditctl -a entry,always -S all -F pid=1005/查看指定用户打开的文件auditctl -a exit

7、,always -S open -F auid=510/查看不成功的 open 系统调用auditctl -a exit,always -S open -F success!=0设置规则和显示规则的命令样例列出如下:-$ auditctl -a entry,always -S all -F pid=1005-$ auditctl -lLIST_RULES: entry,always pid=1005 (0x3ed) syscall=all工具 auditctl 的选项说明如表 2-1 所示。表 2-1 工具 auditctl 的选项说明选 项 名选项的值说 明-b 设置内核允许的缓冲区数,默认

8、值为 64-e 0|1 关闭或启动内核审计系统-f 0.2 设置失败标识 0=silent 1=printk 2=panic,默认值为 1。设置内核如何处理临界错误,如:backlog 限制超出、内存错误等-h 帮助信息-i 当从文件中读取规则时忽略错误-l 列出所有的规则,每行一条规则-k 设置审计规则上的过滤关键词 key,key 是不超过 32 字节长的任意字符串,它能唯一鉴别由 watch 产生的审计记录-m text 仅由 root 用户发送用户空间消息到审计系统。为文件系统 watch 设置许可过滤器。r=read, w=write,x=execute,a=attribute ch

9、ange。这些许可不是文件的标准许可,而是系统调用使用的,read 和 write 系统调用将忽略这种设置,否则它们将淹没 log-r 设置每秒传输的消息数限制,默认值为 0,表示无限制-R 从 file 文件中读取规则-s 报告状态-a 追加规则到 l 链表,a 表示规则的动作task 追加规则到每个任务链表 AUDIT_FILTER_TASK 。域应用任务创建时的 uid、gid等entry 追加规则到系统调用进入链表 AUDIT_FILTER_ENTRY,用于决定进入到系统调用时是否创建审计事件exit 追加规则到系统调用退出链表 AUDIT_FILTER_EXIT 。用于决定退出系统调

10、用时是否创建审计事件user 追加规则到用户消息过滤链表 AUDIT_FILTER_USER ,内核在转播用户空间产生的事件到审计后台之前,用这个链表过滤这些事件。仅域为 uid、auid、gid 和 pid 时有效有效链表名 lexclude 用于过滤不想看到的事件,对应内核消息过滤链表 AUDIT_FILTER_TYPE never 不产生审计记录规则的有效动作 a always 分配一个审计上下文,在系统调用退出时填充-A 添加规则到 l 链表头,动作为 a-d 从带有 a 动作的 l 链表删除规则-D 删除所有的规则和 watch-S 系统调用名或号|all如果程序使用指定的系统调用,

11、则它启动一项审计记录。如果给出域规则而没有指定系统调用,它将默认为所有系统调用续表 选 项 名 选项的值 说 明-F n=v | n!=v | nv | n=v创建一个规则域:名字、操作、值。可以单个命令行传递最多 64 个域。每个域必须启动一个审计记录。可支持 6 种操作:等于、不等于、小于、大于、小于或等于和大于或等于a0, a1, a2, a3 对应系统调用的前 4 个参数。不支持字符串参数。常用于复合的套接字或IPC 操作arch 系统调用的 CPU 构架auid audit uid,是用户注册的最初的 IDb32 用于 32 位系统调用表的 archb64 用于 64 位系统调用表的

12、 archdevmajor 主设备号(Device Major Number)devminor 次设备号(Device Minor Number)egid 有效组 IDeuid 有效用户 IDexit 从一个系统调用退出时的值fsgid 文件系统组 IDgid 组 IDinode 节点号key 设置过滤关键字,与-k 选项一样msgtype 用于匹配消息类型编号,仅用于排除(exclude)过滤链表obj_user 资源的 SELinux 用户obj_role 资源的 SELinux 角色obj_type 资源的 SELinux 类型obj_lev_low 资源的 SELinux 低级别obj

13、_lev_high 资源的 SELinux 高级别path 监视的文件的全路径,仅用于 exit 链表pers 操作系统(OS)个人特征序列号pid 进程 IDppid 父进程 IDsubj_user 程序的 SELinux 用户subj_role 程序的 SELinux 角色subj_type 程序的 SELinux 类型subj_sen 程序的 SELinux 敏感度(Sensitivity)subj_clr 程序的 SELinux 的间隔(Clearance)sgid 设置组 IDsuccess 如果退出值大于或等于 0,这个值为 true/yes,否则为 false/no。当写规则时,

14、用 1 表示 true/yes,用 0 表示 false/nosuid 设置用户 ID(Set User ID)有效的规则域nuid 用户 ID(User ID)-w 为文件系统对象 插入一个 watch(监视)。不支持匹配符-W 移去文件系统对象一个使用 sutrace 程序的典型样例列出如下:-$ auditd -$ autrace /bin/ls /tmpWaiting to execute: /bin/lsgconfd-rootvirtual-root.SReCx6Cleaning up.No rulesTrace complete. You can locate the record

15、s with ausearch -i -p 5722-$ vi /var/log/audit/audit.logtype=DAEMON_START msg=audit(1174214581.293:1962) auditd start, ver=1.2.8, format=raw, auid=4294967295 pid=5477 res=success, auditd pid=54type=CONFIG_CHANGE msg=audit(1174214581.514:38): audit_enabled=1 old=1 by auid=4294967295 subj=user_u:syste

16、m_r:unconfined_t:s04ausearch工具 ausearch 用于查询审计后台的日志,它能基于不同搜索规则的事件查询审计后台日志。每个系统调用进入内核空间运行时有个唯一的事件 ID,系统调用在进入内核后的运行过程的审计事件共享这个 ID。内核可以添加各种审计记录,例如:系统调用“open”的审计事件将引起内核发送一个带有文件名的 PATH 记录。ausearch 的语法列出如下:ausearch options 其中,options 表示选项值,如:-a 、-f 等。基于用户 ID 的搜索样例列出如下:-$ ausearch -ui 4294967295-time-Sun M

17、ar 18 18:43:01 2007type=DAEMON_START msg=audit(1174214581.293:1962) auditd start, ver=1.2.8, format=raw, auid=4294967295 pid=5477 res=success, auditd pid=54-time-Sun Mar 18 18:43:01 2007type=CONFIG_CHANGE msg=audit(1174214581.514:38): audit_enabled=1 old=1 by auid=4294967295 subj=user_u: system_r:un

18、confined_t:s05aureport工具 aureport 用于产生审计后台日志的总结报告,语法列出如下:aureport options 其中,options 表示选项,如:-a 报告所有的 AVC(Access Vector Cache)消息;-c 报告配置改变的消息;-e 报告事件消息。工具 aureport 运行后结果列出如下:-$ aureportSummary Report=Range of time: 03/18/2007 18:43:01.293 - 03/18/2007 18:43:01.514Number of changes in configuration: 1

19、Number of changes to accounts or groups: 0Number of logins: 0Number of failed logins: 0Number of users: 0Number of terminals: 0Number of host names: 0Number of executables: 0Number of files: 0Number of avc denials: 0Number of failed syscalls: 0Number of anomaly events: 0Number of responses to anomal

20、y events: 0Number of process IDs: 1Number of events: 26audispdaudispd 是消息分发的后台进程,用于将 auditd 后台发过来的一些消息通过 syslog 写入日志系统。2.2.3 内核审计缓冲区管理机制内核审计系统将审计消息写入审计用的缓冲区(称为审计缓冲区)。由于审计信息是通过 netlink 机制发往用户空间后台进程的,因此,审计缓冲区包括了结构 sk_buff 描述的套接字缓冲区,套接字缓冲区用来存储用于发送的审计消息记录。审计缓冲区的结构定义如下(在 linux26/kernle/audit.c 中):struct

21、audit_buffer struct list_head list;struct sk_buff *skb; /*格式化的套接字缓冲区,准备用于发送审计消息 */*每个进程的审计上下文,包括进程的状态、时间和 uid 等,与进程上下文相关,可以为空 */struct audit_context *ctx; gfp_t gfp_mask; /缓存区的标识,如:_GFP_WAIT;审计套接字缓冲区组成链表,用于存入填充了审计消息的审计套接字缓冲区指针,链表定义如下(在 linux26/kernle/audit.c 中):static struct sk_buff_head audit_skb_q

22、ueue;审计套接字缓冲区链表用于存入审计消息,当链表中的缓冲区个数超过上限时,当前进程需要等待用户空间的后台进程将审计消息写入 log 文件,直到缓冲区个数小于上限值为止。内核审计系统还使用空闲审计缓冲区链表 audit_freelist 存放空闲的审计缓冲区,存放的个数上限为 AUDIT_MAXFREE。这样,维持一定数据的空闲缓冲区数,对于频繁操作的审计系统来说,可以减少缓冲区的分配与释放次数,提高系统性能。当申请审计缓冲区时,系统先查看链表 audit_freelist 是否存在空闲的审计缓冲区;如果存在,就从链表中取下一个返回给申请者。如果链表中没有空闲审计缓冲区,就分配一个审计缓冲

23、区。当调用函数 audit_buffer_free 释放审计缓冲区时,先检查空闲审计缓冲区链表 audit_freelist 的空闲审计缓冲区是否超过上限;如果没有超过上限,就将审计缓冲区放入链表 audit_freelist,留给以后使用。否则,释放缓冲区。函数 audit_buffer_free 释放审计缓冲区时,每次都释放它包含的套接字缓冲区。空闲审计缓冲区链表的定义列出如下:#define AUDIT_MAXFREE (2*NR_CPUS)static LIST_HEAD(audit_freelist);2.2.4 审计事件分类审计系统的消息事件分为以下几个部分:10001099 用于

24、审计系统的命令。11001199 用户空间可信的应用程序消息。12001299 审计后台的内部消息。13001399 审计事件消息。14001499 SELinux 使用的消息。15001599 内核 LSPP 事件。16001699 内核加密(crypto)事件。17001799 内核正常记录。18001999 将来内核使用(可能是整数标签和相关的事件)。2000 用于其他没有分类的内核审计消息(假想)。20012099 未使用(内核)。21002199 用户空间正常记录。22002299 用户空间对正常记录相应的动作。23002399 用户空间产生的 LSPP 事件。24002499 用户

25、空间加密事件。25002999 用户空间将来使用(可能是整数标签和相应的事件)。10001199 是内核和用户空间双向使用的,12001299 和 21002999 是用户空间专有的,13002099 是内核用户空间通信用的。审计事件的详细定义在 linux26/include/linux/audit.h 中实现,事件的定义在内核和用户空间的审计系统都是一致的。内核审计系统根据审计事件执行相应的操作或者完成相应的审计消息过滤。2.2.5 内核审计系统的接口函数在 Linux 内核需要输出审计信息时,它先调用函数 audit_log_start 创建缓冲区。接着,调用函数 audit_log 或 audit_log_format 写缓冲区写入审计信息,最后调用函数 audit_log_end 发送审计信息,并释放缓冲区。这三个函数分别说明如下:1函数 audit_log_start

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。