KickICO价值770万美元的代币是如何被盗的

中心化问题

在之前的一篇文章中曾经谈过智能合约“中心化”的问题,很大一部分智能合约是处于“假去中心化”的状态,依然面临着单点威胁,以太坊的创始人V神曾经给真正的“去中心化”这个概念给过一个具体的定义,不满足定义的实际上都属于“假去中心化”。

去中心化程度也是区块链项目抗攻击能力很重要的一个指标,衡量是否为真正的去中心化V神给了一个具体的判断依据:

  • 结构去中心化 :系统由几台物理计算机组成?系统最多可以承受几台计算机同时崩溃?

  • 政治去中心化:有多少个体或者组织拥有系统的实际控制权?

  • 逻辑去中心化: 系统呈现和维护的接口和数据结构看起来更像一个整体,还是非晶群?一个简单的启发是:如果将系统分为提供者和用户两部分,那么这两个部分是否作为独立单元继续正常运行。

反观目前市面上大部分的以太坊智能合约,大多都设立的owner特权角色,很显然不满足“逻辑去中心化”这个条件,这会带来什么样的问题呢?

即使一份智能合约没有代码上的缺陷,它也会有很大的风险,我们称之为“单点威胁”,因为owner特权角色在一定程度上可以影响该智能合约的运行秩序,而我们并不能保证owner自己不作恶又或是owner特权不会被攻击者窃取。


KickICO盗币事件解析

合约地址:https://etherscan.io/address/0x27695e09149adc738a978e9a678f99e4c39e9eb9#code
合约(前)owner地址:https://etherscan.io/address/0x5031129a4a1c0eaa0b98f989f9f3087c9a23645

这里先放一个结论:KickICO代币被盗的根本原因是因为Kick合约中为owner权限设立了太多特权函数,而直接原因是因为Kick合约owner的私钥被攻击者窃取。

在事件发生之后,官方也发表了声明称是由于owner私钥被窃取导致,但是并没有说明为什么私钥会被窃取,这里不排除有合约owner为一己私利监守自盗的可能。

那攻击者拿到owner私钥后是如何进行盗币操作的呢?我们来看如下图:

图片.png

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

通过上面的图可以看到,攻击者调用了一个名为issue的函数从合约地址中转出了大量的代币。在转出大量的代币之前,攻击者为了躲避流通总量异常监控,攻击者先调用了另外一个函数:

图片.png

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

通过上面的图可以看到,攻击者调用destroy函数将他人大量的代币转入了合约内,这一进一出数个回合,代币的流通总量没有发生变化,攻击者很高明地利用这种方式变相转移了他人大量代币,同时又躲避了流通总量异常监测,给自己预留了很多时间来抛售代币获利。但,重点不是这个

看到这里所有的Kick项目的投资人都应该捏一把汗,因为你的资产可以被某个人随意操控,同时这个人还具有“随意印钞”的无上权利。


...我们来看看合约对这两个特权函数是如何定义的:

图片.pnghttps://etherscan.io/address/0x27695e09149adc738a978e9a678f99e4c39e9eb9#code

issue函数的代码量很少,我们可以看到,这个函数虽然是有onlyOwner限制,但是此函数居然能直接对某个账户进行发币,而没有任何限制,我们再来看看destroy函数。

图片.png这个函数虽然没有onlyOwner修饰符,但是从417行可以看出来,owner还是有特权的,若调用者是owner的时候,就不验证_from参数是否为调用者了。

我们在看两行关键代码(420-421),可以看到这两行代码是作用是控制_from地址中的代币数量减少,由于上面提到的417行,所以owner可以直接把任意账户的代币减少。。。

其他隐患

经BCSEC团队调查,目前市面上70%的Token智能合约都存在特权角色,不同的是他们的特权大小不一,所以从理论上来说,这70%的智能合约都存在单点威胁,已发生的案例就有:

  1. 去中心化交易所Bancor钱包私钥被窃取,25000个eth被盗

  2. PeckShield区块链安全公司披露tradeTrap问题,大量代币mintToken函数存在整型溢出,owner可重置他人账户余额


总结

目前大部分智能合约设立特权角色从业务角度来说是可以理解的,但是这是与区块链的核心思想相悖的,区块链去中心化的目的之一就是消除单点威胁,而设立特权角色实际上是制造单点威胁,面对“假去中心化”的项目,投资人需要谨慎以及提高警惕,因为特权账户随时可能会监守自盗亦或是特权账户被窃取而产生大量经济损失。

*文章为作者独立观点,不代表BSCEC立场

转载此文章须经作者同意,并请附上出处(未知网站)及本页链接。

白帽汇安全研究院原创2018-07-28 19:03:23 5644