仅基于报告标题和干扰数据识别安全 Bug 报告

梅安娜·佩雷拉

CELA 数据科学
Microsoft

Scott Christiansen

客户安全和信任
Microsoft

摘要 - 识别安全 bug 报告 (SBR) 是软件开发生命周期中的一个重要步骤。 在基于受监督的机器学习的方法中,通常会假设整个 bug 报告可用于训练,并且其标签无干扰。 据我们所知,这是相关领域的首次研究,它表明即使只有标题可用且存在标签干扰,也能对 SBR 进行准确的标签预测。

索引项 - 机器学习, 标签错误, 干扰, 安全 bug 报告, bug 存储库

I. 简介

在报告的 bug 中识别与安全性相关的问题是软件开发团队中的迫切需要,因为这样的问题需要更快速的修复以满足符合性要求并确保软件和客户数据的完整性。

机器学习和人工智能工具承诺使软件开发更快、更灵活且更正确。 几名研究人员已将机器学习应用于识别安全 bug 的问题 [2]、[7]、[8]、[18]。以前发布的研究假定整个 bug 报告可用于机器学习模型的训练和评分。 实际上并不一定是这样。 在某些情况下,整个 bug 报告不可用。 例如,bug 报告可能包含密码、个人身份信息 (PII) 或其他类型的敏感数据 - 这是目前 Microsoft 遇到的一种情况。 因此,重要的是确定如何使用较少的信息更好地执行安全 bug 识别,例如当只有错误 bug 的标题可用时。

此外,bug 存储库通常包含标签错误的条目 [7]:非安全 bug 报告归类为安全相关的报告,反之亦然。 出现标签错误的原因有多种:开发团队缺乏安全性方面的专业知识、某些问题具有模糊性等等,例如非安全 bug 可能会被间接利用,从而导致安全隐患。 这是一个严重问题,因为 SBR 的标签错误导致安全专家不得不手动查看 bug 数据库,这一工作代价高昂且耗时。 必须了解干扰如何影响不同的分类器,以及不同的机器学习技术在受不同干扰类型污染的数据集中的可靠性(或脆弱性)程度,只有解决了该问题,才能将自动分类应用于软件工程的实践。

初步工作认为,bug 存储库具有固有干扰,干扰可能对机器学习分类器的性能产生不利影响 [7]。 然而,对于识别安全 bug 报告 (SRB) 的问题,缺少有关干扰的不同级别和类型的各种系统化和定量研究会影响不同受监督机器学习算法的性能。

在此研究中,我们将介绍即使只有标题可用于训练和评分,也能执行 bug 报告的分类。 据我们所知,这是相关领域的首次研究工作。 此外,我们还提供了对 bug 报告分类中干扰的影响的首次系统性研究。 对于三种机器学习技术(逻辑回归、Naive Bayes 和 AdaBoost)防范独立于类的干扰的可靠性,我们进行了比较研究。

尽管有一些分析模型可以捕获几个简单分类器的干扰的一般影响 [5]、[6],但这些结果不会对干扰在精度上的影响进行严格限制,而且这些结果仅适用于特定机器学习技术。 通常,通过运行计算试验来准确分析机器学习模型中干扰的影响。 在从软件测量数据 [4] 到附属图像分类 [13] 和医疗数据 [12] 的多个方案中,已进行了此类分析。 但这些结果不能转换为具体问题,因为它高度依赖于数据集的性质和底层分类问题。 据我们所知,尤其在干扰数据集对于安全 bug 报告分类的影响问题上,没有任何已发布的结果。

我们的研究贡献:

  • 我们训练分类器,让其仅根据安全 bug 报告 (SBR) 的标题来识别这类报告。 据我们所知,这是相关领域的首次研究工作。 以前的工作要么使用完整的 bug 报告,要么使用其他补充性功能来增强 bug 报告。 当由于隐私问题而无法提供完整的 bug 报告时,仅根据图块来分类 bug 特别有用。 例如,如果 bug 报告包含密码和其他敏感数据,则会很棘手。

  • 我们还提供了对用于 SBR 自动分类的不同机器学习模型和技术的标签干扰容限的首次系统性研究。 对于三种不同机器学习技术(逻辑回归、Naive Bayes 和 AdaBoost)防范依赖于类和独立于类的干扰的可靠性,我们进行了比较研究。

本文的其余内容如下所示:在此宣传资料的第 II 部分中,我们介绍了一些以前的工作。 第 III 部分介绍了数据集以及数据的预处理方式。 第 IV 部分介绍了此方法,并在第 V 部分分析了试验的结果。最后,在第 VI 部分介绍了我们的结论和未来的工作。

II. 以前的工作

机器学习应用于 BUG 存储库。

关于在尝试自动执行费力任务(例如安全 bug 检测 [2]、[7]、[8]、[18]、bug 重复标识 [3]、bug 会审 [1]、[11])时将文本挖掘、自然语言处理和机器学习应用于 bug 存储库,已经有广泛的文献。 理想情况下,将机器学习 (ML) 和自然语言处理相结合可以减少组织 bug 数据库所需的手动工作,缩短完成这些任务所需的时间,并可提高结果的可靠性。

在 [7] 中,作者建议使用自然语言模型,根据 bug 的说明自动执行 SBR 分类。 作者从训练数据集中的所有 bug 说明中提取词汇表,手动将其组织为三个词语列表:相关单词、非索引字(看起来与分类无关的常见词)和同义词。 对于针对安全工程师评估的所有数据进行训练的安全 bug 分类器和针对 bug 报告器大体标记的数据进行训练的分类器,他们比较了这两种分类器的性能。 尽管针对安全工程师评审的数据进行训练时,其模型明显更高效,但建议的模型基于手动派生词汇表,使其依赖于人类的组织结果。 而且,尚不能分析不同级别的干扰如何影响其模型、不同的分类器如何响应干扰,以及任何一类的干扰是否会以不同方式影响性能。

Zou et.al [18] 利用 bug 报告中包含的多种信息类型,其中涉及 bug 报表的非文本字段 (元特征,例如时间、严重性和优先级) 以及 bug 报告的文本内容 (文本特征,即摘要字段中的文本) 。 根据这些功能,他们生成一个模型,旨在通过自然语言处理和机器学习技术自动识别 SBR。 在 [8] 中,作者执行类似的分析,但是他们还比较了受监督和不受监督机器学习技术的性能,并研究了训练模型所需的数据量。

在 [2] 中,作者还探索不同的机器学习技术,根据 bug 说明将 bug 归类为 SBR(安全 bug 报告)或 NSBR(非安全 bug 报告)。 他们为基于 TFIDF 的数据处理和模型训练建议了管道。 他们将建议的管道与基于单词包和 Naive Bayes 的模型进行比较。 Wijayasekara 等人 [16] 还使用文本挖掘技术,根据频繁出现的字词生成每个 bug 报告的功能矢量,以确定隐藏影响 bug (HIB)。 Yang 等人 [17] 声明借助术语频率 (TF) 和 Naive Bayes 来识别高影响 bug 报告(例如 SBR)。 在 [9] 中,作者建议使用模型来预测 bug 的严重性。

标签干扰

对于处理带标签干扰的数据集的问题,已进行了广泛的研究。 Frenay 和 Verleysen 在 [6] 中建议了标签干扰分类,以便区分不同类型的干扰标签。 作者建议了三种不同类型的干扰:独立于 true 类和实例功能的值的标签干扰;仅依赖于 true 标签的标签干扰;以及错误标签概率也依赖于功能值的标签干扰。 在我们的工作中,我们将研究前两种类型的干扰。 从理论角度来看,标签干扰通常会降低模型的性能 [10],但在某些特定情况下除外 [14]。 通常,可靠的方法依赖于过度拟合规避来处理标签干扰 [15]。 之前,已在多个领域(如卫星图像分类 [13]、软件质量分类 [4] 和医疗领域分类 [12])完成干扰对分类的影响的研究。 据我们所知,尚未发布关于标签干扰对 SBR 分类问题的影响的精确定量研究结果。 在这种情况下,未建立干扰级别、干扰类型和性能降低之间的精确关系。 而且,有必要了解不同的分类器在存在干扰时的行为方式。 更通俗地说,我们不了解关于在软件 bug 报告上下文中干扰数据集对不同机器学习算法性能的影响的系统性研究成果。

III. 数据集描述

我们的数据集包含 1,073,149 个 bug 标题,其中的 552073 个对应于 SBR,521076 个对应于 NSBR。 这些数据是在 2015 年、2016 年、2017 年和 2018 年从 Microsoft 各个团队收集的。 所有标签都是通过基于签名的 bug 验证系统或人工标记获取的。 数据集中的 bug 标题是非常短的带有问题概述的文本,只包含大约 10 个字词。

A. 在数据预处理中,按 bug 标题空格分析每个 bug 标题,从而生成一个标记列表。 我们处理每个标记列表,如下所示:

  • 删除所有作为文件路径的标记

  • 拆分存在以下符号的标记:{、(、)、-、}、{、[、]、}

  • 删除非索引字、仅由数字字符组成的标记,以及在整个语料库中出现次数少于 5 次的标记。

IV. 方法

训练机器学习模型的过程包括两个主要步骤:将数据编码为功能矢量;训练受监督机器学习分类器。

A. 功能矢量和机器学习技术

第一部分涉及使用 [2] 中所用的术语频率-反转文档频率算法 (TF-IDF) 将数据编码为功能矢量。 TF-IDF 是一种用于权衡术语频率 (TF) 及其反转文档频率 (IDF) 的信息检索技术。 每个字词或术语都有各自的 TF 和 IDF 分数。 TF-IDF 算法根据字词在文档中出现的次数分配该字词的重要性,更重要的是,它会检查关键字在数据集的标题集合中的相关性。 我们训练并比较了三种分类技术:Naive Bayes (NB)、提升决策树 (AdaBoost) 和逻辑回归 (LR)。 我们已经选择了这些技术,因为它们已经在基于本宣传资料中的整个报告识别安全 bug 报告的相关任务中表现良好。 这些结果在初步分析中得到确认,其中这三个分类器在支持矢量机和随机林方面表现优异。 在我们的实验中,我们使用 scikit-learn 库进行编码和模型训练。

B. 干扰类型

本文中所述的干扰是指训练数据的类标签中的干扰。 因此,如果出现此类干扰,则学习过程和生成的模型会受到标签错误的示例的影响。 我们分析了不同干扰级别对类信息的影响。 在本文献中,前面已使用各种术语讨论了标签干扰的类型。 在我们的工作中,我们分析了分类器中两种不同标签干扰的影响:独立于类的标签干扰,这是通过随机选取实例并翻转其标签引入的;依赖于类的干扰,其中类有不同的干扰可能性。

a) 独立于类的干扰:独立于类的干扰指的是独立于实例的 true 类发生的干扰。 在这种类型的干扰中,标签错误的概率 pbr 对于数据集中的所有实例都是相同的。 在数据集中引入独立于类的干扰的方法是随机翻转数据集中概率为 pbr 的每个标签。

b) 依赖于类的干扰:依赖于类的干扰指的是依赖于实例的 true 类的干扰。 在这种类型的干扰中,类 SBR 中标签错误的概率是 psbr,类 NSBR 中标签错误的概率是 pnsbr。 在数据集中引入依赖于类的干扰的方法是翻转数据集中 true 标签为 SBR 且概率为 psbr 的每个条目。 类似地,我们翻转概率为 pnsbr 的 NSBR 实例的类标签。

c) 单类噪音:单类噪音是类依赖干扰的特殊情况,其中 pnsbr = 0 和 psbr> 0。 请注意,对于独立于类的干扰,psbr = pnsbr = pbr

C. 干扰生成

我们的试验调查了在 SBR 分类器训练中不同干扰类型和级别的影响。 在我们的试验中,将数据集的 25% 设置为测试数据,将 10% 设置为验证数据,将 65% 设置为训练数据。

对于不同级别的 pbr、psbr 和 pnsbr,向训练和验证数据集添加干扰。 我们不会对测试数据集进行任何修改。 使用的不同噪音级别是 P = {0.05 × i|0 < i < 10}。

在独立于类的干扰试验中,对于 pbr ∈ P,执行以下操作:

  • 为训练和验证数据集生成干扰;

  • 使用训练数据集(带有干扰)训练逻辑回归、Naive Bayes 和 AdaBoost 模型;* 使用验证数据集(带有干扰)优化模型;

  • 使用测试数据集(无干扰)测试模型。

在依赖于类的干扰试验中,对于 p.sbr ∈ P 和 pnsbr ∈ P,我们为 psbr 和 pnsbr 的所有组合执行以下操作:

  • 为训练和验证数据集生成干扰;

  • 使用训练数据集(带有干扰)训练逻辑回归、Naive Bayes 和 AdaBoost 模型;

  • 使用验证数据集(带有干扰)优化模型;

  • 使用测试数据集(无干扰)测试模型。

V. 试验结果

在本部分中,根据第 IV 部分中所述的方法分析所执行试验的结果。

a) 训练数据集中不带干扰的模型性能:本文的一项贡献是建议一种机器学习模型,只使用 bug 标题作为决策制定的数据来识别安全 bug。 这样,即使由于存在敏感数据,开发团队不希望共享完整的 bug 报告,也能对机器学习模型进行训练。 我们比较了三种机器学习模型在只使用 bug 标题进行训练时的性能。

逻辑回归模型是性能最佳的分类器。 它是具有最高 AUC 值 0.9826 的分类器,对于FPR 值 0.0735,召回率为 0.9353。 与逻辑回归分类器相比,Naive Bayes 分类器的性能略低,AUC 为 0.9779,对于 FPR 值 0.0769,召回率为 0.9189。 与前面提到的两个分类器相比,AdaBoost 分类器的性能较差。 它的 AUC 为 0.9143,对于 0.0774 FPR,召回率为 0.7018。 ROC 曲线下的区域 (AUC) 是比较多个模型的性能的良好指标,因为它采用单个值总结了 TPR 与FPR 的关系。 在后续分析中,我们会将比较分析限制为 AUC 值。

Table I

A. 类干扰:单类

可以想象一种方案:默认情况下将所有 bug 分配给类 NSBR,如果安全专家检查 bug 存储库,则仅将 bug 分配给类 SBR。 此方案在单类实验设置中表示,假设 pnsbr = 0 和 0 < psbr< 0.5。

Table II

从表 II 开始,可以看到对所有三个分类器的 AUC 的影响非常小。 psbr = 0 的训练模型的 AUC-ROC 与 psbr = 0.25 的模型的 AUC-ROC 相比,逻辑回归相差 0.003,Naive Bayes 相差 0.006,AdaBoost 相差 0.006。 当 psbr = 0.50 时,针对每个模型测量的 AUC 与 psbr = 0 时训练的模型相比,逻辑回归相差 0.007,Naive Bayes 相差 0.011,AdaBoost 相差 0.010。 在出现单类干扰时,训练的逻辑回归分类器的 AUC 指标变化最小,即与 Naive Bayes 和 AdaBoost 分类器相比,它的行为更可靠。

B. 类干扰:独立于类

我们比较了三种分类器在训练集被独立于类的干扰破坏的情况下的性能。 对于在训练数据中使用不同 pbr 级别训练的每个模型,我们测量其 AUC。

Table III

在表 III 中,我们可以看到试验中每个干扰增量的 AUC-ROC 下降。 使用无干扰数据训练的模型中测量的 AUC-ROC 与 pbr = 0.25 的带有独立于类的干扰训练的模型的 AUC-ROC 相比,逻辑回归相差 0.011,Naive Bayes 相差 0.008,AdaBoost 相差 0.0038。 我们观察到当干扰级别低于 40% 时,标签干扰不会对 Naive Bayes 和 AdaBoost 分类器的 AUC 产生明显影响。 另一方面,当标签干扰级别超过 30% 时,逻辑回归分类器会影响 AUC 度量值。

AUC Variation Impact

图 1. 独立于类的干扰中 AUC-ROC 的变化。 对于干扰级别 pbr = 0.5,分类器的行为类似于随机分类器,即 AUC ≈ 0.5。 但我们可以看到,对于较低的干扰级别 (pbr ≤ 0.30),与其他两个模型相比,逻辑回归学习器表现出更好的性能。 但是,如果 0.35 ≤ pbr ≤ 0.45,Naive Bayes 学习器的 AUCROC 指标较佳。

C. 类干扰:依赖类

在最后一组试验中,我们考虑一种方案,其中不同的类包含不同的噪音级别,即 psbr ≠ pnsbr。 我们在训练数据中系统性地将 psbr 和 pnsbr 分别增加 0.05,并观察三个分类器的行为变化。

Logistic RegressionNaive BayesAdaBoost

表 IV、V、VI 分别显示对于逻辑回归、Naive Bayes 和 AdaBoost,AUC 随着干扰在每个类中不同级别的增加而产生的变化。 对于所有分类器,我们注意到在两个类都包含30% 以上的干扰级别的情况下对 AUC 指标的影响。 Naive Bayes 表现最可靠。 在负类包含的干扰标签少于等于 30% 的情况下,即使正类中 50% 的标签已翻转,对 AUC 的影响也很小。 在这种情况下,AUC 的下降为 0.03。 AdaBoost 在所有三种分类器中表现最可靠。 只有当这两个类中的干扰级别大于 45% 时,AUC 才会有显著变化。 在这种情况下,我们开始看到 AUC 的衰减大于 0.02。

D. 在原始数据集中存在残差干扰

数据集是通过基于签名的自动系统和人类专家标记的。 而且,所有 bug 报告都已由人类专家进一步评审和关闭。 虽然我们期望数据集中的干扰量是最小的并且在统计学上不显著,但是残留干扰的存在不会使我们的结论失效。 事实上,为了图解,假定原始数据集因与类无关的噪音损坏,且每个条目的 0 < p < 1/2 独立且分布相同的 (i.i.d) 。

如果我们在出现原始干扰时,添加了概率 pbr i.i.d 的独立于类的干扰,则每个条目的生成干扰为 p ∗ = p(1 − pbr )+(1 − p)pbr。 对于 0 < p,pbr< 1/2,我们有每个标签 p 的实际噪音∗严格大于我们人为添加到数据集 pbr 的噪音。 因此,如果首先使用完全无干扰的数据集 (p = 0) 训练了分类器,则分类器的性能会更佳。 总体来说,实际数据集内存在残留干扰表明,针对分类器干扰的复原能力优于此处显示的结果。 此外,如果数据集内的残留干扰在统计学上相关,则对于绝对低于 0.5 的干扰级别,分类器的 AUC 将变成 0.5(随机推测)。 我们不会在结果中观察到此类行为。

VI. 结论和未来工作

我们在本文中所述的贡献是双重的。

首先,我们表明了仅根据 bug 报告标题进行安全 bug 报告分类的可行性。 这在整个 bug 报告由于隐私限制而不可用的情况下尤其有用。 例如,在我们的案例中,bug 报告包含隐私信息(如密码和加密密钥),不能用于训练分类器。 结果显示,即使只有报告标题可用,也可以高度准确地进行 SBR 识别。 使用 TF-IDF 和逻辑回归组合的分类模型在 AUC 为 0.9831 的情况下执行。

其次,我们分析了标签错误的训练和验证数据的影响。 我们在针对不同干扰类型和干扰级别的可靠性方面,比较了三种众所周知的机器学习分类技术(Naive Bayes、逻辑回归和 AdaBoost)。 对于单类干扰,所有三种分类器都是可靠的。 训练数据中的干扰对生成的分类器没有明显影响。 对于 50% 的干扰级别,AUC 下降非常小 (0.01)。 对于这两个类中存在的和独立于类的干扰,仅当使用干扰级别大于 40% 的数据集进行训练时,Naive Bayes 和 AdaBoost 模型的 AUC 才有显著变化。

最后,仅当这两个类中的干扰超过 35% 时,依赖于类的干扰才会显著影响 AUC。 AdaBoost 的可靠性最高。 在负类包含的干扰标签少于等于 45% 的情况下,即使正类中 50% 的标签有干扰,对 AUC 的影响也很小。 在这种情况下,AUC 的下降小于 0.03。 据我们所知,这是关于干扰数据集对安全 bug 报告识别的影响的首次系统性研究。

未来工作

在本文中,我们已开始系统性研究机器学习分类器的性能干扰对识别安全 bug 的影响。 这项工作有几个有趣的后续工作,包括:检查干扰数据集在确定安全 bug 的严重性级别方面的影响;了解类不平衡对干扰训练模型的复原能力的影响;了解在数据集中对立引入的噪声的影响。

REFERENCES

[1] 约翰·安维克、林登·希尤和盖尔·墨菲。 Who should fix this bug? In Proceedings of the 28th international conference on Software engineering, pages 361–370. ACM, 2006.

[2] 迪克沙·伯尔、赛伊尔·汉达和阿努贾·阿罗拉。 A bug mining tool to identify and analyze security bugs using naive bayes and tf-idf. In Optimization, Reliabilty, and Information Technology (ICROIT) , 2014 International Conference on, pages 294–299. IEEE, 2014.

[3] 尼古拉·贝滕堡、拉胡尔·普雷马杰、托马斯·齐默曼和宋顺金。 Duplicate bug reports considered harmful really? In Software maintenance, 2008.ICSM 2008.IEEE international conference on, pages 337–345. IEEE, 2008.

[4] 安德烈斯·福莱科、塔吉·霍什戈夫塔尔、杰森·范·赫尔斯和洛夫顿·布拉德。 Identifying learners robust to low quality data. In Information Reuse and Integration, 2008.IRI 2008.IEEE International Conference on, pages 190–195. IEEE, 2008.

[5] Benoˆıt Frenay.' 机器学习中的不确定性和标签噪音。 PhD thesis, Catholic University of Louvain, Louvain-la-Neuve, Belgium, 2013.

[6] Benoˆıt Frenay 和 Michel Verleysen. Classification in the presence of´ label noise: a survey. IEEE transactions on neural networks and learning systems, 25(5):845–869, 2014.

[7] 迈克尔·格吉克、皮特·罗泰拉和陶谢。 Identifying security bug reports via text mining:An industrial case study. In Mining software repositories (MSR), 2010 7th IEEE working conference on, pages 11–20. IEEE, 2010.

[8] 凯特里娜Goseva-Popstojanova和雅各布·蒂约。 Identification of security related bug reports via text mining using supervised and unsupervised classification. In 2018 IEEE International Conference on Software Quality, Reliability and Security (QRS) , pages 344–355, 2018.

[9] 艾哈迈德·拉姆坎菲、谢尔盖·德梅耶、伊曼纽尔·吉格和巴特·戈多斯。 Predicting the severity of a reported bug. In Mining Software Repositories (MSR), 2010 7th IEEE Working Conference on, pages 1–10. IEEE, 2010.

[10] 纳雷什·曼瓦尼和 PS 萨斯特里。 Noise tolerance under risk minimization. IEEE transactions on cybernetics, 43(3):1146–1151, 2013.

[11] G 墨菲和 D 库布拉尼克。 Automatic bug triage using text categorization. 在第 十六届软件工程知识工程 & 国际会议上。 Citeseer, 2004.

[12] Mykola Pechenizkiy、Alexey Tsymbal、Seppo Puuronen 和 Oleksandr Pechenizkiy。 Class noise and supervised learning in medical domains:The effect of feature extraction. In null, pages 708–713. IEEE, 2006.

[13] 夏洛特·佩莱耶、西尔维亚·瓦莱罗、乔迪·英格拉达、尼古拉斯冠军、克莱尔·马莱斯·西克雷和杰拉德·德迪乌的训练班标签噪音对土地覆盖时序的分类性能的影响。 Remote Sensing, 9(2):173, 2017.

[14] PS 萨斯特里、GD 纳根德拉和纳雷什·曼瓦尼。 A team of continuousaction learning automata for noise-tolerant learning of half-spaces. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics) , 40(1):19–28, 2010.

[15] Choh-Man腾。 A comparison of noise handling techniques. In FLAIRS Conference, pages 269–273, 2001.

[16] 杜米杜·维贾亚塞卡拉、米洛斯·马尼奇和迈尔斯·麦奎恩。 Vulnerability identification and classification via text mining bug databases. In Industrial Electronics Society, IECON 2014-40th Annual Conference of the IEEE, pages 3612–3618.IEEE, 2014.

[17] 新丽杨、大卫·罗、乔黄、新霞、建玲孙。 Automated identification of high impact bug reports leveraging imbalanced learning strategies. In Computer Software and Applications Conference (COMPSAC), 2016 IEEE 40th Annual, volume 1, pages 227–232. IEEE, 2016.

[18] 德庆祖、志军邓、镇力和海金。 Automatically identifying security bug reports via multitype features analysis. In Australasian Conference on Information Security and Privacy, pages 619–633. Springer, 2018.