智能合约安全如何保证?

写在开头

    在我写这遍文章的时候,距离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漏洞后开始参与代码审计。

白帽汇:目前暂不知晓与谁合作。

写在最后

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容