许多 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. identityserver4 (ids4)中如何获取refresh_token刷新令牌token 使用offline_access作用域

    ids4默认自带的api接口/api/connect/token 调用这个接口的时候,需要在body里面的 x-www-form-urlencoded模式下写 {     grant_type: &q ...

  2. ppt/word公式LaTeX环境配置

    PPT使用Latex说明 一.下载IguanaTex_v1_57 http://www.jonathanleroux.org/software/iguanatex/download.html Inst ...

  3. Redis如何实现多可用区?

    在如今的业务场景下,高可用性要求越来越高,核心业务跨可用区已然成为标配.腾讯云数据库高级工程师刘家文结合腾讯云数据库的内核实战经验,给大家分享Redis是如何实现多可用区,内容包含Redis主从版.集 ...

  4. halcon数组的一些使用

    没啥好讲的,这里对于不是数组部分的东西就不进行讲解了. area_center(RegionOpening,Area, Row, Column).使用area_center来求区域的中心和面积时,返回 ...

  5. pytorch 基础内容

    一些基础的操作: import torch as th a=th.rand(3,4) #随机数,维度为3,4的tensor b=th.rand(4)print(a)print(b) a+b tenso ...

  6. ArrayList源码深度剖析,从最基本的扩容原理,到魔幻的迭代器和fast-fail机制,你想要的这都有!!!

    ArrayList源码深度剖析 本篇文章主要跟大家分析一下ArrayList的源代码.阅读本文你首先得对ArrayList有一些基本的了解,至少使用过它.如果你对ArrayList的一些基本使用还不太 ...

  7. SpringBoot快速整合通用Mapper

    前言 后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作. 通用mapper配置 1.添加maven: <depen ...

  8. DHCP 动态主机设置协议 分析

    在TCP/IP网络中,每个接口都需要一个IP地址.子网掩码和广播地址( IPv6中没有),简单来说就是需要网络配置信息.如果想访问外部网络可以通过DNS获取外部地址,再通过路由间接转发出去.但是在&q ...

  9. 4-12 Spring Security + JWT

    Spring Security + JWT 此前,在处理登录的业务中,当视为登录成功时,返回的字符串并不是JWT数据,则应该将此数据改为必要的JWT数据. @Service public class ...

  10. Solution -「校内题」Xorequ

    0x00 前置芝士 数位dp考试里出现的小神题?? 显然考场会选择打表找规律. 数位dp + 矩阵快速幂 0x01 题目描述 给定正整数 \(n\),现有如下方程 \(x \bigoplus 3x = ...