这是一篇译文,原文出自水果开发者官网 developer.apple.com,原标题为 About App Sandbox。
App Sandbox(以下或简称应用程序沙盒,应用程序沙箱,沙盒或者沙箱)是 OS X 系统提供的一种访问控制技术,它在内核级别被强制要求。一旦某个应用遭到破坏,沙盒能够保护系统和用户数据免受波及。通过 Mac App Store 分发的应用程序必须采用沙盒。还有一些应用程序不通过 Mac App Store 分发,而是使用开发者账号做签名的(大多数情况下)也要使用沙盒。
系统越复杂便越是容易遭受攻击,软件不断迭代并随着时间的推移变得越来越复杂。你采取安全编码实践来防止 bug 的出现,但攻击者只需要穿透你的防御即可成功入侵。尽管沙盒不能阻止应用程序遭受攻击,但它能把入侵造成的损害控制在最小程度。
非沙盒的应用程序具有运行应用程序用户的完整权限,并且能访问用户可以访问的任何资源。如果应用程序或者该应用链接的任何框架存在安全漏洞,那么攻击者会试图利用这些漏洞来获取应用程序的控制权,一旦得逞,攻击者就可以为所欲为。
为了解决这些问题,应用程序沙盒采取了两个策略:
- 沙盒允许你描述应用如何与系统交互。然后系统授予应用运行所需要的权限。
- 沙盒允许用户通过“打开”和“保存”对话框 ,拖放,删除以及其他类似的用户交互来授予额外的权限。
然而,沙盒不是银弹。应用程序仍然会受到影响,并且可能遭受攻击。但是潜在的破坏影响范围会受到严格的限制,因为应用程序只能拿到保证其正常运行所能获取的最小权限。
应用程序沙箱基于一些简单的原则
如果攻击者在你的应用程序中成功的发现一个安全漏洞,那么应用程序沙箱通过限制每个应用对敏感数据的访问,铸起最后一道防御措施来应对盗取,篡改或删除用户数据,以及劫持系统硬件等行为。例如,一个沙盒应用要使用以下资源就必须明确声明:
- 硬件(摄像头,麦克风,USB,打印机)
- 网络连接(入站或出站)
- 应用数据(日历,位置,联系人)
- 用户文件(下载,图片,音乐,电影,用户选择文件)
在系统运行时,对在项目定义中未明确请求任何资源的访问都是拒绝的。比如,如果你正在使用 sketch(编辑图片之类),你知道应用程序不需要访问到麦克风,你当然也不会去请求,同时系统会拒绝任何尝试通过应用程序(可能已被入侵)启用麦克风的行为。
另一方面,沙盒应用可以访问你请求的特定资源,允许用户以常用方式(比如拖放操作)执行典型操作来扩展沙盒,并且可以自动执行很多安全相关的额外操作,包括:
- 从服务菜单调用服务
- 读取多数全局可访问的系统文件
- 打开用户选择的文件
END
网友评论