在 8 月份,2020 年 CWE Top 25 正式公布,这 25 个软件漏洞是指在过去一段时间发现的最常见和影响最大的安全问题。
这些漏洞非常危险,因为它们不仅很容易被发现和利用,而且能让攻击者完全接管系统、窃取数据或阻止应用程序正常运行。无论是软件开发者,还是安全人员,都应该好好了解,因为 CWE Top 25 能帮开发人员、测试人员和用户以及项目经理、安全研究人员和培训工作者深入了解当前最严重的安全漏洞。
据悉,CWE 团队使用美国国家标准技术研究院(NIST)国家漏洞数据库(NVD)里的 CVE(Common Vulnerabilities and Exposures)数据以及与每一个 CVE 相关的 CVSS(Common Vulnerability Scoring System)得分。基于每个 CWE 的传播程度和严重程度,他们使用一个公式对其进行评分。
CWE Top 25 清单
下面是 2020 年 CWE Top 25 清单,其中包含了每一个 CWE 的总体得分。
分析与评论
2019 年和 2020 年 CWE Top 25 清单之间的主要区别在于从抽象类别级别的漏洞向更具体的漏洞过渡。尽管这些类别级别的漏洞仍在清单中,但排名下降了。
随着社区不断改进映射方式,预计这种趋势将在未来几年继续。从清单中可以看出,类别级别的漏洞 CWE-119(不恰当的内存缓冲区操作限制)、CWE-20(不恰当的输入验证)和 CWE-200(向未经授权的行为体公开敏感信息)下移了几名,而 CWE-79(页面生成过程中不恰当的输入)、CWE-787(写越界)和 CWE-125(读越界)等更具体的漏洞正在取代它们。这种变化以及随后的发展趋势将有助于用户对威胁当今系统的问题加深了解。
清单中最大的四个变化与身份验证和授权相关:
- CWE-522(凭证保护不足):从 27 位到 18 位;
- CWE-306(关键功能缺少认证):从 36 位到 24 位;
- CWE-862(缺少认证):从 34 位到 25 位;
- CWE-863(不正确的认证):从 33 位到 29 位。
这四个漏洞都代表了最难以分析的系统的某些方面。从理论上看,导致这一趋势是因为社区改善了与之前 CWE Top 25 漏洞相关的培训、工具和分析能力,并减少了这些漏洞的发生,从而降低了它们的排名,同时提升了这些更难以应付的漏洞的排名。
排名下降最多的四个漏洞是:
- CWE-426(不信任的搜索路径):从 22 位到 26 位;
- CWE-295(不恰当的证书验证):从 25 位到 28 位;
- CWE-835(循环退出条件不可达):从 26 位到 36 位;
- CWE-704(不正确的类型转换):从 28 位到 37 位。
在 2019 年,CWE-772(资源在有效生命周期之后没有被释放)排名第 21 位。但是,这并不能说明全部情况,因为指明哪种类型的资源没有被释放也很重要。
2020 年,一个更具体的映射方式指明了确切的资源类型。因为这个变化,CWE-401(缺少有效生命周期后的内存释放)从清单之外一下子进入到第 32 位,而代表所有非内存资源释放的 CWE-772 降至第 75 位。
需要注意的是,“二等”清单将 CWE-77(不恰当使用命令中的特殊元素)放在了第 31 位。在描述漏洞时,“命令注入”一词可能有不一样的意思,通常以牺牲“ 操作系统命令注入”这种精确性为代价,或者被用于描述结果(而非漏洞的根源)。这是 CWE 团队正在研究的问题,希望能够在将来的 CWE Top 25 清单中得到改进。
确定清单的方法
2020 年的 CWE Top 25 以 NVD 以发布的漏洞数据为基础。NVD 从 CVE 获取漏洞数据,并补充其他的分析和信息数据,包括与一个或多个漏洞的映射以及 CVSS 得分(基于标准化特征集的数字得分,表示漏洞的潜在严重程度)。NVD 以可解析的格式提供信息,有助于以数据驱动的方式创建 2020 年的 CWE Top 25 清单。这种方法可以客观地了解当前现实世界中存在的漏洞,为基于公开的漏洞而非主观的调查和意见构建严格分析奠定了基础,并让这个过程可重复执行。
2020 年 CWE Top 25 利用了 2018 年和 2019 年的 NVD 数据,其中包含约 27000 个与漏洞相关的 CVE。评分公式用于计算漏洞的排名,将 CWE 成为漏洞根源的频率与被利用的严重程度相结合。频率和严重程度都相对于最小值和最大值进行了归一化。
为了确定 CWE 的频率,评分公式会计算 CWE 映射到 CVE 的次数。在计算当中只使用具有相关漏洞的那些 CVE,因为使用 NVD 的整个 CVE 集合会导致非常低的频率,并且不同漏洞类型之间的差异变小。
Freq = {count(CWE_X’ ∈ NVD) for each CWE_X’ in NVD}
Fr(CWE_X) = (count(CWE_X ∈ NVD) - min(Freq)) / (max(Freq) - min(Freq))
得分公式中的另一个组成部分是漏洞的严重程度,它使用映射到特定 CWE 的所有 CVE 的平均 CVSS 得分来表示。下面的公式用于计算严重程度。
Sv(CWE_X) = (average_CVSS_for_CWE_X - min(CVSS)) / (max(CVSS) - min(CVSS))
然后,通过将严重程度得分乘以频率得分来确定 CWE 的危险等级。
Score(CWE_X) = Fr(CWE_X) * Sv(CWE_X) * 100
关于一些属性值的进一步解释:
- 很少被发现的漏洞不会获得高分,不管它被利用会产生怎样的后果。这样做是有道理的,因为如果开发人员没有犯这些错误,那么就不应该在 CWE Top 25 清单中突出显示。
- 影响较小的漏洞不会获得高分。这也是有道理的,因为攻击者无法通过利用这些漏洞造成重大伤害,所以它们的等级应该低于可以导致重大伤害漏洞的等级。
- 既常见又可造成重大伤害的漏洞应该得高分。
带有得分指标的 CWE Top 25 清单
下表显示了 2020 年 CWE Top 25 以及相关的得分信息,包括与 NVD 数据集中特定 CWE 相关的条目数,以及每个漏洞的平均 CVSS 得分。
“二等”清单
延续去年的主题,CWE 团队感到分享以下 15 个 Top 25 之外的漏洞也很重要。根据得分公式,这些漏洞可能不足以严重或普遍到可以列入 2020 年 CWE Top 25 的程度。
基于 2020 年 CWE Top 25 进行风险决策的人可能也需要考虑以下这些漏洞:
原文链接:
https://cwe.mitre.org/top25/archive/2020/2020_cwe_top25.html