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

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


                 了符号执行和污点分析等技术, 能够检测出包括整型溢出、重入以及未检测低级调用等安全漏洞, 具有较强的漏
                 洞检测能力    [20–22] . 在事务序列生成以及合约状态探索策略的选择上, 本文沿用              Mythril 中的生成和探索策略, 即根
                 据字节码中函数基本块出现的顺序生成和执行事务序列, 并采用广度优先策略探索合约状态. 此外, Smart-Target
                 基于  Python  第三方库  evm-cfg-builder (https://github.com/crytic/evm_cfg_builder) 识别基本块并生成控制流图以进
                 行可达性分析, 基于静态分析工具           Slither (https://github.com/crytic/slither) 对智能合约源代码进行解析, 获得状态
                 变量类型、状态变量操作语句以及结构体定义等信息.
                    为了验证本文提出的方法的有效性, 我们提出了                3  个研究问题, 分别从安全漏洞检测、安全漏洞复现以及目
                 标依赖语句对漏洞检测能力的影响            3  个角度出发, 对   Smart-Target 进行实验和评估. 具体研究问题如下.
                    RQ1: 在安全漏洞检测场景中, 使用静态分析的结果作为目标, Smart-Target 能否减少符号执行的时间开销?
                 是否会影响安全漏洞检测性能?
                    安全漏洞检测场景指在部署智能合约前进行全面的安全漏洞检测. 静态分析检测效率高但可能存在误报, 且
                 无法生成测试用例; 符号执行精确度较高且能生成对应的测试用例, 但由于路径爆炸以及约束求解难度等问题, 检
                 测效率较低. 因此, 安全漏洞检测场景中可将静态分析与符号执行结合, 使用本文提出的目标制导符号执行方法快
                 速生成测试用例. RQ1     将静态分析报告的多个漏洞同时作为目标, 确认静态分析的报告并生成测试用例.
                    RQ2: 在安全漏洞复现场景中, Smart-Target 能否快速复现指定漏洞并生成测试用例?
                    安全漏洞复现场景指合约的参与者、用户或其他安全专家发现或报告源代码中存在安全漏洞问题, 但未提供
                 具体的测试用例用于复现. 本文提出的目标制导符号执行方法可将人工标注的漏洞语句作为目标, 生成能够复现
                 漏洞的测试用例, 帮助智能合约开发或测试人员复现、分析和修复安全漏洞. RQ2                         将数据集中人工标注存在漏洞
                 的语句逐一作为目标, 生成复现指定漏洞的测试用例.
                    RQ3: 目标依赖语句分析是否提升了           Smart-Target 的安全漏洞检测能力?
                    为了评估目标依赖语句分析对           Smart-Target 检测安全漏洞能力的影响, RQ3      与  RQ2  类似, 将数据集中人工标
                 注存在漏洞的语句逐一作为目标, 比较分析目标依赖语句分析对目标制导符号执行检测安全漏洞的能力以及时间
                 开销的影响.
                  5.1   实验设计
                    本文选取    Durieux  等人  [20] 的实证研究中使用的    SB Curated  公开数据集   (https://github.com/smartbugs/
                 smartbugs/tree/master/dataset) 作为实验对象. 该数据集中包含  10  种漏洞类型, 即权限控制     (access control, AC)、算
                 术相关   (arithmetic, ARM)、弱随机性  (bad randomness, BD)、拒绝服务  (denial of service, DoS)、前端运行  (front
                 running, FR)、重入  (reentrancy, RE)、短地址  (short addresses, SA)、时间操作  (time manipulation, TM)、未检查低
                 级调用   (unchecked low level calls, ULLC) 以及其他尚未分类的漏洞  (other, OT), 各漏洞类型的文件数量以及漏洞
                 数量如表   5  所示.

                                               表 5 SB Curated  数据集相关信息

                     漏洞类型        文件数      漏洞数                              简介
                     权限控制          18      24                   函数或语句能够被外界任意地执行
                     算术相关          15      23                          整型上溢或下溢
                     弱随机性          8       34       基于区块链环境变量生成随机数, 但环境变量能够被外界 (如矿工) 控制
                     拒绝服务          6       14              代码中存在大量耗时操作, 如循环中发起外部调用
                     前端运行          4        7                  事务执行的结果与当前合约状态有关
                       重入          31      32                   合约函数非预期地外界再次被调用
                      短地址          1        1              利用短地址使EVM读取非地址数据, 造成数据异常
                     时间操作          5        7        基于区块链时间戳执行某些函数或语句, 而时间戳能够被矿工影响
                   未检查低级调用         52      75     使用call等函数但未检查返回值, 当出现调用失败情况时将影响合约执行逻辑
                       其他          3        5              其他不属于以上9种类型的漏洞, 如未初始化变量等
   383   384   385   386   387   388   389   390   391   392   393