除了51%攻击之外,区块链安全漏洞中还存在着一类全新分支,而研究人员们也刚刚开始对其进行探索——这就是智能合约漏洞。巧合的是,以太坊经典、特别是其背后的设计思维,正是理解智能合约漏洞的绝佳切入点。

所谓智能合约,属于在区块链网络之上运行的计算机程序。它可以根据预先制定的规则与条件自动完成加密货币的转移。智能合约有着很多潜在用途,例如支持真实法律合约或者复杂的金融交易等等。而其另一个重要用途,同时也是我们感兴趣的方向,就是建立起一种投票机制。通过这种投票机制,风险投资基金的所有投资者都能够参与进来,共同决定资金的具体分配方式。

2016年,名为去中心化自治组织(简称DAO)的基金正式建立,其实现基础正是以太坊区块链。此后不久,一名攻击者通过利用DAO智能合约管理系统中存在的某一无法预料的缺陷,偷走了总价值超过6000万美元的加密货币。从本质上讲,这项缺陷允许黑客在系统未将注册资金识别为已撤回的前提下继续向帐户申请资金。

实时智能合约中的bug可以引发一种独特的高危状况。在传统软件中,我们可以利用补丁修复此类bug。但在区块链世界中,问题绝对没那么简单。以太坊苏格兰分部研究科学家兼智能合约安全初创企业ChainSecurity公司联合创始人Petar Tsankov指出,由于区块链上的交易无法被撤销,因智能合约的部署更像是发射火箭——“软件绝对不可以出错。”

当然,也存在着某些修复机制。虽然无法彻底解决问题,但研究人员可以通过部署其它智能合约并与原有合约进行交互,从而对后者进行“升级”。另外,开发人员还可以在网络当中构建集中式交易终止机制,从而在检测到黑客攻击之后停止一切交易活动。然而对于资金已经遭到盗窃的用户来说,一切都已经无法挽回。

实际上,恢复被盗资金的唯一方式就是重写历史记录——即将区块链回滚至攻击发生之前的某一时间点,建立新的区块链分叉,并要求网络上的每一位用户接受这一新的区块链版本。当时,以太坊的开发者们就做出了这样的决定。大部分(但并非全部)社区成员转向了新链,也就是我们现在所说的以太坊。但仍有一小部分坚持继续使用原始链,而这就构成了以太坊经典。

上个月,Tsankov在ChainSecurity的团队成功使以太坊免于重复DAO的灾难。在某项策划许久的重大软件升级正式上线的前一天,该公司提醒以太坊的核心开发人员,这次升级有可能引发意想不到的后果——即在区块链上遗留一些合约,其很容易受到导致DAO攻击的同类漏洞的影响。开发人员迅速推迟了升级进程,并决定在西服晚些时候再行推出。

然而,区块链安全企业AnChain.ai公司联合创始人兼CEO Victor Fang表示,数百份颇具价值的以太坊智能合约仍面临着这种所谓“重入bug”的威胁。根据去年进行的一项研究,成千上万份智能合约中可能包含着大量其它漏洞。公链的本质决定着,如果智能合约当中存在bug,那么黑客必然能够将其发现——因为公链合约的源代码通常会公开发布。曾效力于网络安全厂商FireEye公司的Fang指出,“这与传统的安全实现思路存在很大差别。”

存在bug的合约,特别是那些涉及数十万甚至数百万美元的合约,吸引到了那批以往关注银行或者政府机构的高水平黑客。去年8月,AnChain确定了五个以太坊地址,它们都参与到了一起极为复杂的攻击活动当中。通过这次攻击,黑客凭借某高人气赌博游戏合约内的缺陷窃取到总计400万美元。