基于区块链的智能合约安全性分析

来源 :大众科学·上旬 | 被引量 : 0次 | 上传用户:wxiaof
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:随着区块链技术应用范围越来越广泛,也面临着诸多方面的安全威胁,智能合约引发的安全问题已经成为区块链安全性的主要问题。本文通过对智能合约安全性分析,提出相应的解决方案;通过合约安全审计方法、合约安全监测工具等措施对智能合约进行安全管理,保障信息系统安全。
  关键词:区块链;智能合约;隐私保护;安全漏洞;安全审计
  中图分类号: TP309
  0 引言
  智能合约是部署在区块链上的代码,利用协议和用户接口完成合约过程。在智能合约层,通过在智能合约上添加能够与用户交互的前台界面,并能与其它外部IT系统进行数据交互和处理,形成去中心化的应用(DAPP),实现各种行业应用。智能合约具有事件驱动、自动执行及价值转移等特点,通过智能合约处理各种事务,减少了人为干预的风险,能够在任何时刻响应用户需求,这样能够大大提升效率,节约时间和成本。由于智能合约整体处于初期阶段,需要重视其安全性、扩展性、以及与现实世界的法律体系的对接等问题,尤其是安全性问题得不到有效解决,将会严重阻碍价值互联网的推进步伐。
  1  技术原理
  1.1  智能合约的执行环境
  目前以太坊和超级账本的智能合约技术相对更为成熟,在以太坊中合约代码在虚拟机中执行,超级账本中合约代码在容器中执行。虚拟机和容器都创造了一个封闭的沙箱环境,在封闭隔离的情况下执行合约代码。
  以太坊虚拟机是一种图灵完备的,基于栈的后进先出特性设计的虚拟机,它可以将智能合约代码编译成可以在以太坊上执行的机器代码,并为智能合约提供一个完全封闭的运行环境,在以太坊中每个节点都创建了一个EVM虚拟机,当出现调用合约交易时,所有节点都会执行一遍合约并对结果进行共识。
  超级账本采用了容器(docker)作为智能合约的执行环境,和虚拟机相比容器没有采用虚拟化技术,而是直接运行在底层操作系统上之上,因此在容器中合约的执行效率很高。但相较于虚拟机而言,容器的启动和执行过于消耗资源,这也成为了制约超级账本性能的关键因素。
  1.2 智能合约的运行机制
  在一个智能合约内一般包含合约值和合约状态两个属性, 在智能合约代码中写明了合约的应用场景和触发规则, 一旦外部输入数据符合触发条件,可以就会开始执行并返回相应的结果。如下图1所示,由于区块链种类及运行机制的差异,不同平台上智能合约的运行机制也有所不同。智能合约的生命周期可以简单的分为开发、部署、执行三个阶段。
  (1)开发阶段:合约开发阶段,主要是由多方协商,根据现实世界的合同规则编写相应的程序代码,编写过程中需要开发者熟悉合约代码的编写思维,尽可能简洁以防止代码出错。
  (2)部署阶段:合约开发完成后,发起方用户对合约签名并发起一条交易,交易经过网络广播和节点验证后,跟这一时间戳内的其他交易一同保存在当前区块中,合约部署成功后将返回合约地址和相关接口信息,用户可以通过合约地址和接口信息对部署成功的合约进行调用。
  (3)执行阶段:调用合约需要用户通过合约地址和接口信息发起交易,区块链内的其他节点为了获得系统预设的奖励会帮助新区块的产生。节点收到调用合约的相关交易后将在一个本地沙箱环境中执行合约(如以太坊虚拟机EVM),执行过程中,合约代码根据外部输入数据和合约状态信息判断当前合约状态是否满足合约触发条件以执行合约内的操作,符合条件的更新操作,在经过共识算法的验证后会进入区块链新的区块中。
  2  智能合约安全性分析
  智能合约的安全性通常可以从代码编写、合约虚拟机和区块链特性这三个维度展开,以下分别对这三个方面的安全性漏洞进行了分析,针对其中可能出现的问题也提出了相应的解决方案。
  2.1  合约隐私泄露
  即使在联盟链中,由于区块链交易信息公开,合约代码完全开源,合约从创建、部署到执行的整个过程都会被广播到参与联盟链的全部节点,导致合约参与者的真实身份有很大可能会被有意的攻击方识破。一些机密合约的隐私内容,有时不便公开,如果依然采用原先的部署、执行方式,将导致合约参与者的重要信息受到威胁。
  解决方案:
  (1) 采用盲签名。盲签名技术即签名者在不知道所签文件内容的情况下进行签署,而发送者却可以从签名者对盲化后的文件签名中提取出有效签名,这体现了盲签名技术所具有的盲性和不可伪造性的特点。
  (2)采用环签名。环签名是一种简化的类群签名,它是指环中的成员用他自己的私钥和其他环成员的公钥进行签名,这一过程并不需要征得其他成员的同意,签名的验证者可以知道签名来自这个环,但无法定位准确的环成员,这也是一种对合约参与者身份安全的保护方式。
  (3)采用同态加密。同态加密是一种特殊的加密方法,对密文进行数据处理得到的结果跟对明文进行数据处理再加密的结果相同,即同态性。在区块链上应用同态加密技术可以对公开的数据进行加密,再进行数据处理,这种方式可以在保证区块链信息公开的情况下保证信息安全。
  (4)采用零知识证明(ZKPs)。 零知识证明是指证明者在不向验证者提供任何有用信息的情况下证明某个事件是真实的,即可以在不泄露数据本身情况下证明某些数据运算。在区块链中使用零知识证明技术可以在不泄露交易数据的情况下证明交易已经正确完成。
  2.2  合约主体漏洞
  智能合約的代码编写不同于以往的项目开发,智能合约在部署后一旦出现问题,所付出的代价是巨大的,对于多种区块链来说都难以简单的解决,因此我们在编写合约代码时要提升安全思维,做好安全准备。
  2.2.1函数可重入性
  智能合约执行过程中当一个合约调用另一个合约时,当前的执行过程会暂停等待另一个合约的返回值。这会导致一个很严重的问题,如果程序可以在执行过程中被中断,则可以在其先前的调用完成执行之前安全地再次调用,这被称为可重入计算机程序。在调用其他外部函数的操作完成前,这个被调用的函数很有可能会被多次执行,这种多次调用可能会造成难以想象的问题。   解决方案:
  避免外部调用:调用外部合约的函数,造成等待返回结果这种情况,很容易引发重入问题,外部合约中还可能会有其他恶意代码、安全威胁,在编写合约代码时应该尽量少的调用外部合约。
  处理外部调用错误:在调用外部合约时,需要注意调用函数的返回值,当出现异常或返回错误结果时一定要针对返回的错误结果进行及时处理。
  合约状态检查:有效防止函数重入的另一种方法是在合约代码需要进行外部调用之前更新状态并在合约中检查,以确保当前状态代表接下来会执行的事务。
  2.2.2 函数可见性
  以Solidity为例,在使用Solidity编写合约代码时,共提供了4种函数可见性修饰符,在开发者没有指明的情况下,默认为public。当开发者没有明确指明函数可见性时,可能导致部分关键函数的可见性为公开的,这使得任何外部用户都可以调用这一函数,可能会造成巨大损失。
  解决方案:在编写合约代码时,明确指明函数可见性,以免造成意想不到的损失。
  2.2.3 误操作异常
  在以太坊中,允许一个合约通过send指令或者直接调用的方式去调用另一个合约内的函数。然而在调用过程中可能会出现错误,例如gas不足、超出调用栈限制,调用就会终止,合约就会回退到之前的状态。调用者很可能并未获知调用过程中出现的异常,这主要取决于调用的方式。使用这条指令调用合约后,必须检查返回值驗证合约是否正确执行。根据数据统计,现有合约中约28%的合约在调用后不会检查异常返回值,这在一定程度上会造成许多问题。
  解决方案:
  避免使用不检查异常和错误返回值的调用方式,针对可能出现的错误情况,做好错误处理和返回值检查。
  2.3 虚拟机安全漏洞
  合约虚拟机运行在区块链的各个节点之上,虚拟机为合约代码提供了一个沙箱式的执行环境,如果合约虚拟机存在漏洞或不完善的地方,则很由可能会受到攻击者的攻击,虚拟机系统相比较于传统的计算机运行环境具有更多的攻击安全隐患,以下列出常见的几种:
  (1)逃逸漏洞:虚拟机在运行中,一般进程只能在沙盒的限制中执行相应的代码,逃逸漏洞指的是进程越过虚拟机范围,进入到宿主机的操作系统中,这种漏洞会使攻击者退出沙盒环境,执行其他本不能执行的代码。
  (2)逻辑漏洞:虚拟机在发现数据或代码不符合规范时,可能会对数据做一些“容错处理”,这就导致可能会出现一些逻辑问题,最典型的是“以太坊短地址攻击”。
  (3)堆栈溢出漏洞:虚拟机的调用栈有确定的最大深度,在一些攻击者的恶意调用下,有可能导致栈的深度超过虚拟机允许的最大深度,或不断占用系统内存导致内存溢出。
  (4)资源滥用漏洞:指的是攻击者在虚拟机中执行恶意代码,估计消耗系统的网络资源、存储资源、计算资源、内存资源。所以在虚拟机系统中必须要有一些限制机制来防止系统的资源被滥用。
  解决方案:
  1、为虚拟机设置安全域和安全域之间的访问规则,如果虚拟机有添加或删除等破坏规则的操作时则删除该虚拟机所属的网络。
  2、为区块链虚拟机,设计一种安全监测机制,这项机制可以做到对资源的收集、分析和监测,根据实时获取到的虚拟机信息对有异常情况的虚拟机进行处理。
  3、采用基于大数据与机器学习的虚拟机安全防护方法,从虚拟机的中提取文件,接着识别普通文件中的恶意特征,将识别的恶意特征与恶意文件特征库中的特征进行比对,判断该文件是否为恶意文件,若为恶意文件则进行清理。
  4、采用于KVM虚拟机系统的安全防护方法,可以周期性地获取虚拟机系统的中断描述符表、系统调用表和系统调用数据,将获取到的虚拟机系统中的数据与备份的相应数据进行比较,当发现异常时用备份的数据对虚拟机系统中状态异常的内核对象进行恢复。
  2.4 区块链特性导致的漏洞
  2.4.1交易顺序依赖
  在区块链中一个区块包含多条交易,而一笔交易从被广播出去到被确认并包含在一个区块内需要一定的时间。我们假设有一个区块链目前处于状态σ,新区块中包括两条调用相同合约的交易(deg:Ti,Tj),在这种情况下,用户无法确定合约在执行调用时是什么状态。当合约处于σ[Ti]时执行Tj的调用和处于σ[Tj]时执行Ti的调用可能会造成截然不同的结果,这取决于Ti和Tj之间的顺序,而只有挖掘这一区块的节点才能决定这些交易的顺序,从而决定合约被调用的顺序。如果有攻击者在监听到网络中对应合约的交易后,发出他自己的交易来改变当前的合约状态,则有一定几率使这两笔交易包含在同一个区块下面,并且有可能排在另一个交易之前,完成攻击。合约的最终状态实际上取决节点在确认时的交易顺序, 我们将此类合约称为交易依赖合约或TOD合约。
  解决方案:
  针对交易顺序依赖,开发者对于交易的奖励机制要进行合理的设置,以防止通过调整奖励金额来改变交易决定顺序的情况出现,对于一些关键事务的交易频率要做限制,防止短时间内大量交易出现。
  2.4.2 时间戳依赖
  另一个很重要的安全问题是,合约有时会用区块时间戳作为执行一系列关键操作的触发条件。我们把这样的合约称为时间戳依赖合约,在许多合约游戏中都会使用随机数来决定谁赢得头奖,这些合约使用了之前的区块哈希作为随机种子来挑选冠军,区块的选择则取决于当前区块的时间戳。通常来说,当节点确认一个区块时,它会为这个区块设置一个时间戳,这个时间一般是节点的本地系统时间。但是,节点可以在900s的范围之内随意改变这个时间戳,与此同时其他节点仍然会接受并确认它。节点处理一个新的区块时,如果新的区块的时间戳大于上一个区块,并且时间戳之差小于900秒,那么这个新区块的时间戳就是合法的。因此有一些攻击者就可以通过改变时间戳来控制合约的输出结果 。   解决方案:
  时间戳依赖的问题相对来说较难解决,只要在智能合约中使用了随机数,就很难保证节点在区块验证过程中不作弊,因为智能合约中的随机数通常情况下只能根据节点的本地时间计算, 而本地时间又是可以被恶意伪造的,因此这种方法并不安全。通常的解决方案是使用链外的安全可信的第三方提供的服务来获取随机数。
  3 智能合约安全管理
  3.1 合约安全审计方法
  智能合约的安全审计就是指将合约部署到区块链上之前对合约代码进行全面審查的过程,安全审计可以很大程度上减少合约代码中存在漏洞和问题,避免合约部署后出现可能会出现的损失。
  目前智能合约的安全审计分为人工审计和自动化审计,随着智能合约的发展人工审计的方法已经基本被自动化审计所取代,目前市面上有三种主流的自动化审计方法。
  1、特征代码匹配,智能合约的特征代码匹配与传统的特征代码匹配类似,都是对常见的一些会导致问题出现的代码进行提取、抽象,然后形成固定的匹配模块对待检测源码进行检测。这种检测方法优速度快、迅速响应新漏洞,缺点则是使用范围有限、漏报率高。
  2、基于形式化验证的自动化审计方法,这种方法采用 F-framework 和 K framework,将 EVM 转化为一个 Formal  model。其中Formal 是航空航天领域常见的一种形式化验证框架, K framework 则是一个语义的转化框架。
  3、基于符号执行和符号抽象自动化审计。这也是目前最常用的方法,这种方法是指分析智能合约时,首先通过编译源码,可以形成 EVM OPCODE,然后输入到自动化分析引擎转化成 CFG,再利用这两种方法进行分析。比较典型的是 Detente 和 Secured 系统,这种方法可以降低误报率和漏报率,但是也存在繁琐和耗时的缺点。
  自动化的审计方法可以很大程度上减少代码问题造成的安全漏洞,但是目前现存的集中分析方法仍然存在流程繁琐和耗时的问题。
  3.2 合约安全监测工具
  目前市面上已经有许多针对智能合约安全监测方面的工具出现,以下对较为常见的监测工具做了简要的介绍:
  Mythril是一个针对以太坊智能合约的安全分析工具,Mythril可以检测出包括整数溢出等一系列的常见安全问题,但Mythril针对合约内的业务逻辑却无能为力。
  Oyente提供了一系列针对EVM漏洞检测的启发式引擎驱动,它不仅可以准确地找出代码中的安全隐患,还能保证较低的误报率。Oyente是一种符号执行工具,可以直接运行在以太坊虚拟机(EVM)字节代码上。
  Manticore是一种符号化的执行引擎, 包括EVM在内的多种模式, 支持具体程序方案、符号化执行驱动和断言检测等.
  REMIX是一种基于浏览器的智能合约编写和漏洞修补的IDE JavaScript应用, 内嵌的静态分析工具可以针对已知的预定义漏洞进行检测.
  F*是一种用于程序验证的通用函数式编程工具,支持验证工具的自动执行和基于依赖类型证明的表达, 可以对实际智能合约的语义正确性和运行过程的安全性进行验证。但是, 现有的形式化验证和程序分析工具多是针对已知漏洞的检测和验证.未来的研究将更加关注现有的智能合约的反模式, 构造动态检测的程序分析工具。
  4 总结
  本文对区块链智能合约的安全性做了一定分析,针对合约代码编写过程中可能会出现的一些问题和漏洞,提出了一些改进建议。针对本文的建议和方案,已经在供应链金融、金融交易等项目中应用,使用智能合约实现存证与查证、数据安全共享与交换、风险控制等执行并写入区块链,为更多的区块链项目中智能合约的安全使用提供参考。
  参考文献
  [1]  Lou L, Ch D H, Frolicked H, ET AL. Making Smart Contracts Smarter[C]// A cm Issac Conference on Computer & Communications Security. 2016.
  [2]  Mossback A, Miller A, Chi E, ET AL. Hawk: The Block chain Model of Cryptography
  and Privacy-Preserving Smart Contracts[C]// Security & Privacy. 2016.
  [3] 胡凯, 白晓敏, 高灵超,等. 智能合约的形式化验证方法[J]. 信息安全研究, 2016, 2(12):1080-1089.
  [4] 朱岩, 甘国华, 邓迪, 姬菲菲, 陈爱平 -区块链关键技术中的安全性研究[J].信息安全研究, 2016
  [5] 贺海武,延安,陈泽华. 基于区块链的智能合约技术与应用综述[J]. 计算机研究与发展, 2018, 55(11):2452-2466.
  [6] 杨茜,黄晓芳. 一个基于盲签名技术的智能合约模型[J]. 西南科技大学学报, 2018, v.33;No.130(02):99-103.
  [7] 杨茜. 基于区块链的智能合约研究与实现[D]. 西南科技大学, 2018.
  [8] 马春光, 安婧, 毕伟, et al. 区块链中的智能合约[J]. 信息网络安全, 2018, 215(11):13-22.
  [9] 毕晓冰, 马兆丰, 徐明昆. 区块链智能合约安全开发技术研究与实现[J]. 信息安全与通信保密, 2018(12):63-73.
  [10] 孙炜. 浅谈区块链虚拟机[J]. 信息通信技术与政策, 2018, No.289(07):41-43.
  [11] 马昂, 潘晓, 吴雷, et al. 区块链技术基础及应用研究综述[J]. 信息安全研究, 2017, 3(11).
  [12] 邢少敏, 冯维, 王泉景. 基于区块链技术的涉密电子文档保护方案研究[J]. 信息安全研究, 2017(10):22-30.
  [13] 邵义勇. 两种特殊性质的代理签名方案研究[D]. 华东师范大学, 2008.
  [14] 黄洁华. 众筹区块链上的智能合约设计[J]. 信息安全研究, 2017, 3(3):211-219.
其他文献
摘 要:党的十八届三中全会提出推进国家治理体系和治理能力现代化,再到党的十九届四中全会以推进国家治理体系和治理能力现代化作为我们改革深化的总目标。我们从这几次会议可以看出我们希望早日实现国家治理现代化的目标。党的领导是实现治理现代化的重要推动力,这就关系到党实现这个目标的能力。要实现治理体系和治理能力现代化,提升党员质量、实现党内民主、加强法制建设、坚持群众路线都是不可或缺的提升治理现代化水平的重
期刊
摘 要:党建思想政治工作是我国国有企业的优势,是企业核心发展的重要组成部分,党的第十八届三中全会中对将强改进党建思想政治工作做出来明确的要求,为党建思想政治工作做出来新内容、新课题和新的要求。在我国的经济发展当中,煤矿是我国的支柱型产业,在我国的经济发展中占主要地位,煤矿的发展和党建思想政治工作密不可分,这也是煤矿发展中需要解决的重要核心问题。  关键词:煤矿;党建;思想政治工作  国有企业的党建
期刊
摘 要:骆越铜鼓是我国传统文化遗产,在现代文明影响下,传承骆越铜鼓文化的迫切性愈发突出。因此,本文基于骆越铜鼓文化发展历程,对骆越铜鼓文化的传承内容展开研究,同时将骆越铜鼓文化的传播、弘扬内容划分为物质、精神两大类。借此在骆越铜鼓文化继承核心的明确中,保护、发展铜鼓文化。  关键词:骆越;铜鼓文化;传承内容  中图分类号:G127 文献标识码:A  引言:  骆越铜鼓是骆越文化体系中技术含量高、象
期刊
摘 要:随着我国综合国力的不断提高和国民生活水平的不断提高,我国越来越重视对学生的教育和培养,尤其是学生身心健康的发展方面。同时,小学体育作为培养学生体育能力、体育道德品质和健康行为的一门基础学科,越来越受到教育者的重视。体育运动会作为体育教学的一种手段,不仅可以让学生体会到体育运动的快乐,而且也方便了教师的体育教学活动。所以接下来,基于我对当下小学体育教学活动的了解情况,我将对小学体育中体育游戏
期刊
摘 要:文章通过有关哈立麻得银协巴的藏汉史料及对哈立麻得银协巴的最新研究资料的分析和研究,来探究哈立麻得银协巴对促进汉藏民族关系和各教派发展方面做出的贡献。  关键词:噶玛噶举; 哈立麻得银协巴; 贡献  引言:  哈立麻[11]得银协巴是藏传佛教后宏期史上,具有深谋远虑,叱咤风云的高僧大德之一,也是明朝所封的三大法王之一,是三大法王中授封最早,影响最大、地位最高的法王。关于哈立麻得银协巴,到目前
期刊
摘 要:综合运用各种教学手段,恰当而巧妙地将现代教育技术与语文课程进行整合,能使教学内容化难为易,变静为动,符合小学生的心理年龄特点,学生易于接受,更好地发挥教师的主导作用和学生的主体作用,提高课堂质量和教学效率。  关键词:现代教育技术;多媒体;培养能力;教学效率  着现代科技突飞猛进,社会各领域与行业发生了巨大变革,教育改革也不断推进。邓小平同志指出:“教育要面向现代化,面向世界,面向未来”。
期刊
摘 要:西方马克思主义是在一个历史时间段上不同流派基于当时的历史社会现实下对于马克思主义来作出的不同解释和说明,以期用之对马克思主义的全新解释阐述来实现自己流派的理想和蓝图。在工业革命的推动下,生产力得到大力的提升。第一次工业革命把世界带入“蒸汽时代”,第二次工业革命将世界推进“电气时代”。19世纪70年代后资本主义由自由主义向垄断主义过渡。机器化大生产、资本高度集中、对外扩张、阶级矛盾对立成为这
期刊
摘 要:现阶段,在日常生活中,电能作为当今社会发展必不可少的一种能源,不管是平民百姓的日常生活,还是国家大型设备的運行,都需要电能的支持,因此输出电能的配电网能否安全、可靠的运行,对于经济与生产的发展具有重要意义。但我国地域辽阔,地形复杂,这对配电网的架设就造成了很大的困扰,加上南北方的气候差异较大,空气湿度不同,配电网长期暴露在外界,外界的氧化是配电网稳定运行的最大威胁。因此基于当前配电网存在问
期刊
摘 要:目前,我国高层建筑数量不段增多,房地产开发商在前期设计阶段选用高层建筑的形式提高容积率和经济性,但同时也增加了深基坑作业的风险。文章通过对深基坑支护特征进行分析,并提出相应的施工施工技术管理措施。  关键词:建筑工程;深基坑;支护技术;施工技术  引言  随着人口的增长,土地资源匮乏,大多是的建筑都变成了高层建筑,这就要求建筑企业的专业水平更高,深基坑支护技术有效提高了建筑企业的水准。但是
期刊
摘 要:当前我国的现代化建设事业开展如火如荼,建筑行业取得了更加迅速的发展,建筑行业之内的竞争也变得越来越激烈。建筑企业要在确保建筑施工质量的前提下将效益最大化,将施工成本降低成为最有效的途径。本文对建筑施工企业成本管理中存在的不利因素进行了分析,提出了一些完善施工企业成本控制的合理化措施,进一步强化成本管控,为企业发展创造经济效益。  关键词:建筑施工企业;成本管理;有效策略  引言  建筑施工
期刊