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

作者:@korpi87

编译:Kxp,BlockBeats

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

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

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

850万枚LDO将于明日解锁,占流通供应量的0.97%:8月25日消息,Token Unlocks数据显示,明日Lido Finance的治理代币LDO将迎来最后一次解锁,此次将解锁850万枚LDO,占流通供应量的0.97%,价值约1360万美元。

至此,除了一小部分LDO将在2024年4月之前归属于早期投资者,几乎所有LDO代币(10亿枚)均已解锁。

DeFiLlama数据显示,目前Lido TVL超过139亿美元,在DeFi协议中位居第一;此外,Lido以其stETH代币占据了流动性质押领域近75%的市场份额。[2023/8/25 10:02:15]

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

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

Circle推出救灾基金Circle Disaster Relief Fund并提供价值50万美元USDC:9月30日消息,美元Stablecoin USDC发行方Circle在社交媒体宣布,作为Circle Impact的一部分,该公司在Converge22大会上正式推出救灾基金Circle Disaster Relief Fund并提供价值50万美元USDC,旨在日益严重的自然灾害中提供社区级援助,Circle还将与Endaoment合作邀请Web3社区捐赠并参与赠款分配选择过程。[2022/9/30 6:04:14]

转账(transfer)

代转(transferFrom)

区块链MESCBN平台#dltledgers以1亿美元估值完成850万美元融资,Centrum Capital等参投:9月21日消息,总部位于新加坡的区块链跨企业供应链网络(MESCBN)平台#dltledgers宣布以1亿美元估值完成850万美元B轮融资,Centrum Capital和Tata Group等参投。

据悉,#dltledgers的MESCBN区块链平台可以简化供应商和分销商的业务流程,节省供应链中多方交易的时间、精力和成本,并将供应链市场带入Web3世界,其客户包括亿滋食品、塔塔汽车、澳新银行、资生堂、OCP、非洲贸易发展银行等。(PR News Wire)[2022/9/22 7:12:14]

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

全球新冠肺炎确诊病例超过150万例:全球新冠肺炎确诊病例超过150万例,死亡87766例。(荷兰BNO新闻网)[2020/4/9]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

区块律动BlockBeats

媒体专栏

阅读更多

金色早8点

Bress

链捕手

财经法学

PANews

成都链安

Odaily星球日报

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

区块博客

[0:0ms0-6:924ms