区块链里的智能合约安全

写在开头

在我写这遍文章的时候,距离EOS曝出漏洞已经有三天时间,区块链行业热点来的快去的也快,每每出现安全相关问题,都会给整个行业带来震荡。自从我开始关注区块链行业以来,安全事故有增无减,交易平台、智能合约、共识机制等等都成了安全事故的中心。

但是近年来,智能合约明显已经被×××死死盯上了。从前年的THE DAO再到今年的BEC。与此同时网上也出现了很多不同的声音,有人为智能合约的巧妙性叫好,有人也为智能合约的安全性唱衰。本文不会对智能合约本身优劣进行探讨,只针对如何保证智能合约安全来进行深入,欢迎留言讨论。

第一部分:智能合约基本原理

智能合约本质是一段运行在区块链网络中的代码,它完成用户所赋予的业务逻辑。通俗的来说,相当于是一个“不可改变”且“公正”的“中间人”。举一个例子,我跟你打一个赌,如果明天下雨,算我赢,如果明天没下雨,就是你赢了。然后我们在打赌的时候就把钱放进一个智能合约控制的账户内,第二天过去了,×××的结果出来了以后,智能合约就可以根据收到的指令自动判断输赢,并进行转账。这个过程是高效,透明的执行过程,不需要公正等第三方介入。

比如我们熟悉的以太坊,它的智能合约业务逻辑就是代币发币和交易。以太坊在设计之初,将智能合约设计成了一旦部署就不能修改的模式。这种设计是为了提高智能合约的可信性。但是只要是人编写的程序,不可避免的就会产生漏洞。所以,当有漏洞出现时,想要再挽回损失就很大了。

第二部分:智能合约安全

    前面讲到,智能合约本质就是一段代码,并且发布之后不可修改。若在发布之后发现了严重的漏洞,就只能重新部署新的合约,这对厂商来说代价太大了。那么要想这段保证代码的安全,就一定要在发布之前对智能合约进行代码审计。除开需要第三方的代码审计之外,团队在开发的过程中,也是有方法可以用来提高智能合约的安全。

1.  代码一定要测试!

2.  代码一定要review!

不要看小看这简单的两点,绝大多数的代码问题都能在这个过程中发现。下面我将白帽安全研究院给出的如何避免开发业务层代码安全问题放在下面。有需要的可以一一对应对自己的代码做一个审核。

1.   尽量避免外部调用?

2.   仔细权衡再发生重要操作时的代码逻辑,避免逻辑陷阱

3.   处理外部调用错误?

4.   不要假设你知道外部调用的控制流程?

5.   标记不受信任的业务内容?

6.   正确的使用断言?

7.   小心整数除法的四舍五入?

8.   不要假设业务创建时余额为零

9.   记住链上的数据是公开的?

10.  在双方或多方参与的业务应用中,参与者可能会“脱机离线”后不再返回

11.  明确标明函数和状态变量的可见性

12.  将程序锁定到特定的编译器版本

13.  小心分母为零?

14.  区分函数和事件?

15.  避免死循环?

16.  升级有问题的业务层代码

除了自己对代码的审核外,请第三方安全机构进行审核也是很必要的。智能合约审计严格意义上上来说,是应该有个非常规范的流程。一半情况至少会对以下四点进行审核:

1. 函数可见性审核

2. 合约限制绕过审核

3. 调用栈耗尽审核

4. 拒绝服务审核

通过这四点的审核,至少能把隐私泄露、交易溢出与异常、合约故障和拒绝服务的问题解决。大大减少智能合约带来的安全风险。


第三部分:第三方智能合约审计

目前有提供智能合约审计和代码审计的安全公司还不太多,我从平时看的一些快讯里收集到,列出目前比较出名的几家在做智能合约审计的安全厂商,供大家参考。

  • 知道创宇:为火币、Bit-Z提供了合约代码复查服务和云防御服务。
  • 慢雾科技:为EOS提供节点安全部署和安全审计。
  • 360:据悉曝出EOS漏洞后开始参与代码审计。
  • 白帽汇:目前暂不知晓与谁合作。


写在最后

本文只是对智能合约和智能合约审计做了一个非常浅薄的分析。并且区块链行业安全问题牵扯到了方方面面。智能合约只是里面的一小部分,后续会继续写一些区块链行业其他的安全问题,欢迎一起探讨。

原文地址:http://blog.51cto.com/13761290/2124430

时间: 2024-11-06 07:34:27

区块链里的智能合约安全的相关文章

以太坊Crypto Countries加密国家火爆,区块链游戏成智能合约应用探索突破口

继加密猫(CryptoKitties)之后,以太坊上又出现了几款火爆的区块链游戏,它们是CryptoCountries,Crypto-All Stars,CryptoCelebrities和EtherBots. 这几款游戏目前的知名度还不如CryptoKitties,不过相信用不了多久,它们中的某一款肯定会比CryptoKitties更有名. 为什么这么说,因为它们是比CryptoKitties更好玩的区块链游戏,或者说是CryptoKitties的进化版.加密猫(CryptoKitties)是

区块链游戏FOMO3D智能合约核心分析

最近做一个区块链的项目,需要彻底分析FOMO3D的智能合约,顺便熟悉一下区块链的开发流程.首先为了能跑FOMO3D的智能合约我尝试了truffle+galanche,对我来说不太理想,我就自己用python+solc做了一个类似的框架. 可以编译部署发布合约,自动生成前端的JS合约对象以及跑一个aiohttp的测试环境,该环境已经开源https://github.com/bluehook/pyw3c.git, 示例就是全套FOMO3D的智能合约,在分析的过程中我又重新写了一遍FOMO3D也放在示

青云热链系列之听区块链里最真实的声音6月14日将举行

第一代互联网的起点是TCP/IP协议,就是执行一个网络上所有节点统一格式对等传输信息的开放代码.但是这样一个并不复杂的创新对于人类的影响是划时代的,她把全球统一市场所需要的基本价值观:"自由.平等.博爱",给程序化.协议化.可执行化了.进而派生出STMP邮件协议.HTTP域名协议等,去中心化的实现了全球信息传递的低成本高效率.正如阿里巴巴副总裁高红冰所说: "互联网就是消灭那个价值很低.成本很高的(信息)供应链--它开放.互联.对等.全球化.去中心化." 我们知道:

区块链交易所开发,合约交易系统开发,钱包开发

最近,比特币在历经暴跌之后迎来了首个逐步上升的趋势,在多重关注下,数字资产市场正在慢慢回升,很多行业也正处于复苏阶段.对于币价回升,区块链交易所应该是直接受益对象,币价的回暖造就的就是用户开始交易,交易所就有了利润可赚,因此这个时候也是区块链交易所开发新一轮的爆发点.除了区块链交易所以外,合约交易系统和钱包也不例外,合约理应是熊市的利刃,但在这利好的市场中,合约交易系统依旧能够争得一席之地.无论是熊市的做空还是牛市的做多,都能够给用户带来巨额的收益,因此合约交易系统开发无论是在何时都是区块链行业

带制度的区块链钱包开发,智能搬砖系统开发

带制度的区块链钱包开发,智能搬砖系统开发区块链钱包现在的玩法越来越多,市场也越来越大,但同样的用户的选择也会更多,那如果做到在众多钱包中更好的吸引用户,那当然也需要相对应的制度模式加以配合,做成区块链制度钱包才能更好的扩展市场.钱包作为一个多元化的集合体,在模式方面,可以加入许多元素进入,比如:交易.多币种存储.理财.资讯行情等,这样也能更好的吸引到用户,当然最近非常火爆的量化智能搬砖也非常火爆,但其中也涉及到策略问题,源中瑞科技也已经有成熟系统.除开模式以外,更多的是需要制度,但现在想要长期运

用Java为Hyperledger Fabric(超级账本)编写区块链智能合约链代码

编写第一个 Java 链代码程序 在上一节中,您已经熟悉了如何构建.运行.部署和调用链代码,但尚未编写任何 Java 代码. 在本节中,将会使用 Eclipse IDE.一个用于 Eclipse 的 Gradle 插件,以及一个名为 ChaincodeTutorial 的 Java 链代码框架项目,编写第一个 Java 链代码程序.您将从我为此教程创建的 GitHub 存储库中获取框架代码,将该代码导入 Eclipse 中,添加代码来让链代码智慧合同按要求生效,然后在 Eclipse IDE 内

数字货币:从纸币泡沫看比特币泡沫,从互联网泡沫看区块链泡沫

目录 货币:一种观念,一个记账单位 纸币:从泡沫到法币,从自由到垄断 数字货币:6000年后,回到起点 互联网:从泡沫到革命,从1.0到4.0 区块链:从泡沫到-- 为了不引起读者混淆,笔者在一些概念上作了区分.数字货币:通指一种新的货币制度,类似于信用货币制度或者金本位制度等:虚拟币:指代以比特币.莱特币等为代表的由市场创造的虚拟代币:同时提醒读者注意货币的虚拟化和虚拟币的意思也不一样,前者主要指现在的纸币虚拟化/数字化的过程. 一.货币:一种观念 雅浦岛和费币的故事在学界广为人知,货币学派的

智能合约从入门到精通:智能合约的应用场景

简介:上一章我们简单介绍了区块链技术的发展情况,并详细介绍智能合约的基础概念.可以说,区块链1.0时代(比特币)除了代币功能,与现实生活相去甚远.智能合约的出现,给区块链带来了巨大的变化,区块链也从一种账本形式,变成了下一代计算网络的雏形.这一章我们将聊聊智能合约的应用场景.在上一篇文章中我们聊过,尼克·萨博对智能合约定义已经说的很清楚,智能合约不是一定要用区块链来实现,很久之前就已经出现了:比如微信和支付宝的信用卡自动还款,您可以认为他是一种智能合约.当还款日到了,还款条件也满足(支付宝的余额

在EOSIO平台上开发区块链dapp(一)

在我倾听Bettina Warburg的演讲之后,我对去中心化经济(dApps)的概念着迷.传统的Web应用程序是: 前端→后端→数据库 相比之下,dApp网站是: 前端→智能合约→区块链 例如,当你进入电子银行时,网页将调用后端代码来获取你的个人数据并将其显示在页面上.后端代码在集中式服务器上运行. 与传统方式不同,dApps在去中心化的P2P网络及区块链(Blockchain)上运行后端代码智能合约(smart contract). 为什么区块链如此热? 区块链是支撑数字货币比特币的技术,但