深度还原 7702 钓鱼攻击原理,钱包和用户该如何防范?
2025-06-03 11:02
Go+ Security
2025-06-03 11:02
Go+ Security
2025-06-03 11:02
订阅此专栏
收藏此文章

EIP-7702 赋予了地址类似智能合约的能力和灵活性,越来越多的 7702 应用正在不断被创造出来,这对让更多的人进入 Web3 和提高用户体验至关重要。

然而,7702 的灵活性以及大多数用户对 7702 还不熟悉的现状正在被欺诈团伙利用,近期我们观测到有用户就因为 Metamask 7702 批量执行的能力而导致原本需要授权十几次的交互,被钓鱼团伙 #InfernoDrainer 合并成一笔交易完成,导致资产被盗。

说明:Metamask 本身没有安全问题,Metamask 在为用户提供 7702 相关能力时是把用户安全放在第一位的,并且做了很多安全措施。用户需要对 7702 的能力和相关风险了解更多,以防止此类安全事件再次发生。

一、Metamask 7702 Delagator 签名授权原理与安全设计

1. 技术分析

  • 由用户授权已部署的 Delegator Contract,将用户账户的 code 字段指向该合约。当前 MetaMask 官方 Delegator Contract 地址:0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B
  • 授权结构:(chainId, delegatorAddress, nonce, signature) 写入 authorization_list
  • 签名方式:Metamask 底层对 EIP-7702 相关的授权交易采用统一的签名逻辑,即 signEIP7702Authorization 方法,对授权数据 digest7702 = keccak256(0x05 ‖ RLP(chainId, delegator, nonce)) 进行 ECDSA 签名,生成 (v, r, s) 签名结构,并附加到随后的 Type-4 交易中,实现账户的授权与升级,具体实现见:https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-eip7702-authorization.ts
  • 验证方式:共识层通过 ecrecover(digest7702, sig) == tx.from 完成验证。
  • 安全设计:网页端无法诱导用户对任意的 Delegator 进行授权,因为 signEIP7702Authorization 方法仅在 MetaMask 钱包内部实现,不通过 window.ethereum 对网页端开放调用 **。** 网页可访问的签名方法如 eth_signTypedData_v4 并不适用于 EIP-7702 授权签名,其签名摘要格式如下:

而 EIP-7702 规范要求的签名格式为:

由于 eth_signTypedData_v4 固定包含 0x1901 前缀,且摘要计算过程与 7702 完全不同,因此即使构造巧妙的 domainSeparator、primaryType 和 message,也几乎不可能使得 digest712 == digest7702。

因此,网页端无法通过该方法伪造合法的 7702 授权签名。此外,MetaMask 还对 Delegator 地址实行白名单机制,默认且仅允许授权官方 Delegator(0x63c0...32B),禁止 DApp 自行注入地址,进一步防止用户被诱导签名恶意 Delegator 授权数据。

2. 使用方法

当前在 Metamask 中,将现有 EOA 升级为 7702 智能账户(Smart Account)的方式主要分为两类:主动升级与被动升级。

主动升级是指用户在钱包界面主动点击“切换”按钮,授权特定的 Delegator Contract。

被动升级则发生在用户与某些支持 7702 的 DApp 交互时,Metamask 检测到相关操作后会自动弹出提示,建议用户完成升级。

2.1 主动升级:

  • 交易内容:仅包括升级改账户的动作,即授权特定的 Delegator Contract。
  • 升级流程:进入钱包的账户详情界面,点击下图中的切换按钮,即可将用户在 Ethereum Mainnet 升级为智能账户。点击切换之后,出现用户签名当前升级交易窗口:
  • 授权记录:确认后,等待交易上链,上链成功意味着用户成功升级为智能账户,可以从 etherscan 上当前钱包地址的页面中的 **Authorizations (EIP-7702)** 查看具体的授权交易信息。

2.2 被动升级

  • 交易内容:包括升级账户的动作以及与链上合约交互的批量动作。
  • 升级流程:在用户与链上某些 DApp 交互时,Metamask 会主动提示用户当前交易可以通过升级成智能账户使用批量发送的方式来完成.例如在 Uniswap 上进行某些 token 的 swap,点击 Use smart account 按钮,升级成智能账户,之后代币授权和 Swap 将在一笔交易中批量完成。

2.3 切换回普通 EOA

无论采用主动升级还是被动升级的方式将当前账户转换为智能账户,其绑定的 Delegator Contract 地址都会永久存储在链上,作为账户当前的执行逻辑。

若用户希望将账户恢复为普通 EOA,需要手动发起一次“切换回 EOA”的操作。该操作的本质是:通过一次 EIP-7702 授权,将 address(0) 作为新的 Delegator 合约地址提交。当该交易成功上链后,账户的 code 字段将被清空,执行逻辑恢复为默认的空代码,账户即回退为普通 EOA 状态。

进入钱包的账户详情界面,点击切换按钮,即可将用户在 Ethereum Mainnet 切换回普通 EOA 账户。

点击确认后,等待交易上链,上链成功意味着用户已经从智能账户切换回了普通的 EOA 账户,具体的交易信息同样可以在 etherscan 上当前钱包地址页面中找到。

二、7702 钓鱼攻击实例

5 月 24 日,#InfernoDrainer 钓鱼团伙利用 Metamask 7702-Delagator 合约的批量执行功能批量骗取了用户(0xc6D2…06DC)的代币授权,并实施了钓鱼攻击,损失超 14.6 万美元的 $HashAI $HUMANS $ParallelAI $NeuralAI $DSync $Zero1 $NodeAI $Sensay $Virtual.

  • 欺诈地址

0x0000db5c8B030ae20308ac975898E09741e70000 0x00008C22F9F6f3101533f520e229BbB54Be90000 0xa85d90B8Febc092E11E75Bf8F93a7090E2ed04DE 0xC83De81A2aa92640D8d68ddf3Fc6b4B853D77359 0x33dAD2bbb03Dca73a3d92FC2413A1F8D09c34181

  • 钓鱼交易示例

https://etherscan.io/tx/0x09c264618e93983510aaeb7aa2c91c8254a8b2ec66167438f3f6c28b866b6eba

  • 被钓鱼原因

用户(0xc6D2…06DC)执行了恶意批量授权交易:

Ethereum Transaction Hash: 0x1ddc8cecbc... | Etherscan

  • #InfernoDrainer 和 #PinkDrainer 正在实验更隐蔽、影响更大的利用 7702 的钓鱼黑色产业链。

根据我们的研究,目前钓鱼黑产团伙 #InfernoDrainer 和 #PinkDrainer 都正在研究并实验更隐蔽、影响更大的利用 7702 的钓鱼黑色产业链,相关地址如下,我们也将在后续公布更详细的报告:

Inferno Drainer:

0x0000db5c8B030ae20308ac975898E09741e70000

Pink Drainer:

0xe49e04F40C272F405eCB9a668a73EEAD4b3B5624

三、安全建议

钱包提供商:

  • 参考 Metamask 对于 7702 Delegator 的实现和安全管理,禁止用户对任意的 Delegator 授权,并且只允许应用内操作。提醒用户任何通过网页让用户进行签名授权的行为都是钓鱼攻击。
  • 检查链是否与当前网络匹配,并提醒用户使用 chainID 为 0 签名时存在重放风险。
  • 在用户签名授权时显示目标合约,在用户通过 Delegator 进行批量执行时显示具体的函数调用内容,降低网络钓鱼攻击的风险。

用户:

  • 私钥保护始终是最重要的。Not your keys, not your coins.
  • 不要根据任何独立的网页进行 Delegator 授权,安全的授权通常只会像 Metamask 一样在应用内进行。
  • 在使用任何钱包进行签名时,请仔细看清签名内容,避免盲签或误签。

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

Go+ Security
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开