这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈。这篇文章就来分析下BEC智能合约的漏洞

<!-- more -->

漏洞攻击交易

我们先来还原下攻击交易,这个交易可以在这个链接查询到。
我截图给大家看一下:

攻击者向两个账号转移57896044618...000.792003956564819968个BEC,相当于BEC凭空进行了一个巨大的增发,几乎导致BEC价格瞬间归零。
下面我们来分析下这个攻击过程。

合约漏洞分析

我们先来看看BEC智能合约的代码,
BEC在合约中加入一个批量转账的函数,它的实现如下:

function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) {uint cnt = _receivers.length;uint256 amount = uint256(cnt) * _value;require(cnt > 0 && cnt <= 20);require(_value > 0 && balances[msg.sender] >= amount);balances[msg.sender] = balances[msg.sender].sub(amount);for (uint i = 0; i < cnt; i++) {balances[_receivers[i]] = balances[_receivers[i]].add(_value);Transfer(msg.sender, _receivers[i], _value);}return true;

这个函数的作用是,调用者传入若干个地址和转账金额,在经过一些条件检查之后,对msg.sender的余额进行减操作,对每一个对每一个传入的地址进行加操作,以实现BEC的转移。
问题出在 uint256 amount = uint256(cnt) * _value; 这句代码,当传入值_value过大时(接近uint256的取值范围的最大值),uint256 amount = uint256(cnt) * _value计算时会发生溢出,导致amount实际的值是一个非常小的数(此时amount不再是cnt * _value的实际值),amount很小,也使得后面对调用者余额校验可正常通过(即require(_value > 0 && balances[msg.sender] >= amount)语句通过)。

我们来结合实际攻击交易使用的参数来分析一下:

batchTransfer的参数_value值为16进制的800000000000000000000...,参数_receivers数组的大小为2,相乘之后刚好可超过uint256所能表示的整数大小上限,引发溢出问题amount实际的值为0,后面的转账操作实际上msg.sender的余额减0, 而对两个账号进行了加16进制的800000000000000000000...,最终的结果是相当于增发了2 * 16进制的800000000000000000000...

实际上对于这种整数溢出漏洞,最简单的方法是采用 SafeMath 数学计算库来避免。有趣的是BEC智能合约代码中,其实其他的都使用了SafeMath, 而关键的uint256 amount = uint256(cnt) * _value却没有使用。
心痛程序员,也心痛韭菜。这句代码改为uint256 amount = _value.mul(uint256(cnt));就可以防止溢出问题

所以在做加减乘除的时候请记得一定使用:SafeMath,代码在这里

溢出补充说明

溢出补充说明为小专栏订阅用户福利,小专栏的文章内介绍了什么时候会发生上溢,什么时候会发生下溢,并且给出了代码事例。
大家可请前往我的小专栏阅读。

☛ 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。

☛ 我的知识星球为各位解答区块链技术问题,欢迎加入讨论。

☛ 关注公众号“深入浅出区块链技术”第一时间获取区块链技术信息。

美链BEC合约漏洞技术分析 1相关推荐

  1. 美链BEC合约漏洞技术分析

    这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈.这篇文章就来分析下BEC智能合约的漏洞 漏洞攻击交易 我们先来还原下攻击交易,这个交易可以在这个链接查询到. 我截图给大家 ...

  2. 从技术层面浅析美链BEC从诞生到覆灭

    4月22日下午13时左右,才发行两个月左右的BEC美蜜合约出现重大漏洞,黑客通过合约的批量转账方法无限生成代币.天量BEC从两个地址转出,引发抛售潮.当日,BEC的价值几乎归零. 蔡文胜与美链之间的公 ...

  3. 绿盟科技发布OpenSSL高危漏洞技术分析与防护方案 G20成员国美国、中国、德国受影响较大...

    近日,OpenSSL官方发布了版本更新,修复了多个OpenSSL漏洞,这次更新所修复的漏洞中,有两个危害等级较高的为CVE-2016-6304和CVE-2016-6305.绿盟科技对此漏洞进行了技术分 ...

  4. 惨遭补刀!美链BEC爆合约漏洞后,美图公司宣布终止合作

    今年2月,美链(BEC)上线OKEX,发行70亿代币,市值一度突破280亿美金.该项目宣称打造"全球第一个基于区块链技术打造的美丽生态链平台". 4月22日,OKEx发布最新公告称 ...

  5. 区块链Opyn ETH Put逻辑漏洞技术分析

    ​ 截至发稿前,官方发文回应此次事件:遭到黑客攻击,并已对可能遭受攻击的资产进行转移,但此次漏洞只涉及ETH合约,并不影响其他合约. ​​ -安全实验室第一时间对本次事件进行跟踪分析,以下是态势感知系 ...

  6. 影响数千万APP的安卓APP“寄生兽”漏洞技术分析

    360安全卫士 · 2015/07/01 14:11 0x00 前言 360手机安全研究团队vulpecker近日发现了一种新型的安卓app安全漏洞,市面上数以千万的app都受该漏洞影响.该漏洞一旦被 ...

  7. @property python知乎_知乎某处XSS+刷粉超详细漏洞技术分析

    我觉得十分经典的一个漏洞,和大家分享一下~ 好久没法前端漏洞分析了,这次来一个. 将输入的信息传入URI参数,解码以后赋值与location.href.明显可以利用JavaScript:伪协议执行js ...

  8. 绿盟科技 linux漏洞,绿盟科技发布LINUX内核本地提权漏洞技术分析与防护方案

    Linux内核的内存子系统在处理写时拷贝(Copy-on-Write,缩写为COW)时存在条件竞争漏洞,导致可以破坏私有只读内存映射.一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,进 ...

  9. 王峰十问蔡文胜:BEC美链究竟是不是美图上市公司的资产?

    编辑 | Joyce       美编 | 淀粉叔叔 蔡文胜,美图公司董事长,交易过众多优质域名.连续举办三届中国互联网站长大会.天使投资人.「三点钟无眠区块链」微信群关键推动人. 王峰与蔡文胜的对话 ...

最新文章

  1. 1、java集合:java集合详解及类关系图
  2. 提升权限_Azure权限提升漏洞
  3. NodeJS安装及部署(Linux系统)
  4. mysql 8.0 手动安装教程_mysql 8.0.13手动安装教程
  5. Eclipse利用Database Connections连接数据库并实现从数据库逆向生成Hibernate带注解的实体类
  6. [专栏精选]Unity中的Git最佳实践
  7. CentOS 7.x 安装 Maven
  8. Xamarin.Forms入门学习路线
  9. 华为大数据解决方案 (文末附PPT下载)
  10. Android 自定义 省份、车牌号键盘。
  11. 【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解
  12. Changer常用的软件
  13. SVN忽略提交文件设置
  14. html 表单form代码,html - 表单form(示例代码)
  15. 【数据竞赛】风控实操案例 | 基于Xgboost与Catboost实现非法集资企业识别
  16. vtk中的win32窗口
  17. 1213:八皇后问题
  18. 要命!《程序员延寿指南》火爆 GitHub,日涨1500+星,跟着码农干多活 20 年
  19. 从零在FPG上实现OFDM(一)
  20. 服务器突然关机的操作系统日志,windows服务器关机日志

热门文章

  1. 产品原型制作_早期制作原型如何帮助您设计出色的数字产品
  2. 为什么 Vue2 this 能够直接获取到 data 和 methods ? 源码揭秘!
  3. 1.20(设计模式)模板模式
  4. Hive数据类型及文本文件数据编码
  5. 阿里再破记录!代表中国企业首次在这项国际比赛中摘得银牌!
  6. java eleven进度条
  7. 最速下降法(梯度下降法)
  8. 鄙人之斗,读IT之洋(1)
  9. GetItemValue、Itemname使用方法
  10. 分析android动画模块[转]