没事瞎研究 推特@wzxznl

一文读懂AAVE—”去中心化银行“
信贷是经济机器的运行中最重要的组成部分之一,贷款人希望钱能生出利息,借款人想购买当前无法负担的某种东西,贷款人以及借款人双方基于信任产生借贷关系。信贷也是传统金融中银行的主要收入来源,人们将手中的资金存入银行来获取利息回报,银行再把人们存进来的钱借给需要资金的借款人,以收取更高的利息从而赚取这两者之间的利息差,大规模的信贷都是由银行这个中心化机构来完成的,但在区块链技术的飞速发展下人类的信贷模式迎来了一场全新的变革。去中心化的”银行“—AAVE诞生了。银行模式最早可以追溯到公元前2000年巴比伦,那时的寺庙就已有经营保管金银、发放贷款、收取利息的活动,在公元前500年的希腊,公元前400年的雅典和公元前200年的罗马帝国,都可以找到原始银行的雏形,人类持续了几千年的传统信贷模式,在去中心化“银行”AAVE诞生后,人类居然可以做到不需要一个中心化的机构也可以实现大规模的信贷并保障借贷双方的资金安全以及供需之间的平衡。 *本文章仅为个人分析,不构成任何投资意见,如出现不正确的内容欢迎各位指出 作者:菠菜菠菜目录一.AAVE—Defi借贷王者(一)什么是AAVE? (二)AAVE如何颠...

DAI的8%超额“无风险利率”怎么来的?
就在今天,MakerDAO正式将旗下借贷协议Spark Protocol的DAI存款利率调整为8%,这可是高于现在美债收益率的稳定币“无风险利率”,不禁让人怀疑这高收益的背后难道是庞氏模型? 菠菜来聊聊这8%的“无风险”收益从何而来?这背后是不是庞氏模型?这个收益是否可持续?MakerDAO为什么要这样做?局限于个人认知,如有错误欢迎指出,不构成任何投资意见。 8%的“无风险”收益从何而来? RWA一直是最近行业热烈讨论的话题,而MakerDAO因为引入大量RWA资产成为了大家非常关注的一个RWA概念项目,关于MakerDAO为什么要引入RWA资产的逻辑可以看这篇文章。 https://mirror.xyz/bocaibocai.eth/i2W73H6Uvk97e-cZzZJMoVXjBRNNgu8QiaCwpW8vKz8 简单来说,MakerDAO引入RWA资产的目的是借助外部信用的能力使其背后支持的资产多元化,并且借助美国国债带来的长期额外收益可以帮助 DAI 稳定自身汇率,增加发行量的弹性,并且在资产负债表中掺入美国国债的成份可以降低 DAI 对 USDC 的依赖程度,减少...

"货币视角下的MakerDAO: 理解RWA美债资产引入的深层含义"
作为 DeFi(去中心化金融)界的领头羊,MakerDAO 一直对美国国债心心念念。自从2020年MakerDAO将RWA(现实世界资产)正式纳入战略发展方向之后,MakerDAO前前后后已经买下近12亿美国国债,为什么去中心化世界的DeFi协议要引入现实世界的资产?这背后有何用意?引入美债后创造DAI(MakerDAO推出的代币)和美联储创造货币性质一样吗? 要回应这些问题,我们需要从货币的本质说起。 本文将会从货币的视角开始,从货币的本质到央行-商业银行的二元结构带入到 MakerDAO 的资产负债表结构中,带大家探讨和理解 MakerDAO 引入美债资产背后的意义。 作者:DrSamo(Twitter: @BirkSamo)、菠菜菠菜!(Twitter: @wzxznl) 来源:歪脖三观目录什么是货币?货币的本质是什么?国家法律支持的一种抽象价值单位 一个社会成员相互交易时跟踪和记录信用或债务余额的记账体系 债权人将特定债券关系转移到第三方的标准化表征(Token)货币是如何被创造的?货币的种类-高能货币和信用货币 中央银行-商业银行的二元结构 货币创造的过程Makerda...

一文读懂AAVE—”去中心化银行“
信贷是经济机器的运行中最重要的组成部分之一,贷款人希望钱能生出利息,借款人想购买当前无法负担的某种东西,贷款人以及借款人双方基于信任产生借贷关系。信贷也是传统金融中银行的主要收入来源,人们将手中的资金存入银行来获取利息回报,银行再把人们存进来的钱借给需要资金的借款人,以收取更高的利息从而赚取这两者之间的利息差,大规模的信贷都是由银行这个中心化机构来完成的,但在区块链技术的飞速发展下人类的信贷模式迎来了一场全新的变革。去中心化的”银行“—AAVE诞生了。银行模式最早可以追溯到公元前2000年巴比伦,那时的寺庙就已有经营保管金银、发放贷款、收取利息的活动,在公元前500年的希腊,公元前400年的雅典和公元前200年的罗马帝国,都可以找到原始银行的雏形,人类持续了几千年的传统信贷模式,在去中心化“银行”AAVE诞生后,人类居然可以做到不需要一个中心化的机构也可以实现大规模的信贷并保障借贷双方的资金安全以及供需之间的平衡。 *本文章仅为个人分析,不构成任何投资意见,如出现不正确的内容欢迎各位指出 作者:菠菜菠菜目录一.AAVE—Defi借贷王者(一)什么是AAVE? (二)AAVE如何颠...

DAI的8%超额“无风险利率”怎么来的?
就在今天,MakerDAO正式将旗下借贷协议Spark Protocol的DAI存款利率调整为8%,这可是高于现在美债收益率的稳定币“无风险利率”,不禁让人怀疑这高收益的背后难道是庞氏模型? 菠菜来聊聊这8%的“无风险”收益从何而来?这背后是不是庞氏模型?这个收益是否可持续?MakerDAO为什么要这样做?局限于个人认知,如有错误欢迎指出,不构成任何投资意见。 8%的“无风险”收益从何而来? RWA一直是最近行业热烈讨论的话题,而MakerDAO因为引入大量RWA资产成为了大家非常关注的一个RWA概念项目,关于MakerDAO为什么要引入RWA资产的逻辑可以看这篇文章。 https://mirror.xyz/bocaibocai.eth/i2W73H6Uvk97e-cZzZJMoVXjBRNNgu8QiaCwpW8vKz8 简单来说,MakerDAO引入RWA资产的目的是借助外部信用的能力使其背后支持的资产多元化,并且借助美国国债带来的长期额外收益可以帮助 DAI 稳定自身汇率,增加发行量的弹性,并且在资产负债表中掺入美国国债的成份可以降低 DAI 对 USDC 的依赖程度,减少...

"货币视角下的MakerDAO: 理解RWA美债资产引入的深层含义"
作为 DeFi(去中心化金融)界的领头羊,MakerDAO 一直对美国国债心心念念。自从2020年MakerDAO将RWA(现实世界资产)正式纳入战略发展方向之后,MakerDAO前前后后已经买下近12亿美国国债,为什么去中心化世界的DeFi协议要引入现实世界的资产?这背后有何用意?引入美债后创造DAI(MakerDAO推出的代币)和美联储创造货币性质一样吗? 要回应这些问题,我们需要从货币的本质说起。 本文将会从货币的视角开始,从货币的本质到央行-商业银行的二元结构带入到 MakerDAO 的资产负债表结构中,带大家探讨和理解 MakerDAO 引入美债资产背后的意义。 作者:DrSamo(Twitter: @BirkSamo)、菠菜菠菜!(Twitter: @wzxznl) 来源:歪脖三观目录什么是货币?货币的本质是什么?国家法律支持的一种抽象价值单位 一个社会成员相互交易时跟踪和记录信用或债务余额的记账体系 债权人将特定债券关系转移到第三方的标准化表征(Token)货币是如何被创造的?货币的种类-高能货币和信用货币 中央银行-商业银行的二元结构 货币创造的过程Makerda...
没事瞎研究 推特@wzxznl

Subscribe to bocaibocai.eth

Subscribe to bocaibocai.eth
Share Dialog
Share Dialog


<100 subscribers
<100 subscribers
黑客,这是一个让Web3生态中每个人都闻风丧胆的存在,对于项目方来说,在全世界黑客都可能盯着你的情况下,代码开源的特性使得项目方开发的时候生怕写错一行代码留下漏洞,一旦出现安全事故后果难以承担。
**对于个人来说,如果你不懂得你正在做的操作意味着什么,那么你进行的每一个链上交互或签名都有可能使你的资产被盗。**因此安全问题一直是加密世界中最头疼的问题之一,并且由于区块链的特性,一旦资产被盗几乎是没有办法可以追回的,所以在加密世界中具备安全知识尤其重要。
就在最近,Beosin的好朋友菠菜发现了一个近两个月开始活跃的新钓鱼手法,只要签名就会被盗,手法极其隐蔽且难以防范,并且用过Uniswap交互的地址都有可能暴露在风险之下,本文Beosin联合独立研究员菠菜对这种签名钓鱼手法进行科普,尽量避免大家更多的资产损失。
本文由Beosin特邀独立研究员菠菜菠菜!(twitter@wzxznl)与Beosin安全研究员Sivan共同创作发布。

以下为菠菜的亲身经历复述:
事件经过
最近,一位朋友(暂称小A)钱包里的资产被盗后找到菠菜,与常见被盗方式不同的是,小A并没有泄漏私钥也没有和钓鱼网站的合约进行交互,于是菠菜开始调查起了这个资产被盗事件。

在区块链浏览器中可以看到小A钱包被盗的这笔USDT是通过Transfer From函数进行转移的,**在这进行科普一下,当我们在以太坊上进行Token转账的时候,其实是调用了该Token智能合约的Transfer函数,这两者的区别简单来说Transfer是资产拥有者本人进行操作把Token转移给其他地址,而Transfer From是第三方将地址内的Token转移给其他地址。**这也就意味着这笔被盗的资产是另外一个地址进行操作把Token转移走的,而非钱包私钥泄漏。

通过查询交易细节,我们可以发现一些关键线索:
尾号fd51的地址将小A的资产转移到了尾号a0c8的地址中
这个操作是与Uniswap的Permit2合约进行交互的
那么疑点来了,尾号fd51的地址是如何拿到这笔资产的权限的?为什么会和Uniswap有关系?

首先我们需要知道,要想成功调用Transfer From这个函数的前提是调用方需要拥有这个Token的额度权限,也就是approve,相信大家有过链上操作的一定熟悉不过了,当我们去使用一些Dapp的时候,一旦涉及到资产的转移就需要我们先进行一个授权(approve)操作,这样Dapp的合约才有权限对我们的资产进行转移。
要解开这个谜题,我们需要继续挖掘,而答案就在尾号fd51的地址的交互记录中,在该地址进行Transfer From转走小A的资产之前,可以看到该地址还进行了一个Permit的操作,并且这两个操作的交互对象都是Uniswap的Permit2合约,那么这个Permit函数和Uniswap Permit2又是什么情况?

Uniswap Permit2合约是Uniswap在2022年年底推出的新的智能合约,根据官方的说法,这是一个代币审批合约,允许代币授权在不同的应用程序中共享和管理,创造一个更统一、更具成本效益、更安全的用户体验。
并且未来随着越来越多的项目与 Permit2 集成,Permit2可以在所有应用程序中实现标准化Token批准。Permit2 将通过降低交易成本来改善用户体验,同时提高智能合约的安全性。

我们先要了解一下为什么Uniswap要推出Permit2,我们来假设一个场景,当我们要在某Dex上进行Swap时,传统的交互方式是我们需要先授权(approve)给这个Dex,然后再进行Swap,这通常需要花费我们两笔Gas费,对于用户来说摩擦成本太大了,相信大家都有过这样的体验。

而Permit2的推出将有可能改变整个Dapp生态的游戏规则,简单来说就是传统的方法是你每跟一个Dapp进行资产转移的交互你都需要进行一次授权,而Permit2可以把这个步骤给省去,这样可以非常有效的降低用户的交互成本,带来更好的用户体验。
解决方案是Permit2作为用户和Dapp之间的中间人,用户只需要把Token的权限授权给Permit2合约,所有集成Permit2合约的Dapp都可以共享这个授权额度,对于用户来说,减少了交互成本和提高了用户体验,对于Dapp来说,用户体验的提升带来更多的用户和资金,这本是一个双赢的局面,但同时这也可以是一个双刃剑,而问题就出在和Permit2交互方式上。
在传统的交互方式中,不管是授权还是进行资金的转移对于操作的用户来说都是链上的交互。而Permit2则将用户的操作变为了链下签名,而所有链上的操作都由中间角色(如Permit2合约和集成了Permit2的项目方等)来完成,这种方案带来的好处是由于链上交互的角色从用户转移为了中间角色,用户即使钱包里没有ETH也可以使用其他Token来支付Gas费或完全由中间角色报销,这取决于中间角色的选择。

虽然Permit2的出现有可能改变未来Dapp的游戏规则,但是可以看出的是这是一把很强的双刃剑,对于用户来说,链下签名是最容易放下防备的环节,比如当我们用钱包登入某些Dapp的时候会需要签名进行连接,而绝大多数人并不会仔细检查签名的内容也并不理解签名的内容,而这就是最可怕的地方。
明白了Permit2合约,回到小A的事件中我们就明白了为什么资产被盗都是与Permit2合约进行交互了,那么就让菠菜来重现这个Permit2签名钓鱼手法,首先一个至关重要的前提条件是被钓鱼的钱包需要有Token授权给Uniswap的Permit2合约,菠菜发现目前只要在与Permit2集成的Dapp或Uniswap上进行Swap的话,都是需要授权给Permit2合约的(下图菠菜使用了安全插件)。

另外一个很可怕的点是,不管你要Swap的金额是多少,Uniswap的Permit2合约都会默认让你授权该Token全部余额的额度,虽然MetaMask会让你自定义输入金额,但我相信大部分人都会直接点击最大或默认值,而Permit2的默认值是无限的额度……

这也就意味着,只要你在2023年之后与Uniswap有过交互并授权额度给Permit2合约,你就会暴露在这个钓鱼骗局的风险之下。
因为重点就在于之前在尾号fd51的地址中与Permit2合约交互的Permit函数上,这个函数简单来说就是利用你的钱包将你授权给Permit2合约的Token额度转移给别的地址,也就是说只要拿到了你的签名,黑客就可以拿到你钱包中Token的权限并把你的资产转移走。
permit函数:

你可以把Permit函数看作是一种在线签署合同的方式。这个函数让你(PermitSingle)可以提前签署一个"合同",允许其他人(spender)在未来的某个时间花费你的一些代币。
同时,你还需要提供一个签名(signature),就像在纸质合同上签名一样,用来证明这个"合同"真的是你签署的。
那么这个函数是怎么工作的呢?
首先,它会检查现在的时间是否超过了你的签名的有效期(sigDeadline)。就像你签署的合同有个有效期一样,如果现在的时间超过了有效期,那么这个"合同"就不能再用了,程序会直接停止。
接着,它会检查你的签名是否真的是你签的。程序会用一个特殊的方法(signature.verify)来检查这个签名,确保这个签名真的是你签的,没有被别人伪造。
最后,如果检查都通过了,那么程序就会更新一下记录,记下你已经允许其他人使用你的一些代币。
重点则主要在于verify函数和_updateApproval函数。
verify函数:

可以看到,verify函数会从签名信息参数中获取出v、r、s三个数据,v、r、s是交易签名的值,它们可以用来恢复交易签名的地址,上图代码中可以看到,合约恢复了交易签名的地址后,与传入的代币拥有者地址进行比较,如果相同,则验证通过,继续_updateApproval函数的调用,如果不同,则回滚交易。
_updateApproval函数:


当通过了签名校验后,会调用_updateApproval函数更新授权值,这也就意味着你的权限发生了转移。此时,被授权方便可以调用transferfrom函数将代币转移到制定地址,如下图代码。


好了,解释完permit函数,我们来看看链上真实交易,我们查看这个交互的细节可以发现:
owner就是小A的钱包地址(尾号308a)
Details中可以看到授权的Token合约地址(USDT)和金额等信息
Spender就是尾号fd51的黑客地址
sigDeadline是签名的有效时间,而signature就是小A的签名信息

而往回翻小A的交互记录我们会发现,小A之前使用Uniswap的时候点击了默认的授权额度,也就是几乎无限的额度。

简单复盘一下就是,小A在之前使用Uniswap的过程中授权给了Uniswap Permit2无限的USDT额度,而小A在进行钱包操作的时候不小心掉入了黑客设计的Permit2签名钓鱼陷阱,黑客拿到了小A的签名后利用小A的签名在Permit2合约中进行了Permit和Transfer From两个操作把小A的资产转移走了,而目前菠菜观察到的是Uniswap的Permit2合约已经沦为了钓鱼天堂,这个Permit2签名钓鱼似乎在两个月前才开始活跃。

并且在交互记录中可以发现几乎大部分都是被标记的钓鱼地址(Fake_Phishing),不断有人上当。

1 理解并识别签名内容:
Permit的签名格式通常包含Owner、Spender、value、nonce和deadline这几个关键格式,如果你想享受Permit2带来的便利和低成本的话一定要学会识别这种签名格式。(下载安全插件是一个很好的选择)

我们向各位读者朋友推荐下面这款Beosin Alert反钓鱼插件,可以识别Web3领域的大部分钓鱼网站,守护大家的钱包和资产安全。

反钓鱼插件下载:
2 放资产的钱包和交互的钱包分离使用:
如果你有大量资产的话,建议资产都放在一个冷钱包中,链上交互的钱包放少量资金,可以大幅减少遇到钓鱼骗局时的损失。
3 不要授权过多额度给Permit2合约或取消授权:
当你在Uniswap上进行Swap的时候,只授权你要交互的金额数量,这样虽然每次交互都需要重新授权会多出一些交互成本,但是可以免于遭受Permit2的签名钓鱼。如果你已经授权了额度,可以找相应的安全插件进行取消授权。
4 识别代币性质,是否支持permit功能:
后续可能越来越多的ERC20代币使用该扩展协议实现permit功能,对于你来说需要关注自己所持有的代币是否支持该功能,如果支持,那么对于该代币的交易或操纵一定要格外小心,对于每条未知签名也要严格检查是否是对permit函数的签名。
5 若被骗后还有代币存在其他平台,需制定完善的拯救计划:
当你发现自己被诈骗,代币被黑客转移出去后,但自己还有代币通过例如质押等方式存在其他平台上,需要提取出来转移到安全地址上,这时需要知道黑客可能时刻监控着你的地址代币余额,因为他拥有你的签名,只要你的被盗地址上出现了代币,那么黑客可以直接转移出去。这时需要制定完善的代币拯救过程,在提取代币和转移代币两个过程需要一起执行,不能让黑客交易插入其中,可以使用MEV转移,这需要一些区块链知识以及代码功底,也可以寻找专业的安全公司比如Beosin团队利用交易抢跑脚本来实现。
案例阅读:加密大V遭遇“清道夫”攻击,Beosin安全团队如何帮其追回资金?
相信在未来基于Permit2的钓鱼可能会越来越多,这种签名钓鱼方式极其隐蔽且难防,并且随着Permit2的应用范围越来越广,暴露在风险下的地址也会越来越多,希望屏幕前的你看到本文后可以传播给更多人,避免更多人被盗。

Beosin作为一家全球领先的区块链安全公司,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控、预警与阻断、虚拟货币被盗资产追回、安全合规KYT/AML等“一站式”区块链安全产品+服务,目前已为全球3000多个区块链企业提供安全技术服务,审计智能合约超过3000份,同时,Beosin也提供上币项目的安全评估以及提供符合各地监管要求的合规评估、VaaS自动化上币审计服务、交易所渗透服务、交易所安全建设咨询服务等安全解决方案
Reference:
黑客,这是一个让Web3生态中每个人都闻风丧胆的存在,对于项目方来说,在全世界黑客都可能盯着你的情况下,代码开源的特性使得项目方开发的时候生怕写错一行代码留下漏洞,一旦出现安全事故后果难以承担。
**对于个人来说,如果你不懂得你正在做的操作意味着什么,那么你进行的每一个链上交互或签名都有可能使你的资产被盗。**因此安全问题一直是加密世界中最头疼的问题之一,并且由于区块链的特性,一旦资产被盗几乎是没有办法可以追回的,所以在加密世界中具备安全知识尤其重要。
就在最近,Beosin的好朋友菠菜发现了一个近两个月开始活跃的新钓鱼手法,只要签名就会被盗,手法极其隐蔽且难以防范,并且用过Uniswap交互的地址都有可能暴露在风险之下,本文Beosin联合独立研究员菠菜对这种签名钓鱼手法进行科普,尽量避免大家更多的资产损失。
本文由Beosin特邀独立研究员菠菜菠菜!(twitter@wzxznl)与Beosin安全研究员Sivan共同创作发布。

以下为菠菜的亲身经历复述:
事件经过
最近,一位朋友(暂称小A)钱包里的资产被盗后找到菠菜,与常见被盗方式不同的是,小A并没有泄漏私钥也没有和钓鱼网站的合约进行交互,于是菠菜开始调查起了这个资产被盗事件。

在区块链浏览器中可以看到小A钱包被盗的这笔USDT是通过Transfer From函数进行转移的,**在这进行科普一下,当我们在以太坊上进行Token转账的时候,其实是调用了该Token智能合约的Transfer函数,这两者的区别简单来说Transfer是资产拥有者本人进行操作把Token转移给其他地址,而Transfer From是第三方将地址内的Token转移给其他地址。**这也就意味着这笔被盗的资产是另外一个地址进行操作把Token转移走的,而非钱包私钥泄漏。

通过查询交易细节,我们可以发现一些关键线索:
尾号fd51的地址将小A的资产转移到了尾号a0c8的地址中
这个操作是与Uniswap的Permit2合约进行交互的
那么疑点来了,尾号fd51的地址是如何拿到这笔资产的权限的?为什么会和Uniswap有关系?

首先我们需要知道,要想成功调用Transfer From这个函数的前提是调用方需要拥有这个Token的额度权限,也就是approve,相信大家有过链上操作的一定熟悉不过了,当我们去使用一些Dapp的时候,一旦涉及到资产的转移就需要我们先进行一个授权(approve)操作,这样Dapp的合约才有权限对我们的资产进行转移。
要解开这个谜题,我们需要继续挖掘,而答案就在尾号fd51的地址的交互记录中,在该地址进行Transfer From转走小A的资产之前,可以看到该地址还进行了一个Permit的操作,并且这两个操作的交互对象都是Uniswap的Permit2合约,那么这个Permit函数和Uniswap Permit2又是什么情况?

Uniswap Permit2合约是Uniswap在2022年年底推出的新的智能合约,根据官方的说法,这是一个代币审批合约,允许代币授权在不同的应用程序中共享和管理,创造一个更统一、更具成本效益、更安全的用户体验。
并且未来随着越来越多的项目与 Permit2 集成,Permit2可以在所有应用程序中实现标准化Token批准。Permit2 将通过降低交易成本来改善用户体验,同时提高智能合约的安全性。

我们先要了解一下为什么Uniswap要推出Permit2,我们来假设一个场景,当我们要在某Dex上进行Swap时,传统的交互方式是我们需要先授权(approve)给这个Dex,然后再进行Swap,这通常需要花费我们两笔Gas费,对于用户来说摩擦成本太大了,相信大家都有过这样的体验。

而Permit2的推出将有可能改变整个Dapp生态的游戏规则,简单来说就是传统的方法是你每跟一个Dapp进行资产转移的交互你都需要进行一次授权,而Permit2可以把这个步骤给省去,这样可以非常有效的降低用户的交互成本,带来更好的用户体验。
解决方案是Permit2作为用户和Dapp之间的中间人,用户只需要把Token的权限授权给Permit2合约,所有集成Permit2合约的Dapp都可以共享这个授权额度,对于用户来说,减少了交互成本和提高了用户体验,对于Dapp来说,用户体验的提升带来更多的用户和资金,这本是一个双赢的局面,但同时这也可以是一个双刃剑,而问题就出在和Permit2交互方式上。
在传统的交互方式中,不管是授权还是进行资金的转移对于操作的用户来说都是链上的交互。而Permit2则将用户的操作变为了链下签名,而所有链上的操作都由中间角色(如Permit2合约和集成了Permit2的项目方等)来完成,这种方案带来的好处是由于链上交互的角色从用户转移为了中间角色,用户即使钱包里没有ETH也可以使用其他Token来支付Gas费或完全由中间角色报销,这取决于中间角色的选择。

虽然Permit2的出现有可能改变未来Dapp的游戏规则,但是可以看出的是这是一把很强的双刃剑,对于用户来说,链下签名是最容易放下防备的环节,比如当我们用钱包登入某些Dapp的时候会需要签名进行连接,而绝大多数人并不会仔细检查签名的内容也并不理解签名的内容,而这就是最可怕的地方。
明白了Permit2合约,回到小A的事件中我们就明白了为什么资产被盗都是与Permit2合约进行交互了,那么就让菠菜来重现这个Permit2签名钓鱼手法,首先一个至关重要的前提条件是被钓鱼的钱包需要有Token授权给Uniswap的Permit2合约,菠菜发现目前只要在与Permit2集成的Dapp或Uniswap上进行Swap的话,都是需要授权给Permit2合约的(下图菠菜使用了安全插件)。

另外一个很可怕的点是,不管你要Swap的金额是多少,Uniswap的Permit2合约都会默认让你授权该Token全部余额的额度,虽然MetaMask会让你自定义输入金额,但我相信大部分人都会直接点击最大或默认值,而Permit2的默认值是无限的额度……

这也就意味着,只要你在2023年之后与Uniswap有过交互并授权额度给Permit2合约,你就会暴露在这个钓鱼骗局的风险之下。
因为重点就在于之前在尾号fd51的地址中与Permit2合约交互的Permit函数上,这个函数简单来说就是利用你的钱包将你授权给Permit2合约的Token额度转移给别的地址,也就是说只要拿到了你的签名,黑客就可以拿到你钱包中Token的权限并把你的资产转移走。
permit函数:

你可以把Permit函数看作是一种在线签署合同的方式。这个函数让你(PermitSingle)可以提前签署一个"合同",允许其他人(spender)在未来的某个时间花费你的一些代币。
同时,你还需要提供一个签名(signature),就像在纸质合同上签名一样,用来证明这个"合同"真的是你签署的。
那么这个函数是怎么工作的呢?
首先,它会检查现在的时间是否超过了你的签名的有效期(sigDeadline)。就像你签署的合同有个有效期一样,如果现在的时间超过了有效期,那么这个"合同"就不能再用了,程序会直接停止。
接着,它会检查你的签名是否真的是你签的。程序会用一个特殊的方法(signature.verify)来检查这个签名,确保这个签名真的是你签的,没有被别人伪造。
最后,如果检查都通过了,那么程序就会更新一下记录,记下你已经允许其他人使用你的一些代币。
重点则主要在于verify函数和_updateApproval函数。
verify函数:

可以看到,verify函数会从签名信息参数中获取出v、r、s三个数据,v、r、s是交易签名的值,它们可以用来恢复交易签名的地址,上图代码中可以看到,合约恢复了交易签名的地址后,与传入的代币拥有者地址进行比较,如果相同,则验证通过,继续_updateApproval函数的调用,如果不同,则回滚交易。
_updateApproval函数:


当通过了签名校验后,会调用_updateApproval函数更新授权值,这也就意味着你的权限发生了转移。此时,被授权方便可以调用transferfrom函数将代币转移到制定地址,如下图代码。


好了,解释完permit函数,我们来看看链上真实交易,我们查看这个交互的细节可以发现:
owner就是小A的钱包地址(尾号308a)
Details中可以看到授权的Token合约地址(USDT)和金额等信息
Spender就是尾号fd51的黑客地址
sigDeadline是签名的有效时间,而signature就是小A的签名信息

而往回翻小A的交互记录我们会发现,小A之前使用Uniswap的时候点击了默认的授权额度,也就是几乎无限的额度。

简单复盘一下就是,小A在之前使用Uniswap的过程中授权给了Uniswap Permit2无限的USDT额度,而小A在进行钱包操作的时候不小心掉入了黑客设计的Permit2签名钓鱼陷阱,黑客拿到了小A的签名后利用小A的签名在Permit2合约中进行了Permit和Transfer From两个操作把小A的资产转移走了,而目前菠菜观察到的是Uniswap的Permit2合约已经沦为了钓鱼天堂,这个Permit2签名钓鱼似乎在两个月前才开始活跃。

并且在交互记录中可以发现几乎大部分都是被标记的钓鱼地址(Fake_Phishing),不断有人上当。

1 理解并识别签名内容:
Permit的签名格式通常包含Owner、Spender、value、nonce和deadline这几个关键格式,如果你想享受Permit2带来的便利和低成本的话一定要学会识别这种签名格式。(下载安全插件是一个很好的选择)

我们向各位读者朋友推荐下面这款Beosin Alert反钓鱼插件,可以识别Web3领域的大部分钓鱼网站,守护大家的钱包和资产安全。

反钓鱼插件下载:
2 放资产的钱包和交互的钱包分离使用:
如果你有大量资产的话,建议资产都放在一个冷钱包中,链上交互的钱包放少量资金,可以大幅减少遇到钓鱼骗局时的损失。
3 不要授权过多额度给Permit2合约或取消授权:
当你在Uniswap上进行Swap的时候,只授权你要交互的金额数量,这样虽然每次交互都需要重新授权会多出一些交互成本,但是可以免于遭受Permit2的签名钓鱼。如果你已经授权了额度,可以找相应的安全插件进行取消授权。
4 识别代币性质,是否支持permit功能:
后续可能越来越多的ERC20代币使用该扩展协议实现permit功能,对于你来说需要关注自己所持有的代币是否支持该功能,如果支持,那么对于该代币的交易或操纵一定要格外小心,对于每条未知签名也要严格检查是否是对permit函数的签名。
5 若被骗后还有代币存在其他平台,需制定完善的拯救计划:
当你发现自己被诈骗,代币被黑客转移出去后,但自己还有代币通过例如质押等方式存在其他平台上,需要提取出来转移到安全地址上,这时需要知道黑客可能时刻监控着你的地址代币余额,因为他拥有你的签名,只要你的被盗地址上出现了代币,那么黑客可以直接转移出去。这时需要制定完善的代币拯救过程,在提取代币和转移代币两个过程需要一起执行,不能让黑客交易插入其中,可以使用MEV转移,这需要一些区块链知识以及代码功底,也可以寻找专业的安全公司比如Beosin团队利用交易抢跑脚本来实现。
案例阅读:加密大V遭遇“清道夫”攻击,Beosin安全团队如何帮其追回资金?
相信在未来基于Permit2的钓鱼可能会越来越多,这种签名钓鱼方式极其隐蔽且难防,并且随着Permit2的应用范围越来越广,暴露在风险下的地址也会越来越多,希望屏幕前的你看到本文后可以传播给更多人,避免更多人被盗。

Beosin作为一家全球领先的区块链安全公司,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控、预警与阻断、虚拟货币被盗资产追回、安全合规KYT/AML等“一站式”区块链安全产品+服务,目前已为全球3000多个区块链企业提供安全技术服务,审计智能合约超过3000份,同时,Beosin也提供上币项目的安全评估以及提供符合各地监管要求的合规评估、VaaS自动化上币审计服务、交易所渗透服务、交易所安全建设咨询服务等安全解决方案
Reference:
No activity yet