前面一篇(苹果Mac OS X系统安全评级(1))主要介绍了安全评级的概貌和Mac系统的现状,这里来看看它的安全系统的内部情况。
前言
前面说了,OS X系统的安全审计组建是基于openBSM的,它的主要目标就是要提供选择性地和有效颗粒化地记录安全相关的系统和应用信息,并应用于事后分析、入侵检测和实时监测。openBSM主要包括:核心审计事件引擎(这部分需要和操作系统想匹配,比如OS X的March核心嵌入), 系统调用审计ABIs, 用户空间组成的嵌入, 包括登陆相关程序login和sshd等,打印审计, 审计管理服务, 审计管道-用于实时应用程序监控,以及审计支持库。它的特点是,支持FreeBSD,OS X和Linux系统,并通过支持字序无关的审计足迹格式来支持可移植性。它的各个发布版本里面包含有库,命令行命令,配置文件,审计服务程序,和足迹的发布程序用来把足迹文件实时传送到中央存储设备等等,目前它的发展主要面相融合到FreeBSD的版本10的核心开发。
在OS X系统里,我们从下面几个方面来考察它的具体细节。
定义一个系统的行为离不开配置文件,通过对配置文件的解析,不仅可以对它的拒听功能有一个更细致的了解,而且也可以一窥它的大体结构。
它的配置文件主要存放于/etc/security目录里面,在其中存放着它的多个控制/配置文件。这些文件或定义或设定openBSM的行为,为了了解如何控制它,来看看这些文件:
audit_class:
通过查看audit_class文件,每个审计事件类别其实就是对每个二进制位的定义,目前是32位的,也就是最多32类。不要改动这个文件。
文件如下:
# # $P4: //depot/projects/trustedbsd/openbsm/etc/audit_class#6 $ # 0x00000000:no:invalid class 0x00000001:fr:file read 0x00000002:fw:file write 0x00000004:fa:file attribute access 0x00000008:fm:file attribute modify 0x00000010:fc:file create 0x00000020:fd:file delete 0x00000040:cl:file close 0x00000080:pc:process 0x00000100:nt:network 0x00000200:ip:ipc 0x00000400:na:non attributable 0x00000800:ad:administrative 0x00001000:lo:login_logout 0x00002000:aa:authentication and authorization 0x00004000:ap:application 0x20000000:io:ioctl 0x40000000:ex:exec 0x80000000:ot:miscellaneous 0xffffffff:all:all flags set
audit_event:
audit_event文件是对每个审计事件的硬性编码,一个代码对应着一个事件,如果开发人员需要添加自我定义的事件,可能需要对系统进行重新编译。所以,我们无需对该文件进行变更
它的基本格式是:代码,缩略名,解释和类别。在该文件中可以看到每个事件的定义和审计类别的说明。比如46是关机事件,nt类别;6152-6154,6158,6165,6171和6172都是登录事件,属于lo分类,如果一个用户、组本不该有ssh/telnet登录权限而出现了登录事件,那么就要检讨一下系统漏洞,特别是对6159事件,普通用户不能升级到系统管理员的。
审计事件是被分块的,1-2047的是BSM核心事件,6000-9999是BSM用户事件,32768-65535是对第三方程序开放的区块。其中两个保留区:43000-44999是openBSM的核心事件,45000-46999是OpenBSM的程序事件。
audit_warn:
管理员可以设定当审计警告出现时运行的脚本程序。
默认的文件见下:
#!/bin/sh # # $P4: //depot/projects/trustedbsd/openbsm/etc/audit_warn#3 $ # logger -p security.warning "audit warning: $@"
audit_user:
管理员可以针对不同的用户,设定不同的审计级别,默认的是:
# # $P4: //depot/projects/trustedbsd/openbsm/etc/audit_user#3 $ # root:lo:no
audit_control:
是控制审计系统行为的最主要的配置文件,
默认的是:
# # $P4: //depot/projects/trustedbsd/openbsm/etc/audit_control#8 $ # dir:/var/audit flags:lo,aa minfree:5 naflags:lo,aa policy:cnt,argv filesz:2M expire-after:10M superuser-set-sflags-mask:has_authenticated,has_console_access superuser-clear-sflags-mask:has_authenticated,has_console_access member-set-sflags-mask: member-clear-sflags-mask:has_authenticated
一般控制操作:
audit命令:在/usr/sbin/文件夹中,是主要的系统命令,它可以初始化并开始审计;强制审计系统关闭当前的审计日志文件,并从新的文件开始记录审计事件;重新读取audit_control文件的配置信息;或者停止审计工作。
在OS X中,audit的启动控制是由Mac OS X的launchd控制的,描述文件是/System/Library/Launchdaemons/com.apple.auditd.plist,由launchd来启动/usr/sbin/auditd服务守护程序,这和其他的系统服务类似,也使用launchctl来控制auditd是否被启动/禁止,后面有简单介绍。
审计日志
上面大致看了看审计系统的结构,对它有了一个大概的了解,而我们更关心的是对审计日志内容的解析。OpenBSM的日志/trail文件的格式不同一般的log文件,需要使用特殊的命令/软件来解读。
OS X系统的所有日志都使用自己特有的格式保存,不会在系统的log文件中出现。它的trails文件保存在/var/audit/目录中,这个目录只有系统管理员,也就是root参能访问,所以下面的命令最好在root用户下运行,否则会遇到permission denied错误。
在上面的audit_control文件中定义过,每个trails文件的最大大小,一旦一个trail文件达到这个限制,系统就会写入另外一个trail文件,然而系统也会根据时间长短自动切换到下一个文件,这也是为什么你可能看到好多文件的大小只有几K或几十K。
trails文件的命名方式是该文件的最初起始时间和最后一个trails的终止时间作为文件名,比如20130112143036.20130114164647,分割为:2013 01 12 14 30 36,也就是起始于2013年1月12日14点30分36秒,终止于2013年1月14日16点46分47秒。其中还会夹杂有*.crash_recovery的文件, 如果OpenBSM系统崩溃,就会产生这个文件;而*.not_terminated的事当前还在使用的trails文件。
日志文件的大小取决于在audit_control中设置的监视类型,如果设置为all,那么会产生巨量的trials,这样你的硬盘会很快占满(如果expire-after设置的足够大),而且由于占用系统资源过多,可能影响其他程序的运行。
praudit命令:
praudit命令可以解析指定的trail文件的内容,并以文本方式输出。基本的命令格式是:
praudit -s /var/audit/*:输出简短格式
praudit -x /var/audit/ :输出XML格式
下面是一个使用简单格式输出的一部分的例子:
header,203,11,AUE_ssauthorize,0,Sat Jan 12 07:31:44 2013, + 927 msec subject,-1,root,wheel,root,wheel,39,100004,39,0.0.0.0 text,system.login.console text,client /System/Library/CoreServices/loginwindow.app text,creator /System/Library/CoreServices/loginwindow.app return,success,0 trailer,203 header,72,11,AUE_lw_login,0,Sat Jan 12 07:31:45 2013, + 23 msec subject_ex,admin,root,wheel,admin,staff,39,100004,50331650,0.0.0.0 return,success,0 trailer,72 header,200,11,AUE_ssauthorize,0,Sat Jan 12 07:31:45 2013, + 174 msec subject,-1,root,wheel,root,wheel,39,100004,39,0.0.0.0 text,system.login.done text,client /System/Library/CoreServices/loginwindow.app text,creator /System/Library/CoreServices/loginwindow.app return,success,0 trailer,200 header,156,11,AUE_ssauthmech,0,Sat Jan 12 07:31:45 2013, + 872 msec subject,admin,admin,staff,admin,staff,158,100004,158,0.0.0.0 text,system.services.systemconfiguration.network text,mechanism builtin:entitled,privileged return,success,0 trailer,156看起来还是不那么容易理解,也不直观。
Auditpipe:
审计事件可以从/dev/auditpipe设备上实时读取,这是auditpipe的功劳,而且这个设备可以被复制,每个都会有相同的审计事件输出,但是比较auditd的文件书写而言,它并不可靠,他可能把一些小的事件报丢弃。
Audit Explorer:
目前来说,比较直观的浏览trails文件的软件,要说是Audit Explorer了,这个程序可以在Mac Store上来买到。
后记:
审计系统对系统资源的占用很小,完全可以忽略不计,不过如果你真的不需要审计骚扰你的系统,那么可以通过下面的步骤来完全禁止它:
flags:no,no
sudo audit -t sudo launchctl unload -w /System/Library/Launchdaemons/com.apple.auditd.plist sudo rm /var/audit/*