Page 319 - 《软件学报》2021年第7期
P. 319

张献  等:基于代码自然性的切片粒度缺陷预测方法                                                        2237


                 LSTM 网络分析切片后的代码 token 序列,然后利用神经网络自动生成的语义特征进行分类器学习和对新模块
                 的缺陷检测,因此,该方法具有专家经验依赖少的优点,但同时也造成了模型和语义特征的可解释差等问题.与
                 VulDeePecker 相比,本文的 CNDePor 方法在两类缺陷数据集上得到了相近结果,其中,在 BE-ALL 上,本文方法
                 的漏报率、查全率较对比方法均改善 6.8%.同时,CNDePor 方法以语言模型和 CE 类度量元为基础,因此相比基
                 于端到端深度学习的“黑箱”检测方法来说,具有更好的可解释性.下面通过实例分析给出进一步解释.图 7 展示
                 了两类安全缺陷的两个切片样本及语言模型度量的 CE 类特征值,其中,第 1 个实例来自 NVD 库 QEMU2.3.0 开
                 源软件的 esp.c 文件,其具有缓冲区溢出风险;第 2 个样本来自 SARD 库,具有资源管理缺陷.经过缺陷修复后,各
                 自得到下方的安全版本,其中,代码标红处为修复前后切片间差异.




























                                              Fig.7    Slice samples and its CE scores
                                                  图 7   切片样本及其 CE 值

                    由图 7 可以看出,样本 1 的 get_cmd()函数内部调用了库函数 memcpy()用于内存拷贝.但该函数并不安全,
                 没有自主越界检查功能,因此存在缓冲区溢出风险,易被恶意程序利用与攻击或造成进程崩溃.经漏洞修补后,
                 get_cmd()内部增加了数据长度的越界检查,同时增设了相应形参,确保了内存的安全拷贝.可以看到,本文的
                 CNDePor 方法度量该缺陷样本获得的 M-CE 和 M-CE-Inv 指标值分别为 1.205 76 和 1.330 25,而修复后样本的
                 指标值下降至 0.359 50 和 0.478 62,自然性提高显著,利于分类器识别.样本 2 中,原局部变量 dataBuffer 定义在
                 栈中,其由系统自动分配和释放空间.而原代码错误地将该栈区变量释放,造成了潜在隐患(如系统崩溃).为此,将
                 dataBuffer 改为堆区声明,避免了相应错误.类似地,该样本修复前获得的 M-CE 和 M-CE-Inv 值分别为 3.002 48
                 和 3.295 40,而修复后指标值下降至 0.600 99 和 0.676 19,自然性得到显著提高,有利于预测模型判断.由上述实
                 例分析可知,本文提出的 W-NLM 可以通过语料库学习来捕获语言序列的发生规律,进而可以衡量待测软件模
                 块的自然性并完成缺陷倾向性预测.
                    在对比基于代码自然性的方法方面,本文选取了我们已发表的工作 DefectLearner.该方法将 NLM 度量的代
                 码 CE 度量元引入到缺陷预测中,以增强分类器的预测性能.但是,由于 NLM仅单向学习语料库,致使模型对软件
                 模块自然性的度量没有本文方法全面.其次,就缺陷预测任务而言,NLM 的训练是无监督的,它们未利用模块的
                 缺陷信息,致使生成的 CE 度量元的缺陷判别力有限.从数据对比来看,本文的 CNDePor 方法性能整体上优势明
                 显,其中,在 BE-ALL 数据集上的查准率、查全率和 F1 指标分别提升 12.0%、25.3%和 18.6%.
   314   315   316   317   318   319   320   321   322   323   324