更多精彩 >

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

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


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

猜你喜欢

区块链世界十大原则

资讯区块链去中心化

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

6小时前

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

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

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

6小时前

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

资讯区块链电信诈骗

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

6小时前

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

资讯区块链区块链技术

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

6小时前

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

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

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

6小时前

返利浪潮如伟哥 盲目跟风FCoin小交易所在飞蛾扑火

资讯区块链交易所

小交易所盲目跟风,提供更大比例分红的做法,是在飞蛾扑火。

2018-06-30

完善区块链与监管,全靠“三箱”:“回收箱”、“暗箱”和“沙盒”

监管资讯区块链

真正“乌托邦”式的社会只存在于小说和电影之中,“去中心化”的美梦终究要回归“中心化”的监管这一现实中...

2018-06-30

颠覆蚂蚁金服:“耶鲁帮”的新金融旅程

蚂蚁金服资讯区块链

“蚂蚁金服就是旧时代的公司,DCC和蚂蚁金服两个时代之间的对抗。”

2018-06-30

收割完币圈的矿机巨头们,下一城:转型与股市并进

资讯区块链币圈矿计

为实现可持续发展并提升公众形象,矿机商巨头转型动作以进军AI芯片为主,但AI芯片市场面临与原有市场巨...

2018-06-30

交易所安全问题或将再次引爆?用户资金安全堪忧!

资讯区块链交易所

毫无疑问,交易所是当下区块链最重要,也是最热门的应用。

2018-06-30

深入了解阿里巴巴与区块链、比特币的关系

阿里巴巴比特币区块链

虽然比特币从各大论坛再到人们的餐桌都饱受批评,但是仍然有人坚信对于亚马逊这样的平台来说,接受比特币将...

2018-06-30

AION 要做「区块链互联网」,但达成共识很难|标准共识评级

资讯区块链

北京时间 2018 年 6 月 29 日,标准共识发布针对区块链项目「AION」的一般投资风险评级报...

2018-06-29

“打车链”真的来了!陈伟星将于29日召开VV Share发布会

资讯区块链打车链

快的打车创始人陈伟星将于6月29日晚20:00在“中国乌镇.世界区块链大会”召开VV Share白皮...

2018-06-29

谈谈货币竞争:理想很丰满,现实仍显很骨感

资讯区块链区块链论坛

所谓私人货币竞争体制,也称自由银行体制,指的是由私人银行竞争性发行货币。古代最早的货币是私人货币。

2018-06-29

财链社(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全球区块链高峰论坛暨首届区块链应用成果体验展在菲律宾马尼拉圆满落幕。