您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Linux安全分析与编程
Linux安全体系分析与编程2.2审计系统2.2审计系统Linux提供了用来记录系统安全信息的审计系统,审计系统分为用户空间和内核空间审计系统,用户空间审计系统用来设置规则和审计系统状态、将内核审计系统传来的审计消息写入log文件。内核审计系统用于产生和过滤内核的各种审计消息。本节重点分析内核审计系统产生和过滤审计消息的机制。2.2.1审计系统构架审计系统提供了一种记录系统安全信息的方法,为系统管理员在用户违反系统安全法则时提供及时的警告信息。审计系统的审计信息包括:可被审计的事件名称、事件状态(成功或失败)和安全信息等。审计系统可以将记录系统内部发生的事件的信息根据用户的需求,提供不同的报表功能,从而实现对系统信息的追踪、审查、统计和报告等功能。Linux审计系统子系统之间通信如图2-3所示。应用程序auditctl用来设置审计消息过滤规则、查询内核审计系统状态等,它通过netlink机制与内核审计系统的socket线程进行双向通信。内核其他线程的审计信息通过内核审计API写入套接字缓冲区队列audit_skb_queue中,内核线程kauditd通过netlink机制将审计消息定向发送给用户空间的审计后台auditd的主线程,auditd主线程再通过事件队列将审计消息传给审计后台的写log文件线程,由写log文件线程将审计消息写入log文件。另一方面,审计后台还通过一个与套接字绑定的管道将审计消息发送给dispatcher应用程序。2.2.2用户空间审计系统应用程序在用户空间,审计系统由auditd、audispd、auditctl、autrace、ausearch和aureport等应用程序组成。审计后台auditd应用程序通过netlink机制从内核中接收审计消息,然后,通过一个工作线程将审计消息写入到审计日志文件中,其中,还有一部分消息通过消息分发后台进程dispatcher调用syslog写入日志系统。下面分别说明这些应用程序的功能。1.审计后台auditd在用户空间,审计系统通过auditd后台进程接收内核审计系统传送来的审计信息,将信息写入到/var/log/audit/audit.log中,audit.log的路径可在/etc/auditd.conf中指定。图2-3Linux审计系统子系统之间通信当auditd没有运行时,内核将审计信息传送给syslog,这些消息通常保存在/var/log/messages文件中,可以用dmesg命令查看。如果要启用内核中的审计功能,必须在系统启动时将audit=1传递给内核。也可以在运行时,使用下列命令来启用内核审计功能:auditctl-e1审计系统后台应用程序auditd是Linux审计系统的用户空间部件,它负责将审计记录写入到硬盘中。ausearch或aureport工具用来查看写在文件中的审计记录,auditctl工具用来设置审计规则。系统启动时,auditctl读取/etc/audit.rules中的规则,审计后台可以通过auditd.conf文件定制配置。运行auditd后台的命令如下:auditd[-f]其中,选项-f表示让auditctl在前台运行,以方便调试,消息可以直接输出到stderr,而不是输出到log系统。用于配置auditd后台的文件说明如下:/etc/auditd.conf用于auditd后台的配置文件。/etc/audit.rules启动时装载的审计规则。2.auditctl工具auditctl控制行为、得到状态、从内核审计系统增加或删除规则。命令格式如下:auditctl[options]工具auditctl的命令行选项(options)很多,例如:-e[0|1]表示停止或启动内核审计功能;-a表示将规则追加到链表;-S表示系统调用号或名字;-F表示规则域。工具auditctl设置规则的样例如下://查看程序所有的系统调用auditctl-aentry,always-Sall-Fpid=1005//查看指定用户打开的文件auditctl-aexit,always-Sopen-Fauid=510//查看不成功的open系统调用auditctl-aexit,always-Sopen-Fsuccess!=0设置规则和显示规则的命令样例列出如下:^-^$auditctl-aentry,always-Sall-Fpid=1005^-^$auditctl-lLIST_RULES:entry,alwayspid=1005(0x3ed)syscall=all工具auditctl的选项说明如表2-1所示。表2-1工具auditctl的选项说明选项名选项的值说明-bbacklog设置内核允许的缓冲区数,默认值为64-e[0|1]关闭或启动内核审计系统-f[0..2]设置失败标识0=silent1=printk2=panic,默认值为1。设置内核如何处理临界错误,如:backlog限制超出、内存错误等-h帮助信息-i当从文件中读取规则时忽略错误-l列出所有的规则,每行一条规则-kkey设置审计规则上的过滤关键词key,key是不超过32字节长的任意字符串,它能唯一鉴别由watch产生的审计记录-mtext仅由root用户发送用户空间消息到审计系统。为文件系统watch设置许可过滤器。r=read,w=write,x=execute,a=attributechange。这些许可不是文件的标准许可,而是系统调用使用的,read和write系统调用将忽略这种设置,否则它们将淹没log-rrate设置每秒传输的消息数限制,默认值为0,表示无限制-Rfile从file文件中读取规则-s报告状态-al,a追加规则到l链表,a表示规则的动作有效链表名ltask追加规则到每个任务链表AUDIT_FILTER_TASK。域应用任务创建时的uid、gid等entry追加规则到系统调用进入链表AUDIT_FILTER_ENTRY,用于决定进入到系统调用时是否创建审计事件exit追加规则到系统调用退出链表AUDIT_FILTER_EXIT。用于决定退出系统调用时是否创建审计事件user追加规则到用户消息过滤链表AUDIT_FILTER_USER,内核在转播用户空间产生的事件到审计后台之前,用这个链表过滤这些事件。仅域为uid、auid、gid和pid时有效exclude用于过滤不想看到的事件,对应内核消息过滤链表AUDIT_FILTER_TYPE规则的有效动作anever不产生审计记录always分配一个审计上下文,在系统调用退出时填充-Al,a添加规则到l链表头,动作为a-dl,a从带有a动作的l链表删除规则-D删除所有的规则和watch-S[系统调用名或号|all]如果程序使用指定的系统调用,则它启动一项审计记录。如果给出域规则而没有指定系统调用,它将默认为所有系统调用续表选项名选项的值说明-F[n=v|n!=v|nv|nv|n=v|n=v]创建一个规则域:名字、操作、值。可以单个命令行传递最多64个域。每个域必须启动一个审计记录。可支持6种操作:等于、不等于、小于、大于、小于或等于和大于或等于有效的规则域na0,a1,a2,a3对应系统调用的前4个参数。不支持字符串参数。常用于复合的套接字或IPC操作arch系统调用的CPU构架auidaudituid,是用户注册的最初的IDb32用于32位系统调用表的archb64用于64位系统调用表的archdevmajor主设备号(DeviceMajorNumber)devminor次设备号(DeviceMinorNumber)egid有效组IDeuid有效用户IDexit从一个系统调用退出时的值fsgid文件系统组IDgid组IDinode节点号key设置过滤关键字,与-k选项一样msgtype用于匹配消息类型编号,仅用于排除(exclude)过滤链表obj_user资源的SELinux用户obj_role资源的SELinux角色obj_type资源的SELinux类型obj_lev_low资源的SELinux低级别obj_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。当写规则时,用1表示true/yes,用0表示false/nosuid设置用户ID(SetUserID)uid用户ID(UserID)-wpath为文件系统对象path插入一个watch(监视)。不支持匹配符-Wpath移去文件系统对象path>上的watch3.autraceautrace是一个程序,它将添加审计规则、类似于strace跟踪一个进程,审计信息的结果将记录在审计log文件中。在目标程序执行的前后,它都将删除审计规则。autrace用于模拟strace工具。语法列出如下:autraceprogramprogramargs一个使用sutrace程序的典型样例列出如下:^-^$auditd^-^$autrace/bin/ls/tmpWaitingtoexecute:/bin/lsgconfd-rootvirtual-root.SReCx6Cleaningup...NorulesTracecomplete.Youcanlocatetherecordswith'ausearch-i-p5722'^-^$vi/var/log/audit/audit.logtype=DAEMON_STARTmsg=audit(1174214581.293:1962)auditdstart,ver=1.2.8,format=raw,auid=4294967295pid=5477res=success,auditdpid=54type=CONFIG_CHANGEmsg=audit(1174214581.514:38):audit_enabled=1old=1byauid=4294967295subj=user_u:system_r:unconfined_t:s04.ausearch工具ausearch用于查询审计后台的日志,它能基于不同搜索规则的事件查询审计后台日志。每个系统调用进入内核空间运行时有个唯一的事件ID,系统调用在进入内核后的运行过程的审计事件共享这个ID。内核可以添加各种审计记录,例如:系统调用“open”的审计事件将引起内核发送一个带有文件名的PATH记录。ausearch的语法列出如下:ausearch[options]其中,options表示选项值,如:-aauditeventid、-ffilename等。基于用户ID的搜索样例列出如下:^-^$ausearch-ui4294967295----time-SunMar1818:43:012007type=DAEMON_STARTmsg=audit(1174214581.293:1962)auditdstart,ver=1.2.8,format=raw,auid=4294967295pid=5477res=success,auditdpid=54----time-SunMar1818:43:012007type=CONFIG_CHANGEmsg=audit(1174214581.514:38):audit_enabled=1old=1byauid=4294967295subj=user_u:system_r:unconfined_t:s05.aureport工具aurepor
本文标题:Linux安全分析与编程
链接地址:https://www.777doc.com/doc-1249890 .html