苹果Mac OS X系统安全评级(2)

前面一篇(苹果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: 是对审计事件分类的名称定义,也就是一种宏定义,每个审计事件分类对应一个16进制位. 这些名词又叫做审计旗帜Audit flags。
  • audit_control: 定义审计行为的配置文件。
  • audit_event: 对于事件标识(Event Indetification是一个整数类型的数字)与名称之间对应关系的定义。
    事件分类:1-2047是操作系统核心事件,6000-9999操作系统用户事件,32768-65535第三方应用事件,其中43000-44999是OpenBSM的核心事件,45000-46999是OpenBSM程序事件。第一列位事件标识数字,第二列为文字解释,第三列为对应的事件分类,定应以audit_class里面的定义。根据这里的对应关系,你就可以了解具体一个事件类别会被审计系统记录哪些系统/用户/应用畅叙行为。
  • audit_user: 针对不同用户,可以做特殊审计定义。默认的是root用户,制作login_logout记录。
  • audit_warn: 审计警告时运行的脚本。


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,61716172都是登录事件,属于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文件,需要使用特殊的命令/软件来解读


日志(trails)文件:

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日1430分36秒,终止于2013年1月14日16点4647。其中还会夹杂有*.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
看起来还是不那么容易理解,也不直观。

auditreduce:
使用auditreduce命令,可以从指定审计trails文件中选取符合要求的事件按照原始格式输出, 生成另外一个缩小版本的trails文件,之后用户可以使用praudit来转换输出格式。


Auditpipe:
审计事件可以从/dev/auditpipe设备上实时读取,这是auditpipe的功劳而且这个设备可以被复制,每个都会有相同的审计事件输出,但是比较auditd的文件书写而言,并不可靠,他可能把一些小的事件报丢弃


Audit Explorer:

目前来说,比较直观的浏览trails文件的软件,要说是Audit Explorer了,这个程序可以在Mac Store上来买到。


后记:

审计系统对系统资源的占用很小,完全可以忽略不计,不过如果你真的不需要审计骚扰你的系统,那么可以通过下面的步骤来完全禁止它:

  • 编辑/etc/security/audit_control中的flags, 如下
    flags:no,no
  • 执行下面的操作

    sudo audit -t
    sudo launchctl unload -w /System/Library/Launchdaemons/com.apple.auditd.plist
    sudo rm /var/audit/* 
    
    
    




你可能感兴趣的:(Mac OS X)