Page 217 - 《软件学报》2025年第10期
P. 217

4614                                                      软件学报  2025  年第  36  卷第  10  期


                  1   相关工作

                    目前针对智能合约行为的研究包括代码检测、机器学习、可信计算技术等. 代码检测主要包括符号执行、形
                 式化验证、模糊测试等. Zheng       等人  [16] 提出了一个用于智能合约并行分叉符号执行的通用框架                 Park, 其主要思想
                 是在符号执行过程中使用多个进程, 利用多个              CPU  核心来提高效率. Hu    等人  [17] 提出智能合约工程的概念, 通过一
                 致性测试方法用形式化语言描述行为测试集, 观察测试用例, 并记录被测试合约的行为响应. Kalra 等人                              [18] 提出
                 ZEUS  框架, 以结合抽象解释和符号模型检验的方法对智能合约进行自动的形式化验证, 可准确地根据字节码的
                 执行语义推理出合约行为. Lv        等人  [19] 提出了一种针对联盟链的静态分析方法, 该方法主要包括                3  个模块: 合约静
                 态分析、检测执行和生成可视化报告, 该方法基于抽象语法树、函数依赖等方法提取合约已知风险的静态结构特
                 征形成特征库, 检测执行模块将静态分析得到的合约静态结构特征与特征库进行匹配来确定潜在风险的类型和位
                 置, 最后生成可视化报告. Ding        等人  [20] 提出了一种基于模糊技术的        Hyperledger Fabric  智能合约检测方法
                 HFContractFuzzer, 该方法使用  MockStub  类在本地实现对智能合约接口的调用, 将智能合约的单元测试用例作为
                 初始数据库, 然后再大量随机数据输入到智能合约中, 其结果与数据库数据进行比较以检测智能合约中的逻辑漏
                 洞. 代码检测虽然可以有效地避免合约漏洞所带来的风险, 但是代码检测仅能够在合约部署前对合约进行验证, 未
                 考虑合约运行时的状态.
                    Hu  等人  [21] 提出了一个基于机器学习中      LSTM  模型的智能合约漏洞检测方案, 该方案从合约交易行为中提取
                 出行为模式, 并对每个类别的行为进行特征提取和异常检测. Liu                  等人  [22] 提出了一种结合图神经网络和专家知识
                 的时间消息传播网络. 从归一化图中提取图特征, 并将图特征与设计的专家模式相结合以产生最终的检测系统, 能
                 够提高对智能合约漏洞检测的准确性. 这些方法可以有效地识别已知类型的漏洞, 例如整数溢出、重入攻击、异
                 常处理等, 从而提高智能合约的安全性, 但无法检测到合约是否被篡改, 无法满足联盟链应用的需要.
                    一些研究方案使用可信计算技术来确保合约运行的可信. Chen                   等人  [23] 提出  TeeSwap  将智能合约状态加载到
                 可信执行环境     TEE (trusted execution environment) 中来保证智能合约运行过程中的隐私性. Cheng       等人  [24] 提出
                 Ekiden  系统通过将智能合约状态加载到          TEE  中, 从而保证交易执行前的数据完整性. Yan          等人  [25] 提出一种通过
                 TEE  支持链上机密性的系统设计方案           CONFIDE  保证数据的机密性和完整性. Brandenburger 等人         [26] 提出基于
                 SGX (software guard extensions) 的智能合约执行架构和原型, 该架构可以适应        Hyperledger Fabric 模式, 并将每个
                 应用封装在安全隔离环境中. Keleket 等人          [27] 提出一种基于   SGX  的轻量   Fabric  链码可信执行环境构建方法
                 E-Fabric 架构, E-Fabric 在  Enclave 中执行链码并安全地操作用户数据, 以保证链码运行时的隐私安全. 这些方法
                 利用硬件或软件提供的安全隔离机制, 来防止智能合约的数据或代码被篡改或泄露, 从而提高智能合约的保密性
                 和完整性. 这些工作侧重于通过可信硬件为智能合约创建隔离的执行环境, 并未对合约行为的可信进行关注, 仅提
                 升合约的安全性而忽略可信性是局限的, 也并不满足联盟链中高安全需求应用场景的需要.
                    对于合约行为分析, 不仅需要关注合约代码发布的完整性, 还要能够覆盖合约的运行时状态和行为, 动态度量
                 为智能合约的行为可信提供了一种新的思路.
                    在行为动态度量方面, 已有研究的主要技术包括系统调用短序列模型、静态分析与动态分析. 研究                                 [28] 表明,
                 程序在正常运行时所产生的系统调用与程序运行异常时产生的系统调用在时序上有明显的差异, 因此系统调用非
                 常适合描述程序行为. Forrest 等人     [29] 将  UNIX  系统中进程的正常行为定义为进程所产生系统调用的短序列. 静态
                 分析是一种通过反编译对二进制源码进行语法分析从而提取函数调用或系统调用序列, 根据调用关系构造控制流
                 图并以此构建检测模型的方式. Onwuzurike 等人          [30] 对应用程序源代码进行静态分析获取          API 调用序列作为预期
                 行为序列, 并通过实际行为与预期行为匹配评估行为可信性. 动态分析是在沙箱等环境中执行程序, 监控运行时的
                 行为, 依据历史执行结果等信息对软件预期系统调用序列进行学习, 从而构建正常行为模型. Mishra 等人                             [31] 提出
                 一种动态分析方法       VMAnalyzer 提取所有系统调用的有序序列来检测恶意系统调用序列的行为.
                    基于行为的动态度量符合国内外主流可信计算组织可信定义的本质, 能够有效反映系统运行过程的可信, 因
                 此通过动态度量研究智能合约的行为可信是一种可行的方式.
   212   213   214   215   216   217   218   219   220   221   222