Page 290 - 《软件学报》2021年第6期
P. 290

1864                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

         的函数,实现了无限转账.
         4.3   对比实验
             实验环境为 64 位 Windows 7 系统,3.2GHz Intel(R) Core(TM) i5 处理器,32GB 内存.为了展示 SOL2M 工具
         将 Solidity 程序转换为 MSVL 程序的能力,如表 12 所示挑选了 9 个典型 Solidity 程序.程序列给出了 Solidity 程
         序的名称,LOC 列给出了 Solidity 程序的规模(行),LOM 列给出了从 Solidity 程序转换而来的 MSVL 程序的规
         模,时间列显示了完成转换任务所花费的时间.实验结果表明:对于这些典型的 Solidity 程序,SOL2M 工具都可以
         有效地转换为 MSVL 程序,生成的 MSVL 程序的规模约是 Solidity 程序的 2.25 倍.

                                       Table 12   SOL2M 转换的实验结果
                                  表 12    Experimental results of SOL2M conversion

                                      程序        LOS  LOM  时间(ms)  增长倍数
                                    overflow.sol  18  72    30      4.00
                                   votecontract.sol  29  121  69    4.17
                                  crowdfunding.sol  41  137  91     3.34
                                   govermental.sol  44  114  73     2.59
                                  racecondition.sol  49  110  55    2.24
                                   reentrancy.sol  54  132  78      2.44
                                    safemath.sol  65  128   75      1.97
                                  sushirestaurant.sol  110  156  256  1.42
                                  multisigwallet.sol  118  219  124  1.86

             下面通过与 Oyente 工具进行比较,来分析 UMC4M 的有效性.从以上 9 个程序中挑选 5 个进行实验,表 13
         给出了验证的实验结果.程序列给出了 Solidity 程序的名称,堆栈深度攻击漏洞、交易订单依赖、时间戳依赖、
         可重入漏洞列给出了验证的安全性质,每列下分别给出了 UMC4M 和 Oyente 的验证结果.√表示智能合约不存
         在该安全漏洞,而×表示存在该安全漏洞.验证时间列给出了 UMC4M 和 Oyente 验证所花费的时间.实验结果表
         明:UMC4M 和 Oyente 的验证结果大部分相同,但前者能发现 governmental.sol 的堆栈深度攻击漏洞和时间戳依
         赖,且能发现 racecondition.sol 的交易订单依赖,后者均不能发现这些安全漏洞.另外,UMC4M 的验证时间已经包
         含了 Solidity 程序到 MSVL 程序的转换时间,只占 Oyente 的 31%.
                                     Table 13   UMC4M 与 Oyente 对比结果
                                  表 13    Comparison results of UMC4M and Oyente
                        堆栈深度攻击漏洞         交易订单依赖         时间戳依赖         可重入漏洞         验证时间(ms)
               程序
                        UMC4M   Oyente  UMC4M  Oyente  UMC4M  Oyente  UMC4M  Oyente  UMC4M  Oyente
             overflow.sol   √     √      √       √      √      √      √       √     811    1 158
            votecontract.sol   √   √     √       √      √      √      √       √     836    6 786
           governmental.sol   ×   √      √       √      ×      √      √       √     787    2 190
           racecondition.sol   √   √     ×       √      √      √      √       √     837    888
            reentrancy.sol   √    √      √       √      √      √      ×       ×     820    2 175
         5    相关工作

             目前,国内外学者针对智能合约安全问题给出了多种形式化验证方法,主要分为 3 类:定理证明、符号执行
         以及模型检测.
             Bhargavan 等人提出了智能合约验证框架          [14] 并开发了 Solidity*工具,将 Solidity 智能合约源代码转换为等
         价的 F*程序,在源代码级别上来验证合约安全性.同时开发了 EVM*工具,在字节码级别上反编译 EVM 字节码,
         分析字节码属性并产生等价的 F*程序,然后进行交互式证明.杨霞等人提出一种面向智能合约的高度自动化的
         形式化验证系统及方法,将智能合约开发语言自动化转换为中间层语言 M+代码,然后通过形式化验证辅助器
         对其进行验证.在此基础上,提出一种基于定理证明的以太坊智能合约形式化验证方法,使用辅助验证工具 Coq
         与 Isabelle 分别实现对 Solidity 源代码以及以太坊智能合约字节码的形式化验证                 [15] .一方面,在 Coq 工具中建立
         源代码的形式化模型;另一方面,基于形式化操作码集在 Isabelle 中建立智能合约字节码的形式化模型,之后对
   285   286   287   288   289   290   291   292   293   294   295