以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末

事情发生在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库。采用这样的设计是为了实现以下几个能力:

  1. 天然支持Token互换协议,即ERC20TokenERC20Token之间的直接互换。本质上是发送ATN时,通过回调函数执行额外指令,比如发回其他Token。
  2. 可扩展的、结构化的权限控制能力。
  3. Token合约可升级,在出现意外状况时可进行治理。

单独使用ERC223或者ds-auth库时,

并没有什么问题,但是两者结合时,

黑客利用了回调函数回调了setOwner方法,

从而获得高级权限。

ERC223转账代  码如下:

当黑客转账时在方法中输入以下参数:

  • from: 0x2eca25e9e19b31633db106341a1ba78accba7d0f——黑客地址;
  • to: 0x461733c17b0755ca5649b6db08b3e213fcf22546——ATN合约地址;
  • amount: 0
  • data: 0x0
  • custom_fallback: setOwner(address)

该交易执行的时候,

receiver会被_to(ATN合约地址)赋值,

ATN 合约会调用_custom_fallback

DSAuth中的setOwner(adddress)方法,

而此时的msg.sender变为ATN合约地址,

owner_参数为_from(黑客地址)

ds-auth库中setOwner代码如下:

此时setOwner会先验证auth合法性的,而msg.sender就是ATN的合约地址。

setOwnermodifier auth代码如下:

通过利用这个ERC223方法与DS-AUTH库的混合漏洞,黑客将ATN Token合约的owner变更为自己控制的地址。获取owner权限后,黑客发起另外一笔交易对ATN合约进行攻击,调用mint方法给另外一个地址发行1100w ATN。

最后,黑客调用setOwner方法将权限复原 。

PS. 截至发稿前,ATN官方已声称:黑客将黑币分散在14个不同的新地址中,而这些地址中并没有ETH,暂时不存在立即转账到交易所销赃的风险。

漏洞是怎么造成的?

这次事件主要是利用了开发者对以太坊底层函数callcallcodedelegatecall的不当使用造成的。

callcallcodedelegatecall是以太坊智能合约编写语言Solidity提供的底层函数,用来与外部合约或者库进行交互。不当的使用会造成很严重的后果。

例如,以下情况:

上述例子中,call函数的调用地址(如上图中的_spender参数)是可以由用户控制的,攻击者可以将其设置为合约自身的地址,同时call函数调用的参数(如上图中的_extraData参数)也是可以由用户任意输入的,攻击者可以调用任意函数。

攻击者利用上述操作,伪造成合约账户进行恶意操作,可能造成如下影响:

  1. 绕过权限检查,调用敏感函数,例如setOwer;
  2. 窃取合约地址持有的代币;
  3. 伪装成合约地址与其他合约进行交互;

因此,在编写合约时,此类函数使用时需要对调用参数的安全性进行判定,建议谨慎使用。

怎样避免此类漏洞

为了避免此类漏洞,我们提醒开发者应注意以下几点。

  1. 谨慎使用call、delegatecall等底层函数。此类函数使用时需要对调用参数进行限定,应对用户输入的call调用发起地址、调用参数做出严格限定。比如,call调用的地址不能是合约自身的账户地址,call调用的参数由合约预先限定方法选择器字符串,避免直接注入bytes可能导致的恶意call调用。
  2. 对于一些敏感函数,不要将合约自身的账户地址作为可信地址
  3. 准备修复措施,增加Guard合约禁止回调函数向ATN合约本身回调
  4. 增加黑名单合约,随时冻结黑客地址。
    1. 合约无小事
    2. 综合上文的分析,我们认为,call函数的使用一定要小心,在智能合约开发中尽量避免call函数的使用,如果使用需要对其相关参数进行严格的限定。另一方面,智能合约在部署之前应进行安全审计,比如代码的形式化验证等。
    3. 合约的安全审计,仅依靠开发者的经验和能力总有隐患,过去业内的几次合约漏洞事件也说明了这个问题,开发者务必要引起重视。

安全上链哪家强?华为云区块链服务(Blockchain Service)是面向企业及开发者的高性能、高可用和高安全的区块链技术平台服务,可以帮助企业和开发人员在华为云上快速、低成本的创建、部署和管理区块链应用。华为云区块链开放易用:基于Hyperledger1.0、kubernetes搭建,配置简单,数分钟内即可完成部署,提供全流程、多维度的自动化运维服务。安全隐私有保障!完善的用户、秘钥、权限管理和隔离处理,多层加密保障,国密和同态加密等隐私处理,可靠的网络安全基础能力,运营安全无忧。

欢迎体验!https://www.huaweicloud.com/product/bcs.html

原文地址:https://www.cnblogs.com/hwpaas/p/9262481.html

时间: 2024-11-05 18:43:17

以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末的相关文章

openssl 再爆惊天漏洞及紧急修复指南

openssl 又摊上大事了,2014 年6月5日,SSL/TLS Man-in-the-Middle Vulnerability 该漏洞使得攻击者可以拦截恶意中间节点加密和解密数据,同时强迫使用弱密钥的ssl客户端暴露在恶意节点中,当软件使用OpenSSL的受影响版本,通过 网页浏览.电子邮件和VPN进行内容和身份验证等加密通讯时会有篡改的风险. 这里介绍openssl的升级方法,当前不受影响的最新版本为OpenSSL 1.0.1h, wget http://www.openssl.org/s

zabbix再爆高危SQL注入漏洞,可获系统权限

漏洞概述 zabbix是一个开源的企业级性能监控解决方案.近日,zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者无需授权登陆即可登陆zabbix管理系统,也可通过script等功能轻易直接获取zabbix服务器的操作系统权限. 官方网站 http://www.zabbix.com 影响程度 攻击成本:低 危害程度:高 是否登陆:不需要 影响范围:2.2.x, 3.0.0-3.0.3.(其他版本未经测试) 漏洞测试 在您的zabbix的地址后面加上如

以太坊代币合约详析

以太坊代币 在以太坊系统中,存在作为基础货币的 Ether(以太),以及同样可以作为货币使用的 Token(代币). 以太坊与其他加密货币的主要不同在于,以太坊不是单纯的货币,而是一个环境/平台.在这个平台上,任何人都可以利用区块链的技术,通过智能合约来构建自己的项目和DAPPS(去中心化应用). 如果把以太坊理解成互联网,DAPPS则是在上面运行的网页.DAPPS是去中心化的,意味着它不属于某个人,而是属于一群人.DAPPS发布的方式通常是采用被称为 ICO 的众筹方式.简单来说,你需要用你的

疯狂的矿圈,挖矿软件抽水,有作者一天狂赚几百以太坊

加密数字货币有多火,挖矿就有多热闹.因为获得加密数字货币的方法只有两种,一种是交易,另一种就是"挖矿".普通用户挖矿是一个十分复杂的事情,不但需要搞清楚自己的显卡品类,还要根据自己的显卡和CPU到到conf文件去一一配置.如果想要挖特定的币种,还需要找到对应的挖矿程序才可以.真的很复杂!哪里有困难,哪里就有解决办法.为了解决普通用户挖矿设备的配置困难问题,挖矿软件诞生了.挖矿软件通常是由XX团队推出的矿工挖矿辅助软件,它的功能主要是帮助矿工简化挖矿设备配置流程,协助矿工更好的挖矿.不同

第18讲 | 智能合约与以太坊

在前面的文章里,我们介绍了区块链的核心技术,也穿插介绍了一些项目.然而每个区块链都有自己的特色,接下来我们将针对每个项目进行详细讲解.今天我们就来讲讲智能合约和以太坊项目. 今天我们从智能合约这个概念入手,聊聊什么是以太坊项目以及它的发展历史.最后还会介绍几款钱包给你,希望通过今天文章的讲解,你也可以尝试在以太坊上编写简单的智能合约. 智能合约的概念 不同于法律意义上的合约概念,区块链领域的合约表达的是可以“自治自理”的 计算机协议,这套协议具有自我执行.自我验证的属性. 如果完全从技术角度来看

针对网站漏洞怎么修复区块链漏洞之以太坊

前段时间以太坊升级架构,君士坦丁堡的硬分叉一个升级代号,被爆出含有高危的网站漏洞,该漏洞产生的原因是由于开启了新的协议模式eip1283导致的,也是区块链漏洞当中危害较为严重的,可以让一些交易进行重入,一个转账可以导致写入2次,但该漏洞并不是确实的可以进行重入漏洞.以太坊区块链在发现该漏洞之后,紧急的停止了以太坊的硬分叉升级,并与上个星期五召开了内部会议对其漏洞进行修复,延期对以太坊的硬分叉升级. 区块链当中,以太坊属于比较大的虚拟币,位列于比特币,第二.关于该漏洞的详情我们来分析一下,关于这次

Struts2再爆远程代码执行漏洞(S2-016)

Struts又爆远程代码执行漏洞了!在这次的漏洞中,攻击者可以通过操纵参数远程执行恶意代码.Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行.  描述 影响版本 Struts 2.0.0 - Struts 2.3.15 报告者 Takeshi Terada of Mitsui Bussan Secure Directions, Inc. CVE编号 CVE-2013-2251 漏洞证明 参数会以OGN

ImageMagick爆高危命令执行漏洞

ImageMagick爆高危命令执行漏洞 0x01 前言 ImageMagick是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过89种基本格式的图片文件,包括流行的TIFF.JPEG.GIF.PNG.PDF以及PhotoCD等格式.众多的网站平台都是用他渲染处理图片.可惜在3号时被公开了一些列漏洞,其中一个漏洞可导致远程执行代码(RCE),如果你处理用户提交的图片.该漏洞是针对在野外使用此漏洞.许多图像处理插件依赖于ImageMagick库,包括但不限于PHP的imagic

基于以太坊实现代币发布

https://blog.csdn.net/Y_xiaohe1234/article/details/76848150 一.什么是代币?代币是利用以太坊的智能合约编写的数字货币.程序员可以通过编写智能合约代码,创建一种新的数字货币.你可以实现的功能: 基本功能:-创建数字货币,设置货币的名称.货币总量.货币图标等基本参数.-创建货币交易功能.实现货币在不同用户之间的转移. 上面的是基本功能,已经可以实现基本的代表交换,下面是高级功能,可以实现更加复杂的应用.高级功能:-创建货币的管理者.虽然区块