最近几天,区块链平台 EOS 智能合约漏洞事件再次把区块链安全推上了风口浪尖。

 

360Vulcan(伏尔甘)团队发现了区块链平台 EOS 的一系列高危安全漏洞。经验证,其中部分漏洞可以在 EOS 节点上远程执行任意代码,即可以通过远程攻击,直接控制和接管 EOS 上运行的所有节点。攻击者会构造并发布包含恶意代码的智能合约,EOS 超级节点将会执行这个恶意合约,并触发其中的安全漏洞。攻击者再利用超级节点将恶意合约打包进新的区块,进而导致网络中所有全节点(备选超级节点、交易所充值提现节点、数字货币钱包服务器节点等)被远程控制。

 

 

 

 

 

 

由于已经完全控制了节点的系统,攻击者可以“为所欲为”,如窃取 EOS 超级节点的密钥,控制 EOS 网络的虚拟货币交易;获取 EOS 网络参与节点系统中的其他金融和隐私数据,例如交易所中的数字货币、保存在钱包中的用户密钥、关键的用户资料和隐私数据等等。攻击者还可以将 EOS 网络中的节点变为僵尸网络中的一员,发动网络攻击或变成免费“矿工”,挖取其他数字货币。

 

 

可以看出,这些漏洞的最大危害是攻击者可以发布包含恶意代码的“智能合约”,进而远控所有节点。

 

 

一、什么是智能合约?

 

智能合约(smart contract) 这个术语是在 1994 年由 Nick Szabo 提出的,后来经过几次在不同环境下的重新定义。我们现在通常所说的区块链智能合约以以太坊为代表,以太坊的作者 Vitalik Buterin 意识到,在区块链系统中,交易逻辑是可以和底层系统机制分离的。底层系统负责交易块的创建和验证,记账者的共识达成等基础功能,而交易本身到底做什么事情是可以通过二次编程的方式来定义的。因此他设计了一种交易代码执行的虚拟环境 EVM,使用者可以开发自定义的交易逻辑,发布到链上,当交易进行时,链上所有的节点都执行相同的代码,从而同步改变链上数据的状态。他为这种代码使用了“智能合约”这个名字,这是我们目前通常所说的智能合约的内涵。

 

 

二、智能合约漏洞,左右为难!

 

智能合约本质是一段运行在区块链网络中的代码,它完成用户所赋予的业务逻辑。以以太坊体系的代币为例,其业务逻辑是代币发币和交易。以太坊在设计之初,将智能合约设计成了一旦部署就不能修改的模式。这种设计有可能是为了提高智能合约的可信性。 但是我们知道,只要是由人编写的程序,就一定会出现错误和缺陷。以太坊这种设计本身就违背了程序设计的一般规律,在智能合约出现漏洞的时候可能会造成无法弥补的损失。 我们可以看到,近期出现的以太坊体系智能合约的漏洞,造成了巨大的影响,有的代币也因此毁灭。

 

 

 

目前以太坊体系区块链智能合约的机制设计,加之漏洞可能带来的毁灭性影响,使得已上线智能合约的漏洞的报告和处理变得非常棘手。360 代码卫士团队在近期的研究中发现了以太坊体系下多个已上市交易的代币的智能合约安全漏洞,并已第一时间报告厂商,但到目前为止厂商尚未作出任何回应。对于厂商来说,由于智能合约不可修改的特性,要对上线后发现的漏洞进行有效修复,只能选择重新部署新的合约,这将付出巨大的代价,因此有的厂商可能会选择不响应,不处理。而对于安全研究者来说,也面临尴尬的境地,左右为难。在厂商修补漏洞前公开漏洞细节对于厂商不利,有悖漏洞披露的一般原则,但如果厂商迟迟不修补漏洞,公众对于漏洞的存在不知情,风险会随着时间的增长迅速膨胀,漏洞一旦爆发可能会造成更大的危害,波及更大的人群,可能会造成很多人的投资瞬间化为乌有。接下来我们还将与厂商保持积极的联系和沟通,以期帮助其修复漏洞。

 

 

三、智能合约漏洞,如何应对?

在一些联盟链中,智能合约的设计是可以在部署之后更新的,当然这种更新需要一定的线下协商流程。要应对区块链智能合约的安全漏洞问题,未来需要普遍考虑设计相应的智能合约协商更新机制,降低漏洞修复的成本。

 

 

但现在,我们需要面对现实, 做出几乎唯一可行的、切实有效的努力 —— 在智能合约上线之前,对其进行全面深入的代码安全审计,尽可能的消除漏洞,降低安全风险 。