USD:50万美元的血泪教训:一个简单的签名如何导致资产被盗?

作者:@korpi87

编译:Kxp,BlockBeats

当“小狐狸”钱包跳出授权钱包时,要先了解清楚这个签名的意义及细节。

你可能很难想象,Metamask中一个简单的签名就能掏空你的钱包。但这样的事却发生在了一名资深用户身上,今天他因一个漏洞损失了近50万USDC。如果不多加小心的话,你可能就是下一个他。所以,今天我想和大家讲讲这件事的来龙去脉,告诉大家以后如何注意此类问题。

那是在一个安静的午后时分,Joe突然发现自己的钱包被转走了46.9万USDC。这次转账并不简单,肯定不是攻击者能做出的行为,因为他们根本不可能得到Joe钱包的权限。那就说明,转走他所有USDC的应该是某个恶意合约。

Protecc Labs完成150万美元种子轮融资:金色财经报道,旨在为NFT构建简化层和生态系统的项目Protecc Labs宣布完成150万美元种子轮融资,Dialectic Group领投,UOB Venture Management、Signum Capital、Interlinked Capital、Side Door Ventures、0xVentures、Kronos Ventures、3.0 Capital、Concave Ventures、Cogitent Ventures参投。[2023/4/15 14:05:15]

在讲述今天的故事之前,我需要先向大家解释一些术语。USDC是以太坊上的一个具有多种功能的合约,规定了我们可以如何使用USDC。

在众多功能当中,我们需要特别关注下面两项功能:

转账

DFG已为Efinity众贷贡献50万DOT:官方消息,波卡生态第5个平行链卡槽拍卖已于2021年12月9日正式开启,DFG再次贡献出其所持有的DOT为旗下波卡生态基金所投资的项目提供支持。此次,DFG作为Efinity的领投机构,为其参与波卡平行链卡槽拍卖众贷活动再次贡献出30万DOT,加上在之前众贷活动中支持Efinity的20万DOT,DFG已总计为Efinity贡献出50万DOT。

据悉,Efinity是构建在波卡上的次世代数字资产区块链,由Enjin团队一手打造,该团队曾在以太坊上创建ERC-1155的NFT标准。Efinity致力于创造一个对NFT开发者和用户都更加友好的全新生态,通过与波卡合作,Efinity将能够提供一个可访问、可扩展的解决方案,使每个人都可以参与新兴的NFT经济。以终端用户为中心,Efinity将为所有人提供一个有趣、简单、可访问的用户体验,成为专门为NFT而设计的下一代区块链。[2021/12/13 7:36:38]

代转

Perpetual Protocol提出新提案请求解锁2050万PERP:近日,去中心化衍生品协议Perpetual Protocol社区已提出了一项新提案,请求社区解锁2050万PERP,这些代币将被用于:1.奖励(1300万PERP):这包括交易挖矿和质押奖励。2.战略合作伙伴(300万PERP):继续引进关键战略合作伙伴,这将有助于协议的增长。3.赏金计划(50万PERP):https://bounties.perp.fi/1的延续,我们可以在其中快速建立PERP生态系统4.DEX流动性(400万PERP):提供更大的AMM流动性,以使PERP代币价格稳定。[2021/1/29 14:19:41]

动态 | 650万枚USDT转入Huobi交易所 价值649.2万美元:北京时间09月12日22:38,650万枚USDT从0x91a3开头地址转入Huobi交易所,按当前价格计算,价值约649.2万美元,交易哈希为:0x3b58d265d884850e0454203e5e4e86d976fc9d5cb86bbed84a850dcdf08cf703。[2019/9/12]

当你需要在钱包之间转移USDC,或其他ERC20s时,就需要用到转账功能。它可以将Token从调用者转移到其他地址。如果有人能以你的名义恶意使用该功能,那么他一定得先掌握了你钱包的全部权限才行。

动态 | 450万枚BNB从Binance交易所转出,价值1亿美元:北京时间07月09日22:31, 450万枚BNB从Binance交易所转入0xf977开头地址,按当前价格计算,价值约1亿美元。[2019/7/10]

当你与合约产生互动时,它们会通过代转功能来转移你的Token,具体金额由你提前预设好的比例决定。因此,如果你允许一项合约转移无限量的USDC,那么理论上它就可以拿走你所有的USDC。

现在让我们回到Joe的故事当中,转走他全部USDC的确实就是transferFrom功能。然而,只有当Joe批准合约使用他的USDC时,transferFrom才能发挥作用。但事实上,Joe坚信自己没有批准任何事项。

可是,DeBank的交易记录清楚地显示,在漏洞发生前10分钟,该恶意合约可以无限使用账户中的USDC。那么问题就在于,如果不是Joe本人的话,究竟是谁给了该合约这一项批准呢?我只能说,Joe确实批准了这一操作,但却是在他不知情的情况下完成的。

Etherscan上的信息显示,Joe本人确实没有调用该功能,真正批准了这一额度的是其他地址,这才让恶意合约得以花光Joe全部的USDC。

我们不禁疑问,别人怎么能代替我给予合约许可呢?

许可功能的引入原本是为了改善以太坊的用户体验,它只需一个签名就可以让用户在不提交交易的情况下修改批准金额。也就是说,只要有了你的签名,任何人都可以调用许可功能,并更新你对合约的批准额度。

当你使用1inchdApp时,你就可以体验到这一功能。如果你想在上面出售USDC,那你并不需要事先批准,只需要签上你的名字就够了。有了这个签名,1inch便获取了你全部USDC的使用权限。虽然1inch不会无缘无故花光你所有的USDC,但这却给了恶意合约机会。

Joe一定是不小心在一个恶意网站上签署了这样的信息。不幸的是,那一次他用的是热钱包,签名只是随手点击一下就完成了。如果他用的是硬件钱包的话,就需要在外部设备上签署信息,那么还会有一个思考的时间。

有了Joe的签名,其他地址便可以提交一个带有许可功能的交易,这样恶意合约就获取了Joe钱包全部USDC的使用权限。然后,只要它调用transferFrom功能,就可以转走全部这些资金了。

所以说,一个看似小小的签名却可以引来巨大的灾难。在某些情况下,Metamask会在你准备签名是对你发出警告,告知你其中的危险性。签署一个信息可能是危险的。但一些技术层面上的批准签名却不会收到预警,但这些一旦滥用往往会造成巨额的损失。

如何避免今后遇到类似的问题?

1.不要在Metamask中签署一切内容;

2.花点时间了解你所签署的内容;

3.对传统的批准事项要格外小心。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

MEXC区块链:谁将控制加密货币?

文章作者:SaffronHuang&JoshStark感谢Connor,Vitalik,Bastian、Danny的有用评论和反馈。假设以太坊成功了,区块链被广泛用于全球商业和协调.

[0:15ms0-1:38ms