摘要:智能合约是运行在区块链上的计算机程序, 在扩展区块链功能、实现复杂应用的同时, 其潜在的安全漏洞也带来巨大风险. 基于符号执行的安全漏洞检测方法具有精确度高、可生成能复现漏洞的测试用例等优势. 然而, 随着代码规模的增大, 符号执行技术容易受到路径爆炸、约束求解开销过大等问题的影响. 为此, 提出一种基于目标制导符号执行的智能合约安全漏洞检测方法, 首先将静态分析工具或人工标注的漏洞语句作为目标, 分析目标依赖语句, 补充事务序列以添加相关变量的符号约束. 然后, 基于智能合约字节码构建控制流图, 定位目标语句以及目标依赖语句所在的基本块, 剪枝控制流图以生成制导信息. 最后, 根据制导信息优化符号执行的路径探索策略, 减少需要分析的基本块数量以及求解路径条件的时间, 最终高效地检测目标语句是否存在安全漏洞, 并输出可复现漏洞的测试用例. 基于上述思路实现Smart-Target原型工具, 在SB Curated数据集上与符号执行工具Mythril进行对比. 实验结果表明Smart-Target在安全漏洞检测和漏洞复现场景分别减少60.76%和92.16%的时间开销, 大幅提高符号执行效率. 此外, Smart-Target通过分析目标依赖语句使其多检测到22.02%的安全漏洞, 有效提升了漏洞检测能力.