更多精彩 >

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

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


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

猜你喜欢

石油币,一场闹剧还是一场伟大的社会实验?

资讯区块链石油币

自布雷顿森林体系瓦解后,“美元黄金”的时代结束,但“石油美元”的时代也自此开始。世界大部分国家的石油...

8分钟前

被数字货币“缴税”困住的国家们

资讯区块链数字货币

由于加密市场的严谨性无法与法币市场相媲美,加之匿名化等特性,数字货币经常被用于走私、贩毒、洗钱、地下...

1小时前

黑客攻击偷了18亿?区块链的安全软肋无解?

资讯区块链安全

2018年黑客攻击造成的全球经济损失达到18亿美元,其中相当一部分受害者是加密数字货币和区块链技术领...

1小时前

北京首例区块链存证案判决 "区块链+司法"的想象力

资讯区块链司法

今年以来区块链电子存证法律效力已屡次被司法部门认可。早在今年7月份,杭州互联网法院在一起著作权纠纷案...

1小时前

互联网企业区块链升级的最佳姿势

资讯区块链互联网行业区块链技术

互联网行业在我国经过三十年的发展,已经从最初的线上门户网站阶段、电商时代、发展到了现如今移动互联网、...

7小时前

比特上市紧锣密鼓 行业监管步步为营

监管腾讯资讯区块链

《共享财经》记者今日获悉,据相关媒体报道,比特大陆或将于下周在港交所交表,正式启动上市流程。

2018-08-27

价值中国专访区块链之父:区块链的历史、现实、和未来

资讯区块链区块链技术区块链系统

W.Scott Stornetta被公认为“区块链之父”。他也是密码学和分布计算领域的知名人物。

2018-08-27

为什么委内瑞拉的石油加密货币不被“信任”

资讯区块链石油加密货币

共享财经据外媒8月26日报道,兰迪·布里托(Randy Brito)是比特币委内瑞拉的负责人,他领导...

2018-08-27

自如们的金融秘密:借道“信托计划”向租客放贷

金融资讯区块链

北京青年报记者了解到,鼎家科技的发展模式简单总结就是“拿房-出租-融资-再拿房”,这种模式给鼎家科技...

2018-08-27

炒币、蹭热点 上市公司做这些事的结果是……

资讯比特币区块链炒币

日前,去年靠炒币大幅获利近700万元的新三板公司毅航互联,公布了2018年半年报。

2018-08-27

AIWTC人工智能全球旅行链-首场项目发布会取得圆满成功!

人工智能资讯区块链

据悉,2018年08月25日下午13:30,“人工智能+区块链应用落地开启旅游3.0时代暨AIWTC...

2018-08-27

警惕“房租贷”背后的金融乱象

资讯区块链房租贷

在“校园贷”等诸多消费场景被监管层一一限制后,资本快速地找到了下一个场景——房租分期,这一“创新”被...

2018-08-27

朱嘉明:我们要用怎样的历史观看待区块链?

资讯区块链朱嘉明

在我看来,至少可以追溯到1946年至1960年代初的Macy Conferences,那是在纽约持续...

2018-08-27

谷歌‘比特币价格’搜索量跌至三年来最低

谷歌资讯区块链

谷歌趋势是谷歌推出的一款基于搜索日志分析的应用产品,它通过分析谷歌全球数以十亿计的搜索结果,告诉用户...

2018-08-27

于佳宁:区块链已在13个行业赋能实体经济

资讯区块链于佳宁

第一,区块链成为全球技术发展的前沿阵地,国际竞争新赛道。根据 IBM 区块链发展报告数据显示,全球9...

2018-08-27

财链社(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芯片已完成交货。