Permit 授权的秘密:便利背后的风险与保护措施

本文简要探讨了Permit功能的双重性质:它在降低高gas费的情况下满足用户需求的同时,也为钓鱼攻击提供了可能。文章将分析Permit2签名钓鱼攻击的发生方式,揭示攻击者如何通过伪造签名获利,并介绍了识别Permit签名的方法和技巧,帮助用户规避潜在风险。

<!--StartFragment-->

带你走进Permit?

假设我想向朋友李雷借500元。按照传统方式,李雷会打电话给银行,授权我提取500元。银行记录后,我才能去银行取钱。这个过程类似于在以太坊上使用Approve进行授权,只有资产拥有者才能直接授权资金的使用

而使用 Permit 授权就不同了。李雷不需要打电话,而是直接写了一张支票给我。我拿着这张签名的支票去银行,银行确认支票的有效性后,立即让我取钱。这就是Permit的优势,它允许授权通过签名完成,无需资产拥有者主动操作

Permit是把双刃剑

Permit的优势:满足高 gas 价格下的用户需求

在 Ethereum 主网上 gas 价格高涨时,用户往往面临高昂的交易成本。传统的授权流程(Approve)需要两次上链交易,尤其是在执行代币 Swap 时,对小额交易用户而言,交易费用成了一大负担。ERC-2612 引入的 Permit 则通过离线签名简化了这一过程,用户无需在授权时上链,只需在实际转移代币时一起提供签名即可,节省了一次上链交易的 gas 费用。这对于高 gas 价格环境下的用户来说,Permit 是一种高效且节省成本的解决方案。

Permit的劣势:成为钓鱼攻击的温床

据 @ScamSniffer 的统计数据: 2023 年钓鱼受害者损失金额为2.95亿美元。 在 2024 的上半年,这一金额就已经超过3.14亿美元之多。 在 2024 的 Q3 尾声,更是来了一票大的:疑似神鱼的钱包地址遭遇 Permit 钓鱼攻击,损失 1.2 万枚 $spWETH,价值2个亿人民币

与传统的 Approve 方法不同,Permit 依赖于离线签名,这种简化的授权流程容易降低用户的警惕性。由于不需要立即上链,黑客可以通过钓鱼攻击诱导用户签署恶意交易。更糟糕的是,一旦用户签署了恶意 Permit,黑客可以选择任意时机执行交易,用户难以进行补救。这种离线签名的特性让黑客操作更加隐蔽,从而使钓鱼攻击变得更加频繁和致命。

下面我以Uniswap permit2为例,介绍Uniswap permit2签名钓鱼攻击是如何发生的?我们普通用户又该如何识别它们?

Uniswap permit2钓鱼攻击

Uniswap permit2 允许跨不同应用共享和管理token授权。 用户只需在一次交易中完成授权和交易,减少交易的gas费用,简化交易操作流程。但是,Permit 2 则将用户的操作变为了链下签名,对于用户来说,链下签名是最容易放下防备的环节,而绝大多数人并不会仔细检查签名的内容也并不理解签名的内容

Uniswap permit2签名钓鱼攻击是如何发生的?

  1. 用户将自己所持有Token 的权限授权给 Permit 2 合约,这是至关重要的前提条件,这意味着你在授权时的签名已经暴露在钓鱼骗局的风险下了
  2. 黑客拿到了用户的签名,基于此签名,黑客在permit2合约中进行了permit和transferFrom两个操作,转走用户的资产。
  3. 黑客调用permit函数,在该函数中,主要调用了verify函数和_updateApproval函数。verify 函数用来验证用户签名。验证通过后执行_updateApproval函数。_updateApproval函数用来更新授权值。

  1. 被授权方在授权额度范围内可以调用transferFrom函数将token转移到指定地址。

一个Permit2钓鱼交易链接

<https://etherscan.io/tx/0x1d8fa25f8f16d52cd4c5716e0cefd9b1cdbbbc060901cea223bab9de79b17ea3>

如何识别permit2中的签名?

如果我们能够理解、识别并仔细检查签名的具体内容,就可以有效避免permit2钓鱼骗局。

签名格式通常包含 Owner、Spender、value、nonce 和 deadline 这几个关键字段,分别是指:

  1. Owner: 代表 token 持有者的地址,用于指定希望通过签名授权的地址。
  2. Spender: 代表被授权使用 token 的地址,用于指定希望授权给的地址。
  3. value: 代表希望授权的 token 数量,可以指定特定数量的 token 授权给 Spender。
  4. nonce: 代表 token 持有者的交易计数器,用于确保每个授权交易都具有唯一的标识符。
  5. deadline: 代表签名的有效截止日期,用于限制签名的有效期。在过期之后,签名将变得无效。

我们建议用户可以根据自己的需求设置特定的value和deadline,而不是选择默认的最大值。

用户在调用Uniswap permit2合约之前,可以模拟相关授权函数,了解授权细节。点击Simulate按钮。

选择approve函数,填写以下参数,模拟用户向permit2合约授权。

此外,我们也可以善用工具,保护资产安全。

  1. ScamSniffer: 通过浏览器插件,提前识别钓鱼网址,避免误入陷阱。
  2. Revoke: 使用 Revoke.cash 定期检查钱包中的代币授权记录,及时撤销可疑授权,防止潜在风险。
  3. 资产隔离与多签: 分散资产,使用冷钱包存储大额资金,日常操作用热钱包,降低整体风险。

Permit 签名钓鱼频发,Cactus Custody 如何护航机构安全?

针对频发的 Permit 签名钓鱼攻击,Cactus Custody 提供多项安全措施,全面保护机构用户:

  1. 预解析 Permit 离线签名,签名前精准了解交易详情
  2. 多层审核,确保交易合法性
  3. 资金授权白名单,避免与可疑地址交互

<!--EndFragment-->

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
在web3摘不拿拿
在web3摘不拿拿
我是一个 Web3 技术“摘蕉人”!在登链社区这片“热带雨林”里到处探索,寻找那些独特的“香蕉”——创新的项目、令人兴奋的技术。我会时不时写点文章分享我的“摘焦”心得,期待和大家一起讨论、交流和成长。