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 行对

