Page 392 - 《软件学报》2025年第12期
P. 392

杨慧文 等: 基于目标制导符号执行的智能合约安全漏洞检测                                                    5773


                 个漏洞所需最长时间为        1 789.98 s. Mythril 复现  109  个漏洞所需的总时间为  208 555.23 s, 比  Smart-Target 多花费
                 12.8  倍的时间, 其中复现单个漏洞所需最长时间为            35 226.65 s, 而  Smart-Target 仅需  1 166.21 s 即可成功复现该漏
                 洞, 减少了  96.69%  的时间开销.
                    对于未能复现的       52  个漏洞中, Smart-Target 的分析时间为   5 396.06 s, Mythril 的分析时间为  175 824.48 s, 即
                 Smart-Target 减少了  96.93%  的分析时间, 这有助于及时更换其他检测工具或考虑人工复现漏洞.
                    综上所述, 我们对      RQ2  的回答是: 在漏洞复现场景中, Smart-Target 的复现漏洞能力明显优于非目标制导的
                 Mythril. 在复现相同数量的安全漏洞情况下, Smart-Target 相较于        Mythril 减少了  92.16%  的复现时间.
                  5.2.3    RQ3  的结果与分析
                    为评估目标依赖语句分析对           Smart-Target 安全漏洞检测能力以及时间开销的影响, RQ3           在  RQ2  的基础上进
                                                                   −
                 行了一组对比试验, 比较不启用目标依赖语句分析的                 Smart-Target  与启用目标依赖语句分析的       Smart-Target 之间
                 的性能差异.
                    RQ3  的实验结果如图      8  所示. 从图  8(a) 可以看出, 除了权限控制漏洞中两种策略检测到相同数量的漏洞外,
                 启用目标依赖语句分析的          Smart-Target 均能检测到更多安全漏洞. 具体地, Smart-Target 检测到        109  个漏洞, 而
                 Smart-Target  检测到  85  个漏洞, 即开启目标依赖语句分析能够多检测           24  个  (22.02%) 漏洞, 有效增强了安全漏洞
                          −
                 检测能力.
                                                                                                   −
                    目标依赖语句分析在增强漏洞检测能力的同时, 也增加了符号执行的时间开销. 具体地,                             Smart-Target  需要
                 8 361.01 s 完成安全漏洞检测, Smart-Target 增加了  13 375.74 s (61.54%) 的分析时间. 这是因为目标依赖语句分析
                 引入了更多的语句作为符号执行需要遍历的路径和基本块. 如图                      8(b) 所示, 在启用目标依赖语句分析后, 检测重
                 入和未检测低级调用两种类型漏洞所花费的时间增幅最大.

                                         Smart-Target −                  Smart-Target −
                                         Smart-Target                    Smart-Target
                                                               10 000
                                  50
                                                               8 000
                                  40
                                检测出漏洞的数量  30                  检测时间 (s)  6 000





                                  20                           4 000


                                  10                           2 000



                                  0                               0
                                     TM   AC  ARM  RE  ULLC          TM   AC  ARM  RE  ULLC
                                             漏洞类型                           漏洞类型
                                       (a) 安全漏洞检测数量对比                   (b) 检测时间消耗对比
                                            图 8 目标依赖语句对性能影响情况对比图

                    表  8  统计了  Smart-Target 执行目标依赖语句的数量. 如表      8  所示, 发现在存在重入和未检查低级调用两类漏
                 洞的合约中执行了较多结构体赋值状态变量的语句. 智能合约中, 当状态变量通过非定长类型结构                                (如动态数组
                 或  mapping) 存储结构体时, 能够将存储的结构体以内存引用的形式赋值给局部变量, 通过对该局部变量的访问与
                 修改, 达到赋值状态变量的目的. 例如图             9  中第  7  行从状态变量  Acc  中取出用户信息     acc, 并在第  8  和  9  行对
   387   388   389   390   391   392   393   394   395   396   397