046-A Security Analysis Of Browser Extensions

# A Security Analysis Of Browser Extensions

0x00 前言
——-

* * *

浏览器扩展安全似乎讨论的不多,drops上也没有相关的文章,我只在知乎上搜到一篇关于扩展问题的实例文章,[链接请点我](http://zhuanlan.zhihu.com/wooyun/19773919)。因此,我搜索了一些关于扩展安全的研究报告,如下便是其中一篇,来自于康奈尔大学图书馆(跟伯克利并列的学校哦),在大批量分析扩展安全性和绕过静默安装的方法上给我们提供了非常好的思路,我认为是值得学习的,故翻译下来分享给大家。 原文:[http://arxiv.org/abs/1403.3235](http://arxiv.org/abs/1403.3235)

0x01 摘要
——-

* * *

浏览器扩展(通常称为插件或者加载项)本质上是让开发者给浏览器附加功能的一小段代码。然而,扩展也是有安全代价的:用户必须信任插件开发者。我们来看看这种信任关系是如何被打破,从而造成恶意的扩展被安装到用户的浏览器。同样,我们也看看在各种浏览器中扩展的静默安装方法以及浏览器本身是如何预防静默安装的。

我们通过比较多种浏览器的扩展机制,试图创建了一种保持插件在浏览器中的权限最小化规则,然后以此为依据分析了各种各样的插件,以便观察最小化权限规则是否满足插件对权限的要求。

同样的,我们也对多种浏览器上的很多插件做了调查,查明了可能造成攻击的根本原因。举个例子,如果开发者的账号被黑,那么此开发者开发的扩展中是可能被嵌入恶意代码的。我们还发现了权限滥用问题,调查到很多扩展会申请超出本身使用的更多的权限。

最后提供了一个解决方案让用户在下载扩展前检查其可靠性。

0x02 介绍
——-

* * *

浏览器扩展现在已经极度受欢迎,超过33%的Chrome浏览器使用者不止安装了一个扩展。在正常的网站上,扩展(也称插件)是一小段能允许用户修改浏览器行为的代码。大多数插件使用javascript编写,当然也有其他的脚本。当扩展被如此广泛的在桌面操作系统中使用的时候,在移动浏览器中,仍处在最初的阶段,只有在一小部分移动浏览器会支持第三方扩展,比如Mozilla’s Firefox for Android and Dolphin 由于时间的关系,在此文中,我们仅以Google Chrome和Firefox为例,其他浏览器暂时不作考虑。

大多数浏览器在它们的扩展平台中都有自己的安全模型。此文中,我们分析了多种由于扩展造成的或可能造成的漏洞。同时,基于测试结果验证了这些安全模型的有效性。

0x03 安全概述
———

* * *

1、Google Chrome 使用三种方式保证扩展的安全性。

“`
1)关键字隔离。扩展的脚本不能直接访问当前页面的DOM树,但是能复制一份,间接的访问。页面javascript代码的执行跟扩展javascript代码严格分离。否则,会造成大量的攻击向量失效。
2)权限隔离。Chrome的扩展运行在两种不同的权限机制中。一种是内容脚本(content-scripts),另一种是核心扩展脚本(core-extension scripts)。核心扩展脚本能够直接访问Chrome的本地API,内容脚本则不能,但是能通过与核心扩展脚本消息通信,间接的访问Chrome的本地API。使得攻击过程必须经过消息接口的方式实现,从而加强了模型的安全性。
3)权限模型。扩展必须先声明使用的权限,然后浏览器会匹配相应的权限模型用于限制扩展。所以,如果是核心扩展脚本被发现了漏洞,攻击者还是会被权限模型限制。

“`

![2014090110151131712.png](http://drops.javaweb.org/uploads/images/dad54fb6c3bb59f1ca30017b6952c34f3f0b2939.jpg)

图1:Google Chrome的扩展架构图

2、威胁。

在扩展中有两种可能的攻击方式:

“`
1)恶意扩展:理论上,攻击者是能够在用户的浏览器上安装具有很大破坏力的恶意扩展的。在这之前,有少数扩展被查出盗取银行密码和其他一些安全性较高的网站的敏感信息。尽管浏览器及时的屏蔽了这些扩展,但是威胁仍然存在。
我们来看看恶意扩展的安装机制,扩展可以通过其他的可执行文件实现静默安装。Chrome和Firefox都提供有静默安装的接口,但是在安装之前会弹出确认窗口给用户提示。
2)扩展本身的漏洞:由于开发者本身编码不够安全,造成扩展本身也是可能存在安全漏洞的。在Chrome Web商店中,有超过10000个的扩展,其中有一些是本身就有安全漏洞。之前一项研究表明,即使是最受欢迎的、甚至是Google公司自己开发的扩展,都存在过安全漏洞。这些扩展能被恶意的网站利用,主要包括非法处理用户的输入,未过滤或者未处理过的用户输入在扩展中被使用,扩展元数据被攻击能方式。

“`

我们没有研究Firefox的扩展,因为Firefox对扩展没有权限管理。因此,所有的扩展都能读写用户的家目录。这导致Firefox的扩展权限过大,也造成了更多的漏洞。

0x04 方式
——-

* * *

我们使用如下操作:

“`
1)在Chrome和Firefox下,用一种方式绕过浏览器对于静默安装的提示。
2)分析Chrome Web 商城里排名前10000扩展的代码。分析在某些攻击向量和权限滥用的情况下,扩展的代码和执行。
3)创建一种方法,在安装扩展前,观察其在经过上面两步操作后的结果。这能更好的帮助用户分析,以决定是否安装该扩展。我们研究结果表明,数个扩展会申请大于它们自身使用的权限。

“`

0x05 统计
——-

* * *

我们总共从Chrome Web 商店下载了10047个扩展。它们以受欢迎的程度排序,因此能够代表扩展的使用频率是最高的。

1)内容安全策略(Content-Security Policy)

内容安全策略作为一个新特性被引入到Chrome的第18个版本,通过其严格的策略,阻止了大多数如上我们讨论的漏洞情况。我们发现有4079个扩展已经升级它的manifest到第二版,从而强制使内容安全策略得以被应用。尽管这些扩展仍然存在权限滥用和自身漏洞,但是也比其他未应用该策略的扩展要更加安全。
在10047个扩展中,我们成功扫描的有9558个,其他的因为错误的manifest文件和部分文件丢失未能成功分析。

2)权限滥用

通过解析manifest.json文件,我们扫描了这些扩展申请的权限。该方法来自Google Chrome开发者网站页面:“所有的扩展,浏览器应用程序和主题都有一个json格式的manifest文件,以manifest.l命名,或者missing.json,用于提供扩展的重要信息。”

然后跟扩展实际使用的权限匹配。Chrome的安全策略仅允许‘backgroud-scripts’直接访问核心的API。通过解析所有文件源码中的‘backgroud-scripts’段,分析出扩展需要实际需要的权限。

我们发现这些扩展中,超过一半的都申请了大于实际使用必须的权限。其中大多数多申请了一到两个额外的权限,这可以归结于开发者的水平和不严谨。另外有192个扩展多申请了4个或更多的权限,体现出较为严重的安全问题。

在统计中,我们没有包含那些不能被滥用的权限。比如,通知功能的权限,能被允许使用HTML5的通知接口,但是无法被滥用。有超过300个扩展申请了该权限,却并未使用,我们也就没有将这些扩展列入统计结果。尽管它们不会造成安全问题,但在申请权限中,这也是个不好的习惯。
如下是我们统计的数据:

![2014090110162199504.png](http://drops.javaweb.org/uploads/images/bbf6e895bb2ca7dc1abe74f4495eb003554c3365.jpg)

下面是一个权限滥用的扩展数量和申请的额外的权限数量对比的树状分布图,Y坐标是以10为底对数的值。

![2014090110165751905.png](http://drops.javaweb.org/uploads/images/6b316671e91bd4e30d514a3f4790a4e5e25a2783.jpg)

很多不合格的扩展会申请极度敏感的权限,这样就能很容易的被黑客和居心叵测的开发者利用这些权限获取用户的账号信息,如浏览器的cookie。

3)网络层面的攻击

我们发现有一些扩展在HTTP网络层面也存在漏洞,它们会通过HTTP协议加载远程脚本。由于技术原因,无法统计到所有产生的HTTP请求,但还是发现了146个扩展往外部发起过HTTP请求。我们只统计了直接包含`