教程网

您现在的位置是: 首页 > 产业

区块链智能合约漏洞又是怎么回事?如何解决智能合约漏洞

区块链智能合约漏洞又是怎么回事?如何解决智能合约漏洞
智能合约本质是一段运行在区块链网络中的代码,它完成用户所赋予的业务逻辑。以以太坊体系的代币为例,其业务逻辑是代币发币和交易。以太坊在设计之初,将智能合约设计成了一旦部

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

目前以太坊体系区块链智能合约的机制设计,加之漏洞可能带来的毁灭性影响,使得已上线智能合约的漏洞的报告和处理变得非常棘手。360代码卫士团队在近期的研究中发现了以太坊体系下多个已上市交易的代币的智能合约安全漏洞,并已第一时间报告厂商,但到目前为止厂商尚未作出任何回应。对于厂商来说,由于智能合约不可修改的特性,要对上线后发现的漏洞进行有效修复,只能选择重新部署新的合约,这将付出巨大的代价,因此有的厂商可能会选择不响应,不处理。

而对于安全研究者来说,也面临尴尬的境地,左右为难。在厂商修补漏洞前公开漏洞细节对于厂商不利,有悖漏洞披露的一般原则,但如果厂商迟迟不修补漏洞,公众对于漏洞的存在不知情,风险会随着时间的增长迅速膨胀,漏洞一旦爆发可能会造成更大的危害,波及更大的人群,可能会造成很多人的投资瞬间化为乌有。接下来360代码卫士团队还将与厂商保持积极的联系和沟通,以期帮助其修复漏洞。

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

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

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

360代码卫士团队安全专家表示,当前区块链智能合约中可能出现的漏洞至少有20余种。以下列举一些常见的区块链智能合约的漏洞类型及其可能造成的风险,这些漏洞在智能合约上线之前,都应该进行详细的排查。

整数溢出

◆智能合约中危险的数值操作

◆可能导致合约失效、无限发币等风险

越权访问

◆智能合约中对访问控制处理不当

◆可能导致越权发币风险

信息泄露

◆硬编码地址等

◆ü可能导致重要信息的泄露

逻辑错误

◆代理转账函数缺失必要校验

◆可能导致基于重入漏洞的恶意转账等风险

拒绝服务

◆循环语句、递归函数、外部合约调用等处理不当

◆可能导致无限循环、递归栈耗尽等拒绝服务风险

函数误用

◆伪随机函数调用和接口函数实现问题

◆可能导致可预测随机数、接口函数返回异常等风险

漏洞永远都会存在。未来区块链行业一定会出现更多的安全问题,之前传统互联网领域里面遇到的安全问题,区块链行业里面一定也会遇到。区块链行业要能够与网络安全行业做到协同开放,才能使行业更加健康稳定安全的发展

近日,FAIRWIN 智能合约存在漏洞这一问题引起各方关注,FAIRWIN 作为近日以太坊链上交易量最高的资金盘模式应用,在以太坊链上还存在大量类似的克隆盘,如果存在隐藏漏洞会给公链带来较大风向,因此成都链安安全人员对FAIRWIN智能合约展开了深度分析,分析结果如下:

通过对FAIRWIN合约代码进行审计,我们发现其合约存在一个remedy()接口,如果合约owner没有通过close()关闭接口时,该接口可以被任意用户调用,并且可以通过这个接口伪造投注数据,实现“无中生有”,在不使用任何资金的情况下伪造了充值记录,之后攻击者便可以享受分红,或者通过userWithDraw()将余额全部提出。

通过链上记录,我们发现项目方已于2019年7月28日(合约上线第二天)通过closeAct()关闭了该接口。通过成都链安Beosin-AML系统分析项目方所有的交易记录,我们进一步分析是否已经存在攻击者插入投注数据成功的情况。通过分析发现,该漏洞已被严重滥用。从十天前到现在为止,陆续有账户尝试调用remedy()接口来插入投注数据,不过由于该操作已被关闭,导致插入数据失败,可以看到插入金额都是几万ETH。

插入失败记录:

通过完整追溯,我们总共发现503条插入成功的交易记录(500个地址),且插入日期都在项目方关闭接口之前。经统计,这503条交易全部由地址0xcb104fA25a1a46040DBaB9F554FF564CE325668b发起。

通过统计得出总共插入了5093个ETH,其中包括4711个冻结ETH,382个未冻结ETH。并且攻击者通过插入投注记录设置的500多个小号已经进行过提现操作。

通过进一步分析其合约部署情况发现,在项目方关闭actStu的前一天,也就是2019年7月27日,项目方刚刚部署FAIRWIN合约,在短短一天时间不到之内,项目合约之内便无中生有了5000多个ETH。 7月29日,以太坊浏览器显示合约进行了开源。

智能合约被认为是使用区块链技术的又一个热门技术,在这个领域内,最著名的初创企业就属Ethereum和Eris Industries了,媒体也一直在报道相关的新闻。那么区块链智能合约是什么?

智能合约的智能在英语中对应的单词是Smart,和智能手机(Smart Phone)中的Smart意义相同,表示非常灵活的意思,并不是指人工智能(AI)。智能合约一旦设立指定后,能够无需中介的参与自动执行,并且没有人可以阻止它的运行。

"智能合约"这个术语最初于1997年被Nick Szabo提出,远在比特币出现之前。

他是一位计算机科学家、法学学者和密码学家,他想用分布式账本来存储合同。智能合约就像现实世界中的合同一样。唯一的区别在于,智能合约完全是数字化的。实际上,智能合约是存储在区块链中的一个小型计算机程序。

让我们通过一个例子看看智能合约是怎么运行的。也许你熟知大型众筹平台Kickstarter,产品团队可以在Kickstarter创建项目、设定资金目标,进而从那些相信这个想法的人那里筹集资金。

Kickstarter实质上是介于产品团队和支持者之间的第三方。这意味着双方都需要信任Kickstarter能够妥善地处理他们的资金。

如果项目成功获得筹资,项目团队希望从Kickstarter获得他们的资金。另一方面,支持者希望筹资后他们的资金能够给到项目,或者在没有达到目标的情况下获得退款。产品团队以及其支持者都需要信任Kickstarter。

但是有了智能合约,我们能够构建类似的系统,而不需要信任如Kickstarter这样的第三方。

区块链为智能合约提供可信执行环境,智能合约为区块链扩展应用。而在以太坊上的智能合约,能够控制区块链上各种数字资产进行复杂的操作,随着智能合约开始获得越来越多的使用,人们也发现,就像现实世界的合同一样,如果没有认真审核的话,其中就有可能出现漏洞,并且被坏人利用。而TheDAO项目所出现的一系列巨大问题让更多人开始重视智能合约的安全性。

TheDAO是一个基于以太坊的去中心化自治基金,每个人都可以随时使用以太币参与,没有任何中心化的管理机构,由集体决策进行投资各类区块链项目。由于该项目在28天内筹集超过1.5亿美元,成为全球最大的众筹项目而备受关注。但是由于TheDAO的程序出现漏洞,被黑客窃取了部分资金,使得很多人对智能合约的安全性,甚至是以太坊的安全性开始产生疑问。

事实上,随着事件的发展,大家开始认识到是DAO的智能合约编写出现了漏洞,而不是以太坊的问题。这次事件让所有人认识到智能合约也像传统的合同一样,如果合同的内容和执行流程过于复杂,也需要有律师这样的角色介入审查。而一旦存在漏洞没有被审查发现并被黑客利用,则可能引起糟糕的结果。就像我们可能永远没办法确保所有合同都没有漏洞一样,但不可能由此认为合同方式是没有用处的。智能合约也是如此,只不过在未来也许需要一群专业的人来审计代码。

智能合约可能给金融服务业带来最具颠覆性的改变,就如同曾经的计算机数据处理带来的变革一样。然而,在实现这个目标之前,我们首先需要清除一些障碍。

智能合约是什么?业内人士习惯将比特币称为“区块链一代目”,以太坊则是“区块链二代目”。以太坊区别于比特币区块链很重要的一点是它找了个CP“智能合约”,那么,智能合约在区块链中的作用是什么?下面将从概念、工作原理、优势等几方面,为大家介绍智能合约。

智能合约是什么?

智能合约的概念最初是由密码学家和计算机科学家Nick Szabo(曾是2017年万向区块链全球峰会的演讲嘉宾)于1993年提出的。随着它在区块链领域的运用,越来越为更多人所熟知。

智能合约可以简单地定义为运行在区块链顶部的计算机代码。它包含一组规则,这些规则决定了相关方如何相互作用于彼此。只要满足预先制定的规则,协议就会自动执行。

有趣的是,智能合约既不智能,又和现实生活中的法律协议不一样。智能合约“只能和编译它的人一样聪明”,换句话说,智能合约只是软件程序,与所有程序一样,完全按照程序员的意图执行。智能合约就像编程应用程序一样:“一旦出现,就去执行。”

此外,在满足某些条件的情况下,它们有可能成为合法合同。但是,不能把它们和现实中的法律合同相混淆。不过,随着区块链的快速发展,智能合约和法律合同有融合的可能性。

智能合约是如何工作的?

举个例子就很好理解了!张三找李四借了1000元,双方说好在一周后还款。这时,他们没签任何字据,也没有指定第三方来监督。约定还款的时间到了,张三没还款,李四一直催,甚至发了朋友圈催,张三还是没还款。但依据年底朋友圈的经验来看,即使张三当时给李四写了借条,到期了他也不一定会还款。

如果这个借钱的过程放在智能合约上,结果会怎样呢?张三在借钱时,双方就设置好条款,明确表示李四在今天将1000元转到张三的账户,张三需要在一周后将1000元归还。一周过去了,无需李四提醒,合约会自动将1000元从张三的账户中划到李四的账户里。

所有的智能合约基本上都遵循类似的原则,对程序进行预先编码,制定好规则,根据规则自动执行。

在这种情况下使用智能合约的参与者可以获得以下好处:它比手动结算更快、从其中删除了信任问题、执行时无需任何费用等。

智能合约的工作流程

1、预先定义合同:在这里,合约条款由所有合约方参与制定,例如用于付款的货币、,执行条件、执行日期等。

2、事件:这里指触发合约执行的事件,可以是接收到的信息也可以是交易的发起。如上述案例中,到期还款。

3、执行以及价值转移:合约执行满足条件的价值转移。以上面的例子来说,从张三的账户里转1000块给李四,就是一次价值转移。

4、结算:通过两种方式实现:一是链上资产(数字),适用于虚拟资产,账户自动结算。链下资产,适用于如股票、法币等现实中的资产,账户更改将与链下结算指令相匹配。

现在,我们知道了智能合约是什么,它是如何工作的,那我们为什么需要智能合约呢?

智能合约的优势和特点

透明

智能合约部署在区块链上,允许合约规定的条款和条件对所有相关方可见、可用。一旦合约建立,就没有办法进行修改。

精确

由于智能合约是计算机代码和预定义的内容,因此不存在主观错误,所有结果都是精确的,没有人为错误。

安全

智能合约采用了当前可用的最高级别的数据加密方式,因此它的保护级别是目前互联网上最好的,也是最安全的。

快速

智能合约在代码上运行,因此,它们可以非常快地执行交易。与传统业务流程相比,可以节省很多时间。

效率高

相比传统合约经常会因为对合约条款理解的分歧,造成纠纷,智能合约通过计算语言很好避免了分歧,几乎不会造成纠纷,达成共识的成本很低。因此,可以降低因沟通失误而带来的低效。

永久存储和备份

运行在区块链上的智能合约,同样被区块链上网络节点共同维护,只要区块链在,智能合约就能永久的运行下去。同样的,智能合约记录的资料也将永久保存,以备将来参考。此外,如果有数据丢失,也可以很容易地被检索到。

信任

智能合约运行于代码上,代码即法律(Code is law),交易者基于对代码的信任,可以在不信任环境下安心、安全地进行交易,无需第三方中介机构保证它的安全性、自动化和透明性,这消除了偏见、操作失误等的可能性。

确定的结果

这是智能合约又一个吸引人的特点。通过使用自动执行的合约,各方当事人承诺遵守基础代码的规则,在一定程度上大大减少甚至消除了诉诸法庭的需要。

 1/3    1 2 3 下一页 尾页