前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链安科技:智能合约call、delegatecall底层函数使用需谨慎

链安科技:智能合约call、delegatecall底层函数使用需谨慎

作者头像
辉哥
发布2018-08-10 14:29:46
3650
发布2018-08-10 14:29:46
举报
文章被收录于专栏:区块链入门区块链入门

一、ATN攻击事件的回溯

2018年5月11日ATN Token遭受恶意攻击(详见:https://atn.io/resource/aareport.pdf),攻击者利用DSAuth库与ERC223搭配使用具有的混合漏洞,通过精心构造的输入,让ATN主动调用合约的setOwner函数,将攻击者的指定地址设置为ower,窃取了ATN的所有权,窃取所有权之后,攻击者进行了窃取代币操作。

二、call、callcode、delegatecall函数说明

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

不安全使用call函数的例子如下:

上述例子中,call函数的调用地址(如上图中的_spender参数)是可以由用户控制的,攻击者可以将其设置为合约自身的地址,同时call函数调用的参数(如上图中的_extraData参数)也是可以由用户任意输入的,攻击者可以调用任意函数。攻击者利用上述操作,伪造成合约账户进行恶意操作,可能造成如下影响:

1、绕过权限检查,调用敏感函数,例如setOwer;

2、窃取合约地址持有的代币;

3、伪装成合约地址与其他合约进行交互;

三、安全建议

为了避免此类漏洞,成都链安科技建议:

1、谨慎使用call、delegatecall等底层函数,此类函数使用时需要对调用参数等进行限定,应对用户输入的call调用发起地址、调用参数做出严格限定,比如call调用的地址不能是合约自身的账户地址,call调用的参数由合约预先限定方法选择器字符串,避免直接注入bytes可能导致的恶意call调用;

2、对于一些敏感函数,不要将合约自身的账户地址作为可信地址。

成都链安科技自主研发的VaaS平台对call、delegatecall函数存在的安全问题可一键式自动检查并精确定位,VaaS(Verification as a Service)形式化验证平台,是一套针对多个区块链平台(EOS、ETH等)智能合约形式化验证工具,采用形式化验证方法对智能合约进行“军事级”的安全审计,可有效防止代码逻辑漏洞和安全漏洞,确保智能合约程序的安全性。VaaS平台的“一键式”自动化智能合约安全审计工具可自动、快速、准确地检测出10多种已发现的以太坊合约漏洞,让区块链更安全。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档