如何为 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 课程辅导群里面有同学提到一个问题,是关 ...
随机推荐
- Python自动化办公:27行代码实现将多个Excel表格内容批量汇总合并到一个表格
序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 老板最近越来越过分了,快下班了发给我几百个表格让我把内容合并到一个表格内去.还好我会Python,分分钟 ...
- windows server2012R2 上 .net core IIS 部署--应用程序池 自动停止
在windows server2016安装部署.NET CORE时,只需要将.net core应用程序池设置无托管,然后对应你项目的版本安装一个dotnet-hosting-2.2.6-win.exe ...
- W10修改被改的默认打开文本方式
今天不小心给默认方式打开点错了,身为处女座的我有洁癖非要非恢复过来,这是找到的 原文操作出处:win10系统如何还原文件默认打开方式?win10设置文件默认打开方式的方法 -Win7系统之家 (win ...
- Java ArrayList和LinkedList
目录 集合的概念 集合体系结构 常用list集合 list集合的特点 ArrayList LinkedList 创建对象 常用方法 遍历 ArrayList和LinkedList的区别 集合的概念 ...
- Ros的通信第一课
//////////////////////////Ros创建发布者talker//////////////////////////////////////////////////////////// ...
- datax开启hana支持以及dolphinscheduler开启datax任务
datax开启hana支持以及dolphinscheduler开启datax任务 前面(@,@) 前段时间因为要做异构数据导入导出,所以搜了下,发现这类工具收费的居多,使用起来未必趁手~ 于是我找了下 ...
- 驳"一切不谈考核的管理都是扯淡"
一.引子 以我个人的从业经验认为,研发人员的量化考核,始终是一个世界难题.正巧不久前在园子里看到了"一切不谈考核的管理都是扯淡!"一文(下面简称为"扯淡"),该 ...
- Eslint 项目笔记
1.代码下一行不要验证报错 代码的上一行打上注释 <--eslint-disable-next-line-->
- postgres备份与恢复
一 利用pgAdmin工具进行备份与恢复 pgAdmin是postgres官方的客户端管理工具,可以进行数据库的涉及与维护. 示例:以logs库为例记录操作 1) 右击需要备份的数据( ...
- CSDN 原力(声望,影响力) -- 设计草案
目标 CSDN 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...