关键词:
脆弱性检测
代码克隆
操作系统
代码特征
静态分析
摘要:
基于代码克隆检测技术进行软件脆弱性检测,是软件脆弱性静态分析中的一个重要方向。目前,已有软件脆弱性检测工具在面向大规模代码集的脆弱性检测方面存在不足,且缺乏针对操作系统脆弱性特点的优化。为此,基于代码克隆检测技术,在深入研究软件脆弱性检测方法的基础上,提出了一种基于代码相似性分析的操作系统脆弱性检测方法。该方法的主要特点包括:在一般的“代码表征——提取特征——特征比对”的检测流程的基础上,增加了基于操作系统软件包类型和函数代码规模的预筛选机制,在进行代码表征之前排除与脆弱性无关的软件包以及函数规模差距过大的代码;选择函数基本信息、符号序列和控制流路径三个角度分别提取代码特征,逐级比较脆弱代码和待测代码的相似度。本文主要贡献如下:1.深入研究了软件脆弱性检测方法和操作系统脆弱性特点,提出了基于软件包类型和函数代码规模的预处理方法。预处理的目的是避免在检测过程中对过多代码进行解析和表征,导致运行时间过长。为此本文结合操作系统脆弱性的特点,以软件包和代码行数等无需通过解析代码即可获取的脆弱代码信息,在解析代码的步骤之前对被测代码进行了筛选。实验结果表明,仅第二轮筛选前后的代码量缩减比例就达到了平均67.9%。2.提出了基于多特征和分级递进式的代码克隆检测优化方法。在代码相似性检测领域,多特征检测由于使用更多维度的代码信息,检测精度比单一特征检测更有优势,本文选择“函数基本信息”、“语句符号序列”和“控制流路径”三类不同层面的代码特征进行检测,并采用分级递进的检测流程,以复杂度由低到到高的顺序依次检测三类特征,针对性地采用三类不同的衡量标准和比较算法,能够提高检测方法的运行效率和精确度。3.实现并验证了基于代码相似性分析的操作系统脆弱性检测原型系统。原型系统使用Python开发,部署在Ubuntu18.04系统。在以2个版本Linux内核和三个版本的Ubuntu系统源码作为测试集的实验中,原型系统验证了预处理,运行效率和检测精度等多方面的性能。实验结果表明,本文提出的预处理方法能有效缩减被测代码规模,使得原型系统具备良好的运行效率,并且测试结果的精确度达到了84%。