大白话讲解Web3签名钓鱼底层逻辑《授权钓鱼、Permit与Permit2的区别》

Web3的一颗菠菜热度: 14672

授权钓鱼是黑客利用签名功能偷取用户资产的手段,常见的方式有Permit和Permit2签名钓鱼。用户应提高安全意识,分离大额资金和链上钱包,并学会识别签名格式以防范钓鱼。Permit2是Uniswap推出的功能,易被钓鱼网站利用。

摘要由 Mars AI 生成
本摘要由 Mars AI 模型生成,其生成内容的准确性、完整性还处于迭代更新阶段。

原文作者:Web3的一颗菠菜

原文来源:菠菜菠菜谈Web3

明明只是签了个名,我的钱怎么没了呢??“签名钓鱼”目前正成为了Web3的黑客们最喜欢的钓鱼方式,最近看余弦大佬和各大钱包和安全公司都在不断宣传科普钓鱼签名的知识,但是每天还是有好多人被钓鱼。

菠菜认为其中一个原因就是大部分人对钱包交互的底层逻辑并不了解,并且对于不懂技术的人来说学习门槛过高,所以菠菜决定出一个图解版科普签名钓鱼的底层逻辑,并且尝试用最大白话的形式让不懂技术的人也能看明白。

首先我们要知道我们使用钱包一共只有两种操作:“签名”和“交互”。最简单直接的理解就是:签名是发生在区块链之外的(链下),不需要花Gas费的;交互是发生在区块链上面的(链上),是需要花Gas费的。

一般签名的使用场景是为了验证你是你,比如登入钱包,就像你如果要去Uniswap换Token的话,你需要先链接你的钱包,那么这个时候你就需要签一个名告诉网站“我是这个钱包的拥有者”,然后你就可以使用Uniswap了,这个步骤对区块链不会有任何数据或者状态上的变化,所以不需要花钱。

智能合约

而交互的话就是当你要真正在Uniswap上换Token的时候,你需要先花一笔钱告诉Uniswap的智能合约:“我要用100USDT换一个菠菜币,我批准你可以挪动我的100USDT”,这个步骤就叫做授权(approve),然后你还要再花一笔钱告诉Uniswap的智能合约:“我现在要用100USDT换一个菠菜币了,你现在可以进行操作了”,然后你就完成了用100USDT换一个菠菜币的操作。

智能合约

简单理解签名和交互的区别之后,我们就来介绍一下钓鱼的原理,菠菜会列举三个不同的方式:授权钓鱼、Permit签名钓鱼和Permit2签名钓鱼,这三个是非常常见的钓鱼方式。

咱们先讲授权钓鱼,这是以前Web3最经典的钓鱼手法之一,顾名思义就是利用授权(approve)这个机制,之前Uniswap的例子告诉我们,授权就是告诉智能合约“我批准你挪动我多少xxx的Token”,那么黑客就可以做一个假的钓鱼网站,有着精美的前端伪装成一个NFT项目,网站中间是一个漂亮的大按钮“领取你的空投”,实际上你点了之后钱包弹出来的界面实际上是让你授权你的Token给黑客的地址,那么这时候如果你点了确认,那么就恭喜黑客成功完成一个KPI了。

智能合约

但是授权钓鱼有一个问题:因为要花Gas费,现在很多人在涉及到花钱的操作上会有所警惕,在陌生网站点击之后稍微一看就会发现不对劲,还是比较好防范的。

那么接下来就来到了今天的主角:Permit和Permit2签名钓鱼啦,是Web3资产安全领域的重灾区,为什么这么难防呢?因为每次你要使用一个Dapp之前一定要签名登入你的钱包,在许多人脑子里可能已经形成了一种惯性思维:”这个操作是安全的”,再加上不需要花钱和大多数人不知道每个签名背后意味着什么。

我们先来看Permit机制,Permit是针对ERC-20标准下授权的一个扩展功能,像我们平常用的USDT就是ERC-20,简单来说就是你可以签名批准其他人来挪动你的Token,我们知道授权(Approve)是你花钱告诉智能合约:“你可以挪动我xxx数量的Token”,那么Permit就是你在一张“条子”上签了个名给某一个人,这个纸上写着:“我允许某某某可以挪动我xxx数量的Token”,然后这个人拿着这个“条子”给智能合约并花一笔Gas费告诉智能合约:“他允许我挪动他xxx数量的Token”,然后你的钱就可以被其他人挪走了,在这个过程中你只是签了一个名,而背后却意味着你允许其他人去调用授权(Approve)并转走你的Token,黑客可以做一个钓鱼网站,把登入钱包的按钮替换成Permit钓鱼,那么就可以轻轻松松把你的资产钓走啦。

智能合约

那么Permit2又是什么呢?Permit2其实并不是ERC-20的一个功能,而是Uniswap为了方便用户推出的一个功能,之前的例子讲了你要在Uniswap上用USDT换菠菜币你需要先授权(Approve)一次,然后再进行兑换,这需要花两笔Gas费,所以Uniswap就想了个办法:“你一次性把额度全部授权给我好了,每次兑换你签个名我就给你处理了”,这个功能帮助Uniswap用户使用的时候只需要支付一次Gas费即可,并且这个步骤是签名,所以Gas费其实不是你付的,而是Permit2合约代付了,但是会从你最终兑换的Token里扣除掉。

智能合约

但是中Permit2钓鱼的条件是你曾经使用过Uniswap,并且你还授权了无限额度给Permit2智能合约,由于目前Uniswap默认的操作就是无限额度授权,所以其实满足该条件的用户数量还是蛮大的,同样黑客只要骗你把名签了就可以把你的Token转走(仅限给过授权的)。

总结一下,授权钓鱼的本质是你花一笔钱告诉智能合约:“我批准你挪用我的Token给黑客”,签名钓鱼的本质是你签了一张允许别人去挪动你资产的“条子”给到黑客,黑客花钱告诉智能合约:“我要挪用他的Token转给我”。Permit和Permit2是目前钓鱼签名的重灾区,Permit是ERC-20的一个授权扩展功能,Permit2是Uniswap推出的一个新功能。

那么理解了原理,怎么防范呢?

1.首先最最重要的就是培养你的安全意识,每一次钱包的操作都要去检查一下你在做的操作到底是什么?

2.大资金和玩链上的钱包分离,一旦被钓鱼了可以把损失降到最低

3.学会识别Permit和Permit2的签名格式,只要你看到以下签名格式,那你就要警惕起来了:

Interactive:交互网址

Owner:授权方地址

Spender:被授权方地址

Value:授权数量

Nonce:随机数

Deadline:过期时间

智能合约

声明:本文为入驻“MarsBit 专栏”作者作品,不代表MarsBit官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
免责声明:本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况,及遵守所在国家和地区的相关法律法规。