花店网站建设构思,网站快备案,wordpress换icon,移动端网站建设的软件有哪些智能合约漏洞#xff0c;BEVO 代币损失 4.5 万美元攻击事件分析
一、事件背景
北京时间 2023 年 1 月 31 日#xff0c;在 twitter 上看到这样一条消息#xff1a; BEVO 代币被攻击#xff0c;总共损失 45000 美元#xff0c;导致 BEVO 代币的价格下跌了 99%。 有趣的是…智能合约漏洞BEVO 代币损失 4.5 万美元攻击事件分析
一、事件背景
北京时间 2023 年 1 月 31 日在 twitter 上看到这样一条消息 BEVO 代币被攻击总共损失 45000 美元导致 BEVO 代币的价格下跌了 99%。 有趣的是这个事件中还出现了抢跑。 twitterhttps://twitter.com/peckshield/status/1619996999054667784 成功交易链接https://bscscan.com/tx/0xb97502d3976322714c828a890857e776f25c79f187a32e2d548dda1c315d2a7d 被抢跑交易https://bscscan.com/tx/0x581c7674a6adfaa4351422781f6b674e2b7ac0fab0db9d46bfcb559ddd96cff8 分析工具 https://phalcon.blocksec.com/tx/bsc/0xb97502d3976322714c828a890857e776f25c79f187a32e2d548dda1c315d2a7d https://dashboard.tenderly.co/tx/bsc/0xb97502d3976322714c828a890857e776f25c79f187a32e2d548dda1c315d2a7d
二、事件分析
原因
被攻击的原因在于 deliver 方法当调用该合约的 deliver 方法时会减少代币的总价值导致计算余额出现了误差造成储备量与余额的不平衡攻击者通过 skim 获利。
攻击步骤 攻击者通过闪电贷获得了 192.5 WBNB并通过 Pancake 交换出来 3,028,774,323,006,137,313 BEVO 代币。调用 deliver 方法减少总额_rTotal 数量。
function deliver(uint256 tAmount) public {address sender _msgSender();require(!_isExcluded[sender], Excluded addresses cannot call this function);(uint256 rAmount,,,,,,) _getValues(tAmount);_rOwned[sender] _rOwned[sender].sub(rAmount);_rTotal _rTotal.sub(rAmount);_tFeeTotal _tFeeTotal.add(tAmount);}3.调用 skim 方法在 skim 中要查询池子中 BEVO 的余额过程中会根据_getRate()方法计算 BEVO 的价值比率然后计算出当前余额。 先看_getRate(),计算公式是 rSupply.div(tSupply)
function _getRate() private view returns(uint256) {(uint256 rSupply, uint256 tSupply) _getCurrentSupply();return rSupply.div(tSupply);}而从_getCurrentSupply()方法中得出的 rSupply 就和_rTotal 有关由于 deliver 导致_rTotal 减少所以 rSupply.div(tSupply)的比值 currentRate 也随之减小。 最终的余额是 rAmount.div(currentRate)计算出来的rAmount 在执行过程中没有被改变过所以分子不变分母减小自然导致了余额变大了。 计算出来余额6844218532359160336,储备量2298813336114922094,多出的 4545405196244238242 就被发给了攻击者。 4.攻击者又调用了一次 deliver将_rototal 再减少 4545405196244238242使余额与储备量不一致。然后调用了 swap 方法获利了 337 个 BNB。除去闪电贷 192.5 个 BNB攻击者最终获得 144.5 个 BNB总计 45000 美元。
三、总结
这起事件后风波没有停止后来还出现了其他类似的攻击手法有的攻击者在 bsc 链上批量扫描符合要求的代币并实施攻击。 从这次攻击事件来看金额计算模型设计需要谨慎避免出现参数可控导致的问题这是保证项目安全及其重要的部分。