OS X 沙箱设计

转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/OSX_Sandbox_design.html

全书地址
Chromium中文文档 for https://www.chromium.org/developers/design-documents
持续更新ing,欢迎star
gitbook地址:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//
github地址: https://github.com/ahangchen/Chromium_doc_zh

这个文档描述了Mac OS X上的进程沙箱机制。

背景

沙箱将进程视为一种恶劣的环境,因为进程任何时候都可能被一个恶意攻击者借由缓冲区溢出或者其他这样的攻击方式所影响。一旦进程被影响,我们的目标就变成了,让这个有问题的进程能访问的用户机器的资源越少越好,并尽量避免在标准文件系统访问控制以外,以及内核执行的用户/组进程控制相关的行为。

查看概述文档了解目标与整体架构图表。

实现

在Mac OS X上,从Leopard版本开始,每个进程通过使用BSD沙箱设施(在一些Apple的文档中也被成为Seatbelt)拥有自己的权限限制。这由一系列独立的API调用组成,sandbox_init(),设置进程彼时的访问限制。这意味着即使新的权限拒绝访问任何新创建的文件描述符,之前打开的文件描述符仍然生效。我们可以通过在进程启动前正确地设置来利用这一点,在我们将渲染器暴露给任何第三方输入(html,等等)前,切断所有访问。

Seatbelt不会限制内存分配,多线程,或者对先前打开的系统设施的访问。因此,这应该不会影响其他的需求或者严重影响我们的IPC设计。

OS X提供了对缓冲区溢出提供了额外的保护。在Leopard中,栈被标志为不可执行内存,因此更不易被作为执行恶意代码的攻击方向。这不能避免堆的内存溢出,但对于64位应用,除非内存的一部分被显式标识为可执行,否则Leopard不允许任何执行代码的企图。随着我们将来转入64位渲染器进程,这会变成另一个吸引人的安全特性。

sandbox_init()支持预定义沙箱访问限制和提供更精细控制的沙箱配置脚本。

Chromium使用的自定义沙箱配置在源代码树的.sb文件中。

我们定义了下面这些配置文件(路径相对于源代码根目录):

  • content/common/common.sb - 用于所有沙箱的常用安装
  • content/renderer/renderer.sb - 用于扩展和渲染器进程。允许访问字体服务器。
  • chrome/browser/utility.sb - 用于工具进程。允许访问单一可配置目录。
  • content/browser/worker.sb - 用于工作进程。限制度最高 - 除了加载系统库之外,没有文件系统访问权限。
  • chrome/browser/nacl_loader.sb - 用户允许不受信任的原生客户端代码(例如,“user”)。

一个让我们不愉快的点是,沙箱进程通过OS X系统API调用。而且没有每个API需要哪些权限的文档,比如它们是否需要访问磁盘文件,或者是否会调用沙箱限制访问的其他API?目前,我们的方法是,在打开沙箱前,对任何可能有问题的API调用做“热身”。例如,颜色配置和共享库可以在我们锁定进程前从磁盘加载。

SandboxInitWrapper::InitializeSandbox()是初始化沙箱的主要入口,它按以下步骤执行:

  • 判断当前进程的类型是否需要沙箱化,如果需要,判断需要使用哪种沙箱配置。
  • 通过调用sandbox::SandboxWarmup() “热身”相关"系统API。
  • 通过调用sandbox::EnableSandbox()启动沙箱。

调试

OS X沙箱实现支持下面这些标志位:

  • --no-sandbox - 关闭整个沙箱
  • --enable-sandbox-logging - 关于哪个系统调用正在阻塞的详细信息被记录到syslog

Debugging Chrome on OS X里有更多关于调试和Mac OS X 沙箱API诊断工具的文档。

扩展阅读

【Chromium中文文档】OS X 沙箱设计的更多相关文章

  1. 【Chromium中文文档】Chrome/Chromium沙箱 - 安全架构设计

    沙箱 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox.ht ...

  2. 【Chromium中文文档】沙箱FAQ

    沙箱FAQ 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox ...

  3. 【Chromium中文文档】Chrom{e,ium}{,OS}中的硬件视频加速

    Chrom{e,ium}{,OS}中的硬件视频加速 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_ ...

  4. 【Chromium中文文档】进程模型

    进程模型 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Process_ ...

  5. 【Chromium中文文档】插件架构

    插件架构 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Plugin_A ...

  6. 【Chromium中文文档】跨进程通信 (IPC)

    跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/I ...

  7. 【Chromium中文文档】Profile架构(看看谷歌家的重构)

    进程模型 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Profile_ ...

  8. 【Chromium中文文档】Web安全研究

    转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Extension_Sec ...

  9. 【Chromium中文文档】跨平台开发的约定与模式

    跨平台开发的约定与模式 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/C ...

随机推荐

  1. JSON入门之二:org.json的基本用法

    java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...

  2. 深刻理解Oracle数据库的启动和关闭 .

    Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将详细介绍这些启动和关闭方式之间的区别以及它们各自不同的功能. 一.启动和关闭Oracle数据库 对于大多数Oracle DBA来说,启动和 ...

  3. Vue.js 学习示例

    本篇和大家分享的是学习Vuejs的总结和调用webapi的一个小示例:快到年底了争取和大家多分享点东西,希望能对各位有所帮助:本章内容希望大家喜欢,也希望各位多多扫码支持和推荐谢谢: » Vuejs ...

  4. shopnc数据库 批量修改商品价格

    1.商品价格统一上调50 2.商品价格个别上调50 UPDATE `nc_goods` SET `goods_price` = `goods_price` +50 where goods_id!=10 ...

  5. 【ecos学习5】redboot 加载运行hello world

    背景: 从主机 192.168.2.14 IP,下载bin文件hello到ecos. redboot>load -v -h 192.168.2.14 hello Using default pr ...

  6. iOS绘制view

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  7. 恶补ASP.NET基础【1】枚举和结构

    有时我们希望变量提取的是一个固定集合中的值,此时就可以用枚举类型, 例: enum OpenMode : byte { 新增=, 编辑=, 查看= } class Program { static v ...

  8. 定制化Azure站点Java运行环境(4)

    定制化使用您自己的Tomcat版本和JDK环境 在上面章节中,介绍了如何通过web.config,定制默认的Azure website的Java运行环境,默认情况下,Azure站点的Tomcat是7. ...

  9. Zigbee、WiFi和433MHz无线技术各有特点

    Zigbee.WiFi和433MHz无线技术都属于近距离无线通讯技术,并且都使用ISM免执照频段,但它们各具特点.   ZigBee的特点是低功耗.高可靠性.强抗干扰性,布网容易,通过无线中继器可以非 ...

  10. 【hihocoder 1249 Xiongnu's Land】线性扫描

    2015区域赛北京赛区的三水,当时在赛场上没做出的原因是复杂度分析不正确导致把方法想复杂了.近来复习复杂度分析,觉得不能只是笼统地看渐进复杂度(big-O),更应根据算法的伪码计算真正的以基本操作数为 ...