使用 ESP-IDF-SBOM 生成软件物料清单

概述

“软件物料清单” (SBOM) 已经成为软件安全和软件供应链风险管理的关键组成部分。SBOM 是与应用程序相关的所有软件组件、依赖项和元数据的详尽清单。

乐鑫认为,SBOM 信息是确保联网设备安全性的关键。因此,我们现在提供了相关工具和解决方案,便于跟踪和分析这些信息。

在这篇博文中,我们将介绍乐鑫的 SBOM 生成和分析工具——ESP-IDF-SBOM。

SBOM

美国国家电信和信息管理局 (NTIA) 的 SBOM FAQ 对 SBOM 的官方定义如下:

软件物料清单 (SBOM) 是一个完整的、正式结构化的组件、库和模块列表,这些组件、库和模块是构建(即编译和链接)给定软件以及它们之间的供应链关系所需的。这些组件可以是开源的或专有的,免费的或付费的,可以广泛使用或限制访问。

每个组件的关键数据字段包括:

  • 供应商名称
  • 组件名称
  • 组件版本
  • 其他唯一标识符
  • 依赖关系
  • SBOM 数据作者
  • 时间戳

SBOM 数据需要通过一致易懂的格式呈现,SPDX、CycloneDX 等都是数据表示的格式。

ESP-IDF wifi_provisioning 组件的简单概念化 SBOM 树如下:

SPDX

软件包数据交换 (SPDX) 是用于传递 SBOM 信息的开放标准,支持准确识别软件组件、明确映射组件关系,以及将安全和许可信息与每个组件关联起来。

下图概述了可在 SPDX 文档中找到的数据。

(图片来源 SPDX website)

ESP-IDF-SBOM

ESP-IDF-SBOM 是一个 SBOM 生成工具,为基于 ESP-IDF 的应用程序生成 SPDX 格式的 SBOM。该工具还可以对比美国国家漏洞数据库 (NVD),检查生成的 SBOM 中是否存在已知安全漏洞。

SBOM 生成器工作流程

工具工作流程大致如下:

  • 从依赖组件中收集 sbom.yml 文件(manifest 文件)
  • 解析 ESP-IDF 构建系统生成的项目描述文件
  • 生成 SPDX 报告
  • 扫描生成的 SPDX 报告,检查是否存在已知安全漏洞,之后生成最终报告

入门指南

安装工具并查看帮助文档:

$ pip install esp-idf-sbom
$ esp-idf-sbom --help

usage: esp-idf-sbom [-h] [-q] [-n] [-f] [-v] [-d] [--no-progress] {create,check,manifest} ...

ESP-IDF SBOM tool

positional arguments:
  {create,check,manifest}
                        sub-command help
    create              Create SBOM file based on the ESP-IDF project_description.json file.
    check               Check components/submodules in the ESP-IDF SBOM file for possible
                        vulnerabilities reported in the National Vulnerability Database.
    manifest            Commands operating atop of manifest files.

options:
  -h, --help            show this help message and exit
  -q, --quiet           By default auxiliary messages like errors, warnings, debug messages
                        or progress are reported to the standard error stream. With this
                        option set, all such messages are suppressed.
  -n, --no-colors       Do not emit color codes. By default color codes are used when stdout
                        or stderr is connected to a terminal.
  -f, --force-colors    Emit color codes even when stdout or stderr is not connected to a
                        terminal.
  -v, --verbose         Be verbose. Messages are printed to standard error output.
  -d, --debug           Print debug information. Messages are printed to standard error
                        output.
  --no-progress         Disable progress bar.

生成 SBOM 文件:

$ cd esp-idf/examples/provisioning/wifi_prov_mgr
$ idf.py build
$ esp-idf-sbom create <project description file> --output-file prj.spdx

<project description file> 指位于项目 build 目录中由 ESP-IDF 构建系统默认创建的  project_description.json 文件路径。

检查 SBOM,排查安全漏洞:

$ esp-idf-sbom check prj.spdx

                                        Report summary                                         
┌───────────────────────────────────┬─────────────────────────────────────────────────────────┐
│ Date:                             │ 2023-10-10T08:21:39Z                                    │
│ Project name:                     │ project-wifi_prov_mgr                                   │
│ Project version:                  │ v5.2-dev-3250-g7d8f015a4c                               │
│ Vulnerability database:           │ NATIONAL VULNERABILITY DATABASE (https://nvd.nist.gov)  │
│ Generated by tool:                │ esp-idf-sbom (0.8.0)                                    │
│ Generated with command:           │ esp-idf-sbom check prj.spdx                             │
│ Number of scanned packages:       │ 57                                                      │
├───────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ CRITICAL CVEs found:              │                                                         │
│ Packages affect by CRITICAL CVEs: │                                                         │
│ Number of CRITICAL CVEs:          │ 0                                                       │
├───────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ HIGH CVEs found:                  │                                                         │
│ Packages affect by HIGH CVEs:     │                                                         │
│ Number of HIGH CVEs:              │ 0                                                       │
├───────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ MEDIUM CVEs found:                │                                                         │
│ Packages affect by MEDIUM CVEs:   │                                                         │
│ Number of MEDIUM CVEs:            │ 0                                                       │
├───────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ LOW CVEs found:                   │                                                         │
│ Packages affect by LOW CVEs:      │                                                         │
│ Number of LOW CVEs:               │ 0                                                       │
├───────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ UNKNOWN CVEs found:               │                                                         │
│ Packages affect by UNKNOWN CVEs:  │                                                         │
│ Number of UNKNOWN CVEs:           │ 0                                                       │
├───────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ All CVEs found:                   │                                                         │
│ All packages affect by CVEs:      │                                                         │
│ Total number of CVEs:             │ 0                                                       │
└───────────────────────────────────┴─────────────────────────────────────────────────────────┘


Packages with No Identified Vulnerabilities
                        
┏━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃        Package        ┃          Version          ┃                   CPE                   ┃
┡━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ project-wifi_prov_mgr │ v5.2-dev-3250-g7d8f015a4c │ cpe:2.3:a:espressif:esp-idf:5.2-dev-325 │
│                       │                           │       0-g7d8f015a4c:*:*:*:*:*:*:*       │
├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤
│         lwip          │           2.1.3           │ cpe:2.3:a:lwip_project:lwip:2.1.3:*:*:* │
│                       │                           │                :*:*:*:*                 │
├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤
│         cjson         │          1.7.16           │ cpe:2.3:a:cjson_project:cjson:1.7.16:*: │
│                       │                           │               *:*:*:*:*:*               │
├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤
│      protobuf-c       │           1.4.1           │ cpe:2.3:a:protobuf-c_project:protobuf-c │
│                       │                           │          :1.4.1:*:*:*:*:*:*:*           │
├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤
│       mbed_tls        │           3.4.1           │ cpe:2.3:a:arm:mbed_tls:3.4.1:*:*:*:*:*: │
│                       │                           │                   *:*                   │
├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤
│       freertos        │          10.4.3           │ cpe:2.3:o:amazon:freertos:10.4.3:*:*:*: │
│                       │                           │                 *:*:*:*                 │
└───────────────────────┴───────────────────────────┴─────────────────────────────────────────┘

...snip

SBOM 漏洞检查的相关说明如下:

  • 以上示例使用的是 ESP-IDF v5.2-dev 的 wifi_prov_mgr 应用程序
  • 在 check 命令中添加 --check-all-packages 选项,可以扫描未链接到最终可执行文件中的组件
  • 也可以为 ESP-IDF 引导加载程序生成 SBOM 报告,在项目的 build/bootloader 目录中能够找到引导加载程序的构建描述文件
  • 上述输出结果中标记了 RTOS、网络栈、TLS 栈等具有通用平台枚举项的关键组件
  • 该工具还提供了构建过程中其他组件和库的信息(上述输出结果中未显示)

报告格式

该工具支持生成 JSON、CSV 等多种格式的输出报告。获取更多信息,请查阅工具的帮助文档。

兼容性

SPDX 是 SBOM 的标准格式,并且兼容外部工具。esp-idf-sbom 生成的 SBOM 文件可以使用 cve-bin-tool 等工具扫描。如您已在系统中集成了外部工具并希望使用某些特定功能(例如,对比不同 CVE 数据库进行更全面的扫描),同样可以使用 esp-idf-sbom 生成的 SBOM 文件。

总结

SBOM 的主要优势总结如下:

  • 生成构建软件构件的组件清单
  • 列出软件许可、组件版本信息,协助进行版本更新
  • 协助执行安全漏洞分析
  • 成为许多安全相关认证的必要条件

ESP-IDF-SBOM 工具有助于为基于 ESP-IDF 的项目生成 SBOM,还可以进一步帮助建立项目的安全漏洞持续扫描流程。

乐鑫正在努力使 SBOM 覆盖更多的软件解决方案,我们期待收到 ESP-IDF-SBOM 工具的反馈。

欢迎尝试使用并分享您的体验!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/140101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02-瑞吉外卖员工表的增删改查

添加员工信息 执行流程 第一步: 用户点击添加员工按钮跳转到add.html页面,然后在页面中输入要添加的员工的信息 第二步: 用户点击保存按钮发送Ajax请求将用户输入的员工信息以json的格式提交到服务端 第三步: 服务端Controller接收页面提交的json格式的数据并转化为java对象…

Vue3 ref函数和active函数

一、ref函数 我们在setup函数中导出的属性和方法虽然能够在模板上展示出来&#xff0c;但是并没有给属性添加响应式&#xff0c;因此&#xff0c;我们需要使用ref函数来为我们的数据提供响应式。 &#xff08;一&#xff09;引入ref函数 import { ref } from "vue"…

Sprint Boot 学习路线 6

测试 Spring提供了一组测试工具&#xff0c;可以轻松地测试Spring应用程序的各个组件&#xff0c;包括控制器、服务、存储库和其他组件。它具有丰富的测试注释、实用程序类和其他功能&#xff0c;以帮助进行单元测试、集成测试等。 JPA测试 Spring JPA&#xff08;Java Pers…

pytorch框架学习(tensorboard的使用)

什么是tensorboard&#xff1f; tensorboard是一个可视化工具&#xff0c;它可以把训练过程中的数据变化以图像的形式绘制出来&#xff0c;或者记录训练过程中使用的图片 tensorboard的安装&#xff1a; 在pycharm的终端中输出安装命令后自动安装—— pip install tensorbo…

加速mvn下载seatunnel相关jar包

seatunnel安装的时候&#xff0c;居然要使用mvnw来下载jar包&#xff0c;而且是从https://repo.maven.apache.org 下载&#xff0c;速度及其缓慢&#xff0c;改用自己本地的mvn下载。 修改其安装插件相关脚本&#xff0c;复制install-plugin.sh重命名为install-plugin-mvn.sh …

玩转硬件之Micro:bit的玩法(五)——垃圾分类

垃圾分类&#xff0c;为了美好的明天 垃圾是我们生活中不可避免的产物&#xff0c;每天都有大量的垃圾被丢弃&#xff0c;如果不加以处理&#xff0c;就会给环境和人类带来严重的危害。 垃圾分类是一种有效的垃圾管理方式&#xff0c;它是指按照一定的标准或规则&#xff0c;将…

[量子计算与量子信息] 2.1 线性代数

2.1 线性代数 符号对照表 量子力学中&#xff0c;向量使用 ∣ ψ ⟩ \ket \psi ∣ψ⟩ (ket)来表示&#xff0c;可以理解为一个列向量。其对偶向量为 ⟨ ψ ∣ \bra \psi ⟨ψ∣ &#xff0c;可以理解为行向量。 向量空间中零向量直接用 0 0 0 表示&#xff0c; ∣ 0 ⟩ \…

网络安全黑客技术自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…

如何利用黑群晖虚拟机和内网穿透实现公网远程访问

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

基于51单片机DS18B20温度检测报警系统串口设置阀值-仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、DS18B20采集温度值送到数码管显示。 3、按键报警阀值或串口设置阀值。 4、测量温度小于下限或大于上限&#xff0c;蜂鸣器报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 uint z; …

八皇后问题

1.八皇后BOSS 2.战术分析 第一个皇后先放第一行第一列第二个皇后放在第二行第一列、然后判断是否OK,如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适继续第三个皇后,还是第一列、第二列.…直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解当得到…

LeetCode(9)跳跃游戏【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 55. 跳跃游戏 1.题目 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回…

青少年编程学习 等级考试 蓝桥杯/NOC/GESP等比赛资料合集

一、博主愚见 在当今信息技术高速发展的时代&#xff0c;编程已经成为了一种必备的技能。随着社会对于科技人才的需求不断增加&#xff0c;青少年编程学习正逐渐成为一种趋势。为了更好地帮助青少年学习编程&#xff0c;提升他们的技能和素质&#xff0c;博主结合自身多年从事青…

五款常见的自动化测试框架

在自动化的软件测试系统实现过程中使用框架设计可以使得测试脚本的维护量减至最少。然而&#xff0c;大量的自动化测试工具均采用传统的“录制一回放”模 型&#xff0c;导致了较高的脚本维护量&#xff0c;因为测试数据在测试脚本程序中是以硬编码方式实现的。此外&#xff0…

向量数据库的分类概况

保存和检索矢量数据的五种方法&#xff1a; 像 Pinecone 这样的纯矢量数据库 全文搜索数据库&#xff0c;例如 ElasticSearch 矢量库&#xff0c;如 Faiss、Annoy 和 Hnswlib 支持矢量的NoSQL 数据库&#xff0c;例如 MongoDB、Cosmos DB 和 Cassandra 支持矢量的SQL 数据库&am…

Web视频会议:搭建CS for WebRTC

1. 下载Centos 7, WebRTC 需要Centos7版本 本文福利&#xff0c; 免费领取C音视频学习资料包学习路线大纲、技术视频/代码&#xff0c;内容包括&#xff08;音视频开发&#xff0c;面试题&#xff0c;FFmpeg &#xff0c;webRTC &#xff0c;rtmp &#xff0c;hls &#xff0c;…

垂直领域对话系统架构

垂直领域对话系统是指针对特定领域或行业的需求而构建的对话系统。这种系统通常需要具备高度的专业知识和对特定领域的知识库进行深入的学习和训练&#xff0c;以便能够提供准确、高效、实用的服务。 垂直领域对话系统的构建通常包括以下步骤&#xff1a; 确定目标领域或行业…

详解JDBC

JDBC简介 概念: jdbc就是使用java语言操作关系型数据库的一套API 全称 : (Java DataBase Connectivity) Java数据库连接 本质: 官方(sun公司)定义的一套操作所有关系型数据库的规则&#xff0c;即接口&#xff1b; 各个数据库厂商实现这套接口&#xff0c;提供数据库驱动j…

如何快速入门笔记软件『Obsidian』

前言 Obsidian 是基于 Markdown 语法的笔记软件&#xff0c;界面简洁&#xff0c;使用简单&#xff0c;功能实用&#xff0c;支持跨平台数据同步&#xff0c;实现基于双向链接的知识图谱&#xff0c;同时提供各种各样的扩展主题和插件 本文将会详细讲解笔记软件 Obsidian 的安…

threejs (三) 几何体

定义&#xff1a;用来表示物体的形状&#xff0c;可以定义物体的大小&#xff0c;可以被缩放、旋转和平移 内置几何体&#xff1a; 二维几何体&#xff1a;PlaneGeometry矩形平面、CircleGeometry圆形平面、RingGeometry环形平面、ShapeGeometry二维图形三维几何体&#xff1a…