一句话版本
MetaMask 这类扩展钱包把加密后的私钥存在浏览器里,网页通过一个注入的 JavaScript 接口(EIP-1193)向它发请求。它在易用性和安全之间取了一个中间点:比网页钱包安全(私钥不交给网站),比硬件钱包弱(私钥和恶意软件在同一台电脑上)。 主要威胁来自四个方向:假冒的扩展、其他恶意扩展、电脑上的木马(包括剪贴板劫持)、以及用户在恶意网页上点了"确认"。
全文分三层:
- 通俗理解:住在浏览器里的保险箱
- 实际用处:应用商店里的假钱包、剪贴板木马、信息窃取木马
- 原理与工程要点:扩展的隔离模型、权限、网页和钱包怎么通信、EIP-6963
第一层:通俗理解
1.1 住在浏览器里的保险箱
扩展钱包像一个住在浏览器里的保险箱:
- 私钥用你的密码加密后存在本地;
- 网页想转账或签名,只能请求钱包弹出一个窗口,由你点确认;
- 网页本身拿不到私钥。
1.2 但保险箱和小偷住在同一栋楼里
| 小偷 | 能做什么 |
|---|---|
| 恶意网页 | 只能发请求;骗你点确认是它唯一的办法 |
| 其他恶意扩展 | 如果有"读取和更改所有网站数据"的权限,可以篡改网页内容、监视你的输入 |
| 电脑上的木马 | 读取扩展的加密存储文件,再暴力破解密码;或者记录键盘,等你输入密码 |
| 剪贴板劫持木马 | 你复制一个地址,它悄悄替换成攻击者的地址 |
第二层:实际用处
- 假冒的钱包扩展:浏览器应用商店里多次出现和 MetaMask、Phantom 名字、图标几乎一样的假扩展,安装后要求"导入助记词",助记词直接发给攻击者。搜索引擎广告里也常有假的下载链接。
- 剪贴板劫持(clipper):一类专门的木马,监控剪贴板,发现内容像加密货币地址,就替换成攻击者的。更高级的版本会生成首尾相似的地址,配合地址投毒让你难以察觉。
- 信息窃取木马:许多商业化的窃密木马会专门搜索浏览器扩展钱包的数据目录,打包上传,再离线暴力破解钱包密码。密码弱的钱包很快就会被打开。
- 恶意扩展更新:一个原本正常的扩展被卖给别人,或者开发者账号被盗,推送一个恶意更新,所有用户自动升级。
第三层:原理与工程要点
3.1 扩展的隔离模型
| 组件 | 运行在哪里 | 能访问什么 |
|---|---|---|
| 后台(Service Worker) | 扩展自己的源 | 加密的密钥库、扩展存储 |
| 弹窗(popup) | 扩展自己的源 | 和后台通信 |
| 内容脚本 | 注入到每个网页里 | 网页的 DOM,但 JavaScript 环境是隔离的 |
页面注入的 provider(window.ethereum) |
网页的环境里 | 只能通过消息向扩展发请求 |
关键点:私钥只存在于扩展自己的源里,网页和内容脚本都碰不到(同源策略在扩展上的应用,见《同源策略与子域名隔离》)。
3.2 网页怎么和钱包通信
EIP-1193 规定了 window.ethereum.request({ method, params }) 接口。常见方法:
| 方法 | 用途 | 风险 |
|---|---|---|
eth_requestAccounts |
请求连接,获取地址 | 低,但会暴露你的地址 |
eth_sendTransaction |
发送交易 | 要看清 to、value、data |
personal_sign |
签名消息 | 看内容是否可读 |
eth_signTypedData_v4 |
签结构化数据 | Permit 钓鱼的主要载体(见《盲签与所见即所签》) |
wallet_switchEthereumChain |
切换网络 | 误导用户在错误的链上操作 |
EIP-6963(2023)解决了另一个问题:多个钱包扩展都想往 window.ethereum 里写,后安装的会覆盖先安装的,恶意扩展也可以借此冒充。EIP-6963 改为每个钱包通过事件广播自己的身份信息,网页列出来让用户选择。
3.3 权限是最大的风险因素
浏览器扩展可以申请"读取和更改你在所有网站上的数据"这样的宽泛权限。安装一个带这种权限的扩展,等于允许它修改你打开的任何网页,包括钱包要你确认的那个 DApp 页面。
建议:
- 用一个专门的浏览器配置文件做加密货币操作,只装钱包扩展,不装其他扩展;
- 定期检查已安装扩展的权限,删除不用的;
- 只从官网链接进入应用商店安装钱包,不点搜索广告。
3.4 对开发者的要求
- 钱包密码的派生要足够慢(高迭代的 PBKDF2、scrypt 或 Argon2),让离线暴力破解昂贵;
- 弹窗里显示的内容要来自钱包自己的解码,而不是网页传来的描述文字;
- 签名请求必须由用户在钱包界面里确认,网页无法代替点击;
- 使用 Manifest V3 的限制:不允许运行远程代码,降低"恶意更新"之外的被投毒途径。
3.5 什么时候该换硬件钱包
扩展钱包的根本局限是:私钥和潜在的恶意软件在同一台电脑上。日常小额用扩展钱包很方便;存放较大资产时,应当把扩展钱包作为硬件钱包的"界面"(扩展只负责展示和转发,签名在硬件设备上完成),见《硬件钱包的攻击面》。
总结
| 层次 | 要点 |
|---|---|
| 模型 | 私钥在扩展自己的源里,网页只能发请求 |
| 威胁 | 假扩展、恶意扩展、窃密木马、剪贴板劫持、骗你点确认 |
| 技术 | EIP-1193 请求接口;EIP-6963 防覆盖冒充 |
| 建议 | 专用浏览器配置;最小化扩展;强密码;大额配硬件钱包 |