关键词:
智能合约
漏洞检测
多标记学习
操作码
分类器链
摘要:
近年来,随着区块链技术的快速发展,智能合约开始被越来越多的人应用于实际生活中。智能合约利用区块链去中心化、可编程的特性,将传统合同转变为代码的形式部署在区块链平台上,极大地降低了交易的成本,提升了交易的效率。但是,智能合约带来这些便利的同时也带来了安全风险。智能合约漏洞引发的安全事件频发,造成大量经济损失,提前发现合约中的安全漏洞是预防漏洞被利用的关键途径之一。然而,现有智能合约漏洞检测方法在漏洞检测能力和效率上还不能完全满足大规模智能合约漏洞检测的需要。针对上述问题,本文对智能合约现状和现有智能合约漏洞检测技术存在的不足进行分析,并对基于机器学习的智能合约漏洞检测技术进行深入研究,主要研究工作及成果如下:(1)智能合约的特征提取及向量化是利用机器学习方法进行智能合约漏洞检测的第一步,特征处理结果对检测结果有重要的影响,目前还缺少一个有效的特征处理方法。针对这一问题,本文提出了一种基于智能合约文本的操作码向量化方法,该方法在考虑合约操作码结构特征的基础上,对操作码进行归类,使用N-Gram(N=2)算法以及TF-IDF算法将简化后的操作码转化为向量,并依据漏洞逻辑提取9维统计特征用于丰富向量表达,最大程度保留合约信息,充分反映智能合约的结构特征和调用关系。通过将该方法与其他特征提取方法对比实验,结果显示该方法使得逻辑回归模型训练时最高F1-score值能达到0.961,相比于其他特征提取方法取得了更好的效果。(2)一份智能合约可能存在多种漏洞,因此智能合约的漏洞检测是一个多标记学习问题,如果简单的将一种漏洞对应一个二分类模型,完全忽略标签之间潜在的相互关系,可能就会降低了分类器的检测能力。针对这一问题,本文将分类器链应用于智能合约漏洞检测中,提出一种基于改进分类器链的智能合约漏洞检测方法。该方法利用链对标签相关性建模,使用分类器链进行漏洞分类训练,充分反映不同漏洞发生原因的共同内在关联。实验对16439份以太坊上部署的已验证智能合约进行评估,最终得到的平均F1-score值达到0.963,相较于以往工作有了显著提升。同时,对于分类器链,提出链序列优化算法,将粒子群优化算法和遗传算法相结合,寻找漏洞标签顺序最优解,实验结果表明,最优解的F1-score值和汉明损失值分别为0.967和0.0166,相比于普通分类器链性能上有了明显提升。