前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大话 美链 BEC 合约溢出漏洞

大话 美链 BEC 合约溢出漏洞

作者头像
星辉
发布2019-10-22 18:04:15
7970
发布2019-10-22 18:04:15
举报

0x01 事件回顾

市值一度突破280亿美金“全球第一个基于区块链技术打造的美容生态链平台”BEC(Beauty Chain)在2018年4月22日遭到攻击者0x09a34e***ed5fe93c利用溢出漏洞缺陷。

0422大跌
0422大跌

在开始详细的细节剖析之前,需要先了解一些技术背景作为铺垫。

0x02 技术背景

Solidity 中的 uint256

Solidity最大能处理256位数字,最大值为2256-1,加1会导致归 0,发生溢出。

代码语言:javascript
复制
# 此为上溢

0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
0x0000000000000000000000000000000000000000000000000000000000000001
=
0x0000000000000000000000000000000000000000000000000000000000000000
溢出
溢出

0x03 攻击细节剖析

攻击者0x09a34e***ed5fe93c通过溢出漏洞增发大量 BEC。交易详情

增发大量 BEC
增发大量 BEC

那么攻击者是如何实现这个操作的呢?我们来瞄一下 BEC 合约。合约地址

在这里插入图片描述
在这里插入图片描述

通过上图我们可以看到 #259 行的 batchTransfer() 方法,从名字看是一个批量转账的方法。 让我们继续看方法内部,#261 行,事情变得有趣了起来…

有趣
有趣
代码语言:javascript
复制
uint256 amount = uint256(cnt) * _value;
require(cnt > 0 && cnt <= 20);
require(_value > 0 && balances[msg.sender] >= amount);

虽说做了限制,有没有可能构造 cnt_valueamount 溢出?of course! 转头来看攻击者的操作。

攻击者操作
攻击者操作
代码语言:javascript
复制
# 此也为上溢

0x8000000000000000000000000000000000000000000000000000000000000000
*
2
=
0x0000000000000000000000000000000000000000000000000000000000000000

于是,cnt = 2=>require(cnt > 0 && cnt <= 20);,此行通过,amount = 0,_value = 0x8000000000000000000000000000000000000000000000000000000000000000=>require(_value > 0 && balances[msg.sender] >= amount);,此行也通过。 攻击者原账户,一分钱都没动达到大额转出到其他账户的效果。

赵德汉
赵德汉

破案了么?我们再验证一下。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

验证成功,数值相同。(e是exponent,表示以10为底的指数。)

0x04 攻击复现

原理明白了,那我们何不化身超级大黑客操作一把?

黑客
黑客
  1. Remix 编辑器
  2. FILE EXPLORERS 创建Bec.sol文件,将BecToken合约copy过来
  3. SOLIDITY COMPILER 选择 0.4.16 版本编译器进行编译
  4. DEPLOY & RUN TRANSACTIONS 选择 PausableToken
  5. 点击 Deploy
  6. batchTransfer 输入下列值(本次我们测试四个值能否成功)
代码语言:javascript
复制
["0xb4d30cac5124b46c2df0cf3e3e1be05f42119033","0x0e823ffe018727585eaf5bc769fa80472f76c3d7","0xb4d30cac5124b46c2df0cf3e3e1be05f42119033","0xb4d30cac5124b46c2df0cf3e3e1be05f42119033"]
0x4000000000000000000000000000000000000000000000000000000000000000
  1. 刷币成功
完成
完成

0x05 预防方案

为避免程序出现溢出,开发者可考虑运算中使用OpenZeppelin库的SafeMath。SafeMath

0x06 作案动机

技术活说完了,朋友们有没有想过一件诡异的事情,他的动机是什么?

动机
动机

毕竟,那些个BEC在两个地址里面好好的躺着呢

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

且,BEC因为此漏洞币值缩水 且,如此大的资金当量难以出手变现 这个黑客是在玩么?感兴趣可以交流一下。

0x07 参考资料

BEC 智能合约无限转币漏洞分析及预警-慢雾安全团队 利用溢出漏洞的交易详情 区块链安全—溢出的BEC漏洞 美链 BEC 合约漏洞技术分析

--则若@慢雾安全团队

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 事件回顾
  • 0x02 技术背景
    • Solidity 中的 uint256
    • 0x03 攻击细节剖析
    • 0x04 攻击复现
    • 0x05 预防方案
    • 0x06 作案动机
    • 0x07 参考资料
    相关产品与服务
    腾讯云区块链服务平台 TBaaS
    腾讯云区块链服务平台(Tencent Blockchain as a Service,简称TBaaS)致力于打造全球领先的企业级区块链技术平台,帮助客户、开发者及合作伙伴轻松创建和管理可托管、可扩展的区块链网络,助力产业协同发展。TBaaS 支持长安链·ChainMaker、Hyperledger Fabric等区块链底层平台,简化部署、运维及开发流程,实现业务快速上链,提升链上治理效率。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档