更多精彩 >

链安团队漏洞分析连载(第一期)一一溢出漏洞

2018-08-10 21:20:27   来源:链安科技  作者: 

摘要:4月发生的BEC事件以及SMT事件已经沉淀一段时间了,具体的情况也被多方媒体所报道,相关的漏洞根源问题也有很多大神团队的分析和指正,成都链安科技团队将各种已经发生或可能发生的类似溢出漏洞原理进行整理,再次将全方位的原理分析与大家分享。

图片1.png


4月发生的BEC事件以及SMT事件已经沉淀一段时间了,具体的情况也被多方媒体所报道,相关的漏洞根源问题也有很多大神团队的分析和指正,成都链安科技团队将各种已经发生或可能发生的类似溢出漏洞原理进行整理,再次将全方位的原理分析与大家分享。


事件回顾


2018年4月22日,黑客对BEC智能合约发起攻击,凭空取出57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968 个BEC代币并在市场上进行抛售,BEC随即急剧贬值,价值几乎为0,该市场瞬间土崩瓦解。


2018年4月25日,SMT项目方发现其交易存在异常,黑客利用其函数漏洞创造了65,133,050,195,990,400,000,000,000,000,000,000,000,000,000,000,000,000,000,000+50,659,039,041,325,800,000,000,000,000,000,000,000,000,000,000,000,000,000,000的SMT币,火币Pro随即暂停了所有币种的充值提取业务。


让我们一起以沉痛的心情缅怀以上一夜归零的代币


图片2.png


仅仅在BEC事件过去后的12小时内,就有多达12个项目的智能合约存在类似的整数溢出类型的漏洞,黑客可以利用这一漏洞转账“无中生有”的巨大数量代币,也就是我们所说的“增发”。


代币增发为什么就会贬值


人们常说“物以稀为贵”,意思是事物因稀少而且有益,从而显得珍贵。


黄金被选为最早时期全世界公认的货币的原因就是因为它稀缺,地球上储量有限,易分割,属性稳定等特点。


中国人首先发明了“交子”,来代替不便交易的黄金。


所以就出现了金本位的概念,很多国家发行自己货币的时候都是按照其黄金储量来发行,并不是想发多少就发多少。


试想一下如果凭空出现了一颗黄金做的大陨石,撞击地球后黄金撒了一地,黄金还会值钱吗?


图片3.png

图片4.png


所以当一个代币的数量在有了额定发行总量之后,突然肆意的增加,必然会导致代币的贬值,甚至失去在市场上流通的意义。这就是“代币增发”的不良后果。


整数溢出漏洞分析


前面提到,黑客是利用整数溢出漏洞绕过了转账数额的相关规则,进而增发代币。


那什么是整数溢出呢?为什么能用整数溢出来实现增发来秀一波空手套白狼的操作?


我来举个例子


图片5.png


比如有一个国家的人不会复杂的数学运算,只会从0数到9,每次数到9之后又从0开始数,最后以数到的数作为结果。大家都这样平安无事地生活着,但有一天,有一个从别的国家来的小黑,他发现了这个问题,于是他去金库拿金锭,拿出来的个数超过了9个,于是金库管理员帮他数,数到9之后又从0开始了,最后结算发现他取出来的结果是0个金锭,但实际上他已经把金库里的金锭几乎都取完了。


黑客利用类似的机制凭空向一个账户中转账了超级大数额的代币,而合约中的逻辑只要求他花费很小的代价。


图片6.png


成都链安科技审计组对过往代币增发事件漏洞类型进行整理,概括出整型溢出类型漏洞的全面分析。


以太坊虚拟机(EVM)为整数指定固定大小的数据类型。这意味着一个整型变量只能有一定范围的数字表示。例如,一个 uint8 ,只能存储在范围 [0,255] 的数字。试图存储 256 到一个 uint8 将变成 0。不加注意的话,只要没有检查用户输入又执行计算,导致数字超出存储它们的数据类型允许的范围,Solidity 中的变量就可以被用来组织攻击。


整数溢出的类型包括乘法溢出,加法溢出,减法溢出三种,


链安科技团队对BEC事件进行分析后,发现可将其漏洞归类于乘法溢出,原理如下:


乘法溢出


•案例(CVE-2018-10299)


图片7.png


上述合约代码中,存在漏洞的代码为uint256 amount = uint256(cnt) * _value;,计算转出总额度amount未使用SafeMath也未对溢出进行检查,直接将转账地址数量乘以转账额度,如果输入极大的_value,那么amount计算结果就可能产生溢出,导致代币增发。


在Remix-ide中测试如下:


1、部署合约;


2、调用batchTransfer函数,向batchTransfer函数传入地址数组["0xb4D30Cac5124b46C2Df0CF3e3e1Be05f42119033","0x0e823fFE018727585EaF5Bc769Fa80472F76C3d7"],以及_value"0x8000000000000000000000000000000000000000000000000000000000000000"即2*255,使得amount=2\*255 * 2,超出uint256类型的范围[0,2**256-1],溢出为0,发送者账户余额不减少,并且,本例中,发送者的代币可以为零,实现"无中生有"。


图片8.png


3、查看余额:


图片9.png


而针对SMT事件进行分析后,发现其漏洞属于加法溢出类型,其原理如下:


加法溢出


案例


图片10.png

图片11.png


上述合约代码中,mintToken函数的功能是owner向指定账户增发mintedAmount数量的代币,但是在对balanceOf[target]与totalSupply进行加法操作未做溢出检查,导致其可能存在溢出,并且,通过溢出,恶意owner可以任意增减target账户的余额,或者增发实际远远超过totalSupply的代币。


在Remix-ide中测试如下:


1、部署合约;


2、向target预先转一部分代币,模拟目标账户中已有的代币:调用transfer函数,传入target地址:


0x14723a09acff6d2a60dcdf7aa4aff308fddc160c,以及转账额度,比如2000000000000000000(2 * 10**uint256(decimals));


3、如果owner想控制target的余额减半,那么,他只需要向target增发2*256-balanceOf[target]+10\*18=0xfffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000,现在调用mintToken函数,向target地址转入上述数量的代币:


图片12.png


4、查询target余额:


图片13.png


另外还有减法溢出的操作,虽然未出现相关的漏洞攻击事件,我们也提供了相关的原理分析:


减法溢出


案例


图片14.png

图片15.png


上述合约代码中,distribute函数的功能是从owner账户向指定的地址列表转入2000 * 10**8代币,但是在对balances[owner]的计算中未使用SafeMath,也未判断owner账户是否有足够的代币,当转出代币总量大于owner账户余额的时候,balances[owner]产生减法溢出,变成一个极大值。


在Remix-ide中测试如下:


1、部署合约


2、调用distribute函数,传入地址数组:


["0x14723a09acff6d2a60dcdf7aa4aff308fddc160c","0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db"]


owner分别向这两个地址发送2000 * 10**8代币,超过owner余额,balances[owner]产生减法溢出;


3、查询owner账户余额,等于2**256-2000*10**8:


图片16.png


黑客虽然无孔不入,但链安科技团队对具有此类漏洞的合约进行综合性调研后,提出了修复措施:


漏洞修复


OpenZeppelin提供了一套很好的SafeMath库,使用SafeMath库函数能够有效避免溢出漏洞,SafeMath库源码如下:


图片17.png

图片18.png

图片19.png

图片20.png


子曰:吾日三省吾身


我们从这些惨痛的教训中能总结出:


1.基于ERC20协议编写的这些智能合约给予开发者的权力过大了,这些溢出问题本应该放在底层检测。


2.编写合约的开发者没有以严谨敬业的精神去遵守开发规范,使用SafeMath去做相关功能,或者进行溢出测试,在这里提出批评。


3.没有严谨的逻辑,单单凭借创造力并不是都能出成果,还是要稳中求胜,能使用库就使用库。


所以,链安科技团队建议,为了避免程序结果中产生溢出,破坏智能合约执行逻辑,建议开发者在所有数学运算中都使用SafeMath(敲黑板)。

猜你喜欢

众安科技推出首个保险通证:应用落地,还是变相发币?

资讯区块链保险通证

统一产品标准、建立分布式业务体系、保护隐私、打破数据壁垒、提升业务效率和助力监管……等等,保险通证虽...

58分钟前

操盘金刀还是幸运宠儿?另类视角下的楼霁月

资讯区块链楼霁月

"上天赋予每个人的才能都是不同的。一个未毕业的大一少女,从拜师学艺进入股市,到转战币圈。进入币圈短短...

1小时前

何一:赶在三十岁重新出发

资讯区块链何一

这个世界永远比你想象中疯狂,比科幻片更科幻,精彩属于那些疯狂的人,而我只是其中一个。

1小时前

天堂和地狱最近的地方:数字货币交易所

资讯区块链数字货币交易所

一念天堂、一念地狱,天堂馈赠多少礼物,地狱就会让你付出多少代价。

1小时前

官方颁发首个ICO许可证,百慕大能成为下一个数字货币中心吗?

资讯区块链ICO

当地时间10月18日,百慕大国家安全部长Wayne Gaines在百慕大行政论坛上,宣布金融科技公司...

1小时前

现在到底应该去做公链还是DApp?

资讯区块链DApp

区块链还没有大规模落地,到底是因为DApp不够给力,还是因为区块链基础设施不完善?

2018-10-09

比特币波动幅度创历史新低 普华永道推出美元挂钩稳定币

资讯普华永道区块链

就在加密货币交易所Coinbase准备上市之前,有传言称他们将会上架山寨币0x,导致该加密货币价格飙...

2018-10-09

加密货币计价、能否持续盈利?两大敏感问题决定比特大陆IPO

资讯区块链加密货币

为了解决业务模式较单一,营收金额过度依赖矿机销售的问题,比特大陆目前正在布局进入AI领域,投资AI技...

2018-10-09

中国区块链50城——苏州:苏九条10亿基金欲将高铁新城变“链谷”

资讯区块链苏州

苏州集中在高铁新城进行区块链布局,并专门出台了区块链政策,被称作“苏九条”。设立了10亿元规模的引导...

2018-10-09

世界首个基于区块链的数字识别实验室在苏格兰启动

资讯区块链区块链应用数据泄露

蜜蜂财经编译报道:欧洲第一个专门的区块链研究机构,和世界上第一个先进的区块链识别实验室,已经在苏格兰...

2018-10-09

数字货币的投资秘笈

投资资讯区块链数字货币

从2013年开始接触数字货币,那个时候只有BTC/" target="_blank"">比特币直到今...

2018-10-09

那些怀揣理想参与区块链的年轻人,你们还好么?

投资资讯区块链区块链人才

“我对邪恶的定义与许多人有所不同。如果你有机会、有能力做善事,但你却什么都没做,那就是邪恶。邪恶不一...

2018-10-09

比特币场外交易逐渐上升 机构投资者进场已暗流涌动

资讯比特币区块链数字货币投资

加密市场的大多数投资者都希望机构投资者能够开始下一轮牛市。最近像比特币这样的主要数字资产的稳定性表明...

2018-10-09

以太坊“空块”数量激增威胁到网络安全?

资讯区块链以太坊矿池以太坊挖矿

根据AMBcrypto的报道,在过去三个月中,以太坊的使用指标显示挖矿产生的“空块”数量急剧增加,或...

2018-10-09

财链社(www.bcpress.com)专业的全球区块链财经媒体与社群,链接区块链、物联网、大数据、人工智能,致力于成为最有深度的区块链全产业链分析家,为区块链创业者及投资者提供最好的产品和服务。

链马思享会第四期:公信宝黄敏强,如何应对数据经济困局?

在信息安全问题日益严峻的今天,作为普通互联网用户,该如何保护自己的隐私?

INE智联生态COO白眉独家|区块链4321黄金投资法则

不是所有的区块链项目都在落地,INE智联生态一直在落地!——IntelliShare does ...

INE智联生态COO白眉独家|区块链4321黄金投资法则

不是所有的区块链项目都在落地,INE智联生态一直在落地!——IntelliShare does ...

马云:并不是数字化就会变得冷淡 技术让城市变得更暖

10月11日,杭州市打造全国数字经济第一城动员大会在浙江杭州云栖小镇国际会展中心举行。

央行姚前&孙浩:数字稳定代币的试验与启示

虚拟货币无法有效履行计价单位、交易媒介和价值储藏三大货币基本职能,客观上阻碍了其自身的应用进程。因此...

一起寻找“全球链改优秀项目”!

一起寻找“全球链改优秀项目”!

2018年9月10日,由中国通信工业协会区块链专业委员会、区块链改革全国联席会议作为指导,全球链改节...

HelloEOS 区块链全国行活动“EOS 和他的朋友们”正在进行

HelloEOS 区块链全国行活动“EOS 和他的朋友们”正在进行

HelloEOS 区块链全国行活动“EOS 和他的朋友们”正在进行,第六站厦门将在本周六(9月8日)...

区动智慧,链接未来-区块链如何赋能实体经济

区动智慧,链接未来-区块链如何赋能实体经济

自区块链概念流入国内,吸引大量人才进入到这个行业,随着区块链掀起的火热风潮,它被视为本世纪最大的风口...

区块链峰会受监管政策屡屡叫停,920这场峰会却办得热火朝天

区块链峰会受监管政策屡屡叫停,920这场峰会却办得热火朝天

“2018国际数字经济博览会”将于9月20日-22日在石家庄国际会展中心隆重举办。本次峰会邀请到了诸...

嘉楠耘智推出7nm矿机新品,算力翻倍

嘉楠耘智推出7nm矿机新品,算力翻倍

据中关村在线消息,目前首批由台积电代工生产的7nm芯片已完成交货。