闪电贷+提案攻击-Beanstalk Farms攻击原理及资金流向分析
作者: 日期:2022年04月20日 阅:1,997

2022年4月17日,算法稳定币项目Beanstalk Farms遭黑客攻击,损失超过8000万美元,包括 24830 ETH 和 3600 万 BEAN。

SharkTeam第一时间对此事件进行了技术分析和资金流向分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。

一、 技术分析

攻击者地址:0x1c5dcdd006ea78a7e4783f9e6021c32935a10fb4

攻击合约地址:0x728ad672409da288ca5b9aa85d1a55b803ba97d7

被攻击合约地址:0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5

关键攻击交易:0xcd314668aaa9bbfebaf1a0bd2b6553d01dd58899c508d4729fa7311dc5d33ad7

攻击过程包含的交易如下:

攻击过程分析如下:

1. 代币兑换。

攻击者在通过UniswapV2将73 ETH兑换为212k BEAN。

交易:0xfdd9acbc3fae083d572a2b178c8ca74a63915841a8af572a10d0055dbe91d219

2. 代币授权。

攻击者将BEAN授权给Beanstalk Protocol合约。

交易:0xf1d80ba0ca6db75bedd175fd3c0bc0622faf00fdd12a0dc13dca3bc36db3669b

3. 代币存储。

攻击者将兑换得到的BEAN存入Beanstalk Protocol合约,为攻击做准备。

交易:0xf5a698984485d01e09744e8d7b8ca15cd29aa430a0137349c8c9e19e60c0bb9d

4 创建InitBip18提案合约。

交易:0xd09b72275962b03dd96205f8077fdc08bec87c0ebd07e431aadc760f31f34b01

InitBip18提案合约地址:0x259a2795624b8a17bc7eb312a94504ad0f615d1e

5 发起提案交易。

(1) 交易:0x68cdec0ac76454c3b0f7af0b8a3895db00adf6daaf3b50a99716858c4fa54c6f

这里的提案合约地址是0xe5ecf73603d98a0128f05ed30506ac7a663dbb69(简称合约0xe5ec),该地址就是InitBip18提案合约中Proposer Wallet。该合约是在交易0x677660ce489935b94bf5ac32c494669a71ee76913ffabe623e82a7de8226b460中创建的。

 (2) 交易:0x9575e478d7c542558ecca52b27072fa1f1ec70679106bdbd62f3bb4d6c87a80d

这里的提案合约地址就是上一步中的InitBip18提案合约。

6. 转账。

攻击者向合约0xe5ec转入0.25 ETH。

交易:0x3cb358d40647e178ee5be25c2e16726b90ff2c17d34b64e013d8cf1c2c358967

7. 创建提案合约0xe5ec。

交易:0x677660ce489935b94bf5ac32c494669a71ee76913ffabe623e82a7de8226b460

在交易内部,创建了提案合约0xe5ec。

8. 发起攻击。

交易: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提取出来,并转账到攻击者地址,完成攻击。

9. 混币。

攻击者将获得的ETH分批次存入混币平台Tornash.Cash,实施混币。

10. 总结。

我们回顾整个攻击过程,如下:

从时间上看,攻击者在16号做足了准备工作,隔了整1天的时间,在17号发起了攻击。这是因为提案后1天才能开始投票。

另外,从整个攻击过程看,攻击者在发起攻击的详细过程中,分析整个交易发现,投票合约中的票数是由账户中的BEAN3CRV-f代币持有量计算得到的。

攻击者利用了该漏洞,通过闪电贷获得大量代币,将这些代币投入到矿池中,临时获得大量的BEAN3CRV-f代币,从而获得了绝对的票数优势,使得自己的提案可以由自己决定,而不需要其他人的投票。最终盗取了大量的Token。

另外,分析攻击者地址的内部交易,如下:

我们发现,攻击者地址发起攻击的启动资金来自于Synapse Bridge,如下:

交易:0x1fb73ec5ed8c25b9ca7c9c3c465ab4bbca8554927094f939d96600271475e101

二、资金流向分析

通过ChainAegis ( https://www.chainaegis.com  )平台对资金流向进行监控,发现:

  1. 在攻击过程中,250000USDC转入至了乌克兰加密货币捐赠地址
  • 攻击完成后,获利的24830ETH被攻击者通过Tornado.Cash匿名交易协议转移,当前攻击者地址余额仅剩0.08ETH

三、安全建议

本次安全事件的原因在于票数是由账户持有的代币得到的,而账户持有的代币是可以通过闪电贷在一笔交易内获取到的,而且可以获取的很大的数量。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/

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章