零识百科
作者:Tim Menapace
翻译:西溪明月
(周末快乐!送你一只佩奇…)
以下是正文:
区块链被认为是Web 3.0阶段的技术,而且由于该技术的分布式结构,它消除了单点故障。但这是否意味着根本不存在故障点了?让我们从技术角度看一些重大的区块链黑客/故障事件。
[备注:本文并非在讲不良的DB实施、web应用程序、秘钥处理或简单的社交工程等使比特币交易所或钱包受到黑客攻击的比特币黑客事件。]
51%attack
从技术角度看,51% 攻击可能是最典型的一种黑客攻击。显而易见,在理论上,要长久控制区块链,你需要50%的网络哈希算力。当下,这种对比特币网络(Bitcoin network)的攻击所花费的成本约为13亿美元。
但对于规模比较小的PoW区块链(整体哈希算力比较低),这便是潜在的威胁。以太坊平台Krypton就遭到了这样的攻击。攻击者租赁了云挖矿提供商NiceHash的算力,同时开始对Krypton现有的挖矿节点进行分布式拒绝服务( DDoS)攻击。随后通过重新运行PoW实现双花Krypton代币。
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
}
else
{
assert(0);
}
// morecode
}
这个漏洞只是发送一个带有无效消息类型的GET_XTHIN(请参阅python代码)。攻击发生时, 运行BU的6415个节点中有774个受到攻击,其中有500个节点被拿下。Xthin区块特征很可能是造成BU节点出现故障时间更长的原因,见下图。
BU内部的这种低代码质量为讨论扩展性添加了新燃料,人们也可能由此得出讨论结果。
BitcoinUnlimited线上节点。攻击发生在3月14日——表中第一个低谷处。
Bitcoin Unlimited nodes online. Attack occured on 14.March — first drop in the chart.
Antbleed:硬件后门
采用ASICS是唯一既经济又合理的挖掘比特币的方式。比特大陆(Bitmain)是ASCIS矿机的最大生产商。据估计,全球比特币哈希算力的70%来自比特大陆的蚂蚁矿机。同时,他们以全球20%的哈希率运营着最大的挖矿池即蚂蚁矿池。
比特大陆说,他们构建了“远程终止后门”,但它只用于测试,而不会被用作其他目的。
//code
void send_mac() {
//code
get_mac(“eth0”,&mac);
while(need_send)
{ // code
stop_mining = setup_send_mac_socket(s);
if(stop_mining)
{
applog(LOG_NOTICE,”Stop mining!!!”);
break;
} // code
} }
Web应用攻击
尽管声称不会提到Web应用程序的缺陷,但这个导致了硬分叉的缺陷,或许值得一提。
Steemit是基于区块链的社交媒体平台,该平台以其自己的代币即斯蒂姆币(steem)作为奖励来鼓励用户发布高质量文章。他们通过去中心化,希望避免审查以及任何类似facebook这样的中间人。尽管如此,Steemit平台的CEONed Scott说,关于facebook和reddit前端的登录集成还存在一个核心漏洞。黑客由此进入近260个账户,盗取了85,000美元。但如前所述,由于出现了硬分叉,所有这些钱已被退还,这点在steemit平台上很容易实现,因为他们有见证人共识机制。
结论
区块链技术仍处于初期阶段,我们不该相信那些承诺区块链不会被黑客入侵的言论。虽然对于区块链整个技术来说尚未出现任何重大缺陷/黑客攻击,但通常没人看到黑天鹅来了。
项目采访
领取专属 10元无门槛券
私享最新 技术干货