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

2024-08-23 23:04

本文主要是介绍用 CWE API 减轻软件产品中的安全风险,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 的相关介绍放在了: GitHub - 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 格式

在 GitHub - 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 格式外多了一个选择;
  • 使用CWE API减轻软件产品中的安全风险主要包括:
    • 识别潜在的安全弱点‌:通过CWE API,可以查找和识别软件中可能存在的安全弱点,这些弱点可能包括编码错误、设计缺陷或错误配置等。
    • 分类和分析弱点‌:CWE API提供了详细的分类和分析,帮助开发人员更好地理解这些弱点的性质和影响,从而制定有效的防御措施。
    • 制定防御措施‌:根据CWE API提供的信息,开发人员可以采取相应的措施来修复或缓解这些弱点,例如改进代码、更新软件设计或配置等。
  • 在使用CWE API减轻软件产品中的安全风险时,需要注意以下几点:
    • ‌持续更新‌:由于软件安全漏洞不断变化,开发人员需要定期更新CWE API以获取最新的安全弱点信息。
    • ‌全面防御‌:仅仅关注TOP 25的弱点是不够的,需要关注更广泛的安全问题,以提高整体的防御能力。
    • ‌多角度分析‌:除了CWE API提供的信息外,还需要从多个角度分析软件的安全性能,包括代码审查、渗透测试等。

6. 参考

  • CWE REST-API Quick Start

这篇关于用 CWE API 减轻软件产品中的安全风险的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100749

相关文章

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

企业安全之WiFi篇

很多的公司都没有安全团队,只有运维来负责整个公司的安全,从而安全问题也大打折扣。我最近一直在给各个公司做安全检测,就把自己的心得写下来,有什么不足之处还望补充。 0×01  无线安全 很多的公司都有不怎么注重公司的无线电安全,有钱的公司买设备,没钱的公司搞人力。但是人的技术在好,没有设备的辅助,人力在牛逼也没有个卵用。一个好的路由器、交换机、IDS就像你装备了 无尽、狂徒、杀人书一

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

Linux 安全弹出外接磁盘

命令行操作 首先,需要卸载硬盘上的所有分区,可以使用umount来卸载分区 清空系统缓存,将所有的数据写入磁盘 sync 列出已挂载的文件系统 使用lsblk或者df命令来查找要卸载的分区 lsblk or df -h 确保没有文件正在使用 使用lsof 命令来检查 sudo lsof |grep /dev/sdc 卸载分区 假设硬盘的分区是 /dev/sdc1,使用u