网站首页 资讯 内容详情

从解药到毒药:Permit 为何变成风险之源?

资讯 2024-11-01 06:07:34 26

我们无法否认 Permit 带来的价值,但近来越来越多的被盗事件也表明,它带来的危害似乎更大。



1.一分钟认识 Permit 是什么


我们先从一个借钱小故事开始说起:


我准备向好朋友杰克马借 100 万,杰克马二话不说拿起电话打给银行,确认身份后告知银行:我要授权给某某某 100 万的提款额度,银行回复收到授权并记录在案。


下一步我只需要去到银行,告知柜台准备取走杰克马给我授权的 100 万。这时银行会查阅有没有授权记录并在确认我就是某某某后,把 100 万给到我。


这个小故事可以视为 ETH 上 Approve 授权的具象化。在这个过程中,授权只能由杰克马(资产所有人)打电话告知银行进行授权(上链),并由银行(Token 合约)管理这些授权,之后我(被授权方)才能从银行转走不高于授权金额钱。假如银行没有查到授权记录的话,我的提款申请毫无疑问会被拒绝。


好了,接下来如果换成另外一种授权方法——Permit,向杰克马借钱的话,流程会有什么变化?


这次我一开口又要借 100 万,大方的杰克马也懒得打电话了,从口袋里掏出一本支票,填写金额并签名之后给了我。我拿着这张支票去到银行兑换,此时尽管银行没有授权记录,但是凭借着支票上杰克马的签名,银行确认了支票的真实性,将指定金额的钱兑付给了我。


相信小伙伴们已经看出了二者在流程上的差异,Approve 作为 ERC-20 中重要功能,在 ETH 上线后不久就已经被广泛应用了,为什么后来还要在 ERC-2612 中引入 Permit 方法来实现相同效果的特性?


2.为何需要 Permit?


ERC-2612 提案自 2019 年 3 月份被提出,直到 2022 年 10 月完成最后审查,它的上线和这期间 ETH 主网上的 gas 价格经历了多次暴涨有着密不可分的关系。


图:ETH 主网 gas price 在 2020-2022 年期间居高不下


狂暴牛市叠加链上新项目的造富效应,用户链上的交易热情高涨,并且愿意付出更高的手续费来让交易更快上链,因为有时候提前一个区块上链往往意味着更高倍的收益。


但这种现象的后果是用户在链上交易代币的时候,往往需要顶着高昂的 gas 费用进行,在 Approve 的方法流程下,需要 2 个 TX 才能完成一次代币 Swap,对于资金量小的用户来说,花费的交易费用简直是噩梦般的存在。


而 ERC-2612 引入的 Permit,将授权的过程改为了离线签名,不需要立刻上链,只需要在转移代币的时候一起提供,就像借钱小故事中拿到了杰克马支票的我,只有在取款的时候才需要把支票给银行验证。


大忙人杰克马省下了一通电话,看起来用户也省了一次 TX,在 gas 价格高的时候节省的费用相当可观,似乎是个皆大欢喜的结局。但殊不知,潘多拉的魔盒也在悄悄地打开……



3.火山爆发般的野蛮生长


在 Permit 出现之前,黑客钓鱼币圈用户的手段之一便是诱导用户签署 Approve 交易,这样的交易需要用户花费 gas,容易引起警觉而无法得逞。就算用户一时手快点击了,由于交易上链需要一定时间,回过神来的用户也可以马上提交一笔相同 nonce 的交易来抢救,相对来说黑客得手并不那么轻松。


而 Permit 的出现,对黑客来说无疑是瞌睡遇枕头,相比较于 Approve,Permit 不消耗 gas,只需要签名,用户的警惕性降低。同时由于离线签名的特性,主动权掌握在黑客手上,不仅用户吃不了后悔药,黑客更可以拿着授权选择合适的时机做坏事,将利益最大化。


由此而带来的不良影响,便是我们可以看到的钓鱼受害者数量以及被盗金额激增。据 @ScamSniffer 的统计数据:

2023 年钓鱼受害者损失金额为 2.95 亿美元。


在 2024 的上半年,这一金额就已经超过 3.14 亿美元之多。


在 2024 的 Q3 尾声,更是来了一票大的:疑似神鱼的钱包地址遭遇 Permit 钓鱼攻击,损失 1.2 万枚 $spWETH,价值 2 个亿人民币。


图:ScamSniffer 2024 上半年钓鱼攻击统计报告


如此景象,相信也出乎当初提案开发者的意料,引入 Permit 的初衷是减少用户的 gas 花费,提高用户体验和效率,本以为是双刃剑有得便有失,没想到却是一把大菜刀,单边锋利无比,直接给用户资产安全的护盾上砍开了一个大口子。


类似 Permit 这种签名授权的方法还有不少,比如 Uniswap 之后推出的 Permit2,让所有 ERC-20 的代币都可以支持离线签名。作为 No.1 的 DEX,UniSwap 此举也加重了用户对于离线签名的依赖,增加了被钓鱼的风险。


4.如何防范?


那么,作为普通用户,面对这把高悬在我们头顶的达摩克里斯之……大菜刀,又有哪些可以避免损失防范措施呢?


1、提升意识


冷静对待空投诱惑



避免盲签


假如不幸进入了钓鱼网站,尚不知情的你在钱包弹出交易窗口时,应当仔细查看交易内容,当出现如 Permit、Permit2、Approve、IncreaseAllowance 等字眼时,意味着这笔交易是要拿走 token 授权,你就要警惕了,因为正常的空投流程并不需要这么做。Keystone 在硬件端也实现了对交易的解析与展示,用户可以借助交易解析避免盲签,避免一时冲动造成的严重后果。


图:Keystone 硬件钱包与 Rabby Wallet 解析并显示 Permit2 签名交易


2、善用工具


ScamSniffer


作为普通用户,想精准识别钓鱼网址有很高难度,难免会有漏网之鱼存在。借助 ScamSniffer 的浏览器插件,在进入疑似钓鱼的网址前,会收到插件的提醒,用户收到提醒后可以及时停止交互。


Revoke


Revoke.cash 可以展示用户钱包里的代币授权记录,对于其中可疑的、无限金额的授权我们建议撤销。养成定期清理授权的习惯,尽量少做超出需要数量的授权。


3、资产隔离与多签


常言道不要把鸡蛋都放在一个篮子里,这句话对于币圈资产也适用。比如我们可以把大额的资产存放在冷钱包如 Keystone 中,日常交互都是用小额的热钱包进行,即使不小心中招,资产也不会被一锅端。


如果对于安全性有更高的要求,可以使用多签来进一步提高安全性。加入了多签的资产,只有在钱包同意数达到阈值时,才能对资产进行操作转移。未达到阈值的单一钱包被盗,黑客也无法掌握资产。


5.结语


我们无法否认 Permit 带来的价值,但近来越来越多的被盗事件也表明,它带来的危害似乎更大。正如曾经的 ethsign 方法,由于可读性差且危害巨大,也备受当时的黑客青睐。而如今它已经被绝大多数的钱包软件屏蔽弃用,它实现的功能也被一些更安全的方法所替代。


把目光放在 Permit 身上,是否也同样走到了 ethsign 曾经面临的十字路口?改良升级还是弃用,需要 ETH 的开发者们花一些时间去思考和讨论。

相关阅读
上一篇: 伯恩斯坦分析师对话 Michael Saylor:为什么我们会选择“梭哈”比特币?
下一篇: 亲兵与诸侯:Puffer UniFi (Based Rollup) 与主流 Rollup
TAG:  
《从解药到毒药:Permit 为何变成风险之源?》文档下载: PDF DOC TXT