Page 51 - 《软件学报》2026年第1期
P. 51

48                                                         软件学报  2026  年第  37  卷第  1  期


                    类似的方法, 如     Zhang  等人  [86] 提出  Smart Shield  用于自动修复智能合约中的安全漏洞, 并确保修复的合约对
                 后续重入、拒绝服务等攻击免疫, 而且对             Gas 消耗友好. 如图   18  所示, Smart Shield  工具通过  3  个步骤来修复合约
                 中的安全漏洞.

                                           源代码 0xAB      0xCD
                                                     ...    JUMPDEST
                                                  PUSH 1 0x01  ...
                                             补丁点  ADD
                                                  POP
                                                     ...
                                          重写代码  0xAB     0xCD
                                                 PUSH 2 0x0FFB  JUMPDEST  0xFFB  JUMPDEST
                                                 JUMP          ...        ...
                                                                       PUSH 1 0x01
                                                 INVALID               [CHECKED_ADD]
                                                 INVALID               POP
                                                    ...                   ...
                                                 INVALID               PUSH 1 0xCD
                                                                       JUMP
                                              图 17 源代码和重写代码的控制流图


                                        语义提取
                                                                         合约修复
                                                               控制流                             整改修复
                                                                转换
                                抽象语法树
                                                                          字节码       字节码
                   智能合约                                                   重定位       验证
                                 0000: PUSH1 0x80
                                 0002: MLOAD
                                 0003: ISZERO                 数据插入
                                 0004: PUSH
                                 0x0011                       保护机制                             修复后的
                                 0007: JUMPI                                                   智能合约
                                 0008: STOP
                                 0009: JUMPDEST  字节码层面语义信息
                                 ...
                             未经修正的 EVM 字节码
                                                 图 18 Smart Shield  工作流程

                    1) 语义提取: 分析每个合约的抽象语法树及其未校正的                 EVM  字节码, 修复不安全的代码模式, 同时保持其他
                 功能的一致性.
                    2) 合约修复: 采用控制流转换和数据插入保护机制两种策略来修复合约中的漏洞, 并优化                          Gas 消耗.
                    3) 修正合约生成: 字节码重定位和字节码验证可能导致功能行为变化或兼容性副作用, 并将修复报告发送给
                 开发人员改进合约的代码质量.
                    EVM Patch  和  Smart Shield  都是利用纯硬编码模板的补丁修复模式, 因此无法动态适应正在打补丁的字节码,
                 这严重限制它们的灵活性和可扩展性. 例如, 当使用硬编码模板修补整数溢出时, 需要使用特定的补丁模板, 因为
                 要检查的边界对于每个整数大小都是不同的               (即一个模板用于      uint256, 另一个模板用于    uint64). Ferreira 等人  [87] 提
                 出  Elysium, 能够在字节码级别实现自动智能合约修复的可扩展. 通过从字节码推断上下文信息, 结合基于模板和
                 语义补丁自动修补合约中的          7  种不同类型的漏洞, 并且可以使用新的模板和漏洞查找工具进行扩展. Qin                    等人  [88]

                 提出一种可理解描述语言合约, 实现从自然语言合约到“可理解描述句子”的合约转换, 用于修补合谋风险. Chen
                 等人  [89] 提出一种将  EVM  智能合约升级到     WASM  的二进制翻译方案       (EVMBT), 并配备   LLVM  汇编的优化能力
                 和  5  个修复智能合约漏洞的插件. Chu       等人  [90] 总结现有的研究, 主要集中在合约部署前如何对检测到的漏洞进行
                 修复. 表  4  为基于可升级智能合约的应用升级需求方法的小结.
   46   47   48   49   50   51   52   53   54   55   56