正文
Krypton的创始人:
“本次攻击可能是一次有预谋的针对其它以太坊区块链项目的攻击预演…… 由于以太坊易于分叉且线下操作方便,故而以以太坊为基础的区块链最容易被当作攻击目标,受到51%与DDoS联合起来进行的攻击。”
而受到黑客攻击后,在核心开发人员放弃该项目前,Krypton转变成为“以比特币为基础的工作量证明”。
智能合约漏洞
臭名昭著的TheDAO黑客事件,造成数百万以太币的损失,而这次攻击之所以能够成功便是因为一个智能合约漏洞。TheDAO(去中心化的自治组织)是以类似于JavaScript的solidity语言写就的智能合约结构。从根本上讲,TheDAO是一个投资基金,其商业逻辑是以代码编写的。所有投资者(又称持币者)可以对商业项目进行投票,并获得投资回报。
持币者的特征之一是可以提出分离TheDAO的建议。这也是黑客开始实施攻击的方式。针对该建议的投票期结束后,分离达成,并创建出新的DAO,而相比前者,后者并无特别之处。在splitDAO函数运行时,攻击者的代币被发送到新的DAO上。与此同时,withdrawRewardFor函数也会被调用,用以支付任何可用的投资回报。关键来了!在余额更新前,也就是在函数运行结束前,黑客再次调用splitDAO函数。就这样,旧DAO账户再次向新DAO账户发送代币。黑客一次次重复这个步骤。
他用这种方式分离TheDAO资产,并最终获取了360万以太币,当时相当于5000万美元。这次黑客事件导致了硬分叉的出现,并使以太坊分裂为以太经典(Ethereum Classic)和以太坊(Ethereum)。
Phil Daian对这次攻击做了一次非常好的技术分析。
区块链协议攻击
比特币网络(Bitcoin network)被当作原始区块链。但很长一段时间以来,该社区一直在就扩展问题努力达成共识。他们提出的一个解决方案是Bitcoin Unlimited(BU)(比特币核心钱包协议的一个分叉),用于扩大区块容量。
近来,BU的一个重要漏洞被人利用了。除提高区块容量外,BU引入了Xtreme Thinblocks,通过筛选交易(这些交易原本会进入内存池)而缩小区块大小。然而,这个功能至少存在两个重大漏洞,这两个漏洞已被检测出来并得到修复。随着github的发展,有人发现并利用了
the commit
(提交)这个漏洞。该漏洞是用C++语言写成的可达断言,以下为其简单编码。
void SendXThinBlock(CBlock &block, CNode*pfrom, const CInv &inv)
{
if(inv.type == MSG_XTHINBLOCK)
{
//code
}
else if(inv.type == MSG_THINBLOCK)
{
//code
}