更多精彩 >

偷天换日合约易主,地址变脸移花接木 | 底层函数误用漏洞

2018-08-10 21:36:13   来源:链安科技  作者: 

摘要:合约外部调用在最近的游戏智能合约中使用广泛,因为这样能够提高代码复用率,简化代码。最新的MyCryptoChamp游戏漏洞就源于合约内部算法生成的随机数可被预测,没有调用外部可靠的随机数生成模块。所以合约外部调用还是很实用的一项功能,但是利是弊就要看合约编写者的功力了。

图片1.png


引子:阵有纵横,天衡为梁,地轴为柱。梁柱以精兵为之,故观其阵,则知精兵之所有。共战他敌时,频更其阵,暗中抽换其精兵,或竟代其为梁柱,势成阵塌,遂兼其兵。并此敌以击他敌之首策 —— 《三十六计第二十五计之偷梁换柱》


却说“重入”“竞态”里应外合币穷财尽,“交互”“限制”强强联手链泰民安,锁定关键变量,应用内置函数,不留可乘之机。


此回,底层函数调用险象环生 外部功能慎用防患未然


时至今日,加密货币市场价值富可敌国,已达3000亿美元,是加拿大最大银行RBC两倍有余。行情较好的加密货币蕴含大量的资本,在数字交易所中这座“金库”中大放光彩,犹如璀璨夺目的宝石。但同时也吸引了众多行走江湖的黑客神偷。为此,合约的安全成为重中之重,迭代扩展后的新协议带来的不一定是严丝合缝的守护,也可能有意想不到的疏漏,无孔不入的黑客便试图寻找衔接处的缝隙。


图片2.png


今天我们来说说关于底层函数调用时产生的隐患:可注入call漏洞和delegatecall误用漏洞


事件回顾


2018年5月11日, 人工智能项目方ATN发现其代币ATN Token供应量发生异常,市场上流通的代币无故增加了1100万个。并且黑客在完事之后还不忘隐藏踪迹,归还了权限地址,并且将偷来的Token分发到14个账户地址当中,试图掩人耳目。


好在项目方及时采取了措施,定位了所有可疑账户并采用了冻结销毁等措施,才维持住代币市场的稳定运行。


ATN项目方为了实现代币互换,权限扩展以及控制,合约升级三个新型的功能,采用的是更新的ERC223协议来开发智能合约,并且使用了DS-auth库[1]。按理说双剑合璧能使安全等级的提升颇有成效,却被始料未及的攻击泼了一盆冷水。


图片3.png


追根溯源,主要问题出在代币互换的实现——call函数,即合约外部调用函数的实现过程中。


合约外部调用在最近的游戏智能合约中使用广泛,因为这样能够提高代码复用率,简化代码。最新的MyCryptoChamp游戏漏洞就源于合约内部算法生成的随机数可被预测,没有调用外部可靠的随机数生成模块。所以合约外部调用还是很实用的一项功能,但是利是弊就要看合约编写者的功力了。


何为合约外部调用


专业的来说,call与delegatecall 函数让 Ethereum开发者将他们的代码模块化(Modularise)。用 call函数来处理对合约的外部标准信息调用(Standard MessageCall)时,代码在外部函数的环境中运行。 delegate函数也是标准消息调用,但在目标地址中的代码会在调用合约的环境下运行,也就是说,保持msg.sender 和 msg.value不变。该功能支持实现库,开发人员可以为未来的合约创建可重用的代码。


通俗的来说,它是一个合约调用另一个合约某些功能的方式。


拿西游记打个比方:


话说唐僧去西天取经途中遇到了法力高强的妖怪,要过这一难,必须孙大圣出马,于是八戒和沙僧去花果山搬救兵请猴子。


图片4.png


但是如果请来的那位并不是悟空,而是假猴王六耳猕猴,可能不光妖怪降服不了,师傅都会被拐跑。


这就是黑客用来投机倒把的伎俩,利用跨合约调用这个过程偷梁换柱,打入合约内部。我们来看具体案例的分析。


漏洞分析以及详细修复建议


1.可注入call漏洞


漏洞分析


call是以太坊智能合约编写语言Solidity提供的底层函数,用来与外部合约或者库进行交互。此类函数使用时需要对调用参数的安全性进行判定,建议谨慎使用。


案例代码:


图片5.png


receiver,_custom_fallback,_from, _amount,_data是由用户控制的,也就是说用户可以控制整个call调用,包括调用的合约地址(receiver),调用哪个函数(_custom_fallback),以及传递的参数(_from,_amount,_data),这实际上是很危险的。在ATN事件中攻击者通过指定receiver为案例合约地址,利用DS-Auth授权,调用合约自身的函数,从而获得了合约的控制权。


此外,下面是ERC223标准的另一个call错误实现:


图片6.png


这种合约本身允许用户自定义 call() 任意地址上任意函数的设计,十分危险。攻击者可以很容易地借用当前合约的身份来进行任何操作。可能导致如下后果:


1)允许攻击者以缺陷合约身份来盗走其它 Token 合约中的 Token


2)与 ds-auth 之类的鉴权机制结合,绕过合约自身的权限检查


3)允许攻击者以缺陷合约身份来盗走其它 Token 账户所授权(Approve)的Token


4)攻击者可传入虚假数据(_data)欺骗 Receiver 合约


漏洞修复


1)推荐使用如下方式调用tokenFallback函数


图片7.png


2)DS-Auth在设置权限的时候,不要把合约本身地址加入白名单


图片8.png


2.delegatecall误用漏洞


漏洞分析


DELEGATECALL会保持调用环境不变的属性表明,构建无漏洞的定制库并不像人们想象的那么容易。库中的代码本身可以是安全的,无漏洞的,但是当在另一个应用的环境中运行时,可能会出现新的漏洞。


案例


案例代码来源于Ethernaut第6关


图片9.png


在主合约Delegation的fallback函数中,可通过delegatecall调用Delegate合约的函数,并在主合约环境下执行,如果msg.data是0xdd365b8b(pwn()的函数签名),即调用Delegate的pwn函数,那么消息发起者就可以变成主合约的owner。


漏洞修复


Solidity 为实现库合约提供了关键字 library (参见 SolidityDocs 了解更多详情)。这确保了library 是无状态(Stateless)且不可自毁的。强制让library 成为无状态的,可以缓解本节所述的存储环境的复杂性。无状态library 还可以防止攻击者直接修改library 状态以实现对依赖于library 代码的合约的攻击。在使用时 DELEGATECALL 时要特别注意库合约和调用合约可能对状态变量进行修改,并且尽可能构建无状态library 。


真假难辨,如何防范


黑客千方百计试图欺骗合约,或无所不用其极地打开合约的后门,对合约的安全开发过程是一个严峻的考验,从内部和外部我们可以做到以下两点进行防范:


1,跨合约调用时,要慎用外部函数,周全考虑可能的调用风险,及时添补相应函数和规则,杜绝外患。


2,内部权限设置必须考虑可能的权限被夺取的情况,从代码逻辑性和功能准确性全方面进行考量。


智能合约的安全规则终将会在安全团队与黑客的较量中不断完善,我们要做好打持久战的准备。

猜你喜欢

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

区块链企业资金来源有哪些?

资讯区块链企业资金

区块链企业成立与发展的相关资金问题成为我国区块链企业发展都必须面临的重要问题之一。

2018-10-24

阿尔巴尼亚探索加密货币监管框架 推动经济发展创造就业机会

资讯区块链国际阿尔巴尼亚

尔巴尼亚政府已经表示将考虑制定加密货币监管法规,旨在鼓励创新和投资,并为初创公司提供友好的运营市场环...

2018-10-24

“相互保”能带来相互保险吗?

资讯保险区块链相互保

10月16日,蚂蚁保险联手信美人寿相互保险社通过支付宝蚂蚁保险平台向蚂蚁会员推出了一款重大疾病保障产...

2018-10-24

新加坡有哪些金融领域的AI创企?

资讯区块链AI创企

来自全球各地的政府和私营部门都为人工智能和机器学习着迷。

2018-10-24

第三方支付牌照估值严重缩水,P2P或为罪魁祸首?

资讯区块链第三方支付

随着P2P暴雷潮的落幕,我们骤然发现,第三方支付牌照价格突然降温了。

2018-10-24

已有蚂蚁金服,马云为何仍要10亿入股苏宁金服?

马云资讯区块链

没有永远的朋友,也没有永远的敌人,只有永远的利益。 ——帕麦斯顿

2018-10-24

十五国监管者为了加密货币齐聚日本,这四个问题引起了他们的注意

资讯日本区块链

  日本最高金融监管机构日本金融厅(FSA)透露了其首个加密货币监管圆桌会议的细节。来自15个国家的...

2018-10-24

台湾:ICO纳入监管,虚拟货币只是商品,不是货币

资讯区块链ICO

金管会主委顾立雄22日在立法院财委会表示,若是具有投资性、流通性且符合证交法有价证券定义的虚拟通货,...

2018-10-24

刘强东借手区块链再造京东“无界零售”

京东资讯区块链

在零售业发展的历程当中,发生过四次重要的革命。第一阶段,技术生产产销分离,统一标准化运作,消费者聚焦...

2018-10-23

区块链如何提升可再生能源

资讯区块链再生能源

区块链可再生能源项目的爆炸性增长已经很有希望 - 该领域有122家初创公司在运营,自2017年以来已...

2018-10-23

财链社(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日在石家庄国际会展中心隆重举办。本次峰会邀请到了诸...