基于智能合约的区块链也有漏洞么?

链链笔记本
链链笔记本 得得号

May 17, 2018 关于区块链,想你所想。

摘要: 基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。同时,由区块链自带的共识算法构建出一套状态机系统,使智能合约能够高效地运行。 那么,基于区块链的智能合约有没有漏洞呢?答案是肯定的。

智能合约和区块链

随着人工智能技术的兴起,互联网上充斥着各种带“智能”二字的名词:智能手表、智能手环、人工智能机器人等等,而现在,关于智能最火的名词莫过于智能合约。但智能合约火爆的原因并非来自于人工智能技术,而是源自于区块链。那么,智能合约究竟从何而来?又有什么作用呢?

智能合约是 1990s 年代由尼克·萨博提出的理念,几乎与互联网同龄。他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。”换成更加通俗的描述就是“智能合约是一个在计算机系统上,当一定条件被满足的情况下,可以被自动执行的合约。”

但尼克·萨博关于智能合约的工作理论迟迟没有实现,一个重要原因是由于缺少可信的执行环境,能够支持可编程合约的数字系统和技术。但是区块链技术的出现解决了该问题,不仅可以支持可编程合约,而且具有去中心化、不可篡改、过程透明可追踪等优点,天然适合于智能合约。因此,也可以说,智能合约是区块链技术的特性之一。

基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。同时,由区块链自带的共识算法构建出一套状态机系统,使智能合约能够高效地运行。

那么,基于区块链的智能合约有没有漏洞呢?答案是肯定的。

智能合约的频繁漏洞

4月22日,黑客利用以太坊 ERC-20智能合约中BatchOverFlow漏洞攻击BEC智能合约,成功向两个地址转出了天量级别的 BEC,导致市场上海量的BEC被抛售,这使得当日BEC的价值几乎归零,64亿人民币瞬间蒸发。随后,OKEx发布公告称暂停BEC(美蜜币)的交易和提现,网传此次暂停是因为BEC的代币合约存在重大漏洞,攻击者可以利用该漏洞批量转账,无限制生成代币。

浙江台州的蒋先生进入币市5年,接触数字货币十余种。此次BEC合约漏洞被攻击,也是蒋先生第一 次遭遇这类事情。4月22日中午,蒋先生以每个币0.32美元的价格入手了2000个BEC币(价值约4000人民币),没想到时隔不到一个小时,币价跌近0元。

随后,4月25日,一家巴西加密交易所Foxbit被专家爆出存在安全问题,黑客可以更改用户2FA设置轻易转移用户财产。安全专家Leandro Trindade估计,黑客可能盗取该平台用户的58枚比特币(约合54万美元)。Trindade注意到当地投诉门户Reclame Aqui被Foxbit平台的相关内容淹没之后,在3月29日警告Foxbit其安全性出了问题。深入研究后,他发现大多数用户都抱怨在该平台上的资金有所遗失。 在Foxbit上,用户只需使用一个密码即可更改其双因素身份验证(2FA)的设置。这使得黑客可以通过钓鱼,更改用户2FA设置以将其锁定在自己的帐户之外。由于没有电子邮件的确认,没有安全问题或任何其他安全层,黑客会继续提取用户的资金。

同样是4月25日,另一个智能合约SmartMesh(SMT)曝出漏洞。交易所表示,因SMT出现异常交易,各交易平台暂停SMT的充提和交易。

其实智能合约就是区块链环境里的可执行代码 ,区块链上的所有用户都可以看到基于区块链的智能合约。但是,这会导致包括安全漏洞在内的所有漏洞都可见,并且可能无法迅速修复。而黑客就是利用[ in-the-wild ] 手段抓取以太坊ERC-20智能合约中的「BatchOverFlow」这个整数溢出漏洞来进行攻击。
那么什么是整数溢出?在计算机中,整数分为无符号整数以及有符号整数两种。其中有符号整数会在最高位用0表示正数,用1表示负数,而无符号整数则没有这种限制。另外,我们常见的整数类型有8位(单字节字符、布尔类型)、16位(短整型)、32位(长整型)等。关于整数溢出,其实它与其它类型的溢出一样,都是将数据放入了比它本身小的存储空间中,从而出现了溢出。

上述程序的功能其实就是将用户输入的int型变量赋值给无符号短整型的变量,然后再将后者打印出来。我们知道,无符号的16位整数可以表示0~216-1,也就是0~65535这么多的数值。同理,32位无符号整数可以表示的范围是0~232-1,也就是0~4294967295这么多的数值。

整数溢出在很多时候会导致缓冲区溢出漏洞的发生,但并不是所有由整数溢出导致的缓冲区溢出都是可以被利用的。相反,大部分情况是不能够被利用的,原因就在于这里面涉及诸如4GB大小的内存空间的操作时,会发生错误。

 一般来说,主要有3类整数操作可以导致安全性漏洞:

  • 无符号整数的下溢和上溢。
  • 符号问题,符号的问题有以下三点是需要注意的:
  • (1)有符号整数之间的比较。
  • (2)有符号整数的运算。
  • (3)无符号整数和有符号整数的对比。
  • 截断问题:截断问题主要发生在高位数的整数(如32位)复制到低位数的整数(如16位)的时候,发生的溢出现象。

可能有人会问,为什么以太坊比较容易出安全问题?无漏洞的智能合约是否能够实现?

以太坊只是一个记录 dapp 执行结果的区块链,其本身并没有加密货币复式记账所需的 utxo 模型。重要的 token 资产本身是需要货币级别的安全程度,以太坊目前的设计更适合游戏积分之类的合约运行结果。

区块链去中心化的应用程序通常就是DApp,它是由智能合约和后端代码所构成。而在DApp中,所有的服务和逻辑都在区块链上运行,这就意味着DApp不仅需要设计好前端应用,还要开发基于以太坊的智能合约代码。这些代码被应用程序调用,而智能合约就可以保证操作被广播到所有节点,最后通过生成的区块将运行过程和结果打包,最终实现全网统一。

换句话来讲,想要实现无漏洞的智能合约,开发步骤是关键。实际上以太坊也在不断的进步中,想要开发出一个系统完善的智能合约,还需要时间磨砺。

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 链链笔记本 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信