Chromium的Sandbox机制

Chromium允许渲染进程运行在Sandbox里,这样即便代码存在漏洞被网页利用了,也不会对系统造成威胁。


Chromium的Sandbox机制主要依赖于操作系统的安全机制,包括Restricted Token,Job Object,Windows Desktop,还有Integrity Level(Vista开始)。 

Restricted Token

Restricted Token继承自当前登录用户的Access Token,然后去掉了几乎大部分的权限(groups和privileges),使用该Token创建的进程基本就没有访问系统资源的能力了。


Job Object
Restricted Token是基于DACL安全机制的,对于不能使用DACL控制访问权限的对象,则可以使用Job Object来实现。Job可以控制进程对USER Handle以及粘贴板的访问等等,特别是控制激活进程数(JOB_OBJECT_LIMIT_ACTIVE_PROCESS设为1,就可以防止创建子进程了)。 

Job还有如下特性:

  • 关闭Job句柄还可以关闭所有包含的进程(JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE);
  • 通过完成端口,可以知道Job包含进程数变化的情况(JOBOBJECT_ASSOCIATE_COMPLETION_PORT);
  • Job可以控制进程异常崩溃时,是否弹出错误报告和调试提示(JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION);
  • ...

Desktop Object

同一个Desktop内的窗口是可以相互发消息的,为了防止恶意代码通过Windows消息的方式窃取其它进程的窗口内容,Chromium把Render进程放到了另一个Desktop上,这跟登录和系统服务都在另一个Desktop是一样的道理。 

我们平时说的Windows服务程序不能有界面,其实不是API的限制,而是因为界面会运行在另一个不可见的Desktop上,用户根本无法交互。

Integrity Level
在Vista下,还可以使用Integrity Level来控制进程的运行级别。比如IE7的保护模式就是运行在Low Integrity Level的。使用IL比较简单,因为大部分对象默认访问权限都是Medium IL,如果运行在Low IL的进程访问就会被拒绝,不管当前用户身份。 

甚至低IL的进程也不能向高IL的进程发送Windows消息,即便是在同一个Desktop下。

受限进程如何访问资源?

世界总有例外情况,特别是很多现有代码不能修改的情况下,如何允许受限进程访问外部资源? 有几个办法: 

1. 使用两个Token,一个是Initial Token(具有登录用户的正常权限),另一个是Lockdown Token(即Restricted Token,去掉了大部分权限)。

使用Lockdown Token作为primary access token来创建受限进程,然后设置(Impersonate)其主线程的Token为Initial Token。启动后,进程可以正常访问系统资源来完成初始化。然后当初始化完毕,进程要主动切换到Lockdown Token,并关闭Initial Token以及初始化时打开的相关句柄。 


2. 通过拦截受限进程里的Win API访问,并通过IPC转给控制进程。根据Policy设置,决定是否允许操作,以决定继续代为调用并返回结果或者直接拒绝。 


3. 控制进程负责打开受限资源(USER Handle等),并把句柄通过IPC机制传递给受限进程,这样受限进程就可以使用受限资源了。


参考

Chromium的Sandbox设计文档 
http://dev.chromium.org/developers/design-documents/sandbox 

Windows Vista for Developers – Part 4 – User Account Control
http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx

Understanding and Working in Protected Mode Internet Explorer
http://msdn.microsoft.com/en-us/library/bb250462(VS.85).aspx

How DACLs Control Access to an Object
http://msdn.microsoft.com/en-us/library/aa446683(VS.85).aspx




你可能感兴趣的:(Chromium的Sandbox机制)