智能合约漏洞,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 链上批量扫描符合要求的代币并实施攻击。
从这次攻击事件来看,金额计算模型设计需要谨慎,避免出现参数可控导致的问题,这是保证项目安全及其重要的部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/147843.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023蓝帽杯初赛电子取证部分

取证案情介绍: 2021年5月,公安机关侦破了一起投资理财诈骗类案件,受害人陈昊民向公安机关报案称其在微信上认识一名昵称为yang88的网友,在其诱导下通过一款名为维斯塔斯的APP,进行投资理财,被诈骗6万余万元…

CSS 语法

CSS 实例 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素。 每条声明由一个属性和一个值组成。 属性(property)是您希望设置的样式属性(style attribute&#x…

Raspberry Pi 5 新平台 新芯片组

Raspberry Pi 5 的 CPU 和 GPU 性能提高了两到三倍;内存和 I/O 带宽大约是两倍;并且是首款采用英国剑桥内部设计的芯片的 Raspberry Pi 计算机,4GB 型号的售价为 60 美元,8GB 版本的售价为 80 美元 主要特点包括: 2.4…

【C++】可变参数模板使用,在emplace中应用

🌏博客主页: 主页 🔖系列专栏: C ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 文章目录 一、可变参数模板1.参数包的展开方式1.递归方式展开2.逗号表达式展开参数包 二、empl…

【问题证明】矩阵方程化为特征值方程求得的特征值为什么是全部特征值?不会丢解吗?

问题 这个问题困扰了我好久,一直感觉如果有其他的特征值没法证伪,不过一直存在思想的层面,没有实际解决,今天突然想到动笔来解决,遂得解,证明如下。 证明 总结 这个证明看似证明过后很直观,但…

AcWing算法提高课-5.6.1同余方程

宣传一下 算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 题目描述 求关于 x x x 的同余方程 a x ≡ 1 ( m o d b ) ax ≡ 1 \pmod b ax≡1(modb) 的最小正整数解。 输入格式 输入只有一行,包含两个正整数 a , b a,b a,b,用一…

CSS详细基础(五)选择器的优先级

本节介绍选择器优先级,优先级决定了元素最终展示的样式~ 浏览器是通过判断CSS优先级,来决定到底哪些属性值是与元素最为相关的,从而作用到该元素上。CSS选择器的合理组成规则决定了优先级,我们也常常用选择器优先级来合理控制元素…

MySQL优化、锁、总结常见问题

慢 SQL 如何定位呢? 慢 SQL 的监控主要通过两个途径: 慢查询日志:开启 MySQL 的慢查询日志,再通过一些工具比如 mysqldumpslow 去分析对应的慢查询日志,当然现在一般的云厂商都提供了可视化的平台。服务监控&#xf…

以太网的MAC层

以太网的MAC层 一、硬件地址 ​ 局域网中,硬件地址又称物理地址或MAC地址(因为用在MAC帧),它是局域网上每一台计算机中固化在适配器的ROM中的地址。 ​ 关于地址问题,有这样的定义:“名字指出我们所要寻…

阿里云关系型数据库有哪些?RDS云数据库汇总

阿里云RDS关系型数据库大全,关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB,阿里云百科分享阿里云RDS关系型数据库大全: 目录 阿里云RDS关系型数据库大全 …

PDF文件压缩软件 PDF Squeezer mac中文版​软件特点

PDF Squeezer mac是一款macOS平台上的PDF文件压缩软件,可以帮助用户快速地压缩PDF文件,从而减小文件大小,使其更容易共享、存储和传输。PDF Squeezer使用先进的压缩算法,可以在不影响文件质量的情况下减小文件大小。 PDF Squeezer…

【正点原子】无法打开 源 文件 “linux/time_types.h“ (dependency of “linux/ide.h“)

问题描述 在VS code中些驱动代码时显示: 检测到 #include 错误。请更新 includePath。已为此翻译单元(/home/alientek/linux/atk-mp1/Linux_Drivers/2_LED/led.c)禁用波形曲线。C/C(1696) 无法打开 源 文件 "linux/time_types.h" (dependency of "…

大模型RLHF算法更新换代,DeepMind提出自训练离线强化学习框架ReST

文章链接: https://arxiv.org/abs/2308.08998 大模型(LLMs)爆火的背后,离不开多种不同基础算法技术的支撑,例如基础语言架构Transformer、自回归语言建模、提示学习和指示学习等等。这些技术造就了像GPT-3、PaLM等基座…

代谢组学最常用到的数据分析方法(五)

代谢组学是一门对某一生物或细胞所有低分子质量代谢产物&#xff08;以相对分子质量<1000的有机和无机的代谢物为研究核心区&#xff09;进行分析的新兴学科。因此从复杂的代谢组学数据中确定与所研究的现象有关的代谢物&#xff0c;筛选出候选生物标记物成为代谢物组学研究…

集合-Map系列

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客 5.集合-set系列集合-CSDN博客 6.集合-Map系列-CSDN博客 文章目…

极大似然估计概念的理解——统计学习方法

目录 1.最大似然估计的概念的理解1 2.最大似然估计的概念的理解2 3.最大似然估计的概念的理解3 4.例子 1.最大似然估计的概念的理解1 最大似然估计是一种概率论在统计学上的概念&#xff0c;是参数估计的一种方法。给定观测数据来评估模型参数。也就是模型已知&#xff0c;参…

腾讯云南京服务器性能如何?南京服务器测速IP地址

腾讯云服务器南京地域怎么样&#xff1f;南京地域很不错&#xff0c;正好处于中间的位置&#xff0c;南方北方用户均可以选择&#xff0c;网络延迟更低速度更快&#xff0c;并且目前南京地域有活动&#xff0c;南京地域可用区可选南京一区、南京二区和南京三区&#xff0c;腾讯…

word已排序好的参考文献,插入新的参考文献,序号更新

原排序好的文献序号。 现在在3号后面插入一个新文献。4&#xff0c;5号应该成为5&#xff0c;6 这时在3号后面&#xff0c;回车&#xff0c;就会自动的增长。如下图&#xff1a; 但是如果手滑&#xff0c;把[4]删除了如何排序&#xff1f;&#xff1f; 如下图&#xff1a; …

机器学习笔记 - 深入研究spaCy库及其使用技巧

一、简述 spaCy 是一个用于 Python 中高级自然语言处理的开源库。它专为生产用途而设计,这意味着它不仅功能强大,而且快速高效。spaCy 在学术界和工业界广泛用于各种 NLP 任务,例如标记化、词性标注、命名实体识别等。 安装,这里使用阿里的源。 pip install spacy…

spring的面向切面编程

如果您觉得本博客的内容对您有所帮助或启发&#xff0c;请关注我的博客&#xff0c;以便第一时间获取最新技术文章和教程。同时&#xff0c;也欢迎您在评论区留言&#xff0c;分享想法和建议。谢谢支持&#xff01; 一、介绍什么是面向切面编程&#xff08;AOP&#xff09; 1.…