Chrome for Android的sandbox机制
与其他大部分浏览其不同的是,Chrome采用的是多进程框架(http://www.chromium.org/developers/design-documents/multi-process-architecture),多进程框架除了稳定、快速之外一个非常重要的特点是可以方便的提供Sandbox机制来隔离网页渲染以及不安全脚本,使得浏览器更加安全。关于Linux下面的Chrome的Sandbox机制前面的文章已经经过相应的分析,本篇主要分析Chrome for Android中的Sandbox机制的实现。
阅读更多…
关于Chrome for Android
1, Chrome for Android与Chromium for Android
Chrome是google的一个商标, 所以我们谈及Chrome的时候特指由Google发布的Chrome浏览器,而Chromium则是Chrome浏览器的对应的开源项目(http://www.chromium.org/)。 简单的说Chrome即是在Chromium的源代码基础上做一些产品化的工作并由Google发布出来的浏览器。Chrome for Android亦是如此。
2, Chromium for Android的源代码
目前,Chromium for Android的源代码并没有完全开放出来。 开放出的元带埋在Chromium的源代码目录树中,只需要很少的配置即可变异出Android版本的Chromium所需要的核心模块。 在Chromium的源代码中, 主要的部分已经开源并可以工作(WebKit、多进程框架、页面渲染、基本的事件处理、单元测试模块以及一个用于测试的基本的浏览器Shell程序)。 可以采用Git来检出所有的源代码:
http://code.google.com/p/chromium/wiki/UsingNewGit
3, 编译Chromium for Android及测试运行Shell程序(Content Shell)
关于编译,具体可参照官方的链接:
http://code.google.com/p/chromium/wiki/AndroidBuildInstructions
有几点需要注意的是:
阅读更多…
Chromium相关的零碎
GPU硬件加速相关
- 可以通过”chrome://gpu”查看硬件加速相关的信息
Canvas: Hardware accelerated HTML Rendering: Hardware accelerated 3D CSS: Hardware accelerated WebGL: Hardware accelerated WebGL multisampling: Hardware accelerated
- 对于特定硬件平台, 可能现在在chromium的blacklist中,通过”–ignore-gpu-blacklist”参数强制打开硬件加速
- 对于2D HTML5 cavas,通过”–enable-accelerated-2d-canvas”选项启用硬件加速, 对于WebGL, 通过”–enable-webgl”启用。
- “chrome://flags”中包含了更细化的选项,跟GPU相关的包括:”GPU Accelerated Painting”, “GPU Accelerated SVG and CSS Filters”, “Compositing with GPU”等等
Chromium浏览器中的Sandbox机制与实现(3)Seccomp sandbox
安全计算模式Seccomp(Secure Computing Mode) 是自Linux 2.6.10之后引入到kernel的特性,在进程进入了seccomp之后,它只能调用exit(), sigreturn(), read()和write()这几个系统调用(对应的文件描述符是在进入seccomp之前打开),其他的任何的系统调用都会引起内核发送SIGKILL信号结束进程。进程通过下面的代码进入Secure Computing模式:
prctl(PR_SET_SECCOMP, 1, 0, 0, 0); //after this point, any system call other than exit,signreturn, read, write shall cause SIGKILL
在Chromium中,Seccomp Sandbox是Linux平台sandbox的另外一个重要的机制,它独立于上一篇讲的SUID Sandbox。在Chromium中,可以通过”–disable-seccomp-sandbox”和”–enable-seccomp-sandbox”来关闭或者打开Seccomp Sandbox。Chromium 15以后的版本都是默认打开seccomp sandbox, 通过ps,可以看到在打开一个tab的情况下,有如下几个chrome进程。
阅读更多…
Chromium浏览器中的Sandbox机制与实现(2) SUID sandbox
本篇主要探讨Chromium中的SUID sandbox的实现。
1. Chromium中的Zygote机制
首先介绍一下Chromium中的zygote机制, 我们知道Chromium是多进程架构的,主要由一个UI进程(Browser),和多个渲染进程(Renderer)组成。 在一个新Tab中打开URL,chromium会创建一个新的Renderer进程对应于这个tab, 同时在UI进程(Browser)中创建Render Host对象负责与该Renderer进程交互。在Linux中,创建新的Renderer进程是通过Zygote来完成的。
执行”ps ax |grep chrome”, 我们可以看到下面几个进程
21696 pts/0 Sl+ 0:15 /chromium/src/out/Debug/chrome 21736 pts/0 Sl+ 0:00 /chromium/src/out/Debug/chrome 21738 pts/0 S+ 0:00 /chromium/src/out/Debug/chrome --type=zygote 21761 pts/0 Sl+ 5:03 /chromium/src/out/Debug/chrome --type=renderer --lang=zh-CN
Chromium浏览器中的Sandbox机制与实现 (1) 概览
安全问题是浏览器所必须面对的,在Chromium中,通过Sandbox为浏览器提供了更好的安全性支持。本系列文章主要介绍Linux平台上的Chromium Sandbox的原理与实现
Chromium中,Sandbox设计的主要原则包括:
- 不重新发明轮子: 只利用现有操作系统已经提供的安全机制
- 最低权限原则:Sandbox中的进程只拥有最低权限
- 假定Sandbox中的代码都是恶意代码
- Sandbox的设计必须是灵巧的: 非恶意的代码不应该访问它没有权限访问的内容
- 模拟环境是不安全的:模拟器和虚拟机环境并不能够提供自身的安全性