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

news2024/11/25 10:48:44

 本文分享自华为云开发者社区《用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.coloradmin.cn/o/2061451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch——Dataloader使用

一、Dataloader是啥 前面我在写PyTorch的第一篇文章里讲过Dataset是啥,Dataset就是将数据集分类,并且分析出这些数据集它的位置哪、大小多少、这个数据集一共有多少数据......等等信息 那么把Dataset比作一副扑克牌,那么如果你就让这副牌放在…

《机器学习》 逻辑回归 大批量数据的下采样 <8>

一、案例文件 同样使用上节课的银行贷款案例,其文件内容大致如下:(共28万多条,31列) 现在要继续接着上节课的内容对模型进行优化 二、下采样流程 1、流程图示 2、具体流程介绍 1)切分原数据集 大…

77、ansible及常见模块

ansible 一、ansible: 远程自动化运维 ansible是基于python开发的配置管理和应用部署工具。 也是自动化运维的重要工具。 可以批量配置,部署,管理上千台主机。 只需要在一台主机ansible就可以完成其他主机的操作。 1.1、操作模式&…

Dell 服务器 PowerEdge T440 通过BIOS配置RAID阵列

目录 1.清除当前RAID磁盘阵列配置 1.1开机按F2进入System Setup管理界面; 1.2点击Device Settings; 1.3选择RAID controller in Slot 4:DELL PERC Configuration Utility;卡型号> 1.4选择Configuration Management; 1.5选择View Dis…

Java 2.4 - JVM

一、Java 内存区域详解(重点) 本篇讨论的是 HotSpot 虚拟机 相比于 C 而言,程序员不需要对每个 new 操作都写对应的 delete / free 操作,这些操作我们会交给虚拟机去做。因此,如果不了解虚拟机的原理,一旦…

React 学习——React.memo

1、默认情况下:子跟着父一起渲染 2、memo 缓存,只有props发生变化的时候才会重新渲染 import { memo, useState } from react; // 默认情况下:子跟着父一起渲染 //memo 缓存,只有props发生变化的时候才会重新渲染 const MemoSon memo(function Son()…

Java使用Easy Excel对Excel进行操作

Easy Excel使用教程API&#xff1a; 读Excel | Easy Excel 官网 使用代码示例&#xff1a; 需要自行创建一个Maven项目&#xff0c;然后pom文件中需要的依赖如下&#xff1a; <dependencies><!-- easyExcel 表格依赖 --><dependency><groupId>com.a…

Qt实现tcp协议

void Widget::readyRead_slot() {//读取服务器发来的数据QByteArray msg socket->readAll();QString str QString::fromLocal8Bit(msg);QStringList list str.split(:);if(list.at(0) userName){QString str2;for (int i 1; i < list.count(); i) {str2 list.at(i);…

数据结构初阶(1)——算法的时间复杂度和空间复杂度

目录 1.算法效率 1.1 如何衡量一个算法的好坏 1.2算法的复杂度 2.时间复杂度 2.1时间复杂度的概念 2.2大O的渐进表示法 2.3常见时间复杂度计算举例 4. 常见复杂度对比 5.复杂度的oj练习 5.1消失的数字 5.2旋转数组 1.算法效率 1.1 如何衡量一个算法的好坏 代码不一…

探索数据结构:并查集的分析与实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 并查集的引入 1.1 并查集的概念 并查集是一种树型数据结构&#xf…

StarRocks 存算分离数据回收原理

前言 StarRocks存算分离表中&#xff0c;垃圾回收是为了删除那些无用的历史版本数据&#xff0c;从而节约存储空间。考虑到对象存储按照存储容量收费&#xff0c;因此&#xff0c;节约存储空间对于降本增效尤为必要。 在系统运行过程中&#xff0c;有以下几种情况可能会需要删…

详解华为项目管理,附华为高级项目管理内训材料

&#xff08;一&#xff09;华为在项目管理中通过有效的沟通、灵活的组织结构、坚持不懈的努力、细致的管理和科学的考核体系&#xff0c;实现了持续的创新和发展。通过引进先进的管理模式&#xff0c;强调以客户需求为导向&#xff0c;华为不仅优化了技术管理和项目研发流程&a…

el-table自定义样式,表头固定,数据过多时滚动

最终效果&#xff1a;&#xff08;此处没体现出来滚动&#xff0c;数据没那么多&#xff09; 1.表头固定&#xff0c;设置表头样式&#xff0c;修改表格背景色 <div class"category-table"> <el-table ref"tableRef" class"common-table&quo…

java之类和对象的介绍

1.面向对象和面向过程的概念&#xff1a; 面向对象&#xff1a;面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事。 面向过程&#xff1a;注重完成一件事情的过程&#xff0c;后续代码维护扩展较为麻烦。 以洗衣服为例&#xff0c;面向对象为传统…

微软AI人工智能认证有哪些?

微软提供的人工智能认证主要包括以下几个方面&#xff1a; Azure AI Fundamentals&#xff08;AI900认证&#xff09;&#xff1a;这是一个基础认证&#xff0c;旨在展示与Microsoft Azure软件和服务开发相关的基本AI概念&#xff0c;以创建AI解决方案。它面向具有技术和非技术…

C++学习路线分享

我上大学学的第一门编程语言便是C&#xff0c;靠着那本饱受诟病的谭浩强版的教材度过了大一上学期。学的内容现在看来相当之浅&#xff0c;如果没记错的话只学了个基本的语法&#xff0c;考试的时候考一些冒泡&#xff0c;快排之类的东西就结束了。感觉那些有计算机教育背景的学…

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题 目录 &#x1f514; 问题背景&#x1f4c4; 问题代码❓ 问题描述&#x1fa7a; 问题分析✔ 解决方案 &#x1f514; 问题背景 在开发一个使用Qt框架的多线程应用程序时&#xff0c;我们遇到了一个棘手的问题&…

【Linux】生产消费模型实践 --- 基于信号量的环形队列

你送出去的每颗糖都去了该去的地方&#xff0c; 其实地球是圆的&#xff0c; 你做的好事终会回到你身上。 --- 何炅 --- 基于信号量的环形队列 1 信号量2 框架构建3 代码实现4 测试运行 1 信号量 信号量本质是一个计数器&#xff0c;可以在初始化时对设置资源数量&#xf…

数据结构——链式队列和循环队列

目录 引言 队列的定义 队列的分类 1.单链表实现 2.数组实现 队列的功能 队列的声明 1.链式队列 2.循环队列 队列的功能实现 1.队列初始化 (1)链式队列 (2)循环队列 (3)复杂度分析 2.判断队列是否为空 (1)链式队列 (2)循环队列 (3)复杂度分析 3.判断队列是否…

91. UE5 RPG 实现拖拽装配技能以及解除委托的绑定

在上一篇文章里&#xff0c;实现了通过选中技能&#xff0c;然后点击下方的装备技能插槽实现了技能的装配。为了丰富技能装配功能&#xff0c;在这一篇里&#xff0c;我们实现一下通过拖拽技能&#xff0c;实现拖拽功能&#xff0c;我们需要修改两个用户控件&#xff0c;一个就…