漏洞评估

安全等级:高

影响合约:atn-contracts

影响方面:导致 ATN Token 总供应量发生变化

事件经过:2018.5.11 上午 11:46,ATN 技术人员收到异常监控警示,显示 ATN Token 供应量出现变化,迅速介入后确定 Token 合约受到黑客攻击。ATN 技术团队极速反应,定位到 ERC223 标准推荐合约实现与 ds-auth 库同时使用时可能发生非常罕见的权限漏洞,并迅速堵上此漏洞、冻结黑客增发的 Token 及实施对黑客的追踪;同时 ATN 与第三方专业区块链安全机构慢雾科技深度合作,联合对 ATN 合约进行再次审计。审计过程中,慢雾安全团队对 ATN 技术团 队的快速反应和修复合约表现的高效表示认可,修复后的合约也成功通过了慢雾严谨的安全审计,合约安全威胁已解除。

漏洞分析和攻击过程

为了让 ATN 接收合约具备转账后处理功能,ATN Token 合约采用的是兼容 ERC20 Token 标准的扩展标准 ERC223,并在其中使用了 dapphub/ds-auth 库。单独使用 ERC223 或者 ds-auth 库时,并没有什么问题,但是两者结合时,黑客利用自定义回调函数回调 setOwner 方法,从而获得高级权限。通过利用这个 ERC223 方法与 ds-auth 库的混合漏洞,黑客将 ATN Token 合约的 owner 变更为自己控制的地址。获取 owner 权限后,黑客发起另外一笔交易对 ATN 合约进行攻击,调用 mint 方法给另外一个地址进行 Token 的发行。最后,黑客调用 setOwner 方法将权限复原。

抵御攻击

经过追踪,发现黑客将增发的 ATN Token 分散在 14 个不同的新地址中,而这些地址中并没有 ETH,暂时不存在立即转账到交易所销赃的风险。而 ATN 技术团队有能力采取技术手段立即冻结黑客的黑币,恢复供应量的变化,所以,重点在如何追踪到黑客,于是 ATN 技术团队采用如下应对:

  1. 准备修复措施,增加 Guard 合约通过禁止向 ATN 合约地址发送 ATN 进而禁止自定义回调函数向 ATN 合约本身回调以修复此次攻击漏洞;增加黑名单合约,随时冻结黑客地址;

  2. 监控黑客地址的 ETH、向交易所发送的充值交易,以获得进一步的追责证据;

  3. 获得证据后,立即启动修复流程,将黑客相关地址加入黑名单,禁止其转移 ATN Token;

  4. ATN 基金会销毁等量 ATN Token 以恢复供给总量,并在 ATN 主链上线时予以修正。

最终监控到黑客向某交易所充值 1000 个 ATN 后,ATN 团队即刻部署 Guard 安全修复合约,对黑客相关地址予以禁止转账处理,并获得追责证据:

https://etherscan.io/tx/0x18bd80b810f6a6b6d397901d677657d39f8471069bcb7cfbf490c1946dfd617d

这意味着我们将有可能获得黑客的 KYC 信息,ATN 团队可在交易所的配合下向黑客进行追踪,并保留相应追责的权利。

同时 ATN 基金会销毁 1100 万个 ATN,恢复 ATN 总量,并将在主链上线映射时对黑客地址内的资产予以剔除,确保原固定总量不变。

基于 ERC223 的 ATN Token 特性

  1. ERC223 是对 ERC20 的改进、兼容的同时,提供更好的 token 功能,使得接收合约具备转账后处理功能。了解更多可访问:

    https://github.com/ethereum/EIPs/issues/223

    且支持跨链,可用于 AI Market 做跨链 Token 支付;

  2. 因为 ATN Token 的设计初衷包含作为转账燃料来使用,用户或 DAPP 使用 ATN 进行支付,ATN 代币合约要有能力在转账完成后触发其他业务逻辑;

  3. 另外 ERC20 代币无法用于发布众筹合约,而基于 ERC223 的 ATN 可以,可以参考 ATN 的 Swap 合约:

    https://github.com/ATNIO/atn-contracts/blob/master/src/AGT2ATNSwap.sol

总结

合约无小事,由于 ATN 合约设计增加多项功能及治理机制,增加了审计的难度和复杂度,在发布到链上之前已进行几次内部和外部审计。区块链合约的安全,仅依靠开发者的经验和能力并非万无一 失。过去业内的几次合约漏洞事件也说明了这个问题,如著名的 TheDAO 被盗、近来的 EDU、BAIC、SMT 等 ERC20 漏洞攻击。

而 ATN 技术团队依靠丰富的合约部署经验、夯实的技术力量、极速反应的抵御策略,几乎零损失的化解了这次黑客攻击,守护了社区的整体利益,并保留对黑客追责的权利。

这次 ATN 成功的对以太坊合约漏洞的攻击抵御,也为以太坊社区其他使用 ERC223 标准的项目成员提供了漏洞 review 与修复案例,为整个以太坊生态发展贡献了积极的力量。

在 ATN 主链上线前,ATN 技术团队将保持对合约与 Token 状态的实时监控,并与慢雾科技等多家安全审计机构合作,在主链上线前开源代码,确保未来 ATN 公有链生态的开源与安全。

ATN 与慢雾达成战略合作

慢雾科技(SlowMist)是一家专注区块链生态安全的公司,其创始团队拥有丰富的网络安全攻防实战经验。该团队相关成员曾为谷歌、 微软、W3C、中国公安部、腾讯、阿里巴巴及百度等公司和政府机构输出过安全能力,其核心能力包括安全审计、防御部署和地下黑客风向标追踪和防御等。

在修复完漏洞后,ATN 团队立即联系到慢雾,反馈并提供《ATN 抵御黑客攻击的报告》( https://atn.io/resource/aareport.pdf ),ATN 技术团队全力配合慢雾对 ATN 合约进行严格的、全方位的安全审计。最终,慢雾给出了积极的安全审计结果,并发布了 ATN 基于 ERC223 的合约安全审计报告。

ATN 已启动主链加速计划,并将与慢雾等安全机构在合约、节点安全标准及运行环境和风险控制等方面开展长期的战略合作。双方合作不仅仅为不久后的 ATN 主链上线保驾护航,更将为长远的区块链生态安全的持续建设添砖加瓦。

ERC223智能合约ATN币出现owner权限窃取漏洞相关推荐

  1. EOS智能合约开发系列(九): 高级权限设置

    知识星球地址:https://t.zsxq.com/NNVRZzr 欢迎访问知识星球,并留言探讨.

  2. eos源码赏析(十二):EOS之从“狼人游戏”看智能合约调用及权限分配(下)

    接上篇,本篇从智能合约内部权限使用出发,结合"狼人游戏"源码,谈谈eosio中权限的分配及使用,本文主要分为以下三部分: 狼人团队的声明探析 多签名账户 权限eosio.code的 ...

  3. eos源码赏析(十一):EOS之从“狼人游戏”看智能合约调用及权限分配(上)

    火了没几天的"狼人游戏"因某些原因遭到口诛笔伐而下线,后期参与的玩家可谓损失惨重,而这一切的操盘仿佛都指向一个并不算匿名的匿名团队,毕竟在区块链上任何动作的执行都是可追溯的.该游戏 ...

  4. 使用remix发布部署 发币 智能合约

    Remix是一个基于浏览器的编译器和IDE,使用户能够使用Solidity语言构建以太坊合约并调试事务. 在上一篇文章已经成功的使用代码讲智能合约编译并且发布部署到了链上,可是在部署 发币的智能合约 ...

  5. 固化EOS智能合约,监管升级权限,净化EOS DAPP生态

    最近EOS版的Fomo 3D狼人杀游戏骗局引发了大家对EOS智能合约的安全性的大讨论. 和以太坊智能合约的不可升级不同,EOS智能合约可升级,因而保存在智能合约中的数据称不上去中心化,因为智能合约的管 ...

  6. 【许晓笛】 EOS 智能合约案例解析(2)

    详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能 ...

  7. 【许晓笛】EOS 智能合约案例解析(2)

    详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能 ...

  8. Qtum量子链QIP-5提案:在智能合约交易输出脚本上增加签名证明,允许用户以代付方式调用合约

    ​摘 要 Qtum量子链的主要目标之一是建立基于权益共识机制(PoS).并支持 UTXO 的智能合约模型.在智能合约层面上,Qtum 量子链兼容比特币 UTXO 模型和符合 AAL 规范的虚拟机,其中 ...

  9. 【智能合约】编写复杂业务场景下的智能合约——可升级的智能合约设计模式(附Demo)

    可升级的以太坊智能合约设计模式 目录 可升级的以太坊智能合约设计模式 智能合约的现状 智能合约的局限 智能合约目前的发展方向 如何利用智能合约实现复杂的业务场景 智能合约设计模式的技术点 智能合约设计 ...

最新文章

  1. JavaWeb实现分页的四种方法
  2. codeforces educational round110 e
  3. C语言 ungetc将变量存放的字符返回给stdin输入流
  4. 关于SAP Cloud Platform ABAP环境费用的问题
  5. 微信js-sdk使用
  6. 安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置
  7. css3 transition的各种ease效果
  8. 2020-01-14 IP/TCP/UDP 对应的RFC编号
  9. linux 卡在grub_关于linux开机进入grub问题的解决方法
  10. java还原混淆代码_飘云阁安全论坛如何还原混淆加密的JAVA代码 - Powered by Discuz!...
  11. Linux(七,八)SHELL解释器、用户和用户组管理详解
  12. 【编码实现】结合encoder和projector对w进行优化(projector_encoder.py)
  13. 计算机网络设备的运行温度,计算机机房控制温度与湿度方法
  14. Rust 从入门到精通01-简介
  15. pytorch系列教程(四)-自定义损失函数
  16. 数据库实验2——使用SQL语句创建、修改和删除基本表
  17. S32DS实时查看变量的值
  18. 拉面哥的火爆看新媒体时代的底层逻辑!
  19. 关于某蔡傅里叶变换课的思考(元旦前更新)
  20. 序列化:Protobuf 与 JSON、XML 的对比

热门文章

  1. 酷狗音乐html5韩国,韩国SHOFAR MUSIC独家入驻酷狗 脸红的思春期掀收听热
  2. SM5308原厂2.1A 充电 2.4 A 放电高集成度移动电源IC芯片SOC
  3. bootstrap 幻灯片的实现
  4. InfluxDB 踩坑小记
  5. 如何用主机名添加网络打印机
  6. 电子学堂YY语音群课 加入方法
  7. Flashy Graphs Sans Flash
  8. Windows Server 2012 将【我的电脑】添加到桌面图标
  9. 微信分享--图片显示问题
  10. 【Linux】win10/ubuntu 双系统安装遇到 gnu grub 2.0.3 或者 error symbol ‘grub_calloc‘ not found 的解决方法