Beanstalk Farms攻击原理及资金流向分析
2022年4月17日,算法稳定币项目Beanstalk Farms遭黑客攻击,损失超过8000万美元,包括 24830 ETH 和 3600 万 BEAN。
SharkTeam第一时间对此事件进行了技术分析和资金流向分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
攻击者地址:0x1c5dcdd006ea78a7e4783f9e6021c32935a10fb4
攻击合约地址:0x728ad672409da288ca5b9aa85d1a55b803ba97d7
被攻击合约地址:0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5
关键攻击交易:0xcd314668aaa9bbfebaf1a0bd2b6553d01dd58899c508d4729fa7311dc5d33ad7
攻击过程包含的交易如下:
攻击过程分析如下:
攻击者在通过UniswapV2将73 ETH兑换为212k BEAN。
交易:0xfdd9acbc3fae083d572a2b178c8ca74a63915841a8af572a10d0055dbe91d219
攻击者将BEAN授权给Beanstalk Protocol合约。
交易:0xf1d80ba0ca6db75bedd175fd3c0bc0622faf00fdd12a0dc13dca3bc36db3669b
攻击者将兑换得到的BEAN存入Beanstalk Protocol合约,为攻击做准备。
交易:0xf5a698984485d01e09744e8d7b8ca15cd29aa430a0137349c8c9e19e60c0bb9d
4 创建InitBip18提案合约。
交易:0xd09b72275962b03dd96205f8077fdc08bec87c0ebd07e431aadc760f31f34b01
InitBip18提案合约地址:0x259a2795624b8a17bc7eb312a94504ad0f615d1e
5 发起提案交易。
(1) 交易:0x68cdec0ac76454c3b0f7af0b8a3895db00adf6daaf3b50a99716858c4fa54c6f
这里的提案合约地址是0xe5ecf73603d98a0128f05ed30506ac7a663dbb69(简称合约0xe5ec),该地址就是InitBip18提案合约中Proposer Wallet。该合约是在交易0x677660ce489935b94bf5ac32c494669a71ee76913ffabe623e82a7de8226b460中创建的。
(2) 交易:0x9575e478d7c542558ecca52b27072fa1f1ec70679106bdbd62f3bb4d6c87a80d
这里的提案合约地址就是上一步中的InitBip18提案合约。
攻击者向合约0xe5ec转入0.25 ETH。
交易:0x3cb358d40647e178ee5be25c2e16726b90ff2c17d34b64e013d8cf1c2c358967
交易:0x677660ce489935b94bf5ac32c494669a71ee76913ffabe623e82a7de8226b460
在交易内部,创建了提案合约0xe5ec。
交易:0xcd314668aaa9bbfebaf1a0bd2b6553d01dd58899c508d4729fa7311dc5d33ad7
详细的攻击过程如下:
(1) 通过闪电贷从Aave平台借入350M DAI,500M USDC以及150M USDT,从Uniswap平台借贷32.1M BEAN,从SushiSwap平台借入11.6M LUSD
(2) 将借入的DAI、USDC以及USDT全部投入到Curve DAI/USDC/USDT流动性矿池中,铸造出979,691,328个流动性代币3Crv。
(3) 将15M 3Crv兑换成15,251,318 LUSD,将964,691,328 3Crv添加流动性获得795,425,740 BEAN3CRV-f,将32,100,950 BEAN以及26,894,383 LUSD添加流动性,获取58,924,887 BEAN3CRV-f
(4) 使用上面得到的所有BEAN3CRV-f提案进行投票,使提案通过并执行。
然后获得了36,084,584 BEAN,0.5407 UNI-V2,874,663,982 NEAN3CRV-f以及60,562,844 BEANLUSD-f
(5) 移除流动性获得1,007,734,729 3Crv以及28,149,504 LUSD
(6) 归还SushiSwap闪电贷的11,678,100 LUSD以及32,197,543 BEAN,其中包含了手续费。
(7) 将剩余的16,471,404 LUSD兑换成16,184,690 3Crv。
(8) 移除流动性3Crv,得到522,487,380 USDC,365,758,059 DAI以及156,732,232 USDT。
(9) 向Aave平台分别存入350,315,000 DAI,500,450,000 USDC以及150,135,000 USDT用于偿还闪电贷以及手续费。
(10) 移除0.5407 UNI-V2的流动性,获得10,883 WETH以及32,511,085 BEAN并归还闪电贷的金额以及手续费。
(11) 向Ukraine Crypto Donation捐赠了250k USDC (12) 将剩余的Token兑换成WETH
(13) 将所得的24,830 WETH提取出来,并转账到攻击者地址,完成攻击。
攻击者将获得的ETH分批次存入混币平台Tornash.Cash,实施混币。
我们回顾整个攻击过程,如下:
从时间上看,攻击者在16号做足了准备工作,隔了整1天的时间,在17号发起了攻击。这是因为提案后1天才能开始投票。
另外,从整个攻击过程看,攻击者在发起攻击的详细过程中,分析整个交易发现,投票合约中的票数是由账户中的BEAN3CRV-f代币持有量计算得到的。
攻击者利用了该漏洞,通过闪电贷获得大量代币,将这些代币投入到矿池中,临时获得大量的BEAN3CRV-f代币,从而获得了绝对的票数优势,使得自己的提案可以由自己决定,而不需要其他人的投票。最终盗取了大量的Token。
另外,分析攻击者地址的内部交易,如下:
我们发现,攻击者地址发起攻击的启动资金来自于Synapse Bridge,如下:
交易:0x1fb73ec5ed8c25b9ca7c9c3c465ab4bbca8554927094f939d96600271475e101
二、资金流向分析
通过ChainAegis ( https://www.chainaegis.com )平台对资金流向进行监控,发现:
本次安全事件的原因在于票数是由账户持有的代币得到的,而账户持有的代币是可以通过闪电贷在一笔交易内获取到的,而且可以获取的很大的数量。SharkTeam提醒您:
(1)将投票和执行分离,保证投票和执行不在同一个区块时间,即不能在同一笔交易内同时完成投票和执行,这样也可以避免闪电贷带来的风险。
(2)增加权限,禁止合约投票,只能够通过EOA账户来投票,这样就可以规避闪电贷带来的影响。
(3)项目方以及社区成员应高度关注所有提案,对于有风险的提案, 应及时做出反应以及通知,尽可能的杜绝恶意提案的执行。
(4)在项目上线运行前,可以进行多次全面的合约审计,尽可能的保证合约的安全性。
通付盾链上安全团队(SharkTeam)是领先的区块链安全服务团队,精通区块链和智能合约底层原理,为开发者提供合约审计和应急响应服务,合约审计包含近200项审计内容,覆盖高级语言层、虚拟机层、区块链层和业务逻辑层,全面保障智能合约安全。
Website: https://www.sharkteam.org/
Telegram: https://t.me/sharkteamorg
Twitter:https://twitter.com/sharkteamorg
更多区块链安全咨询与分析,点击下方链接查看
D查查|链上风险核查 https://m.chainaegis.com/
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!