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

揭晚晴 等: 智能合约与      DeFi 协议漏洞检测技术综述                                                355


                 了  Solidity  到  F*的翻译工具和 EVM  字节码的反编译器, 确保在不同级别上对合约进行形式化验证. 此研究为智
                 能合约形式化验证提供了一套完整的工具链, 奠定了该领域进一步发展的基础.
                    Kalra 等人  [103] 提出了  ZEUS, 在延续文献  [102] 工作的基础上, 进一步丰富了形式化验证的方法. ZEUS           结合了
                 抽象解释和符号模型检测, 用于智能合约的验证. 该工具通过将智能合约转换为                         LLVM bitcode 的中间表示, 结合
                 抽象解释和符号模型检测技术进行验证. 抽象解释用于计算数据域上的循环和函数摘要, 而符号模型检测则在缩
                 减的状态空间中进行验证, 以确保智能合约的安全性. ZEUS                通过精确的分析和有效的状态空间缩减, 显著提升了
                 智能合约验证的准确性和扩展性, 特别是在处理复杂合约时表现优异.
                    文献  [104] 提出的  KEVM  是基于  K  框架构建的   EVM  形式化语义模型. K     框架是一种用于定义可执行语义规
                 范的重写系统, 研究团队通过该框架定义了              EVM  的语法、状态配置和执行规则, 构建了完整的               EVM  形式化语
                 义. KEVM  的创新之处在于其不仅通过了所有官方测试套件, 成为首个完整的                     EVM  可执行规范, 还扩展了多种形
                 式化分析工具, 包括调试器、符号执行引擎和演绎验证器, 这为                   EVM  的形式化分析提供了强有力的支持.
                    后续还有基于其他特征进行形式化验证的研究, 如基于静态程序切片框架的                          HoRStify [41] . HoRStify 通过分析
                 程序依赖图, 捕捉智能合约中变量和节点之间的依赖关系, 并通过逻辑编码和约束霍恩子句定义安全性模式, 以验
                 证合约的安全属性.
                  3.1.1.2    符号执行
                    符号执行是一种在智能合约漏洞检测中广泛应用的技术, 其核心是将程序变量抽象为符号输入, 并通过模拟
                 程序的执行路径, 分析可能导致漏洞的输入条件               [105] .
                    Luu  等人  [5] 于  2016  年提出了 Oyente, 这是首个使用符号执行技术检测智能合约漏洞的工具. Oyente 直接处
                 理  EVM  字节码, 通过构建控制流图和执行符号状态, 利用             Z3  求解器分析路径约束, 从而检测交易顺序依赖、时
                 间戳依赖、异常处理不当和重入漏洞等问题. 在此基础上, Tsankov                 等人  [68] 提出的 Securify 通过将 EVM  字节码反
                 编译为静态单赋值形式的无栈表示, 推导出语义事实, 以验证合约的安全性. 尽管 Securify 在处理数值属性推理上
                 有局限, 但它有效减少了用户在分类警告时的工作量, 成为智能合约安全分析中的重要工具.
                    后续的研究继续丰富了符号执行检测方法, 如                 TEETHER  [77] 和  SAILFISH  [55] 系统. Krupp  等人  [77] 开发了
                 TEETHER, 这是首个能够自动识别智能合约漏洞并生成攻击载体的工具. TEETHER                     通过逆向工程字节码, 构建控
                 制流图, 使用符号执行分析关键指令, 并生成可利用的攻击路径. Bose 等人                  [55] 提出了 SAILFISH  系统, 专注于检测
                 智能合约中的状态不一致性漏洞. SAILFISH           采用混合分析方法, 通过轻量级探索阶段识别潜在漏洞, 并在精炼阶
                 段通过符号求解和值摘要分析验证漏洞的真实性.
                  3.1.1.3    污点分析
                    污点分析是一种程序分析技术, 旨在追踪数据从源头到达目标之间的流动情况. 在智能合约漏洞检测中的应
                 用, 通过标记和跟踪“污点       (可能受外部输入影响的数据)”, 污点分析可以帮助识别检测可能导致安全问题的路径                         [106] .
                    Torres 等人  [107] 于  2018  年提出了  Osiris 工具, 专门用于检测以太坊智能合约中的整数溢出漏洞. 该工具基于
                 智能合约的字节码构建控制流图, 利用符号执行模拟合约的执行路径, 检测可能的整数溢出操作. 为了减少误报,
                 Osiris 使用污点分析技术追踪未经验证的输入            (污点) 在合约中的传播路径, 如果这些污点影响到了溢出操作, 该
                 操作便被标记为潜在漏洞.
                    Ethainter 工具  [108] 用于检测以太坊智能合约中的复合信息流漏洞. Ethainter 在信息流分析的基础上, 结合了污
                 点分析技术, 详细建模合约中的数据清理机制, 追踪未清理的数据在合约中的传播路径, 从而识别出可能绕过守卫
                 机制的漏洞. 同样是基于信息流分析, SmartACE           框架  [109] 用于验证复杂智能合约, 尤其是那些涉及大量用户的合
                 约. 在污点分析阶段, SmartACE 利用局部抽象技术, 有效地捕捉潜在的漏洞路径, 从而提高了合约验证的效率和精度.
                    后续也出现了针对特定漏洞的污点分析检测方法, 如                  Ghaleb  等人  [78] 提出的  AChecker 工具, 专注于检测智能
                 合约中的访问控制漏洞, 尤其是那些缺乏明确访问控制策略说明的合约. AChecker 首先通过静态数据流分析识别
                 出合约中的访问控制检查点和相关状态变量, 然后利用跨过程的上下文敏感污点分析, 追踪用户输入对这些关键
                 指令或状态变量的影响.
   353   354   355   356   357   358   359   360   361   362   363