闪电贷+提案攻击-Beanstalk Farms攻击原理及资金流向分析

  • 时间:
  • 浏览:52
  • 来源:区块链技术网

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

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

一、技术分析

攻击者地址:0x1c5dcdd006ea78a7e4783f9e6021c32935a10fb4

攻击合约地址:0x728ad672409da288ca5b9aa85d1a55b803ba97d7

被攻击合约地址:0xC1E088fC1323b20BCBee9bd1B9fC9546db5624C5

关键攻击交易:0xcd314668aaa9bbfebaf1a0bd2b6553d01dd58899c508d4729fa7311dc5d33ad7

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

攻击过程分析如下:

  1. 代币兑换。

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

交易:0xfdd9acbc3fae083d572a2b178c8ca74a63915841a8af572a10d0055dbe91d219

  1. 代币授权。

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

交易:0xf1d80ba0ca6db75bedd175fd3c0bc0622faf00fdd12a0dc13dca3bc36db3669b

  1. 代币存储。

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

交易:0xf5a698984485d01e09744e8d7b8ca15cd29aa430a0137349c8c9e19e60c0bb9d

4 创建InitBip18提案合约。

交易:0xd09b72275962b03dd96205f8077fdc08bec87c0ebd07e431aadc760f31f34b01

InitBip18提案合约地址:0x259a2795624b8a17bc7eb312a94504ad0f615d1e

5 发起提案交易。

(1) 交易:0x68cdec0ac76454c3b0f7af0b8a3895db00adf6daaf3b50a99716858c4fa54c6f

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

(2) 交易:0x9575e478d7c542558ecca52b27072fa1f1ec70679106bdbd62f3bb4d6c87a80d

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

  1. 转账。

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

交易:0x3cb358d40647e178ee5be25c2e16726b90ff2c17d34b64e013d8cf1c2c358967

  1. 创建提案合约0xe5ec。

交易:0x677660ce489935b94bf5ac32c494669a71ee76913ffabe623e82a7de8226b460

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

  1. 发起攻击。

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

  1. 混币。

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

  1. 总结。

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

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

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

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

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

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

交易:0x1fb73ec5ed8c25b9ca7c9c3c465ab4bbca8554927094f939d96600271475e101

二、资金流向分析

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

  1. 在攻击过程中,250000USDC转入至了乌克兰加密货币捐赠地址
  2. 攻击完成后,获利的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/

猜你喜欢

国外区块链安全公司产品服务调研

Chainalysis产品ChainalysisBusinessDataChainAnalysisBusinessData为加密货币业务提供了一个额外的客户智能层,帮助他们更好

2022-07-30

智能合约安全审计入门篇 —— delegatecall (1)

By:小白@慢雾安全团队背景概述上篇文章中我们学习了合约中数据的存储方式以及如何读取合约中的各种数据。这次我们将带大家了解delegatecall函数。前置知识首先,我们先来了

2022-07-30

智能合约安全审计入门篇 —— delegatecall (2)

By:小白@慢雾安全团队背景概述上篇文章中我们了解了什么是delegatecall函数以及一个基础的漏洞,这篇文章的目的是加深一下大家对delegatecall的印象并带大家一

2022-07-30

智能合约安全审计入门篇 —— 随机数

By:小白@慢雾安全团队背景概述在上次的文章中我们了解了delegatecall函数的特点以及其正确的使用方式。本期我们将带大家了解智能合约中一个经常被用到的东西——随机数。前

2022-07-30

智能合约安全测试指南

由于智能合约的漏洞,在去中心化应用的世界中,利用和攻击一直都很普遍,可以从各种来源看到,例如:https://rekt.news/https://defiyield.app/r

2022-07-30