许多 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 工具的分数。



图片来源: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 工具的一个维度。当然还有一些其他重要维度,包括工具运行的速度、开发人员使用结果的便利程度,以及作为工作流程的一部分部署和自动化工具的难易程度,企业需要根据自身需求来去调整基准以选择最佳安全工具。

如何为 SAST 工具设置误报基准?的更多相关文章

  1. 【Zabbix】大规模监控误报发生时的处理方案

    今天遇到了这样一件事..Zabbix一直在用的数据库突然间崩溃,无法连接了.在down掉的那一时刻开始,zabbix向管理员报了警.然后随之而来的是铺天盖地的所有主机zabbix agent无法连接的 ...

  2. zabbix误报交换机重启

    交换机的sysUpTime是由一个32-bit的counter来计数的,单位是0.01秒,所以最大时间为496天,过了496天就溢出,变成0,然后又重新计算时间,所以zabbix误报. snmpwal ...

  3. Nmap误报1720端口开放的原因

    在使用Nmap扫描服务器开放端口(全连接扫描)时,一直会发现误报1720端口开放,telnet也有时会连接成功.而实际上服务器并未开启此端口.经过查阅资料,确定原因如下: H.323协议在负载中放入了 ...

  4. Myeclipse中误报错误解决办法

    下午写jsp页面的时候,用了一个js文件,拖到MyEclipse下了报错,开始还以为是js文件问题,折腾了半天,后来才知道原来是Myeclipse误报错误.真坑爹啊呀~~ 解决方法: 点击你需要忽略错 ...

  5. 让UltraEdit-32成为Delphi 7编译器的工具设置

    UltraEdit-32编译Delphi的工具设置 {================================================}Dcc32 命令行(&C):C:\Pro ...

  6. python里混淆矩阵 左下角为漏报,右上角为误报

    1为黑样本,0为白样本: Counter({1: 105, 0: 95}) check counter!confusion_matrix:[[83 12(预测值为1,实际为0,误报)] [15(预测值 ...

  7. Vim增强工具设置

    Vim增强工具设置操作准备:vim ~/.vimrc11. 缩进 & 制表符使 Vim 在创建新行的时候使用与上一行同样的缩进: set autoindent 2. 设置文件里的制表符 (TA ...

  8. 一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案

    摘自:http://www.freebuf.com/articles/network/149328.html 通过以上分析得出监控需要关注的几个要素:长域名.频率.txt类型.终端是否对解析ip发起访 ...

  9. Prometheus 监控 Kubernetes Job 资源误报的坑

    转载自:https://www.qikqiak.com/post/prometheus-monitor-k8s-job-trap/ 昨天在 Prometheus 课程辅导群里面有同学提到一个问题,是关 ...

随机推荐

  1. this关键字、static关键字、方法的调用

    1.带有static关键字的方法,不可使用this关键字.因为其调用方法为类名.方法名(建议这种方式,调用不需要对象的参与),不存在对象. 2.实例方法调用必须有对象的存在,先创建对象,通过引用.的方 ...

  2. idea中创建Java类时,自动在文件头中添加作者和创建时间

    在Settings中找到File and Code Templates 设置如下图所示. 效果展示:

  3. Linux关闭avahi-daemon服务

    avahi-daemon是一种Linux操作系统上运行在客户机上实施查找基于网络的Zeroconf service的服务守护进程. 该服务可以为Zeroconf网络实现DNS服务发现及DNS组播规范. ...

  4. 简单状压dp的思考 - 最大独立集问题和最大团问题 - 贰

    接着上文 题目链接:最大独立集问题 上次说到,一种用状压DP解决任意无向图最大团问题(MCP)的方程是: 注:此处popcountmax代表按照二进制位下1的个数作为关键字比较,即选择二进制位下1的个 ...

  5. 强化版按键消抖Verilog实现

    介绍:按键的物理结构导致了会有抖动现象的出现,判断按键是否真正按下,需要把抖动的部分滤波.根据经验可知,抖动一般在20ms内,所以常规的消抖方法是从变化沿出现时刻开始,延时20ms后判断按键的状态.这 ...

  6. Java开发学习(十五)----AOP入门案例及其工作流程解析

    一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...

  7. 什么是 Base64 ?

    Base64 是什么? Base64是一种二进制到文本的编码方式.如果要更具体一点的话,可以认为它是一种将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符,就是包括小写字母 ...

  8. Stream流中的常用方法foeEach和Stream流中的常用方法filter

    延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用.(除了中介方法外,其余方法均为延迟方法) 终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似Stri ...

  9. Java语言的跨平台性

    2.1 Java虚拟机 -- JVM JVM:Java虚拟机,简称JVM,是运行所有java程序的假想计算机,是java程序的运行环境,是java最具吸引力的特性之一,我们编写的java代码都运行在J ...

  10. linux docker .net core 从建立网站到预览

    docker的安装在网上一搜一大把,windows安装的就是exe双击,linux安装需要执行语句 ps:需要准备xftp.xshell.vs 2019.linux服务器.docker账号密码 例如: ...