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

5768                                                      软件学报  2025  年第  36  卷第  12  期


                 基本块, 蓝色节点表示由入口         (即  0  号节点) 出发到达红色或绿色节点所经过的基本块. 根据剪枝后的控制流图生
                 成制导信息.

                                               0                                           0
                                            13                                          13
                                   65      191                                  65      191
                               76  335    203  199                         76   335    203  199
                          412  87  343  347  1213                      412  87  343  347  1213
                       454  420  455  98  1371  1293                424  420  455  98  1371  1293
                       1605  463  467  109  564  1320               1605  463  467  109  564  1320
                      1611   120  607  576  572  1301  1334        1611   120  607  576  572  1301  1334
                      1685  654  131  615  619  2235  1354         1685  654  131  615  619  2235  1354
                    1814  662  666  741  142  2241  1363        1814  662  666  741  142  2241  1363
                     1821  2260  749  753  828  153               1821  2260  749  753  828  153
                    1826       2333  840  836  164  972          1826       2333  840  836  164  972
                  1837  1833      2371     1017  175  980  984  1837  1833     2371     1017  175  980  984
                                2451    1029  1025  1094  186  2529          2451   1029  1025  1094  186  2529
                                2478    2729  1102  1106  2541  2542        2478    2729  1102  1106  2541  2542
                                2492  2749  2748  3099  2630  2634          2492   2749  2748  3099  2630  2634
                             2459  2512  2823                             2459  2512  2823
                                2521  2828                                   2521  2828
                                     2835  2839                                  2835  2839
                                               图 5 图  1  所示代码片段控制流图

                                                表 4 图  1  代码片段的定位结果

                                类型           行号         源代码位置          指令序号         基本块序号
                                              72         2645:23      1904–1914        1837
                              漏洞语句
                                              90         3172:30      2701–2711        2634
                                              71         2547:88      1827–1836        1826
                                              79         2859:38      1497–1500        1371
                             目标依赖语句
                                              88         3117:19      2535–2541        2529
                                              89         3140:28      2642–2633        2542

                    最后进行目标制导符号执行, 在符号执行过程中根据制导信息判断跳转基本块是否被标记为可达, 跳过与目
                 标语句或目标依赖语句无关的基本块. 目标制导符号执行的结果显示, 仅用时                        107.4 s 即完成了安全漏洞检测, 并
                 成功检测出第     72  行和第  90  行的整型溢出漏洞, 检测结果与       Mythril 相同.
                    对比图   5(a) 和  (b) 两张子图可以看出, 符号执行仅需对红色、绿色和蓝色共             35 个  (总基本块的  30%) 基本块进行
                 遍历和分析, 对    28 条  (总基本块跳转的   28.6%) 路径的约束条件进行求解, 即可对该智能合约代码进行安全漏洞检测.
                    若直接使用     Mythril 对全部代码进行测试, 用时      560.8 s 可检测出第   72  行和第  90  行的整型溢出漏洞. 总体上
                 看, 本文提出的方法减少了        80.85%  的符号执行时间开销, 提高了安全漏洞检测的效率, 并成功生成了能够复现漏
                 洞的测试用例.

                  5   实验设计及评估

                    基于所提出方法, 我们在智能合约符号执行工具                Mythril 的基础上实现了原型工具       Smart-Target. Mythril 结合
   382   383   384   385   386   387   388   389   390   391   392