摘要

针对现有基于深度学习的漏洞检测方法主要集中在源代码的单一表现形式上,无法完全捕获源代码中包含的丰富语义信息和结构信息,以及大多数方法基于函数粒度,检测样本存在大量与漏洞无关的冗余代码导致检测精度下降的问题,本文聚焦于智能合约最严重的漏洞之一,即重入漏洞,提出一种基于混合语义的切片级智能合约重入漏洞检测方法SCHyVulDect。该方法首先根据漏洞特征关键字对智能合约进行切片操作,获得合约切片;然后构建合约切片的代码图,通过图注意力网络(Graph Attention Network,GAT)提取其深层语义信息。并使用双向长短期记忆网络(Bidirectional Long-Short Term Memory,Bi-LSTM)和注意力机制,提取切片代码的上下文序列特征,最后将提取的图结构特征和序列特征进行融合,从而进行漏洞检测。实验结果表明,SCHyVulDect检测重入漏洞的精确率、召回率和F1值分别为96.36%,94.45%,91.70%,比现有的基于深度学习的智能合约漏洞检测方法的精确率提高13.03%~18.00%,具有较好的检测效果。