![](https://help.apple.com/assets/6537FB06A074DBB5E802EA07/6537FB31280588A5490B6E1D/zh_CN/52d714626638d3391623c853be0c593b.png)
iOS 和 iPadOS 中的运行时进程安全性
iOS 和 iPadOS 使用“沙盒”、声明的授权和地址空间布局随机化 (ASLR) 帮助确保运行时安全性。
沙盒化
所有第三方 App 均已经过“沙盒化”,因此它们在访问其他 App 储存的文件或对设备进行更改时会受到限制。沙盒化的设计旨在防止 App 收集或修改其他 App 储存的信息。每个 App 还拥有唯一的主目录来存放其文件,主目录是在安装 App 时随机分配的。如果第三方 App 需要访问除自身信息以外的其他信息,只能通过 iOS 和 iPadOS 明确提供的服务来实现。
系统文件和资源也会与用户的 App 保持隔离。与所有第三方 App 一样,绝大部分 iOS 和 iPadOS 系统文件和资源以非权限用户“mobile”的身份运行。整个操作系统分区以只读方式装载。不必要的工具(如远程登录服务)未包含在系统软件中,并且 API 不允许 App 提升自己的权限来修改其他 App 或者 iOS 和 iPadOS。
使用授权
iOS 使用声明的授权来控制第三方 App 对用户信息及功能(如 iCloud 和扩展功能)的访问。授权是签名到 App 的键值对,允许对运行时因素之外的内容(如 UNIX 用户 ID)进行认证。授权已经过数字签名,因此无法更改。系统 App 和监控程序广泛应用授权来进行特定权限操作,如果不使用授权,则进程需要以 root 用户身份运行才能进行这些操作。这极大降低了遭入侵的系统 App 或监控程序提升权限的可能性。
此外,App 只能通过系统提供的 API 来执行后台处理。这就使 App 能够继续运行,而不会降低性能或显著影响电池续航能力。
地址空间布局随机化
地址空间布局随机化 (ASLR) 有助于防止对内存损坏错误的利用。内置 App 使用 ASLR 有助于在启动时随机安排所有内存区域。除了启动时工作,ASLR 还会随机安排可执行代码、系统库和相关编程结构的内存地址,以进一步降低遭受许多攻击的可能性。例如,“return-to-libc”攻击试图通过操纵堆栈和系统库的内存地址来诱使设备执行恶意代码。随机安排内存地址增加了执行攻击的难度,尤其是对多个设备的攻击。Xcode 和 iOS 或 iPadOS 开发环境可自动编译启用了 ASLR 支持的第三方程序。
Execute Never 功能
iOS 和 iPadOS 使用 ARM 的 Execute Never (XN) 功能提供进一步的保护,该功能会将内存页标记为不可执行。只有处于严格的控制条件下,App 才能使用标记为可写入和可执行的内存页:内核会检查 Apple 专有的动态代码签名授权是否存在。即使如此,也只有单个 mmap
调用能用于请求一个可执行且可写入的内存页,系统为可执行且可写入的内存页分配了随机地址。Safari 浏览器对其 JavaScript 即时 (JIT) 编译器使用了此功能。