浏览器扩展钱包详解

·阅读 6 分钟·作者:SSP Editorial Team
由沙箱与 2-of-2 签名锁保护的浏览器扩展钱包示意图

浏览器扩展钱包是一个运行在你浏览器内部的小程序——Chrome、Firefox、Brave 或 Edge——它保管着你加密资产的密钥。安装它的方式和安装广告拦截器一样:在浏览器的扩展商店里点击一次即可。装好后,地址栏旁边会出现一个钱包图标,每当你访问需要处理加密资产的网站时它都已就绪。

本指南解释这类钱包究竟如何工作、它的安全模型是什么样的,以及真正的风险在哪里。如果你完全是钱包新手,请先阅读什么是加密钱包,再看更全面的软件钱包与硬件钱包对比——本文专门聚焦于基于浏览器的这一种。

“扩展”究竟是什么

浏览器扩展是为浏览器添加功能的软件。浏览器是宿主程序;扩展是宿主允许在其内部运行的客人。扩展可以读取并修改你访问的网页、显示自己的弹窗,并在你的电脑上存储数据。这种能力正是扩展钱包之所以便利的原因——也正是你在把钱托付给它之前需要理解的。

扩展钱包用这种能力完成三项工作。它把你的密钥存储在浏览器的本地存储中,通常由一个密码保护。当你需要批准某件事时,它会显示一个弹窗。它还通过一种叫作注入的技术与网页通信

注入如何工作

注入意味着钱包在你打开的每个网页中放入一小段代码。可以把它想象成钱包在你访问的每个网站的桌上放了一部电话。当某个网站想用加密资产做点什么时——连接你的钱包、显示你的余额,或请求你发送一笔交易——它就拿起那部电话发出请求。

你的钱包收到请求后不会悄悄行动。它会打开一个弹窗并询问你。“此网站想要连接。”“此网站想让你签署一笔发送 0.2 ETH 的交易。”在你点击批准之前,什么都不会动。网站可以请求;只有你能同意。这个批准步骤是使用任何浏览器钱包时最重要的习惯:点击之前先读弹窗。

正是这种设计让一个去中心化应用——一个 dApp,即运行在区块链上的网站——可以直接在普通浏览器标签页中工作,无需额外软件。它确实很有用。但因为钱包可以被每个页面触达,当我们谈安全时,每个页面也都是这幅图景的一部分。

攻击面

攻击面”是一个朴素的说法,指某物可被攻击的所有位置。前门、后门和一扇敞开的窗户都属于一栋房子的攻击面。浏览器钱包也有这样几处。

恶意或被入侵的网页。 因为钱包注入到每个网站,一个怀有恶意的网站就能向它发送请求。钱包仍会先询问你,所以恶意页面无法独自转移资金——但它可以炮制一个令人困惑的请求,期望你不读就批准。

钓鱼 dApp。 钓鱼网站是为了看起来像真网站而打造的假网站。一个仿冒热门交易所或 NFT 市场的网站可能要你“验证你的钱包”,并呈现一笔实际会把它掏空的交易。弹窗对它将要做的事是诚实的;是网站在“为什么”上撒了谎。

过于宽泛的权限。 当你安装任何扩展时,浏览器会列出它能访问什么。许多钱包请求读取和修改所有网站上数据的权限——它们需要这个权限才能在各处注入。代价是:一个触及范围很广的钱包一旦被反过来对付你,就是一个更大的猎物。

供应链风险。 这是微妙的一种。供应链攻击针对的不是你,而是你所依赖的东西。现代软件由数百个更小的开源构建块拼成,这些构建块叫作依赖项。如果攻击者把坏代码塞进其中一个构建块——一个被投毒的依赖项——或劫持那个把扩展新版本推送到你浏览器的更新,恶意代码就会通过你已经信任的渠道到达。你安装的是一个安全的扩展;后来的某次更新,或藏在其中的某个组件,并不安全。

要更深入、不偏向任何厂商地了解浏览器扩展如何被构建和保护,Mozilla 的 MDN 网页扩展文档是权威参考,OWASP 项目则发布关于上述网页威胁的通用指南。

SSP 如何降低风险

以上这些并不意味着浏览器钱包用起来不安全。它意味着一个构建良好的钱包必须攻击面做规划,而不是假装它不存在。SSP 用两种具体方式做到这一点。

LavaMoat 运行时沙箱。 沙箱是一个受限的空间,其中的东西可以运行,却无法触及系统的其余部分——就像真实的沙箱把沙子保持在一处。LavaMoat 把这个思路应用到那数百个依赖项上。每个依赖项都在自己密封的隔间里运行,只能访问它真正需要的东西。这样,如果一个被投毒的依赖项确实通过供应链攻击溜了进来,它会被困住:它无法悄悄越过钱包去读取你的密钥,因为它隔间的墙不允许。攻击被遏制,而不是变成灾难。我们在新闻室文章LavaMoat 来到 SSP 中作了详细介绍。

2-of-2 设计。 这是更大的结构性保护。大多数浏览器钱包保管整把密钥——批准一个坏弹窗,资金就没了。SSP 把签名拆分到两台设备上:浏览器扩展保管一把密钥,你手机上的 SSP Key 应用保管第二把。一笔交易只有在两者都签名时才有效。扩展单独无法转移哪怕一枚币。

这彻底改变了算式。即使一个恶意页面骗过了扩展,即使一次被入侵的更新到达了它,攻击者也只控制了两把必需密钥中的一把。你的手机——一台独立的设备,有一块独立的屏幕向你显示交易细节——仍然必须批准。一个会掏空普通浏览器钱包的攻击,会卡在一堵它跨不过去的墙前。

那么,浏览器钱包安全吗?

当两件事同时成立时,浏览器钱包对日常使用足够安全:钱包被构建来遏制上文描述的那些失败,而你把批准弹窗当作一个真正的决定而非一种反射。只从官方商店安装扩展,把钱包单独放在一个你信任的浏览器里,并在网站要你签署什么时放慢速度。

浏览器钱包最大的弱点——它生活在一个繁忙、连着互联网的浏览器里——是真实存在的。SSP 的回答不是无视它,而是假定浏览器可能被入侵并让那种情况可被熬过:LavaMoat 遏制一个坏依赖项,而 2-of-2 设计意味着单凭扩展永远不足以让你失去资金。本系列的下一篇,移动加密钱包将考察这一配对的另一半——那台必须共同签名的手机。

分享本文

相关文章