更多精彩 >

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

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

猜你喜欢

FISCO BCOS 凭什么从联盟链脱颖而出?

资讯区块链FISCO BCOS

区块链技术的分类是随着各方面的应用而越来越清晰,按照准入机制,区块链目前分为三类:公有链、联盟链和私...

2018-11-09

Hyperledger技术专家首谈FISCO BCOS

资讯区块链FISCO BCOS

关注区块链的朋友最近应该注意到一个活动,那就是基于底层开源平台FISCO BCOS(以下简称“BCO...

2018-11-09

P2P,有序退出“四大”基础和细节要点

资讯区块链P2P

说实话,对于P2P大规模合规备案,飒姐并不乐观。从目前形势看,过半甚至更高比例的网贷平台不会走上最终...

2018-11-07

印度官员认为在最高法院裁决之前应该禁止“私人加密”

监管资讯区块链印度官员

印度政府新闻中心10月31日报,印度经济事务的部长已建议该国财政部禁止“私人加密货币”。由印度财政部...

2018-11-06

美国比特币交易员因无牌转账业务而面临五年监禁

资讯美国区块链避税

比特币交易员Jacob Burrell-Campos本周在美国联邦法院认罪,经营无牌转账业务。这位2...

2018-11-06

数字货币里的三国,中美法币与比特币谁可称雄

资讯区块链数字货币

马云在谈到中美争端时表示:“它将持续很长时间,也许是20年。它将变成一个烂摊子。这不是贸易战,而是两...

2018-10-09

TPS之争,比特币公链如何实现技术扩容?

资讯区块链TPS

与其只是讨论理论上存在的让TPS达到上万级别的扩容方法,不如短期先采用相对易于实现的技术让性能提升有...

2018-10-09

重读比特币白皮书,这10点你必须要知道

资讯比特币区块链

2008年10月,中本聪发布的白皮书中讨论了比特币的概念。就算是10年后的今天来看,这篇白皮书依然非...

2018-10-09

什么是证券通证发行(STO)?

区块链STO

证券是一种代表实际资产的金融工具。股票、债券和信托都属于证券。历史上,当购买证券时,交易是在纸上签署...

2018-10-09

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

资讯区块链稳定代币

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

2018-10-09

打开隐私监控的潘多拉魔盒?澳大利亚新法案或将对DApp产生重大影响

资讯区块链澳大利亚

澳大利亚的举动可能为全球反隐私立法设定新的标准。如果成功的话,美国和欧洲可以效仿采取类似的法规。

2018-10-09

Fintech与监管沟通,需要注意什么?

监管资讯区块链

如果您经常坐飞机,观察飞机上升过程中屏幕上会显示,headwind或者tailwind,前者是逆风;...

2018-10-09

资本寒冬下,区块链向左走还是向右走?

资讯资本区块链

既然是底层技术,它就需要与外部行业产生深度联系,仅仅只是以概念和营销噱头的方式来为区块链获得发展动能...

2018-10-09

大型加密货币交易所蓬勃发展,小交易所在熊市中苦苦挣扎

资讯区块链加密货币

虽然像Coinbase、币安和BitMEX这样的大型加密货币交易所正在蓬勃发展,拥有利润丰厚的商业模...

2018-10-09

9月份报·比特大陆递交招股书 交易所融资热

资讯区块链招股书

9月区块链行业有24个项目或融资方发起了融资,2个项目或公司被收购,投融资、并购总项目数为26个。

2018-10-09

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

肖风:科技将如何改变资产管理

11月3日,中国机构投资者峰会--2019年资本市场高质量发展论坛在北京举行,中国万向控股副董事长、...

“好人徐明星”

OK和火币一向死对头,李书沸这么急切地向“仁君”表忠心,大概是对“前雇主”憋了一肚子窝囊气。

唯链(VeChain)CEO 陆扬:去不掉的中心化,走不完的江湖路

陆扬的身上有许多光环,名校毕业,曾是高端洋酒品牌Bacardi中国区IT负责人,还担任过Louis ...

腾讯区块链业务总经理蔡弋戈:区块链具备四大潜力

9月21日,在2018国际数字经济博览会期间举办的国际区块链产业融合峰会上,腾讯区块链业务总经理蔡弋...

聚焦增长战略, 第二届中国营销领袖峰会即将开幕

聚焦增长战略, 第二届中国营销领袖峰会即将开幕

12月14-15日,第二届“中国营销领袖峰会”将在上海举行。本次峰会由中欧校友市场营销协会、中欧校友...

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

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

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

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

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

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

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

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

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

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

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

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