如何为 SAST 工具设置误报基准?
许多 SAST 工具都无法避免误报的问题。这些工具经常报告一些实际不存在的漏洞,这种不准确性让安全团队耗费大量时间来对误报进行分类和处理,这时设置误报基准就显得十分必要。
通过设置误报基准,安全团队可以确定一个参考的点或者标准来衡量安全工具的有效性。
为什么要对误报进行基准测试
执行应用程序安全测试(Application Security Test)是识别恶意攻击者可能利用的应用程序缺陷的重要方法。如果安全工具能够准确识别漏洞,开发人员就能够及时修复,从而提高应用程序的安全性。
SAST 工具扫描的结果通常分为四类:
True Positive ——正确识别存在漏洞。
True Negative —— 正确识别漏洞不存在。
False Positive ——错误地识别出实际不存在的漏洞。
False Negative ——未识别到存在的漏洞。
任何 SAST 工具的目标应该是最大化 true positive 和 true negative 的数量,同时最小化 false positive 和 false 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 工具设置误报基准?的更多相关文章
- 【Zabbix】大规模监控误报发生时的处理方案
今天遇到了这样一件事..Zabbix一直在用的数据库突然间崩溃,无法连接了.在down掉的那一时刻开始,zabbix向管理员报了警.然后随之而来的是铺天盖地的所有主机zabbix agent无法连接的 ...
- zabbix误报交换机重启
交换机的sysUpTime是由一个32-bit的counter来计数的,单位是0.01秒,所以最大时间为496天,过了496天就溢出,变成0,然后又重新计算时间,所以zabbix误报. snmpwal ...
- Nmap误报1720端口开放的原因
在使用Nmap扫描服务器开放端口(全连接扫描)时,一直会发现误报1720端口开放,telnet也有时会连接成功.而实际上服务器并未开启此端口.经过查阅资料,确定原因如下: H.323协议在负载中放入了 ...
- Myeclipse中误报错误解决办法
下午写jsp页面的时候,用了一个js文件,拖到MyEclipse下了报错,开始还以为是js文件问题,折腾了半天,后来才知道原来是Myeclipse误报错误.真坑爹啊呀~~ 解决方法: 点击你需要忽略错 ...
- 让UltraEdit-32成为Delphi 7编译器的工具设置
UltraEdit-32编译Delphi的工具设置 {================================================}Dcc32 命令行(&C):C:\Pro ...
- python里混淆矩阵 左下角为漏报,右上角为误报
1为黑样本,0为白样本: Counter({1: 105, 0: 95}) check counter!confusion_matrix:[[83 12(预测值为1,实际为0,误报)] [15(预测值 ...
- Vim增强工具设置
Vim增强工具设置操作准备:vim ~/.vimrc11. 缩进 & 制表符使 Vim 在创建新行的时候使用与上一行同样的缩进: set autoindent 2. 设置文件里的制表符 (TA ...
- 一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案
摘自:http://www.freebuf.com/articles/network/149328.html 通过以上分析得出监控需要关注的几个要素:长域名.频率.txt类型.终端是否对解析ip发起访 ...
- Prometheus 监控 Kubernetes Job 资源误报的坑
转载自:https://www.qikqiak.com/post/prometheus-monitor-k8s-job-trap/ 昨天在 Prometheus 课程辅导群里面有同学提到一个问题,是关 ...
随机推荐
- # NC20860 兔子的区间密码
NC20860 兔子的区间密码 题目 题目描述 有一只可爱的兔子被困在了密室了,密室里有两个数字,还有一行字: 只有解开密码,才能够出去. 可爱的兔子摸索了好久,发现密室里的两个数字是表示的是一个区间 ...
- 关于API:好的设计和坏的设计【eolink翻译】
以前开发或更新 API 时,我们经常需要深入讨论对 API 的结构.命名和功能等,这个花费了大量的时间. 随着 API 行业的蓬勃发展,API 设计也越来越重要.这么多年发展下来,一些如REST AP ...
- 如何在Excel/WPS表格中批量查询顺丰快递信息?
如何在Excel/WPS表格中批量查询顺丰快递信息? 上期我们讲了如何在Excel/WPS表格中批量查询快递信息(还不知道的小伙伴可以看这里:https://zhuanlan.zhihu.com/p/ ...
- 使用flex弹性布局代替传统浮动布局来为微信小程序写自适应页面
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_109 我们知道,写习惯了前端的人,一般切图后布局页面的话,上手最习惯的是基于盒子模型的浮动布局,依赖 display 属性 + p ...
- .NET静态代码织入——肉夹馍(Rougamo) 发布1.1.0
肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应 ...
- mosquitto使用的基本流程以及一些遇见的问题
改配置文件 以记事本的方式打开mosquitto.conf更改部分内容,找到# listener port-number [ip address/host name/unix socket path] ...
- Vue3 使用v-md-editor如何动态上传图片了
Vue3 使用v-md-editor如何动态上传图片了 前端代码: <v-md-editor :autofocus="true" v-model="blog.con ...
- Vector3类定义
大家一定要先看书,在看我的随笔啊.不然不知道原理的.而且我是不写教程的,只是写笔记怕自己忘记了. 我把所有的基础类放在了名叫geometry的文件中,包含Vector3, Normal3, Point ...
- 【安全通告】关于 DolphinScheduler 漏洞情况的说明
点击上方 蓝字关注我们 [安全通报] [影响程度:低] Apache DolphinScheduler 社区邮件列表最近通告了 1 个漏洞,考虑到有很多用户并未订阅此邮件列表,我们特地在此进行情况说明 ...
- 开源风吹动开源心 ~ 8月16日,你若来,我们(Apache)在等你!
点击上方蓝字关注ALC Beijing 抢! 太好看了吧! 买它,就是它,买它! 要抢! ALC是Apache Local Community的缩写,是全世界范围的 Apache 开源爱好者本地群组. ...