此次攻击关键在于调用外部合约造成的重入问题与Vault的rebase机制相结合,攻击者可以通过重入来凭空获得巨额收益分配。
原文标题:《闪电贷重入攻击,OUSD损失700万美金技术简析》撰文:慢雾安全团队
据慢雾区情报,2020年11月17日,以太坊DeFi项目OUSD遭受闪电贷攻击。慢雾安全团队于第一时间跟进并进行相关分析。以下是慢雾安全团队针对本次攻击的简要分析。攻击过程详细分析会在稍后发布。如有兴趣可保持持续关注。
背景提要
OriginDollar(OUSD)由OriginProtocol(OUSD)创建,是一种新型的ERC-20稳定币,当它仍然放在钱包里时,会自动从DeFi协议中获得有竞争力的收益。OUSD由USDT、USDC和DAI等其他稳定币的1:1支持。
慢雾:NimbusPlatform遭遇闪电贷攻击,损失278枚BNB:据慢雾安全团队情报,2022 年 12 月 14 日, BSC 链上的NimbusPlatform项目遭到攻击,攻击者获利约278枚BNB。慢雾安全团队以简讯的形式分享如下:
1. 攻击者首先在 8 天前执行了一笔交易(0x7d2d8d),把 20 枚 BNB 换成 NBU_WBNB 再换成 GNIMB 代币,然后把 GNIMB 代币转入 Staking 合约作质押,为攻击作准备;
2. 在 8 天后正式发起攻击交易(0x42f56d3),首先通过闪电贷借出 75477 枚 BNB 并换成 NBU_WBNB,然后再用这些 NBU_WBNB 代币将池子里的绝大部分 NIMB 代币兑换出;
3. 接着调用 Staking 合约的 getReward 函数进行奖励的提取,奖励的计算是和 rate 的值正相关的,而 rate 的值则取决于池子中 NIMB 代币和 GNIMB 代币的价格,由于 NIMB 代币的价格是根据上一步闪电贷中被操控的池子中的代币数量来计算的,导致其由于闪电贷兑换出大量的代币而变高,最后计算的奖励也会更多;
4. 攻击者最后将最后获得的 GNIMB 代币和拥有的 NIMB 代币换成 NBU_WBNB 代币后再换成 BNB,归还闪电贷获利;
此次攻击的主要原因在于计算奖励的时候仅取决于池子中的代币数量导致被闪电贷操控,从而获取比预期更多的奖励。慢雾安全团队建议在进行代币奖计算时应确保价格来源的安全性。[2022/12/14 21:44:29]
攻击流程简析
BSC链上Aperocket.finance遭闪电贷攻击:据 PeckShield派盾预警显示,BSC链上Aperocket.finance 遭到闪电贷攻击,代币 Space 闪跌 75%,请用户注意风控。[2021/7/14 0:50:58]
1.攻击者使用dydx闪电贷借出70000个ETH,随后通过Uniswap将其兑换为USDT和DAI。
2.攻击者调用OUSDVault的mint函数,Vault会先进行一次rebase将之前积累的奖励进行分配,随后将750万USDT从攻击者合约转入OUSDVault中。此时OUSD合约会铸出等量的750万OUSD代币给攻击合约,最后通过allocate来结算当前的收益。
DeFi协议xWin将对受闪电贷攻击影响用户进行1:1 xWIN代币补偿:官方消息,BSC链上DeFi协议xWin公布补偿计划,将根据闪电贷攻击前协议中的质押的数量余额,对质押xWIN代币和参与xWIN挖矿的XWIN-BNB LP代币用户,进行1:1 xWIN代币补偿。但是,xWin表示正在考虑最多一年的锁定期。此外,xWin表示正在探索为xWIN协议提供保险的可能性。xWIN目前还正努力在日本以外的海外交易所上市。最后,xWin团队正在制定xWIN代币销毁计划,目前还没有就金额大小达成决定。
此前消息,BSC链上DeFi协议xWin发布闪电贷攻击总结,共计损失1007枚BNB。[2021/6/27 0:09:54]
3.在攻击者转入750万之前,Vault的价值约为7018138美元。攻击者转入750万USDT后将占Vault总价值的一半以上。
MakerDAO就利用闪电贷操纵治理投票发出警告:金色财经报道,MakerDAO就DeFi协议团队利用闪电贷操纵治理投票发出警告。具体来说,B Protocol的团队希望被列入白名单,以便访问MakerDAO的价格预言。因此,他们提交提案以便于10月23日获得批准。三天后,多项交易被创建并处理。首先是借入ETH,然后将其用作抵押品以借入价值700万美元的MKR。新借来的MKR被用于投票,然后返回其被借出的市场。MakerDAO表示,这一事件为社区提供了一个例子,即闪电贷可能会影响系统治理,并强调需要积极监控MKR市场流动性。[2020/10/29]
4.随后攻击合约利用mintMultiple函数传入DAI合约地址与攻击合约的地址,同样是先进行一次rebase,将之前累计的收益进行分配(包含先前转入的750万USDT部分),再通过transferFrom先将攻击合约的2050万DAI转入Vault中。随后将调用攻击合约的transferFrom函数,攻击者在攻击合约的transferFrom函数中构造再次调用Vault合约mint函数的逻辑来实现重入攻击。
5.在上一步骤中转入2050万DAI后通过攻击合约的transferFrom函数再次调用Vault的mint函数。由于重入时传入2000USDT符合判断是否调用rebase的条件,此时将进行一次rebase,而由于rebase需要Vault中的资产总价值和OUSD的总铸币数有差值才能触发。按照原本的业务场景是进行allocate结算收益后改变Vault中的资产总价值然后通过rebase进行分配。而由于重入原因并没有先通过oUSD.mint进行铸币操作,且攻击者已先将2050万的DAI转入Vault中,所以Vault中的资产总价值仍然增加了,导致合约中的资产总价值大于OUSD的总铸币量。因此Vault会将增加的2050万DAI当成收益部分进行rebase分配。在步骤3中由于攻击者资产已占Vault总价值的一半以上,所以此时攻击者将凭空获得超过价值1025万的收益分配。
6.随后将通过oUSD.mint铸出2000OUSD,并通过allocate结算重入时2000USDT的收益(从上一步骤可以看出攻击合约传入的2000USDT只是为了满足调用rebase的条件,触发收益分配而已)。重入结束后仍将通过oUSD.mint铸出之前转入的2050万DAI等值的OUSD代币。
7.最后Vault的总价值约为3501万美元,但攻击者所拥有的价值超过3825万美元,因此攻击者用大部分的OUSD去Vault进行赎回操作,将Vault基本提空,而其余的OUSD是通过Uniswap和Sushiswap的OUSD-USDT池将OUSD换成USDT来增加收益。
总结
此次攻击关键在于调用外部合约造成的重入问题与Vault的rebase收益分配机制相结合,导致攻击者可以通过重入来凭空获得巨额的收益分配。针对此类情况,慢雾安全团队建议对传入资产进行检查后,对不在白名单内的资产直接进行回滚,并使用防重入锁以避免重入攻击。
相关链接:
参考攻击交易:0xe1c76241dda7c5fcf1988454c621142495640e708e3f8377982f55f8cf2a8401
Uniswap
Uniswap
Uniswap一种简单的无代币交换协议,被称为去中心化的Shapeshift或者Bancor,已经在主网上启动。用Vyper写作,Gas消耗奇低无比。UniswapUniswapUniswapUniswapUniswapUNI查看更多OriginProtocol
链闻消息,12月22日,火币科技控股有限公司发布公告,火币科技间接全资子公司火币信托公司,已获得美国内华达州工商部金融机构部门授予的信托公司牌照.
昨天文章写道比特币日内持续回调,今天大盘还要回落。果然,比特币大盘还是继续的进行回调了。今天笔者看了大盘,感觉比特币还要向十日均线进行测试.
市场风云,变幻莫测,不如定其心,观其势,谋定而后动,取己所需,不贪婪,不好战,收放自如,方能稳操胜券!大家好我是罗浩天! 实时快讯 今日早前消息.
很多对FIL挖矿有过一定了解的都知道有一个Filecoin区块链浏览器,但是这个浏览器能给我们反映哪些东西呢.
这里是IPFS资讯快车,想进filecoin技术交流群的以及与圈内大佬深入沟通,或者了解更多FIL资讯,深入了解FIL的(+V:FIL101).
今天的封面是《盛开的果园和白杨》,文森特·梵高这个位置,雨神提示还不急着出。看得出来,昨天大饼新高后很多人都挺开心的,当然也有不少人在迫切的问我,能不能加满仓位,尽管部分人都已经7-8成仓位了.