如何为 SAST 工具设置误报基准?

时间:2022-09-26 13:56:32

许多 SAST 工具都无法避免误报的问题。这些工具经常报告一些实际不存在的漏洞,这种不准确性让安全团队耗费大量时间来对误报进行分类和处理,这时设置误报基准就显得十分必要。

通过设置误报基准,安全团队可以确定一个参考的点或者标准来衡量安全工具的有效性。

执行应用程序安全测试(Application Security Test)是识别恶意攻击者可能利用的应用程序缺陷的重要方法。如果安全工具能够准确识别漏洞,开发人员就能够及时修复,从而提高应用程序的安全性。

SAST 工具扫描的结果通常分为四类:

  • True Positive ——正确识别存在漏洞。

  • True Negative —— 正确识别漏洞不存在。

  • False Positive ——错误地识别出实际不存在的漏洞。

  • False Negative ——未识别到存在的漏洞。

任何 SAST 工具的目标应该是最大化 true positivetrue negative 的数量,同时最小化 false positivefalse negative。产生过多的误报会让开发人员无暇应对,而对该工具产生的扫描结果减少关注,甚至导致他们不愿意使用该工具。当这种情况发生时,企业的安全程序就会受到影响,包含漏洞的应用程序就极有可能被部署到生产环境中。

因此在使用 SAST 工具时,设置误报基准非常重要,这样企业就可以避免浪费大量时间来寻找实际上不存在的漏洞。

如何衡量 SAST 工具扫描准确率

衡量 SAST 工具的扫描结果是否准确的一种简单方式就是从其 true positive 率中减去对应的 false positive 率。如果经过计算该工具获得 100% 的完美准确度分数,则意味着 SAST 工具的 true positive 率为 100%,false positive 率为 0%。我们通过下面三个例子来理解这些概念。

假设使用三种不同的 SAST 工具扫描应用程序中的漏洞会生成以下结果:

工具 #1

什么都不做。它不会检测到任何漏洞,也不会产生误报。它的 true positive 率是0%, false positive 率也是0%。所以,它的准确率分数是 0%,这个是没什么意义的。

工具 #2

报告应用程序中的每一行代码都存在漏洞。因此,它的 true positive 率为 100%,因为它完美地检测到了每一个漏洞。但是,如果它检测到许多无害的、失效的、无效的或不重要的 true 结果,就说明这个工具的误报率很高。例如,如果该工具总共识别出 1000 个漏洞,但其中 800 个不构成威胁,则其误报率为 80%,其准确度得分仅为 20%,这对测试结果的意义也不大。

工具#3

通过抛硬币的方式来确定一行代码是否易受攻击,这样 TP 率和FP 率各为 50%。它的准确度分数也将是 0%。

OWASP 基金会建立了一个免费和开源的 Benchmark Project,用于评估自动化软件漏洞识别工具的速度、覆盖范围和准确性。Benchmark Project 是一个示例应用程序,其中包含数千个可利用的漏洞,有些是真的,有些是误报。企业可以根据此对 SAST 工具的结果进行评分,并在下图中标记 SAST 工具的分数。

如何为 SAST 工具设置误报基准?
图片来源:MEND

理想情况下,安全工具的最佳结果应位于左上角——表示最小误报和最大true positive

深入了解误报基准

在上文提到,衡量 SAST 工具准确与否的一种简单方法是从其 true positive 率中减去其 false positive 率。但这个算法本身是不够完善的,因为没有到考虑其他重要因素。

以这两个不同的 SAST 工具为例,每个工具都针对 OWASP 项目进行了评分:

SAST 工具 #1

识别出 10 个true positive和 3 个false positive,准确度得分为 70%。

SAST 工具 #2

识别出 100 个true positive和 30 个false positive,准确度得分为 70%。

虽然这两种不同工具对应的准确度分数是相同的,但在做选择的时候,企业还需要参考一些额外的指标,比如:

  • 完整性(Completeness)——完整性是指检测到的真实漏洞(true positive)的数量与存在的真实漏洞总数的比较。 更高的完整性分数(理论最大值为 1)表明 SAST 工具识别出应用程序中更多的现有漏洞。一个完整度很高的工具可以帮助企业更好地了解其代码,并帮助准确识别更多漏洞,以交付更安全的产品。

  • 深度(Depth)——在SAST 测试中,深度是指工具检测各种漏洞的能力。支持大量编程语言并具有来自多个最新渠道的综合漏洞数据库的工具,能够进行有深度的扫描工作,帮助企业准确发现更多安全漏洞。如果一个工具的覆盖深度有限,则将产生大量的误报,并且还会在不同的漏洞和语言之间产生不一致的结果。因此,在使用 SAST 工具设置误报基准时,也应当将这个因素考虑进去。

结 论

为 SAST 工具设置适当的基准需要各个团队协作完成,因为不同的团队的目标各不相同。安全团队希望每个应用程序引入尽可能低的安全风险,所以他们需要完整性等级得分非常高的安全工具。相反,开发团队希望将更多的时间放在功能开发上,处理误报等非生产性的工作对于他们来说将会是极大的困扰。

此外,基准也可能因企业正在测试的应用程序而异。某些应用程序可能比其他应用程序更有价值,或者更容易受到攻击。对于这些敏感的应用程序,企业可能会倾向于选择具有更多误报的工具以获得更高的完整性。

所有这些准确度分数只是 SAST 工具的一个维度。当然还有一些其他重要维度,包括工具运行的速度、开发人员使用结果的便利程度,以及作为工作流程的一部分部署和自动化工具的难易程度,企业需要根据自身需求来去调整基准以选择最佳安全工具。