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

中级10/22/2024, 10:39:55 AM
深入了解以太坊上的 Approve 和 Permit 授权机制及其实际差异和影响。本文分析了Permit机制如何在高gas费环境下降低用户成本,讨论其可能带来的安全风险,并提供实用的安全建议。

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""> @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的开发者们花一些时间去思考和讨论。

而在这一切有结论之前,Keystone也希望在硬件钱包端,提升对Permit的风险防范。我们正在发起一个投票,在硬件钱包端增加:

  1. 针对Permit/Permit2方法的强提醒功能
  2. 提供Permit/Permit2的禁用开关

声明:

  1. 本文转载自[KeystoneCN],著作权归属原作者[KeystoneCN],如对转载有异议,请联系Gate Learn团队 ,团队会根据相关流程尽速处理。
  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。
  3. 文章其他语言版本由Gate Learn团队翻译, 在未提及Gate.io)的情况下不得复制、传播或抄袭经翻译文章。

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

中级10/22/2024, 10:39:55 AM
深入了解以太坊上的 Approve 和 Permit 授权机制及其实际差异和影响。本文分析了Permit机制如何在高gas费环境下降低用户成本,讨论其可能带来的安全风险,并提供实用的安全建议。

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""> @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的开发者们花一些时间去思考和讨论。

而在这一切有结论之前,Keystone也希望在硬件钱包端,提升对Permit的风险防范。我们正在发起一个投票,在硬件钱包端增加:

  1. 针对Permit/Permit2方法的强提醒功能
  2. 提供Permit/Permit2的禁用开关

声明:

  1. 本文转载自[KeystoneCN],著作权归属原作者[KeystoneCN],如对转载有异议,请联系Gate Learn团队 ,团队会根据相关流程尽速处理。
  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。
  3. 文章其他语言版本由Gate Learn团队翻译, 在未提及Gate.io)的情况下不得复制、传播或抄袭经翻译文章。
Empieza ahora
¡Registrarse y recibe un bono de
$100
!
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.