51 现有研究不足 5.1.1 合约安全研究不足
(1)设计安全保障技术不足
目前,智能合约设计模式的研究仍然处于起步 阶段,相关研究数量有限,需要对已经整理好的模式 进行扩展,为Solidity语言创建一个结构化的、信息 量大的设计模式库,涵盖典型的和常见的编码场景, 作为合约实现人员的指导;也可以在自动代码生成 框架中应用设计模式,用来提取代码构件,这些构件 可以被集成到自动代码生成框架中.Solidity设计模 式可以与其他智能合约平台中发展的编码实践进行 比较,进一步揭示出更抽象的设计模式,这些模式独 立于底层实现框架,对一般的智能合约有效[78].
(2)实现及测试安全保障技术不足
针对主流的智能合约缺陷检测原理,可以将智 能合约缺陷检测技术划分为:基于定理证明的缺陷 检测、基于模型检测的缺陷检测、基于模糊测试的缺 陷检测、基于语法树的缺陷检测和其他缺陷检测.针 对每种技术,其优缺点如下所示:
定理证明的形式化验证方法通过抽象的数学描 述得到良好的模型和属性表达,所以该方法的优势 是即使针对状态多而复杂的系统,也不会出现状态 空间爆炸的问题[79].定理证明可以以任意属性为目 标,提供强有力的形式化验证保证,验证方法非常精 确,并且不会产生误报[18,80].但是,基于定理证明的 形式化验证方法存在较多局限性,例如机制复杂,需 要测试人员系统学习该证明方法的工作原理和如何 读取输出等,因此该方法具有较高的门槛;此外,基 于定理证明的形式化验证工具使用通用方法来构造 代码模式和定理,证明智能合约的安全性[18,33,68],整 个验证过程很难实现完全自动化,需要大量人工来 构建智能合约的证明和分析[18].人工构建的方式带 来的问题首先是该方法扩展性不足,无法适用于大 型智能合约,也很难实现大批量智能合约验证,还可 能导致验证效率降低和人的主观性对验证结果产生 影响.
模型检测方法的优势是自动化程度较高,即便 只给出部分合约,也可以提供关于已知部分正确性 的有用信息.特别地,模型检测会输出终止时的反 例,即程序缺陷存在的实例.直接输出缺陷实例的方 式可以有效帮助实现人员理解程序缺陷并修改程
5 0 5 12期 胡甜媛等:智能合约的合约安全和隐私安全研究综述 2
《 计
算
机
学
报
》
序.模型检测方法的不足是存在状态爆炸问题,若是 基于较大的状态空间,模型检测算法会随着状态数目 增多而造成运算时间爆炸式增长和运算空间膨胀.
模糊测试方法的优势是可根据实际代码定制不 同的输入,可选择不同的覆盖范围发现更深层次的 错误,更加精确地检测出合约的真实漏洞.模糊测试 方法的不足是测试用例随机生成,只能覆盖部分系 统行为,无法找出所有潜在错误;另外,该方法选择 特定的测试用例作为种子,基于种子不断生成新的 测试用例,检测性能可能会随着初始种子的选择而 发生变化,实际检测性能难以控制.
采用抽象语法树作为智能合约的基础表现形式 的优势在于不依赖智能合约具体的语言细节,对程 序进行逻辑分析,抽取重要的程序执行逻辑信息;但 是,抽象语法树构建的合约缺陷检测规则不适用过 于复杂的问题,可能会导致较高误报率;特别地,基 于抽象语法树的方法表示过于高级,无法准确反映 低级信息,例如gas计算等.
(3)部署及运维安全保障技术不足
目前,针对智能合约运行环境安全检测的研究 数量较少,本文仅涉及1项相关研究,即EVM漏洞 检测工具EVMFuzzer,该工具目前主要检测EVM 执行结果不一致的漏洞.针对合约运行状态的监测, ContractGuard[36]由于嵌入了额外的代码,一定程
度上会增加智能合约的部署开销与运行开销.
Vultron[20]检测方法不适用于不使用内部记账逻辑 的智能合约,无法检测时间戳依赖性或交易顺序依 赖性等缺陷.GIS[21]系统保护已部署的智能合约, 实现攻击模式的动态更新,但是该工具对于新攻击 模式的引入依赖于预定投票群体达成共识,攻击模 式以纯文本的形式公开,可能被潜在攻击者利用.对 于智能合约缺陷修复,EVMPatch[48]对存在缺陷的 合约进行打补丁,但是可能导致修复后的合约代码 产生更高gas消耗
本文将智能合约缺陷检测方法划分为静态分析 和动态分析.静态分析在非运行时环境中分析程序 或编译代码,其主要优势能够识别智能合约中的关 键模式.但是,静态分析无法检测执行期间发生的缺 陷,针对一些缺陷可能会导致误判.
动态分析是一种在执行或运行时检查程序的方 法,其优点是通过动态分析可以检测出静态分析无 法检测的执行期间异常,识别出未知合约缺陷导致 的攻击,还可以验证静态代码分析的结果.但是,动 态分析的不足是合约的动态执行基于用户交互或自 动测试,因此不能保证覆盖源代码所有执行路径;同 时,需要保证在不影响智能合约正常运行的情况下 获取合约的执行状态信息并进行有效的跟踪和分 析,这也对智能合约动态运行监测提出更高要求.
最后,总结上述智能合约缺陷检测工具的局限 性如表9所示.
表9 智能合约缺陷检测工具汇总表
分类 工具 检测对象 局限
静态分析
GASPER[11] 字节码 只能探索部分程序路径,依赖于消耗gas量高的模式清单 Teether[12] 字节码 准确率较低,无法检测在特定情况下才会出现的缺陷
ZEUS[15] 源码 需要针对合约定义特定的策略,且ZEUS发现的缺陷的实际可用性不确定 Securify[16] 字节码 可检测的智能合约版本有严格限制
Slither[19] 源码 缺乏形式语义无法实现更严格的分析,表示过于高级无法准确反映低级信息,如gas计算 SmartEmbed[23] 源码 需要构建包含缺陷的智能合约代码库,缺陷的检测范围局限于代码库中的缺陷类型 SmartCheck[34] 源码 无法描述更复杂的规则,导致误报率较高
VERISMART[49] 源码 目前主要检测整数溢出和被零整除两种算术操作问题
Oyente[50] 字节码 限制循环次数防止路径爆炸,导致部分缺陷漏报,无法检测逻辑相关问题
动态分析
Echidna
①
字节码 无法保证API功能的稳定性Mythril
②
字节码 无法检测出智能合约的业务逻辑问题,误报率高 ContractFuzzer[13] 字节码+ABI 测试用例随机生成,路径覆盖率有限MAIAN[14] 字节码 只能检测3种缺陷,针对其他合约调用引起的问题无法进行检测 ReGuard[17] 字节码/源码 检测的缺陷局限于重入缺陷
Vultron[20] 合约运行状态 不适用于不使用内部记账逻辑的智能合约,无法检测时间戳依赖或交易顺序依赖等缺陷
GIS[21] 合约运行状态 新攻击模式引入依赖于预定投票群体达成共识,攻击模式以文本形式公开可能被攻击利用 sFuzz[22] 字节码 性能可能会随着初始种群的选择而变化
ContractGuard[36] 合约运行状态 无法有效地防御复杂的逻辑错误,用于有丰富特性的智能合约时会产生相当高的额外开销 DappGuard[37] 交易日志 结合Oyente检测已有合约缺陷存在一定局限
EVMPatch[48] 合约运行状态 修复后的合约代码可能产生更高gas消耗
6 0 5
2 计 算 机 学 报 2021年
① ②
Trailofbits/Echidna:Ethereumfuzztestingframework.https://github.com/crytic/echidnaMythril:AnopensourcesecurityanalysistoolforEthereumsmartcontracts.https://github.com/ConsenSys/mythril
《 计
算
机
学
报
》
本文共调查了表9中20种智能合约缺陷的方 法适用的合约缺陷,图6是智能合约缺陷分类及检 测图,第1层展示了智能合约缺陷产生的相关原因, 第2层展示不同缺陷,第3层展示了缺陷检测工具. 如图6所示,编译器版本过时(D12)、硬地址编码
(D15)和调用类型不匹配(D25)没有相应检测工具.
D12是编译相关的缺陷,实现人员应在实现过程中 遵循最佳实践,例如锁定Pragma版本避免一起升 级带来的相关风险;针对地址合法验证产生的D15 需要人工核查地址是否真实,防止资金转入不存在 账户而永久丢失;D25只在特定外部合约调用情况 下才能被触发,常规情况下可能没有任何异常.
图6 智能合约缺陷分类及检测方法
5.1.2 隐私安全研究不足
(1)合约代码隐私保护不足
保护用户隐私的智能合约编程框架Hawk[26] 可以为部分智能合约代码提供隐私性,但Hawk不 是完全去中心化的,存在一个管理者作为可信第三 方进行监督.此外,对于简单合约,由于Hawk利用 zkSNAKRs保证资金转移和合约执行的正确性,导 致较高计算开销.目前,Hawk由于效率较低,不能 直接部署在大多数区块链系统上.
对于通过定义智能合约语言Zkay[4041]保护智 能合约中的关键信息,该方法需要结合语言发展不断 引入新的语言特性,以支持更丰富的智能合约代码隐 私保护.此外,智能合约代码形式多样,通过对部分私 有代码元素进行加密是否能全面保护私有信息不被 泄露需要进一步验证.并且为了执行Zkay合约,需要 将其转换为具有相同功能且具有隐私保护能力的 Solidity合约在以太坊上执行,推广使用难度较高.
与Hawk、Zkay不同,结合TEE的Coco[43]框 架具有更好的通用性,理论上可以实现任意区块链 系统的隐私保护.然而,Coco框架是针对联盟链的 优化技术,对现有比特币、以太坊等架构影响有限.
(2)合约数据隐私保护不足
TC[27]、CONFIDE[47]和Ekiden[29]依赖于TEE
为智能合约提供数据隐私,TEE为智能合约数据 提供区块链所不具有的机密性,解决智能合约和区 块链无法应对的复杂计算场景问题.在应用TEE实 现高效的区块链隐私保护的同时,最大弊端就是安 全依赖于可信硬件IntelSGX,需要信任硬件厂商及
为智能合约提供数据隐私,TEE为智能合约数据 提供区块链所不具有的机密性,解决智能合约和区 块链无法应对的复杂计算场景问题.在应用TEE实 现高效的区块链隐私保护的同时,最大弊端就是安 全依赖于可信硬件IntelSGX,需要信任硬件厂商及