美文网首页区块链入门
链安科技:智能合约call、delegatecall底层函数使用

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

作者: 笔名辉哥 | 来源:发表于2018-07-20 21:59 被阅读12次

    一、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多种已发现的以太坊合约漏洞,让区块链更安全。

    相关文章

      网友评论

        本文标题:链安科技:智能合约call、delegatecall底层函数使用

        本文链接:https://www.haomeiwen.com/subject/sqccmftx.html