专栏首页用户2119464的专栏大话 美链 BEC 合约溢出漏洞

大话 美链 BEC 合约溢出漏洞

阅读此文大约需花费朋友你 5~10 min

目录

  • 事件回顾
  • 技术背景
  • 攻击细节剖析
  • 攻击复现
  • 预防方案
  • 作案动机
  • 参考资料

0x01 事件回顾

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

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

0x02 技术背景

Solidity 中的 uint256

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

# 此为上溢

0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
0x0000000000000000000000000000000000000000000000000000000000000001
=
0x0000000000000000000000000000000000000000000000000000000000000000

0x03 攻击细节剖析

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

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

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

uint256 amount = uint256(cnt) * _value;
require(cnt > 0 && cnt <= 20);
require(_value > 0 && balances[msg.sender] >= amount);

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

# 此也为上溢

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 输入下列值(本次我们测试四个值能否成功)
["0xb4d30cac5124b46c2df0cf3e3e1be05f42119033","0x0e823ffe018727585eaf5bc769fa80472f76c3d7","0xb4d30cac5124b46c2df0cf3e3e1be05f42119033","0xb4d30cac5124b46c2df0cf3e3e1be05f42119033"]
0x4000000000000000000000000000000000000000000000000000000000000000
  1. 刷币成功

0x05 预防方案

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

0x06 作案动机

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

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

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

0x07 参考资料

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

--则若@慢雾安全团队

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 计算机网络简答题

    在数据交换前,必须先建立连接,数据交换过程中要维持连接,当数据交换结束后,应终止这个连接。

    星辉
  • HTML4+CSS2基础考试-易错点总结

    星辉
  • 面经-浏览器请求部分

    https://segmentfault.com/a/1190000016612988

    星辉
  • Windows系统的JScript组件被曝存在一个0day RCE

    近期,Telspace Systems公司的安全研究专家Dmitri Kaslov在Windows操作系统的JScript组件中发现了一个严重的安全漏洞,而这个...

    FB客服
  • 微软对外披露 Google 工程师发现的 IE 漏洞 攻击者可以控制受影响系统

    Google 工程师发现 IE 中存在一个漏洞,攻击者可以通过漏洞完全控制受害操作系统。

    周俊辉
  • 【漏洞预警】Windows任意文件读取0day漏洞处置手册

    近日,国外安全研究员 SandboxEscaper又一次在推特上公布了新的Windows 0 day漏洞细节及PoC。这是2018年8月开始该研究员公布的第三个...

    绿盟科技安全情报
  • 工业防火墙又出事了!施耐德工业防火墙被爆严重安全漏洞

    根据国外媒体的最新报道,工业安全公司CyberX的安全研究专家在2016年工业控制系统(ICS)网络安全大会上披露了好几个严重的安全漏洞,其中就包括一个存在于施...

    FB客服
  • safe3WVS全自动简易网站漏洞检测

    虽然说网上有一堆网站如何渗透的文章,但是仍有新手拿到一个站点手足无措,不知道该从哪里下手,我这里给大家推荐一款企业级的检测软件,非常的小巧便利,可以快捷...

    网e渗透安全部
  • 小白应知的“黑客术语”

    最近有同学,问我,自己加了一些信息安全的群,发现大佬们说的话大多数都不懂,麻烦整理一章信息安全的术语方便自己收藏,我说可以,马上整理笔记。

    天钧
  • 【漏洞预警】IIS 6.0曝远程代码执行漏洞CVE-2017-7269

    ? 漏洞描述 微软方面也已经确认了该漏洞:Windows Server 2003R2版本IIS6.0的WebDAV服务中的ScStoragePathFro...

    FB客服

扫码关注云+社区

领取腾讯云代金券