事件背景
BOG是一款具有革命性的代币,每次为各种用例执行时都会运行代码,包括币安智能链上的实时和历史预言。Bogged代币($BOG)和其相关合约是Bogged生态系统的关键组成部分。通过使用$BOG代币可以解锁Bogged生态系统的所有组件。零时科技区块链安全情报平台监控到消息,北京时间2021年5月22日,BoggedFinance官方推文称遭到闪电贷攻击,导致BOG价格暴跌,并已启动止损功能,零时科技安全团队及时对该安全事件进行复盘分析。
事件分析
攻击信息
通过初步追踪分析,分析出攻击信息如下:
攻击者钱包地址:
https://bscscan.com/address/0x4622A1f3d05DcF5A0589c458136C231009B6A207
攻击者合约地址:
https://bscscan.com/address/0xe576790f35a8cc854d45b9079259fe84f5294e07
攻击者第一笔交易:
https://bscscan.com/tx/0xa9860033322aefa39538db51a1ed47cfae7e4b161254d53dbf735f1f16502710
BoggedFinance合约地址:
https://bscscan.com/address/0xd7b729ef857aa773f47d37088a1181bb3fbf0099#code
攻击过程
以下将分步解析攻击者的交易,方便读者更清晰的了解攻击过程。
上图为攻击者合约最早的交易截图,从图中标注的第一笔交易开始,之后的32笔交易内容均相同,故这里将第一笔交易详细分析,通过初步分析第一笔交易主要有三块交易内容,分别为添加流动性,循环转账,移除流动性,下面逐一截图分析:
添加流动性
上图中交易的步骤1和步骤2实现的功能相同,此步骤共九个,步骤1中实现的操作是:攻击者通过PancakeSwap将1371枚BNB兑换为46862枚BOG,又将1652枚BNB兑换为46862枚BOG,随后将1818枚BNB和46862枚BOG添加流动性,获得6081枚LP代币,最后将LP代币添加进Bogged池子。
这里需要注意的是,添加流动性的步骤中,存在多笔BNB兑换为BOG的操作,但部分兑换的BOG并未使用。
循环转账
上图是第一笔交易的中间部分,可以看出攻击者合约地址(0xe576…)通过Bogged合约进行自我转账,该笔交易中共进行自我转账400次。(这里也是本次攻击成功的原因,Bogged合约允许自己给自己转账)
移除流动性
上图中交易的步骤1和步骤2中实现的操作是:攻击者通过PancakeSwap归还LP代币,PancakeSwap返还攻击者添加流动性时的BNB和BOG。图中交易的步骤3和步骤4是攻击者将BOG兑换为BNB,也就是添加流动性中没有用到的 BNB兑换为BOG 重新兑换回来,注意这里并没有将之前的多笔BNB兑换BOG的操作都转回来,只是将一部分BOG兑换为BNB(还有大量的BOG未兑换)。通过资金的获取动向,可以更清楚的了解整体的代币转移,如下图:
上图信息中,攻击者通过闪电贷借得90000枚BNB,之后通过一系列操作后得到90103枚BNB(也就是第一笔交易中的操作),随后归还了90072枚BNB,最终将剩余的31枚BNB转入攻击者钱包地址。这是攻击者32笔交易中的其中一个,其他31笔交易中都通过同样的步骤或多或少得到了一些BNB。此时攻击并未结束,由于攻击者之前并未将每笔交易中的多次BNB兑换BOG转换回来,但攻击者已经归还闪电贷,所以攻击者还有大量的BOG,在攻击者的第33笔交易中,将剩余的所有BOG分批转换为BNB,最终批量兑换为BNB并转至攻击者钱包地址,如下图所示。
最终,攻击者通过Anyswap跨链桥将得到的BNB分批次转换为ETH。
攻击成功的原因通过前面的分析,攻击者除了BOG和BNB的相互兑换和添加流动性外,只进行了自我转账操作,这里直接分析Bogged合约的转账方法_transferFrom,代码如下图:
transferFrom方法中,经过初步条件判断成功后,会给发送者地址sender减去sendAmt数值,给接收者地址recipient加上sendAmt,通过上图可以看出,sendAmt数值由txBurn方法得到,我们跟进_txBurn方法,如下图:
txBurn方法中,burnRate=50,_distributeRatio=5,可以得到该方法会取转账数量的5%为toBurn变量值,之后将该变量值分为80%交易费和20%进行销毁,也就是说攻击者可以操纵交易费,通过大量转账并导致代币供应膨胀。最终获取大量BOG。目前,Bogged官方已对本次攻击涉及的代币合约迁移到新合约,并表示资金安全。
总结
通过此次攻击事件来看,攻击者通过多次闪电贷,并通过代码中转账出现的逻辑缺陷,最终获得了大量BOG,目中类似的闪电贷攻击事件居多,为何还会频频发生,对于DeFi项目而言,合约代码的安全,代币价格的相对稳定,旧版本的及时更新都是保证项目安全极其重要的部分,任何细节的马虎都可能导致项目及用户资金受到损失。对于此类闪电贷攻击事件,零时科技安全团队给出以下建议:
安全建议
对于合约代码安全,可找多家安全审计公司进行审计。
对LP价格及获取奖励的铸币代码块,应根据业务逻辑进行严格审核演算,避免出现参数可控制导致大量铸币问题。
对转账地址应进行严格判断,避免转账地址异常导致参数可控。
使用可信的并且安全可靠的预言机,如Chainlink去中心化预言机,Alpha homera采用的。
对敏感性较强的代码,要做到及时更新完善。