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签名钓鱼攻击是如何发生的?
- 用户将自己所持有Token 的权限授权给 Permit 2 合约,这是至关重要的前提条件,这意味着你在授权时的签名已经暴露在钓鱼骗局的风险下了。
- 黑客拿到了用户的签名,基于此签名,黑客在permit2合约中进行了permit和transferFrom两个操作,转走用户的资产。
- 黑客调用permit函数,在该函数中,主要调用了verify函数和_updateApproval函数。verify 函数用来验证用户签名。验证通过后执行_updateApproval函数。_updateApproval函数用来更新授权值。
- 被授权方在授权额度范围内可以调用transferFrom函数将token转移到指定地址。
一个Permit2钓鱼交易链接
<https://etherscan.io/tx/0x1d8fa25f8f16d52cd4c5716e0cefd9b1cdbbbc060901cea223bab9de79b17ea3>
如何识别permit2中的签名?
如果我们能够理解、识别并仔细检查签名的具体内容,就可以有效避免permit2钓鱼骗局。
签名格式通常包含 Owner、Spender、value、nonce 和 deadline 这几个关键字段,分别是指:
- Owner: 代表 token 持有者的地址,用于指定希望通过签名授权的地址。
- Spender: 代表被授权使用 token 的地址,用于指定希望授权给的地址。
- value: 代表希望授权的 token 数量,可以指定特定数量的 token 授权给 Spender。
- nonce: 代表 token 持有者的交易计数器,用于确保每个授权交易都具有唯一的标识符。
- deadline: 代表签名的有效截止日期,用于限制签名的有效期。在过期之后,签名将变得无效。
我们建议用户可以根据自己的需求设置特定的value和deadline,而不是选择默认的最大值。
用户在调用Uniswap permit2合约之前,可以模拟相关授权函数,了解授权细节。点击Simulate按钮。
选择approve函数,填写以下参数,模拟用户向permit2合约授权。
此外,我们也可以善用工具,保护资产安全。
- ScamSniffer: 通过浏览器插件,提前识别钓鱼网址,避免误入陷阱。
- Revoke: 使用 Revoke.cash 定期检查钱包中的代币授权记录,及时撤销可疑授权,防止潜在风险。
- 资产隔离与多签: 分散资产,使用冷钱包存储大额资金,日常操作用热钱包,降低整体风险。
Permit 签名钓鱼频发,Cactus Custody 如何护航机构安全?
针对频发的 Permit 签名钓鱼攻击,Cactus Custody 提供多项安全措施,全面保护机构用户:
- 预解析 Permit 离线签名,签名前精准了解交易详情
- 多层审核,确保交易合法性
- 资金授权白名单,避免与可疑地址交互
<!--EndFragment-->
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。