转载请注明出处:http://blog.csdn.net/awebkit
最近看了《Protecting Browsers from Extension Vulnerabilities》,里面讲解了google chrome extension所采用的安全机制,记录如下。
文章主要讨论针对那些没有恶意但是有缺陷,而缺陷会被利用的扩展,浏览器应该提供什么样的保护措施。
首先给出了Firefox扩展存在的一些问题:扩展具有和浏览器同等的权限。扩展有完全的权限访问浏览器内部和用户的操作系统。扩展可以改变浏览器的功能,修改网页的行为,执行任意代码,访问文件系统。
Firefox扩展具有这样两个危险的性质:高权限和不可信网页内容的丰富的操作。这导致可能会有如下的攻击:
1. cross-site scripting (跨页面脚本)。比如扩展在执行eval或者document.write的时候没有检查输入,而输入可能是一段恶意脚本。Firefox现在的做法是提供了沙漏技术的API:evalInSandbox。这时执行的脚本就不会获取扩展的权限。这有用,但并非总是有用。
2. Replacing Native APIs(替换原始API)。大意是说网页可以定义DOM API,然后引导扩展来使用这些API。
3. JavaScript Capability Leaks(JavaScript能力泄漏)。大意是说JavaScript泄漏了一个对象,会被攻击者利用,控制扩展。
4. 综合内容。如扩展需要调用HTTP返回的响应,攻击者就可以通过伪造HTTP响应,控制扩展。
然后文章对25个最流行的扩展进行了测试,发现大部分的扩展都存在权限被给的过高了,很多是用不上的。
最后就推出google chrome的extension机制。
1. 最低权限。
google chrome extension需要在manifest里面声明权限。如下
{
"name": "Google Mail Checker",
"description": "Displays the number of unread
messages...",
"version": "1.2",
"background_page": "background.html",
"permissions": [
"tabs",
"http://*.google.com/",
"https://*.google.com/"
],
"browser_action": {
"default_title": ""
},
"icons": {
"128": "icon_128.png"
}
声明的权限有:
A. 需要执行的任意代码。
B. 需要访问的网页。
C. 需要用到的扩展API。
但是开发人员更喜欢最大化权限,所以需要在用户体验上进行一些鼓励。当extension需要最大化的权限的话,需要和google签约,否则这些扩展不能出现在google控制的gallary里面。mozilla使用人工检查扩展。最小权限的扩展会缩短检查时间。
从任意网站下载的扩展的安装同执行本地可执行程序是一样的机制。
2. 权限分离。
这里主要就是把一个扩展分成了好几层:content scripts, extension core, native binary
3. 分离机制。
这里的分离我看主要是多进程模型,扩展运行在自己的进程空间,和浏览器分离。
从文章来看,google chrome extension安全机制确实做的比Firefox等牛啊!