iOS开发笔记之六十——OS X和iOS安全机制之二——隔离机制

隔离机制是一项很前卫且最好拥有的特性,现在已经成为苹果技术风景线中不可分割的一部分。基本思想很简单,而且也是应用程序安全性的一个基本原则,那就是不受信任的应用程序必须在一个独立的隔间(compartment)中运行,隔间实际就是一个隔离的环境,在这个环境中所有的操作都会受到限制。这个机制之前在leopard中叫seatbelt,后来就改名为sandbox(沙盒),在lion中得到了极大的改进。其中iOS系统采取了更为严格的沙盒机制,被称为“监狱般的沙盒”,这也是越狱者(jail)主要头痛的原因之一。

1、沙盒的特点

应用程序“监狱”中的限制包括但不限于:

(1)无法突破应用程序之外的位置。应用程序看到的根目录实际上只是自己的目录(/var/mobile/Applications/<app-GUID>),因此应用程序也无法知晓系统上安装的其他应用程序,因为无法访问文件系统。

(2)无法访问系统上的其他进程,即使是具有同样UID的进程。应用程序认为自己就是系统上的执行的唯一进程。

(3)无法直接使用任何硬件设备(相机、GPS等),只能通过苹果提供的框架(受限的访问)。

(4)无法动态生成代码。

(5)除了用户mobile能执行的操作子集外,无法执行任何其他的操作,应用程序的root权限根本就不存在(一些苹果自己的应用程序除外)。

2、“强制”的沙盒

在早期的OS X版本中应用程序在沙盒中执行是自愿的,但是苹果已经宣布要求所有的Mac Store上的应用都要像iOS应用程序一样沙盒化。进程必须调用sandbox_init()函数主动进入沙盒,而sandbox_init()转而调用mac_execve系统的调用(MAC机制的回调),沙盒描述文件对应于一个系统的MAC标签,MAC标签对进程强加了一些预定义的限制,任何企图越过这些限制的行为都会在系统调用层次得到一个错误返回。

MAC(Mandatory Access Control)强制访问限制,是一种面向对象级别的安全机制,MAC中的 关键概念是标签(.sb类型的描述文件),系统中的文件集合以及对象集合等都可以进行标签分类,如果请求访问某个对象时,没有提供匹配的标签,那么MAC就会拒绝访问的请求。

3、授权描述文件(entitlements)

你的应用不能做什么是由沙盒来限制的,但是你的应用能干什么还依赖于授权文件(entitlements)来决定。授权机制决定了哪些系统资源在什么情况下允许被一个应用使用,可以简单认为它就是一个沙盒的配置列表。

4、参考文献

1.《Mac OS X and iOS Internals: To the Apple's Core》


猜你喜欢

转载自blog.csdn.net/lizitao/article/details/55213834