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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链入门

【链安科技】无限授权转账漏洞

Lightcoin 合约的 transferFrom() 函数,即授权转账函数,在执行完转账后本该修改授权金额,减去已转出部分金额。但这一步骤中把这授权账户地址...

8420
来自专栏区块链技术指北

构建 EOS 区块链浏览器

前面的文章讲解了如何让 nodeos 支持将链上数据实时异构到 MySQL 以及如何部署开源的区块链浏览器 API,但问题来了,没有前端展示,对于用户而言不够直...

29030
来自专栏FreeBuf

恶意软件的小伎俩,伪装成Cloudflare页面默默挖矿

FileTour是一种广告软件,通常作为游戏和其他软件的破解或欺骗手段传播。这个软件包是界定于广告软件和PUP以及更危险的计算机感染类型(如密码窃取木马和矿工)...

11530
来自专栏FreeBuf

看我如何利用OSINT技术黑掉加密货币挖矿工具

? 在实施攻击之前,公开资源情报计划(OSINT)是我们收集信息的首选技术。在此之前,也有很多使用OSINT实现攻击的事例。随着物联网设备的不断发展,我们现在...

31770
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–资产会计(162)-19定期处理-AFAB折旧过帐运行

4.7.3 AFAB折旧过帐运行 起初过帐至固定资产会更改资产会计中的计划折旧。然而,资产负债表和损益表的累计折旧科目和折旧科目并不会立即更新。直到执行定期折...

42670
来自专栏极客编程

python在以太坊开发中节点和网络如何选择?

以太坊协议定义了一种方法,用于人们通过网络与智能合约相互作用。为了获得关于合约、账户余额和新交易状态等最新的信息,协议需要与网络上的节点进行连接。这些节点不断地...

12730
来自专栏jouypub

解决微信公众号文章的防盗链

写一个服务,把微信图片下载到本地,然后放在静态文件目录中,修改微信图片中的域名为自己的IP或域名,备注:程序请求时,referer需要时空的

83910
来自专栏Python与爬虫

黑客已经盗了15,945,221.72 USD

myetherwallet 昨日发推特说,他们的DNS 被污染,导致部分用户进入到了假的 网站,从而导致ETH被盗

12710
来自专栏丑胖侠

以太坊实践经验之《eth.blockNumber结果为0》

问题场景 在使用以太坊ETH的过程中遇到这样一个问题,就是通过rpc 控制台调用eth.blockNumber获得的返回结果为0。如果没有产生区块或没有同步到区...

56670
来自专栏飞雪无情的博客

从Hexo迁移到Hugo-送漂亮的Hugo Theme主题

自从Hugo出来后,作为Go语言(golang)的重度用户的重度用户,一直想把自己的博客迁移到Hugo,但是一直没有行动,主要原因在于,我的博客使用的一款主题m...

62310

扫码关注云+社区

领取腾讯云代金券