返回论坛

警惕“空白支票”:eth_sign 钓鱼攻击深度剖析

查找币 漏洞披露 安全研究 Web3安全 区块链安全

查找币安全研究院

钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。

查看研究院 研究报告中心
**作者:查找币安全团队(Lisa & Kong)** 近期,查找币安全团队监测到多起利用 `eth_sign` 签名方式实施的钓鱼攻击。攻击者通过伪造知名项目网站(如 Moonbirds、Doodles),诱导用户签署看似无害的签名,实则窃取用户资产。本文将深入分析此类攻击的技术原理、威胁路径,并提供切实可行的防护建议。 --- ## 一、攻击案例回顾 ### 案例 1:moonbirds-exclusive.com 该钓鱼网站伪装成 Moonbirds 空投页面。当用户连接钱包并点击 “Claim” 后,MetaMask 弹出签名请求框,并显示红色警告。然而,从弹窗内容中,用户无法辨别签名具体内容。 **关键点**:`eth_sign` 是一种“开放式签名”方法,允许对任意哈希进行签名。一旦用户签署,攻击者即可利用该签名执行任何交易,包括转移用户所有资产。这相当于以太坊世界中的“空白支票”。 ### 案例 2:dooooodles.org 该网站更具迷惑性。当用户拒绝上述 `eth_sign` 签名后,MetaMask 会立即弹出另一个签名框。该签名使用了 `SetApprovalForAll` 方法,且 `Approved asset` 目标显示为 “All of your NFT”。一旦用户确认,攻击者即可无限制地转移用户账户下的所有 NFT。 **威胁数据**:通过查找币追踪系统分析攻击者地址 `0xa594f48e80ffc8240f2f28d375fe4ca5379babc7`,发现其已多次调用 `SetApprovalForAll` 盗取用户 NFT,累计获得 33 个 NFT,售出后获利超过 4 ETH。 --- ## 二、技术原理深度解析 ### 2.1 MetaMask 签名方法分类 根据 MetaMask 官方文档,目前支持六种签名方法,其中 `eth_sign` 是唯一会触发红色警告的方法。原因在于 `eth_sign` 允许对任意哈希进行签名,而签名后的结果可用于构造任何交易数据。 ### 2.2 从编码到交易广播的完整流程 正常交易签名流程如下: 1. **构造交易数据**:用户指定 `to`(接收方)、`value`(金额)、`data`(调用数据)。MetaMask 自动获取 `nonce`、`gasPrice`、`gasLimit`。 2. **RLP 编码**:将上述参数进行 RLP 编码,得到原始交易内容(`rawTransaction`)。 3. **Keccak256 哈希**:对 `rawTransaction` 进行 Keccak256 哈希,得到 32 字节的 `msgHash`。 4. **签名**:用户使用私钥对 `msgHash` 签名,生成 `r`、`s`、`v` 值。 5. **广播交易**:将签名后的 `r`、`s`、`v` 与原始交易参数再次 RLP 编码,得到 `signedRawTransaction`,然后广播至网络。 ```javascript const rlp = require('rlp'); const transaction = { nonce: '', gasPrice: '', gasLimit: '', to: '0x', value: '', data: '0x' }; const rawTransaction = rlp.encode([ transaction.nonce, transaction.gasPrice, transaction.gasLimit, transaction.to, transaction.value, transaction.data ]); const msgHash = Web3.utils.keccak256('0x' + rawTransaction.toString('hex')); ``` ### 2.3 eth_sign 的漏洞本质 由于 `eth_sign` 签名方法直接对任意哈希进行签名,攻击者可以: - 分析用户地址及链上资产情况; - 构造任意交易数据(如原生代币转账、合约调用); - 对交易数据进行 Keccak256 哈希,得到与正常签名一致的 `msgHash`; - 诱导用户通过 `eth_sign` 签署该哈希。 用户签署后,攻击者即可利用该签名构造完整的 `signedRawTransaction`,并广播至网络。由于签名本身无法区分是用于正常交易还是恶意交易,用户实际上签署了“空白支票”。 --- ## 三、威胁对比:传统授权钓鱼 vs. eth_sign 钓鱼 | 攻击方式 | 用户可见信息 | 迷惑性 | 防护难度 | |---------|-------------|--------|---------| | 传统授权钓鱼(如 `SetApprovalForAll`) | 显示授权目标地址、授权范围(如全部 NFT) | 中等 | 较低(需用户确认授权目标) | | `eth_sign` 钓鱼 | 仅显示一串 32 字节的哈希 | 极高 | 很高(需用户理解签名含义) | 传统钓鱼中,MetaMask 会直观展示授权目标地址和资产范围,用户若具备基本安全意识,可识别恶意地址。而 `eth_sign` 钓鱼仅显示哈希,用户无法判断签名内容,极易被钓鱼话术(如“请确认地址验证”)欺骗。 --- ## 四、防护建议 1. **认准域名**:访问前仔细核对网站域名,避免访问仿冒域名或拼写错误链接。 2. **警惕红色警告**:MetaMask 弹出红色警告时,务必取消操作。`eth_sign` 签名请求几乎总是恶意。 3. **安装安全插件**:推荐使用 RevokeCash、ScamSniffer 等安全工具,可在签名前自动检测风险并发出警报。 4. **检查签名数据**:若必须签名,使用工具(如 Etherscan 的“Decode Transaction”)将哈希解码为可读交易内容。 5. **定期撤销授权**:使用 RevokeCash 等工具定期检查并撤销可疑授权,降低资产暴露风险。 --- ## 五、总结 `eth_sign` 钓鱼攻击利用以太坊签名机制的开放性,将签名权限转化为“空白支票”,对普通用户构成严重威胁。尽管 MetaMask 已提供风险提示,但攻击者常结合话术干扰,使得无技术背景的用户难以防范。建议用户提升安全意识,善用安全工具,从源头上阻断此类攻击。 **本文由查找币安全团队整理发布**
在论坛中查看和回复