SandBox系列 01 Windows沙盒通用框架

杀戮 (某无业游民) | 2014-12-09 10:31

0x00 背景

跟瞌睡龙商量后决定把这个系列重新开始写,尽量通俗易懂,第一篇只对一些概念做简单介绍。

近几年来,知名浏览器厂商似乎获得了同一个认知,黑客的淫荡是没有边界的。似乎他们采用的ASLR等的防御手段总是被黑客绕过,于是开始去寻找一个安全边界,去定义不可信数据,显然现在的结果是,网页,插件这些由未知来源获得的数据与呈现的代码被定义为不可信数据。

当确定了不可信数据,(大家就可以做个盒子把他丢进去了 ),我们需要限制不可信数据的时候同时还要为操作这些数据的进程提供一组受限的API(当然也可以不提供,你得先让产品经理保证不打死你),并且整体的设计能够符合最小权限的原则。

那么我们就可以得出,一个沙盒的基本工作就是将处理不可信数据的进程 放进一个封闭的符合最小权限环境,当需要与系统进行交互时,只能通过提供一组收到权限限制的API。

0x01 Windows安全框架

现在的浏览器沙盒都是基于windows的底层安全框架,07年的时候微软牛David LeBlanc,发布了一系列文章,关于如何建立安全的windows沙盒。最后总结就是四个,并且各家浏览器都以不同方式基于以下四个实现了自家的沙盒。

1. 受限令牌(Restricted Access Tokens)

2. Windows job object

3. Windows desktop object

4. integrity levels(强制完整性检查)

1. Restricted Access Tokens

什么是受限令牌,先说access token ,这是一个描述进程的安全属性的对象,比如进程所拥有的权限,登陆会话的安全信息等。

那Restricted Access Tokens呢,从Restricted(受限)我们就可以察觉到一些,这是一种建立在access tokens上的,但是禁止了它对于一些特殊资源以及对象的访问。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa379316(v=vs.85).aspx

2. Windows job object

对linux 可能知道 ulimit ,Job object是很类似的东西,不过因为系统的差异有一些不同。Job object是一个用于管理一组进程的东西。一旦你建立一个job对象,就可以对其进行配置,对进程进行限制。(需要注意的是,貌似微软自家的沙盒不用job object,虽然他们对谷歌说很好用。。。。。。。)

通俗来说,就是限制进程的一种方式。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684161(v=vs.85).aspx

3. Windows desktop object

这个某种意义上碉堡了,其核心意义是,沙盒程序应该运行在一个单独的Desktop中,就是桌面,其威胁假设就是,同一个桌面上运行的进程可能互相危害。不过各个厂商实施的方式不同。

4. integrity levels (强制完整性控制)

就是说会对 请求的对象 通过DACL进行一次评估,就是看你权限够了没的意思。

IL (Integrity Labels) 指定程序的完整性等级,由一系列SID来带代表,SID储存在SACL中。

[原文地址]