大话 美链 BEC 合约溢出漏洞

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

目录

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

0x01 事件回顾

市值一度突破280亿美金“全球第一个基于区块链技术打造的美容生态链平台”BEC(Beauty Chain)在2018年4月22日遭到攻击者0x09a34e***ed5fe93c利用溢出漏洞缺陷。
0422大跌
在开始详细的细节剖析之前,需要先了解一些技术背景作为铺垫。

0x02 技术背景

Solidity 中的 uint256

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

# 此为上溢

0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
0x0000000000000000000000000000000000000000000000000000000000000001
=
0x0000000000000000000000000000000000000000000000000000000000000000

溢出

0x03 攻击细节剖析

攻击者0x09a34e***ed5fe93c通过溢出漏洞增发大量 BEC。交易详情
增发大量 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 合约漏洞技术分析

--则若@慢雾安全团队

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章