智能合约漏洞,BEVO 代币损失 4.5 万美元攻击事件分析

智能合约漏洞,BEVO 代币损失 4.5 万美元攻击事件分析

一、事件背景

北京时间 2023 年 1 月 31 日,在 twitter 上看到这样一条消息:

BEVO 代币被攻击,总共损失 45000 美元,导致 BEVO 代币的价格下跌了 99%。

有趣的是,这个事件中还出现了抢跑。

twitter:https://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 获利。

攻击步骤

  1. 攻击者通过闪电贷获得了 192.5 WBNB,并通过 Pancake 交换出来 3,028,774,323,006,137,313 BEVO 代币。

  2. 调用 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 链上批量扫描符合要求的代币并实施攻击。

从这次攻击事件来看,金额计算模型设计需要谨慎,避免出现参数可控导致的问题,这是保证项目安全及其重要的部分。

相关推荐
数据与人工智能律师6 分钟前
解码Web3:DeFi、GameFi、SocialFi的法律风险警示与合规路径
大数据·网络·人工智能·云计算·区块链
CryptoRzz13 分钟前
欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
java·服务器·开发语言·数据库·区块链
wanhengidc25 分钟前
云手机的真实体验感怎么样
运维·服务器·安全·游戏·智能手机
wanhengidc1 小时前
云手机 流畅运行
运维·服务器·安全·游戏·智能手机
my91115263 小时前
总结:端云结合开发方法优势 —— 重构功能安全开发的技术范式
安全·重构
Guheyunyi3 小时前
用气安全与能效优化平台
运维·网络·人工智能·安全·音视频
落一落,掉一掉4 小时前
第十周作业
安全
lifejump4 小时前
文章管理系统CMS的XSS注入渗透测试(白盒)
前端·web安全·xss·安全性测试
羑悻的小杀马特4 小时前
从监听风险到绝对隐私:Zoom偷听门后,Briefing+CPolar重新定义远程会议安全标准
网络·安全·briefing
乐迪信息4 小时前
乐迪信息:煤矿堆煤隐患难排查?AI摄像机实时监控与预警
大数据·人工智能·算法·安全·视觉检测