标签:存在 uber llb 安全审计 经验 怎样 receiver 开放 strong
事情发生在5月中旬,ATN技术人员发现Token合约由于存在漏洞受到攻击。不过ATN基金会随后透露,将销毁1100万个ATN,并恢复ATN总量,同时将在主链上线映射时对黑客地址内的资产予以剔除,确保原固定总量不变。
以下是事件还原。
事件回顾
2018年5月11日中午,ATN技术人员收到异常监控报告,显示ATN Token供应量出现异常,迅速介入后发现Token合约由于存在漏洞受到攻击。以下是黑客的攻击操作以及利用合约漏洞的全过程。
攻击
这次攻击主要分为4步。首先,黑客利用ERC223方法漏洞,获得提权,将自己的地址设为owner:
第二,黑客在获得owner权限后,发行1100w ATN到自己的攻击主地址:
第三,黑客将owner设置恢复,企图隐藏踪迹:
最后,黑客从主地址将偷来的黑币分散到14个地址中:
利用合约漏洞
ATN Token合约采用的是在传统ERC20Token合约基础上的扩展版本ERC223 ,并在其中使用了dapphub/ds-auth库。采用这样的设计是为了实现以下几个能力:
单独使用ERC223或者ds-auth库时,
并没有什么问题,但是两者结合时,
黑客利用了回调函数回调了setOwner方法,
从而获得高级权限。
ERC223转账代 码如下:
当黑客转账时在方法中输入以下参数:
该交易执行的时候,
receiver会被_to(ATN合约地址)赋值,
ATN 合约会调用_custom_fallback
即DSAuth中的setOwner(adddress)方法,
而此时的msg.sender变为ATN合约地址,
owner_参数为_from(黑客地址)
ds-auth库中setOwner代码如下:
此时setOwner会先验证auth合法性的,而msg.sender就是ATN的合约地址。
setOwner的modifier auth代码如下:
通过利用这个ERC223方法与DS-AUTH库的混合漏洞,黑客将ATN Token合约的owner变更为自己控制的地址。获取owner权限后,黑客发起另外一笔交易对ATN合约进行攻击,调用mint方法给另外一个地址发行1100w ATN。
最后,黑客调用setOwner方法将权限复原 。
PS. 截至发稿前,ATN官方已声称:黑客将黑币分散在14个不同的新地址中,而这些地址中并没有ETH,暂时不存在立即转账到交易所销赃的风险。
漏洞是怎么造成的?
这次事件主要是利用了开发者对以太坊底层函数call、callcode、delegatecall的不当使用造成的。
call、callcode、delegatecall是以太坊智能合约编写语言Solidity提供的底层函数,用来与外部合约或者库进行交互。不当的使用会造成很严重的后果。
例如,以下情况:
上述例子中,call函数的调用地址(如上图中的_spender参数)是可以由用户控制的,攻击者可以将其设置为合约自身的地址,同时call函数调用的参数(如上图中的_extraData参数)也是可以由用户任意输入的,攻击者可以调用任意函数。
攻击者利用上述操作,伪造成合约账户进行恶意操作,可能造成如下影响:
因此,在编写合约时,此类函数使用时需要对调用参数的安全性进行判定,建议谨慎使用。
怎样避免此类漏洞
为了避免此类漏洞,我们提醒开发者应注意以下几点。
安全上链哪家强?华为云区块链服务(Blockchain Service)是面向企业及开发者的高性能、高可用和高安全的区块链技术平台服务,可以帮助企业和开发人员在华为云上快速、低成本的创建、部署和管理区块链应用。华为云区块链开放易用:基于Hyperledger1.0、kubernetes搭建,配置简单,数分钟内即可完成部署,提供全流程、多维度的自动化运维服务。安全隐私有保障!完善的用户、秘钥、权限管理和隔离处理,多层加密保障,国密和同态加密等隐私处理,可靠的网络安全基础能力,运营安全无忧。
欢迎体验!https://www.huaweicloud.com/product/bcs.html
以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末
标签:存在 uber llb 安全审计 经验 怎样 receiver 开放 strong
原文地址:https://www.cnblogs.com/hwpaas/p/9262481.html