更多精彩 >

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

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(敲黑板)。

猜你喜欢

区块链世界十大原则

资讯区块链去中心化

熊市的持续蔓延,把大家的收益打了好几个对折,让前段时间目空一切的嚣张气焰,降温了许多。但围城内的冷却...

6小时前

是时候投资数字货币了吗?

资讯区块链数字货币搬砖套利

以前比特币这种数字货币通常与少数快速暴富的人群相关联,但现在似乎每个人都在谈论比特币,它正在进入主流...

6小时前

区块链技术的出现能否减轻电信诈骗的犯案率

资讯区块链电信诈骗

据相关数据显示:2015年全国公安机关共立电信诈骗案件59万起,同比上升32.5%,造成经济损失22...

6小时前

全球金融市场大跌,如何让你的资产保值增值

资讯区块链区块链技术

最近的美元走强让全球很多国家受到影响,首先是土耳其里拉的崩盘,继上周五暴跌17%后,土耳其里拉兑美元...

6小时前

为何通证经济沦为韭菜农庄?

资讯区块链通证经济,风投

前方高能,目测代币归零大潮来临……

6小时前

加密数字货币也能上保险?几家美国知名保险公司推出加密数字货币套

资讯区块链加密货币

尽管这些保险公司并没有拿着大喇叭将这一消息弄得人尽皆知,但是私下接受了媒体采访的保险公司声称,此举可...

2018-07-28

币天创始人陆磊:要加强区块链和实体产业的结合

资讯区块链陆磊

2017年比特币价格一路飙升,全球加密数字资产市值突破6000亿美元,数字资产和区块链再次受到追捧。...

2018-07-28

fomo 3D不管加上什么概念,它都是传销!

资讯区块链fomo 3D

中国的有一些士大夫,总爱无中生有,移花接木的造出故事来,他们不但歌颂生平,还粉饰黑暗。——鲁...

2018-07-28

广州互金协会全面叫停“锁定期+自动债权转让”模式产品

资讯区块链广州

近两月,网贷问题平台集中爆发,创下近一年高峰。“爆雷潮”下频现借款人恶意逾期现象。为严厉打击恶意逾期...

2018-07-28

北京互金协会成立规范发展工作组,完善风险缓释机制

资讯区块链北京

在今日(7月27日)召开的2018年度第二季度会员大会上,北京市互联网金融行业协会(下称"北京互金协...

2018-07-28

美国“黑马”总统候选人接受比特币捐赠

资讯美国区块链

民主党“黑马”总统候选人Andrew Yang发推表示,将接受比特币、以太币和其他加密货币捐款,用于...

2018-07-28

万事达卡首席执行官再次攻击加密货币,称其为“垃圾”

资讯区块链万事达卡

班加是在回答印度驻纽约领事馆组织的“新印度讲座”中被问及的加密货币问题时说这番话的。在同一事件中,B...

2018-07-28

疫苗之殇谁来正本清源?

资讯区块链疫苗

时隔六年,疫苗造假事件卷土重来,这一次,已经经历过丧女之痛的林湘萍立马带着二女儿去了省里的大医院做全...

2018-07-28

加密投资半年报:机构资金流入过半,比特币仍为投资大宗

资讯区块链加密投资

7月18日,数字资产管理基金Grayscale Investments发布Grayscale首份加密...

2018-07-28

2018亚洲海上区块链论坛:泛游公海,探索区块链真实的现在与未来

资讯区块链

借夏日天朗气清之良机,独角区块链、致简传媒与风暴资本,联合主办了“2018亚洲海上区块链论坛”,20...

2018-07-27

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

余半城:我是全中国第一个投ICO的人

对于我而言,投资BTS是一次疯狂的经历。BTS最开始1毛钱,赵东很厉害,在3毛多的时候,BTS就逃顶...

敬佩陆奇 观察YC

因为工作关系,曾经在2013年和陆奇、沈向洋在Bing位于Bellevue的Lincoln Towe...

胡不斯(上篇):从炸金花的小男孩到德州大佬

身家只剩一辆车的胡不斯,被雨刷下塞着的贷款卡片吸引了目光。他通过信用贷款,借了六万三千元,其中中介费...

肖飒:监管对币圈“容忍度”是多少?

飒姐不是容不下新事物的老古董,只是怕“最赚钱的事都写在刑法里”一语成谶。那么多优秀的人,为了虚幻的梦...

FB秘密推进区块链项目?负责人离开Coinbase董事会

Facebook尚未宣布将它的区块链项目,但一些分析师认为,该公司将发行自有的加密货币或代币。

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

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

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

初次见面——币牛牛“区动未来 链接你我”首场武汉站回顾

初次见面——币牛牛“区动未来 链接你我”首场武汉站回顾

7月14日下午,币牛牛“区动未来 链接你我”全国行武汉站活动在腾讯众创空间顺利举行

就是撸!BChat携手20个优质项目狂撒10亿Token

就是撸!BChat携手20个优质项目狂撒10亿Token

​7月13日, BChat(币聊,官网:bchat.mobi)重磅升级,携20家项目方开展为期3天的...

新加坡国立大学主办,Bplus承办的2018 ICE峰会即将隆重召开

新加坡国立大学主办,Bplus承办的2018 ICE峰会即将隆重召开

由亚洲第一学府新加坡国立大学主办,唯一官方合作伙伴Bplus承办的“Innovate, Connec...

领航启动:GBS全球区块链高峰论坛顺利召开

领航启动:GBS全球区块链高峰论坛顺利召开

6月24日,GBS全球区块链高峰论坛暨首届区块链应用成果体验展在菲律宾马尼拉圆满落幕。