• 沒有找到結果。

51 现有研究不足 5.1.1 合约安全研究不足

设计安全保障技术不足

目前智能合约设计模式的研究仍然处于起步 阶段相关研究数量有限需要对已经整理好的模式 进行扩展为Solidity语言创建一个结构化的信息 量大的设计模式库涵盖典型的和常见的编码场景 作为合约实现人员的指导也可以在自动代码生成 框架中应用设计模式用来提取代码构件这些构件 可以被集成到自动代码生成框架中.Solidity设计模 式可以与其他智能合约平台中发展的编码实践进行 比较进一步揭示出更抽象的设计模式这些模式独 立于底层实现框架对一般的智能合约有效

实现及测试安全保障技术不足

针对主流的智能合约缺陷检测原理可以将智 能合约缺陷检测技术划分为基于定理证明的缺陷 检测基于模型检测的缺陷检测基于模糊测试的缺 陷检测基于语法树的缺陷检测和其他缺陷检测.针 对每种技术其优缺点如下所示

定理证明的形式化验证方法通过抽象的数学描 述得到良好的模型和属性表达所以该方法的优势 是即使针对状态多而复杂的系统也不会出现状态 空间爆炸的问题.定理证明可以以任意属性为目 标提供强有力的形式化验证保证验证方法非常精 确并且不会产生误报.但是基于定理证明的 形式化验证方法存在较多局限性例如机制复杂需 要测试人员系统学习该证明方法的工作原理和如何 读取输出等因此该方法具有较高的门槛此外基 于定理证明的形式化验证工具使用通用方法来构造 代码模式和定理证明智能合约的安全性整 个验证过程很难实现完全自动化需要大量人工来 构建智能合约的证明和分析.人工构建的方式带 来的问题首先是该方法扩展性不足无法适用于大 型智能合约也很难实现大批量智能合约验证还可 能导致验证效率降低和人的主观性对验证结果产生 影响.

模型检测方法的优势是自动化程度较高即便 只给出部分合约也可以提供关于已知部分正确性 的有用信息.特别地模型检测会输出终止时的反 例即程序缺陷存在的实例.直接输出缺陷实例的方 式可以有效帮助实现人员理解程序缺陷并修改程

2期 胡甜媛等智能合约的合约安全和隐私安全研究综述

《 计

序.模型检测方法的不足是存在状态爆炸问题若是 基于较大的状态空间模型检测算法会随着状态数目 增多而造成运算时间爆炸式增长和运算空间膨胀.

模糊测试方法的优势是可根据实际代码定制不 同的输入可选择不同的覆盖范围发现更深层次的 错误更加精确地检测出合约的真实漏洞.模糊测试 方法的不足是测试用例随机生成只能覆盖部分系 统行为无法找出所有潜在错误另外该方法选择 特定的测试用例作为种子基于种子不断生成新的 测试用例检测性能可能会随着初始种子的选择而 发生变化实际检测性能难以控制.

采用抽象语法树作为智能合约的基础表现形式 的优势在于不依赖智能合约具体的语言细节对程 序进行逻辑分析抽取重要的程序执行逻辑信息但 是抽象语法树构建的合约缺陷检测规则不适用过 于复杂的问题可能会导致较高误报率特别地基 于抽象语法树的方法表示过于高级无法准确反映 低级信息例如gas计算等.

部署及运维安全保障技术不足

目前针对智能合约运行环境安全检测的研究 数量较少本文仅涉及1项相关研究即EVM漏洞 检测工具EVMFuzzer该工具目前主要检测EVM 执行结果不一致的漏洞.针对合约运行状态的监测 ContractGuard由于嵌入了额外的代码一定程

度上会增加智能合约的部署开销与运行开销.

Vultron检测方法不适用于不使用内部记账逻辑 的智能合约无法检测时间戳依赖性或交易顺序依 赖性等缺陷.GIS系统保护已部署的智能合约 实现攻击模式的动态更新但是该工具对于新攻击 模式的引入依赖于预定投票群体达成共识攻击模 式以纯文本的形式公开可能被潜在攻击者利用.对 于智能合约缺陷修复EVMPatch对存在缺陷的 合约进行打补丁但是可能导致修复后的合约代码 产生更高gas消耗

本文将智能合约缺陷检测方法划分为静态分析 和动态分析.静态分析在非运行时环境中分析程序 或编译代码其主要优势能够识别智能合约中的关 键模式.但是静态分析无法检测执行期间发生的缺 陷针对一些缺陷可能会导致误判.

动态分析是一种在执行或运行时检查程序的方 法其优点是通过动态分析可以检测出静态分析无 法检测的执行期间异常识别出未知合约缺陷导致 的攻击还可以验证静态代码分析的结果.但是动 态分析的不足是合约的动态执行基于用户交互或自 动测试因此不能保证覆盖源代码所有执行路径同 时需要保证在不影响智能合约正常运行的情况下 获取合约的执行状态信息并进行有效的跟踪和分 析这也对智能合约动态运行监测提出更高要求.

最后总结上述智能合约缺陷检测工具的局限 性如表9所示.

 智能合约缺陷检测工具汇总表

分类 工具 检测对象 局限

静态分析

字节码 只能探索部分程序路径依赖于消耗g量高的模式清单 字节码 准确率较低无法检测在特定情况下才会出现的缺陷

源码 需要针对合约定义特定的策略且Z发现的缺陷的实际可用性不确定 字节码 可检测的智能合约版本有严格限制

源码 缺乏形式语义无法实现更严格的分析表示过于高级无法准确反映低级信息如g计算 源码 需要构建包含缺陷的智能合约代码库缺陷的检测范围局限于代码库中的缺陷类型 源码 无法描述更复杂的规则导致误报率较高

源码 目前主要检测整数溢出和被零整除两种算术操作问题

字节码 限制循环次数防止路径爆炸导致部分缺陷漏报无法检测逻辑相关问题

动态分析

字节码 无法保证A功能的稳定性

字节码 无法检测出智能合约的业务逻辑问题误报率高 字节码+I 测试用例随机生成路径覆盖率有限

字节码 只能检测3种缺陷针对其他合约调用引起的问题无法进行检测 字节码源码 检测的缺陷局限于重入缺陷

合约运行状态 不适用于不使用内部记账逻辑的智能合约无法检测时间戳依赖或交易顺序依赖等缺陷

合约运行状态 新 字节码 性能可能会随着初始种群的选择而变化

合约运行状态 无 交易日志 结合O检测已有合约缺陷存在一定局限

合约运行状态 修复后的合约代码可能产生更高g消耗

计  算  机  学  报

① ②

《 计

本文共调查了表9中20种智能合约缺陷的方 法适用的合约缺陷图6是智能合约缺陷分类及检 测图第1层展示了智能合约缺陷产生的相关原因 第2层展示不同缺陷第3层展示了缺陷检测工具. 如图6所示编译器版本过时D12硬地址编码

D15和调用类型不匹配D25没有相应检测工具.

D12是编译相关的缺陷实现人员应在实现过程中 遵循最佳实践例如锁定Pragma版本避免一起升 级带来的相关风险针对地址合法验证产生的D15 需要人工核查地址是否真实防止资金转入不存在 账户而永久丢失D25只在特定外部合约调用情况 下才能被触发常规情况下可能没有任何异常.

图6 智能合约缺陷分类及检测方法

5.1.2 隐私安全研究不足

合约代码隐私保护不足

保护用户隐私的智能合约编程框架Hawk 可以为部分智能合约代码提供隐私性但Hawk不 是完全去中心化的存在一个管理者作为可信第三 方进行监督.此外对于简单合约由于Hawk利用 zkSNAKRs保证资金转移和合约执行的正确性导 致较高计算开销.目前Hawk由于效率较低不能 直接部署在大多数区块链系统上.

对于通过定义智能合约语言Zkay保护智 能合约中的关键信息该方法需要结合语言发展不断 引入新的语言特性以支持更丰富的智能合约代码隐 私保护.此外智能合约代码形式多样通过对部分私 有代码元素进行加密是否能全面保护私有信息不被 泄露需要进一步验证.并且为了执行Zkay合约需要 将其转换为具有相同功能且具有隐私保护能力的 Solidity合约在以太坊上执行推广使用难度较高.

与HawkZkay不同结合TEE的Coco框 架具有更好的通用性理论上可以实现任意区块链 系统的隐私保护.然而Coco框架是针对联盟链的 优化技术对现有比特币以太坊等架构影响有限.

合约数据隐私保护不足

TCCONFIDE和Ekiden依赖于TEE

为智能合约提供数据隐私TEE为智能合约数据 提供区块链所不具有的机密性解决智能合约和区 块链无法应对的复杂计算场景问题.在应用TEE实 现高效的区块链隐私保护的同时最大弊端就是安 全依赖于可信硬件IntelSGX需要信任硬件厂商及

为智能合约提供数据隐私TEE为智能合约数据 提供区块链所不具有的机密性解决智能合约和区 块链无法应对的复杂计算场景问题.在应用TEE实 现高效的区块链隐私保护的同时最大弊端就是安 全依赖于可信硬件IntelSGX需要信任硬件厂商及

相關文件