如何用CWE API 来减轻软件产品中的安全风险

server/2024/9/23 6:19:23/

 本文分享自华为云开发者社区《用CWE API 减轻软件产品中的安全风险》作者: Uncle_Tom


1. CWE REST API 推出的目的

8 月 8 号,CWE™ 计划推出了“CWE REST API”。

CWE™计划由美国网络安全与基础设施安全局(Cybersecurity & Infrastructure Security Agency(CISA))资助的国土安全系统工程与发展研究所(Homeland Security Systems Engineering and Development Institute(HSSEDI))运营。

“CWE REST API” 是一项由CWE REST API工作组推动的社区驱动的工作。API 的目的是简化安全软件和硬件架构师、EDA 工具开发人员、验证工程师之间的接口,用于减轻其产品,以及数据库本身中的安全风险。

从项目负责的两个主要负责人,一个来自Synopsys,另一个来自MITRE。

CWE REST API 为以下人员提供了一种简单有效的方式来保持 CWE 最新的内容信息:

  • 漏洞管理领域的项目合作伙伴
  • 软件 (software(SW)) 和硬件 (hardware(HW)) 开发人员
  • 架构师
  • 电子设计自动化 (electronic design automation(EDA)) 工具开发人员
  • 验证工程师
  • 其他关心降低其产品安全风险的人

API 推出为下游下游应用程序,始终保持最新状态,这将成为利用 CWE 内容更改的重大改进。

2. 访问 CWE REST API

用于访问 CWE REST API 的根 URL,无需注册或使用任何凭据即可使用。

建议使用 API 在本地填充 CWE 内容的缓存,每当有新版本可用时,都可以刷新该缓存。

CWE REST API 的根 URL: https://cwe-api.mitre.org/api/v1/

可以直接在浏览器中直接输入这个地址加上相应的请求。

  • 例如查找当前的 API CWE 的版本

    • 请求:
      https://cwe-api.mitre.org/api/v1/cwe/version
    • 响应回复
    {"ContentVersion": "4.15","ContentDate": "2024-07-16","TotalWeaknesses": 964,"TotalCategories": 409,"TotalViews": 54}

可以看到当前版本为最新的 CWE 4.15,总共有 964 个弱点节点,409 个分类节点,54 个弱点视图。
有关 CWE 4.15 的介绍详见:《CWE 4.15 - AI/ML 引入的应用缺陷》

3. CWE REST API 简介

CWE REST API 的相关介绍放在了: https://github.com/CWE-CAPEC/REST-API-wg

  • API 主要包含以下API:

3.1. 查找CWE 版本(/cwe/version)

  • API作用:查找当前 CWE 的版本

  • 请求:
    https://cwe-api.mitre.org/api/v1/cwe/version

  • 响应回复

    {"ContentVersion": "4.15","ContentDate": "2024-07-16","TotalWeaknesses": 964,"TotalCategories": 409,"TotalViews": 54}

3.2. 查找CWE ID 类型(/cwe/{id(s)})

  • API作用:查找一个或多个CWE ID的类型,ID之间使用逗号分隔。

  • 请求:查找节点1400,284,1396,269,260,259,384 的类型
    https://cwe-api.mitre.org/api/v1/cwe/1400,284,1396,269,260,259,384

  • 响应回复

[{"Type": "view","ID": "1400"},{"Type": "pillar_weakness","ID": "284"},{"Type": "category","ID": "1396"},{"Type": "class_weakness","ID": "269"},{"Type": "base_weakness","ID": "260"},{"Type": "variant_weakness","ID": "259"},{"Type": "compound_weakness","ID": "384"}
]
  • 现有 CWE 节点类型
图标类型节点数量说明

视图(View)50视图表示一种视角,人们可能会用它来查看目录中的弱点。

支柱(Weakness-Pillar)10最抽象的弱点类型,代表与之相关的所有类(class)/基本(base)/变体(Variant)的主题。 支柱不同于类别,因为从技术上讲,支柱仍然是一种描述错误的弱点,而类别则代表用于对相关事物进行分组的常见特征。

分类(Category)374分类是基于某些共同特征或属性的弱点的集合。类别主要用作CWE的组织机制,不应由外部源映射到。

类别(Weakness-Class)110一种以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。 比支柱弱点更具体,但比基本弱点更笼统。 类级别的弱点通常用以:行为、属性和资源维度中的1-2来描述问题。

基础(Weakness-Base)520一种更具体的弱点类型,大部分与资源或技术无关,但具有足够的详细信息以提供检测和预防的特定方法。基本级别的弱点通常用以:行为、属性、技术、语言和资源维度中2-3个维度来描述问题。

变体(Weakness-Variant)292是与特定类型的产品相关的弱点,通常与特定的语言或技术相关。比基本弱点更具体。变体级别的弱点通常用以:行为、属性、技术、语言和资源维度中3-5个维度来描述问题。

复合缺陷(Weakness-Compound)的组合(Composite)方式7由两个或多个不同的弱点组成的复合元素,其中所有弱点都必须同时存在才能出现潜在的弱点。消除任何弱点可以消除或显着降低风险。一个弱点 X 可以被“分解”为组件弱点 Y 和 Z。在某些情况下,一个弱点对于组合可能不是必不可少的,但改变其性质时,该弱点有可能会变成缺陷。
  • 各类型之间的关系:

     > 

     > 

     > 

3.3. 查找弱点节点信息(/cwe/weakness/{id(s)}

  • API作用:查找弱点节点的信息。

    • 输入的是CWE 的ID;
    • ID 的类型只能是:pillar_weakness, class_weakness, base_weakness, variant_weakness, compound_weakness;
    • 可以同时输入多个 CWE ID,每个 ID 之间用逗号分隔。
  • 请求:查找 CWE-120:未进行输入大小检查的缓冲区拷贝(传统缓冲区溢出) 的信息
    https://cwe-api.mitre.org/api/v1/weakness/120

  • 响应回复

3.4. 查找分类节点信息(/cwe/category/{id(s)})

  • API作用:查找分类节点的信息。

    • 输入的是CWE 的ID;
    • ID 的类型只能是:category;
    • 可以同时输入多个 CWE ID,每个 ID 之间用逗号分隔。
  • 请求:查找类别节点 CWE-1399:内存安全 的信息
    https://cwe-api.mitre.org/api/v1/category/1399

  • 响应回复

3.5. 查找视图节点信息(/cwe/view/{id(s)})

  • API作用:查找视图节点的信息。

    • 输入的是CWE 的ID;
    • ID 的类型只能是:view;
    • 可以同时输入多个 CWE ID,每个 ID 之间用逗号分隔。
  • 请求:查找视图 CWE-1400:软件安全保障综合分类 的信息
    https://cwe-api.mitre.org/api/v1/cwe/view/1400

  • 响应回复

3.6. 查找弱点节点在视图中的父节点(/cwe/{id}/parents?view={viewId})

  • API作用:查找弱点节点在不同视图中的父节点。

  • 请求:CWE-272:最小特权原则违背 的父节点
    https://cwe-api.mitre.org/api/v1/cwe/272/parents

  • 响应回复

[{"Type": "class_weakness","ID": "271","ViewID": "1000","Primary_Parent": true},{"Type": "category","ID": "1011","ViewID": "1008"},{"Type": "category","ID": "1149","ViewID": "1133"},{"Type": "category","ID": "1396","ViewID": "1400"},{"Type": "category","ID": "265","ViewID": "699"},{"Type": "category","ID": "254","ViewID": "700"},{"Type": "category","ID": "748","ViewID": "734"},{"Type": "category","ID": "859","ViewID": "844"},{"Type": "category","ID": "901","ViewID": "888"}
]
  • API作用:查找弱点节点在指定视图中的父节点。

  • 请求:CWE-272:最小特权原则违背 在CWE-1000:研究者视图中的父节点
    https://cwe-api.mitre.org/api/v1/cwe/623/parents?view=1000

  • 响应回复

[{"Type": "class_weakness","ID": "271","ViewID": "1000","Primary_Parent": true}
]
  • CWE-272:最小特权原则违背 在CWE-1000:研究者视图 中的父节点是 CWE-271:特权放弃/降低错误

3.7. 查找弱点节点在视图中的后代节点(/cwe/{id}/descendants?view={viewId})

  • API作用:查找弱点节点在视图中的后代节点,即这个节点的所有子节点。

    • 请求:查找 CWE-119:内存缓冲区边界内操作的限制不恰当 的后代节点
      https://cwe-api.mitre.org/api/v1/cwe/119/descendants

    • 响应回复

在视图:CWE-1000:研究者视图, CWE-1003:简化弱点映射到发布漏洞视图, CWE-1305:2020 CISQ 质量度量视图中都有弱点CWE-119:内存缓冲区边界内操作的限制不恰当 ,可以查找这个节点的后代节点。

  • API作用:查找弱点节点在指定视图中的后代节点。

    • 请求:查找 CWE-119:内存缓冲区边界内操作的限制不恰当 在视图 CWE-1000:研究者视图 中的后代节点
      https://cwe-api.mitre.org/api/v1/cwe/119/descendants?view=1000

    • 响应回复

只查找CWE-1000:研究者视图中,CWE-119:内存缓冲区边界内操作的限制不恰当 的后代节点。

  • CWE-1000:研究者视图中 CWE-119:内存缓冲区边界内操作的限制不恰当 的实际位置

3.8. 查找弱点节点的子节点(/cwe/{id}/children?view={viewId})

  • API作用:查找弱点节点在视图中的子节点,即这个节点的儿子节点。

    • 请求:查找 CWE-119:内存缓冲区边界内操作的限制不恰当 在视图 CWE-1000:研究者视图 中的子节点
      https://cwe-api.mitre.org/api/v1/cwe/119/children?view=1000

    • 响应回复

[{"Type": "base_weakness","ID": "120","ViewID": "1000"},{"Type": "base_weakness","ID": "125","ViewID": "1000"},{"Type": "base_weakness","ID": "466","ViewID": "1000"},{"Type": "base_weakness","ID": "786","ViewID": "1000"},{"Type": "base_weakness","ID": "787","ViewID": "1000"},{"Type": "base_weakness","ID": "788","ViewID": "1000"},{"Type": "base_weakness","ID": "805","ViewID": "1000"},{"Type": "base_weakness","ID": "822","ViewID": "1000"},{"Type": "base_weakness","ID": "823","ViewID": "1000"},{"Type": "base_weakness","ID": "824","ViewID": "1000"},{"Type": "base_weakness","ID": "825","ViewID": "1000"}
]
  • CWE-1000:研究者视图中 CWE-119:内存缓冲区边界内操作的限制不恰当 的子节点

3.9. 查找弱点节点的祖先(/cwe/{id}/ancestors?view={viewId})

  • API作用:查找弱点节点在各个视图中的祖先,即查找这个节点的父节点,直到根节点。
    • 请求:查找 CWE-119:内存缓冲区边界内操作的限制不恰当 各视图 中祖先
      https://cwe-api.mitre.org/api/v1/cwe/119/ancestors
    • 响应回复

很多视图中都包含 CWE-119:内存缓冲区边界内操作的限制不恰当。

  • API作用:查找弱点节点在指定视图中的祖先。
    • 请求:查找 CWE-119:内存缓冲区边界内操作的限制不恰当 在视图 CWE-1000:研究者视图 中祖先
      https://cwe-api.mitre.org/api/v1/cwe/119/ancestors?view=1000

    • 响应回复

[{"Data": {"Type": "class_weakness","ID": "119","ViewID": "1000"},"Parents": [{"Data": {"Type": "class_weakness","ID": "118","ViewID": "1000"},"Parents": [{"Data": {"Type": "pillar_weakness","ID": "664","ViewID": "1000"},"Parents": [{"Data": {"Type": "view","ID": "1000","ViewID": "1000"},"Parents": null}]}]}]}
]
  • CWE-119:内存缓冲区边界内操作的限制不恰当 在CWE-1000:研究者视图中的祖先

4. CWE REST API 提供的 CWE JSON 格式

在 https://github.com/CWE-CAPEC/REST-API-wg/ 还提供了 CWE 的 JSON 格式。

  • REST-API 目录结构如下

4.1. Json Schema

Json schema 是用来定义Json 文件的格式。这里使用的是 2020-12 的版本: “https://json-schema.org/draft/2020-12/output/schema”

Json schema 存放在目录: specifications 目录下。

这些 Schema 为每个 Json 文件给出了 Json 文件格式的定义,包括 Json 结构,字段类型,枚举值等。可以用这些 Json schema 来校验里面的 Json文件。

4.2. CWE Json 文件

  • 所有 CWE REST API 需要用到的 Json 文件 都存放在目录: json_repo 目录下。
    • C 目录:存放 409 个 CWE 类 Json 文件;
    • V 目录: 存放 54 个 CWE 视图 Json 文件;
    • W 目录: 存放 964 个 CWE 弱点 Json 文件;

  • 在项目的根目录下还有两个可以利用的 Json 文件:
    • cwe.json: CWE 各节点信息;
    • cwe_tree.json: CWE 节点关系;

5. 总结

  • CWE REST API 为安全需要提供了一种简单的获取 CWE 信息的接口;
  • API 提供了查找:版本、节点类型、节点(弱点、类、视图)信息, 以及节点在视图中的父节点、祖先、子节点和所有子节点的查询能力;
  • 提供了 CWE 的 Json 格式文件, 让使用者在除了 XML 格式外多了一个选择;

6. 参考

  • CWE REST-API Quick Start

http://www.ppmy.cn/server/103383.html

相关文章

如何提升 RocketMQ 顺序消费性能?

提升RocketMQ顺序消费性能,可以从多个方面进行优化。以下是一些关键策略和步骤: 优化消息发送策略 使用Sharding Key:在发送顺序消息时,通过Sharding Key(如用户ID、订单ID等)将相关联的消息发送到同一个队…

uniapp-部分文件中文乱码

一、问题 在开发时遇到,部分页面的中文显示乱码,如图 搜索了一下解决方法,这里记录一下 二、问题原因: 页面的编码格式不是 utf-8 造成的 三、解决方法 打开出现乱码页面选择编译器左上角的文件 > 以指定编码重新打开 选择U…

基于Spring Boot的大学校园生活信息平台的设计与实现pf

TOC springboot523基于Spring Boot的大学校园生活信息平台的设计与实现pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关…

在 C++ 中实现自定义异常类

在 C 中实现自定义异常类 作为一名 C 程序员,你可能会遇到需要自定义异常类的情况。自定义异常类可以让你更好地控制异常处理,并且可以使你的代码更加易读和易维护。在这篇博文中,我们将学习如何在 C 中实现自定义异常类。 为什么要自定义异…

使用 `<springProperty>` 在 Logback 配置中引用 Spring 应用程序属性

在 Spring Boot 应用程序中,日志配置通常是一个至关重要的任务。使用 Logback 作为日志框架时,能够动态地引用 Spring 应用程序中的属性值是非常有用的。这不仅使日志配置更加灵活,还能确保日志格式与应用程序配置保持一致。本文将介绍 Logba…

使用亮数据爬虫工具解锁复杂爬虫场景

在当今数据驱动型时代,数据采集和分析能力算是个人和企业的核心竞争力。然而,手动采集数据耗时费力且效率低下,而且容易被网站封禁。 我之前使用过一个爬虫工具,亮数据(Bright Data) ,是一款低…

生产环境中MapReduce的最佳实践

目录 MapReduce跑的慢的原因 MapReduce常用调优参数 1. MapTask相关参数 2. ReduceTask相关参数 3. 总体调优参数 4. 其他重要参数 调优策略 MapReduce数据倾斜问题 1. 数据预处理 2. 自定义Partitioner 3. 调整Reduce任务数 4. 小文件问题处理 5. 二次排序 6. 使用…

适用于应用程序安全的 11 大 DevSecOps 工具

DevSecOps(开发者安全运营)是指将安全最佳实践融入软件开发生命周期的过程,从而实现更好的安全结果。这是提供全面安全基础设施的重要方面。 市场格局:DevSecOps市场竞争激烈。该领域有数百家供应商提供工具,帮助组织…