理解EIP-7702钓鱼攻击:钱包保护策略综合指南

本文深入分析了利用EIP-7702的钓鱼攻击,特别是攻击者如何利用MetaMask的7702批量执行功能,诱导用户授权恶意交易,从而造成重大资产损失的情况。文章详细阐述了MetaMask的7702 Delegator授权机制和安全架构,并通过案例分析揭示了InfernoDrainer等团伙的作案手法,最后针对钱包提供商和用户提出了具体的安全建议,以防范此类攻击。

理解 EIP-7702 网络钓鱼攻击:钱包保护策略综合指南

EIP-7702 为外部拥有的地址引入了类似智能合约的功能,显著扩展了它们的能力和灵活性。随着越来越多的应用程序利用这项技术,它在 Web3 的采用和用户体验增强方面发挥着越来越重要的作用。

然而,网络罪犯正在利用 EIP-7702 的强大功能以及用户对这项新兴技术的有限理解。我们最近记录了一些案例,攻击者,特别是 #InfernoDrainer 组织,利用 Metamask 的 7702 批量执行功能,将通常需要多个授权步骤的操作合并为单个恶意交易,从而导致重大资产损失。

免责声明:此安全问题并不反映 Metamask 本身的任何固有漏洞。该钱包提供商已实施强大的安全措施,并在启用 7702 功能时保持安全第一的方法。预防的关键在于教育用户了解 EIP-7702 的功能和潜在风险,以减轻未来的安全事件。

I. Metamask 7702 委托者授权机制和安全架构

1. 技术分析

  • 授权过程:用户授权一个已部署的 委托者合约(Delegator Contract),将其账户的代码字段重定向到该合约。当前 MetaMask 官方 委托者合约(Delegator Contract) 地址: 0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B
  • 授权结构:(chainId, delegatorAddress, nonce, signature) 写入到 authorization_list
  • 签名机制:MetaMask 通过 signEIP7702Authorization 方法对 EIP-7702 授权采用统一的签名逻辑。它对授权摘要 digest7702 = keccak256(0x05 ‖ RLP(chainId, delegator, nonce)) 执行 ECDSA 签名,生成附加到后续 Type-4 交易的 (v, r, s) 签名结构,用于帐户授权和升级。实现参考:https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-eip7702-authorization.ts
  • 验证过程:共识层通过 ecrecover(digest7702, sig) == tx.from 验证
  • 安全设计:Web 应用程序无法诱骗用户授权任意 委托者(Delegator),因为 signEIP7702Authorization 仅在 MetaMask 的内部架构中实现,并且不通过 window.ethereum 暴露给 Web 接口。诸如 eth_signTypedData_v4 之类的 Web 可访问签名方法与 EIP-7702 授权签名不兼容,因为摘要格式不同:
digest712 = keccak256(
  "\x19\x01" ‖ domainSeparator ‖ keccak256(encodeStruct(primaryType, message))
)
  • EIP-7702 规范所需的签名格式为:
digest7702 = keccak256(
  0x05 ‖ RLP(chainId, delegator, nonce)
)

由于 eth_signTypedData_v4 包括一个固定的 0x1901 前缀,并且摘要计算完全不同,因此实际上不可能构造 domainSeparatorprimaryTypemessage 值,从而导致 digest712 == digest7702.

因此,Web 应用程序无法通过此方法伪造合法的 EIP-7702 授权签名。此外,MetaMask 为 委托者(Delegator) 地址实现了一个白名单机制,默认情况下仅允许授权官方 委托者(Delegator) (0x63c0…32B),并阻止 DApp 注入自定义地址,从而进一步保护用户免受恶意 委托者(Delegator) 授权尝试。

2. 使用方法

MetaMask 当前提供两种将现有 EOA 升级(upgrade) 到 EIP-7702 智能账户的方法:主动升级(Active Upgrade)被动升级(Passive Upgrade)

当用户手动单击钱包界面中的“切换”按钮以授权特定的 委托者合约(Delegator Contract) 时,会发生主动升级(Active Upgrade)

当用户与 EIP-7702 兼容的 DApp 交互时,会触发被动升级(Passive Upgrade),从而提示 MetaMask 在检测到相关操作时自动显示升级建议。

2.1 主动升级(Active Upgrade):

  • 交易内容:仅包含帐户升级操作,授权特定的 委托者合约(Delegator Contract)
  • 升级过程:导航到钱包的帐户详细信息界面,然后单击切换按钮,以将用户帐户升级到 Ethereum Mainnet 上的智能帐户。单击切换后,将出现一个签名窗口,用于当前升级交易:

  • 授权记录:确认后,将提交该交易以进行链上处理。成功挖矿表明用户已成功升级到智能帐户。用户可以通过访问 Etherscan 上他们的钱包地址并检查“授权 (EIP-7702)”部分来验证特定的授权交易详细信息。

2.2 被动升级(Passive Upgrade)

  • 交易内容:包括帐户升级操作和与链上合约的批量交互
  • 升级过程:当用户与某些 DApp 交互时,MetaMask 主动建议通过智能帐户升级完成当前交易以进行批量执行。例如,在 Uniswap 上执行代币交换时,单击“使用智能帐户”按钮将升级到智能帐户,从而允许在一个批处理交易中完成代币批准和交换操作。

2.3 恢复为常规 EOA

无论帐户是通过主动还是被动升级方法转换为智能帐户,绑定的 委托者合约(Delegator Contract) 地址都将永久存储在链上,作为帐户的当前执行逻辑。

如果用户希望将其帐户恢复为常规 EOA,则需要手动启动“切换回 EOA”操作。此操作的本质是:提交一个 EIP-7702 授权,其中 address(0) 作为新的 委托者(Delegator) 合约地址。当此交易成功挖矿时,帐户的代码字段将被清除,执行逻辑将恢复为默认空代码,并且该帐户将返回到常规 EOA 状态。

导航到钱包的帐户详细信息界面,然后单击切换按钮,以使用户帐户恢复为 Ethereum Mainnet 上的常规 EOA。

单击确认后,等待交易被挖掘。成功的链上执行意味着用户已成功从智能帐户切换回常规 EOA。也可以在 Etherscan 上的当前钱包地址页面上找到特定的交易信息。

II. EIP-7702 网络钓鱼攻击案例研究

5 月 24 日,#InfernoDrainer 网络钓鱼组织利用 MetaMask 的 7702- 委托者合约(Delegator Contract) 批量执行功能,从用户 (0xc6D2…06DC) 处欺诈性地获得代币批准并执行网络钓鱼攻击,导致损失超过 146,000 美元的 $HashAI $HUMANS $ParallelAI $NeuralAI $DSync $Zero1 $NodeAI $Sensay $Virtual 代币。

欺诈地址:

0x0000db5c8B030ae20308ac975898E09741e70000

0x00008C22F9F6f3101533f520e229BbB54Be90000

0xa85d90B8Febc092E11E75Bf8F93a7090E2ed04DE

0xC83De81A2aa92640D8d68ddf3Fc6b4B853D77359

0x33dAD2bbb03Dca73a3d92FC2413A1F8D09c34181

网络钓鱼交易示例:

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

网络钓鱼的根本原因:

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

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

#InfernoDrainer#PinkDrainer 正在试验更隐蔽和更有影响力的基于 EIP-7702 的网络钓鱼犯罪网络。

根据我们的研究,网络钓鱼犯罪团伙 #InfernoDrainer#PinkDrainer 目前正在研究和试验更隐蔽和更有影响力的基于 EIP-7702 的网络钓鱼犯罪网络。相关地址如下,我们将在稍后发布更详细的报告:

Inferno Drainer:

0x0000db5c8B030ae20308ac975898E09741e70000

Pink Drainer:

0xe49e04F40C272F405eCB9a668a73EEAD4b3B5624

III. 安全建议

对于钱包提供商:

  • 参考 MetaMask 对 7702 委托者(Delegator) 的实现和安全管理,禁止用户授权任意 委托者(Delegator),并且仅允许应用内操作。提醒用户,任何请求通过网页进行签名授权的行为都构成网络钓鱼攻击。
  • 检查链是否与当前网络匹配,并在使用 chainID 0 签名时警告用户存在重放风险。
  • 在用户签名授权时显示目标合约,并在用户通过 委托者(Delegator) 执行批量执行时显示特定函数调用详细信息,从而降低网络钓鱼攻击的风险。

对于用户:

  • 私钥保护仍然至关重要。不是你的密钥,就不是你的币。
  • 不要基于任何独立的网页授权 委托者(Delegator)。安全授权通常仅在 MetaMask 等应用程序中发生。
  • 使用任何钱包进行签名时,请仔细检查签名内容,以避免盲目签名或错误签名。
  • 原文链接: goplussecurity.medium.co...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
goplussecurity
goplussecurity
Protect Your Every Transaction.