DeFi项目Yearn Finance被盗超1000万美元,攻击过程梳理

23-04-14 11:45
阅读本文需 11 分钟
总结 AI 总结
看总结 收起
原文标题:《  被盗超 1000 万美元,Yearn Finance 如何被黑客「盯上」? 》

原文来源: Beosin

2023 年 4 月 13 日,据 Beosin-Eagle Eye 态势感知平台消息,Yearn Finance 的 yusdt 合约遭受黑客闪电贷攻击,黑客获利超 1000 万美元。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程https://eagleeye.beosin.com/RiskTrxDetail/0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d

关于本次事件,Beosin 安全团队在白天已将简析以快讯的形式分享给大家,现在我们再将长文分享如下:


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


事件相关信息


攻击交易


0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d


0x8db0ef33024c47200d47d8e97b0fcfc4b51de1820dfb4e911f0e3fb0a4053138


0xee6ac7e16ec8cb0a70e6bae058597b11ec2c764601b4cb024dec28d766fe88b2


攻击者地址


0x5bac20beef31d0eccb369a33514831ed8e9cdfe0


0x16Af29b7eFbf019ef30aae9023A5140c012374A5


攻击合约


0x8102ae88c617deb2a5471cac90418da4ccd0579e


攻击流程


下面以


0xd55e43c1602b28d4fd4667ee445d570c8f298f5401cf04e62ec329759ecda95d 为例进行分析。


1. 攻击者首先通过闪电贷借出了 500 万 Maker: Dai Stablecoin、500 万 USD 以及 200 万 Tether: USDT Stablecoin 作为攻击本金。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


2. 攻击者调用 aave 池子合约的 repay 函数偿还其他人的欠款,这一步是为了将 aave 池子抵押收益降低,从而降低 yearn:yUSDT Token 合约中 aave 池子的优先级(yearn: yUSDT Token 合约会根据收益情况判断将资金投入哪个池子)。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


3. 接着攻击者调用 yearn: yUSDT Token 合约的 deposit 函数质押了 90 万 Tether: USDT Stablecoin,该函数会根据质押量为调用者铸相关数量的 yUSDT,计算方式与池子中各种代币余额有关,如下图,此时为攻击者铸了 82 万的 yUSDT。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


4. 此时,合约中有 90 万 Tether: USDT Stablecoin 与 13 万 Aave: aUSDT Token V1


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


5. 接下来攻击者使用 15 万 USD 兑换了 15 万的 bZx USDC iToken,并将其发送给了 yearn: yUSDT Token 合约,此时,合约中有 118 万的资金,攻击者拥有 90/103 的份额,也就是能提取 103 万资金。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


6. 随后,攻击者调用 yearn: yUSDT Token 合约的 withdraw 函数提取质押资金,此时合约中仅有攻击者之前质押的 90 万 Tether: USDT Stablecoin、初始的 13 万 Aave: aUSDT Token V1 以及攻击者转入的 15 万 bZx USDC iToken,而如果一个池子中代币不足的话,会按顺序提取后续池子的代币,此时攻击者将 90 万 Tether: USDT Stablecoin 以及 13 万 Aave: aUSDT Token V1 全部提取出来,经过本次操作,合约中仅有 15 万 bZx USDC iToken。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


7. 随后,攻击者调用 yearn: yUSDT Token 合约的 rebalance 函数,该函数会将当前池子的代币提取出来,并质押到另一个收益更高的池子中,由于第 2 步操作,合约会将 USDT 和 USDC 提取出来,添加到收益更高的池子中,但当前合约仅有 bZx USDC iToken,也只能提取出 USDC,提取出来后将复投到其他 USDT 池子,此时复投将跳过。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


8. 攻击者向池子中转入 1 单位的 Tether: USDT Stablecoin,并再次调用 yearn: yUSDT Token 合约的 deposit 函数质押了 1 万 Tether: USDT Stablecoin,由于第 7 步的操作,合约已经将所有池子中的资金全部取出来了,并且没办法添加到新池子中,导致 pool 这个变量计算出来就是攻击者向其中打入的 1,而作为除数的 pool,将计算出一个巨大的值,向攻击者铸了 1.25*10^15 枚 yUSDT。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


9. 最后,攻击者利用 yUSDT 将其他稳定币全部兑换出来并归还闪电贷。


漏洞分析


本次攻击主要利用了 yUSDT Token 合约配置错误,在进行 rebalance 重新选择池子的时候,仅使用了 USDT(token 为 USDT)作为添加数量,而 USDC 无法添加池子,从而导致了攻击者使用 USDC 将该合约所有 USDT「消耗掉」后,池子余额变为了 0,从而铸了大量的代币。


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


老牌 DeFI 项目被盗超 1000 万美元,简要梳理攻击过程


资金追踪


截止发文时,Beosin KYT 反洗钱分析平台发现被盗资金 1150 万美元部分已经转移到 Tornado cash,其余还存储在攻击者地址。


总结


针对本次事件,Beosin 安全团队建议:初始化配置时进行严格检查。同时项目上线前建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。


原文链接



欢迎加入律动 BlockBeats 官方社群:

Telegram 订阅群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方账号:https://twitter.com/BlockBeatsAsia

举报 纠错/举报
本平台现已全面集成Farcaster协议, 如果您已有Farcaster账户, 可以登录 后发表评论
选择文库
新增文库
取消
完成
新增文库
仅自己可见
公开
保存
纠错/举报
提交