2aff356032b910bf444d02b5c3e96949
什么是iOS的安全模式

作为iOS开发,作品App肯定需要提交到App Store审核。平心而论,App Store确实成功地将许多恶意软件拒之门外。但是,对开发者而言,应用程序的审核流程是令人沮丧的黑箱操作。

当然,什么是恶意程序是由Apple来定义。因为App Store的存在,所以,如果想要实现某些特定的功能,唯一的手段就是将设备越狱或者骗过App Store的审查。

官方的App审查永远无法抓到那些钻空子的恶意程序,所以需要另外一套高效的机制,来阻止恶意程序破坏整个操作系统的安全。

安全启动

当启动一台iOS设备时,系统首先会从只读的引导ROM中读取初始化指令,即系统引导程序。这个引导ROM包含Apple官方权威认证的公钥,它会验证底层启动加载器(LLB)的签名,一旦通过验证就启动它。

然后验证第二级引导程序iBoot,iBoot启动后设备就可以进入恢复模式或启动内核。在iBoot验证完成内核签名的合法性之后,整个启动程序开始步入正轨:加载驱动程序、检测设备、启动系统守护进程。

这个信任链确保所有的系统组件都由Apple写入、签名、分发,不能来自第三方机构,特别是那些恶意的攻击者以及企图越狱设备的黑客。App启动时也会用信任链去审查签名。所有的App都必须直接或间接由Apple签名。

越狱工作的原理正是攻击这一信任链。越狱工具的作者需要找到这一信任链条上的漏洞,从而禁掉链条中负责验证的组件。破解引导ROM通常是最可取的方法,因为该组件不会因Apple今后的软件更新而改变。

有关更多签名知识可以参看:

《iOS App 签名的原理》

沙盒机制

App的沙盒机制是一种基于FreeBSD系统TrustedBSD框架的强制访问控制(MAC)机制,它采用一种类似于Lisp的配置语言来描述哪些资源系统可以访问,哪些禁止访问。这些资源主要包括文件、系统服务、网络连接、内存资源等。

MAC机制不同于传统的访问控制机制(比如自主访问控制(DAC)),它不允许主体(比如用户进程)操作对象(文件、套接字等)。DAC最常见的形式就是UNIX系统上的用户、组和其它权限,所有这些都可以被授予读、写或执行的权限。在DAC系统中,用户如果拥有一个对象的所有权,也就拥有该对象的修改权限。

MAC在沙盒中意味着App被关进了一个虚拟的容器。该容器遵循一系列的特定规则,即哪些系统资源可以访问。

在文件访问方面,一般只能访问App的包目录;App可以读写存储在该位置的文件。

Android的访问控制机制与MAC不同。Android实现了一个更加传统的DAC模型,App都有自己的用户ID和属于该ID的文件夹,其权限管理严格按照传统的UNIX文件权限管理运作。虽然这两项机制工作起来都没有问题,但MAC的扩展性总体来说还是更强一些。比如,除了App目录隔离,MAC机制还可以限制网络访问或系统守护进程的操作。

数据保护和全盘加密

数据保护和全盘加密两机制可以实现远程抹除设备数据,在设备丢失的情况下保护用户数据免于泄漏。

文件系统加密并不能防止从一个正在运行的设备上窃取数据的行为。如果一个App可以从磁盘中读取一个文件,那文件系统加密并没有任何用武之处,因为内核对于任何尝试读取这些文件的进程都是透明解密的。换句话说,相比那些读取文件的调用行为,文件系统加密工作都是更底层。一旦攻破者攻破了系统验证,那就能无障碍地读取任意文件。

全盘加密对于以下两个安全特性是必要的:安全删除文件、远程设备擦出。iOS中使用的加密密钥是分层级的,只需要简单丢弃一个加密密钥就能彻底销毁整层的数据,甚至是销毁整个文件系统。

top Created with Sketch.