Wissen · STM32

STM32-Firmware-SBOM für den CRA erstellen

Eine SBOM für STM32-Firmware entsteht aus zwei Quellen: dem STM32Cube-Paket, aus dem HAL, CMSIS und Middlewares stammen, und dem Build, der zeigt, was davon gelinkt ist. Die SBOM, die ST dem Paket STM32CubeF4 v1.28.3 beilegt, nennt FreeRTOS, mbedTLS, LwIP, FatFs und LibJPEG nicht, obwohl das Paket alle fünf mitliefert. Deren Versionen lesen Sie aus den Headern des Pakets und, im Debug-Build, aus dem ELF.

Stand 20. Oktober 2026 · 2 Min. Lesezeit

Der Prüfling

Projekt
Oszilloskop auf STM32F429I-Discovery, STM32CubeIDE
Chip
STM32F429ZI, Cortex-M4
Datei
STM32F429I-Oscilloscope.elf, Debug-Build, GCC
SHA-256
2dd3e8b51a97df591055ed0e5211ab977e1f0cf39e3874ff5423268f7901e419

Öffentlich auf GitHub, Commit c3d1f92 (GPL-3.0)

Woraus ein STM32-Projekt besteht

Ein Projekt aus STM32CubeMX oder STM32CubeIDE übernimmt Code aus dem STM32Cube-Paket der Chipfamilie: den HAL-Treiber, die CMSIS-Dateien des Chips, Board-Treiber und Middlewares. Unter Middlewares/Third_Party liegen dort Bibliotheken anderer Hersteller, in STM32CubeF4 etwa FreeRTOS, mbedTLS und LwIP. Was davon im Gerät landet, entscheidet der Linker.

Für die SBOM brauchen Sie deshalb zwei Antworten: welche Version des Pakets das Projekt verwendet, und welche Bibliotheken daraus im Build stecken.

BestandteilWo die Version steht
Cube-PaketProjektdatei .ioc, Zeile ProjectManager.FirmwarePackage
HAL-Treiberstm32f4xx_hal.c, Makro __STM32F4xx_HAL_VERSION
FreeRTOStask.h, Makro tskKERNEL_VERSION_NUMBER
mbedTLSmbedtls/version.h, MBEDTLS_VERSION_STRING
LwIPlwip/init.h, LWIP_VERSION_MAJOR bis _REVISION
CompilerAbschnitt .comment im ELF

Schritt 1: die Paketversion aus der .ioc

Die Projektdatei von STM32CubeMX nennt Chip und Paketversion. Mit der Paketversion wissen Sie, welche Middleware-Versionen ST mitgeliefert hat.

Chip und Cube-Paket des Prüflings
grep -E "FirmwarePackage=|DeviceId=" Discovery_Oscilloscope.ioc
Ausgabe
ProjectManager.CustomerFirmwarePackage=
ProjectManager.DeviceId=STM32F429ZITx
ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.26.2

Schritt 2: die Middleware-Versionen aus dem Paket

Die Versionen der mitgelieferten Bibliotheken stehen in ihren Headern. Hier am aktuellen Release STM32CubeF4 v1.28.3, im Verzeichnis des Pakets ausgeführt.

Was das Paket unter Third_Party mitliefert
ls Middlewares/Third_Party
Ausgabe
FatFs
FreeRTOS
LibJPEG
LwIP
mbedTLS
Versionen aus den Headern
grep -h -m1 -E "tskKERNEL_VERSION_NUMBER|MBEDTLS_VERSION_STRING |FatFs - |JVERSION" Middlewares/Third_Party/FreeRTOS/Source/include/task.h Middlewares/Third_Party/mbedTLS/include/mbedtls/version.h Middlewares/Third_Party/FatFs/src/ff.h Middlewares/Third_Party/LibJPEG/include/jversion.h
Ausgabe
#define tskKERNEL_VERSION_NUMBER "V10.3.1"
#define MBEDTLS_VERSION_STRING         "2.16.2"
/  FatFs - Generic FAT file system module  R0.12c                             /
#define JVERSION	"8d  15-Jan-2012"
Wie oft die SBOM von ST diese fünf nennt
jq -r ".components[].name" sbom_cdx.json | grep -ciE "freertos|lwip|mbedtls|fatfs|libjpeg"
Ausgabe
0

Schritt 3: was der Build wirklich enthält

Die Symboltabelle des ELF zeigt, welche Bibliotheken gelinkt sind. Im Prüfling stehen HAL, der CMSIS-RTOS2-Aufsatz und der FreeRTOS-Kernel. Eine Bibliothek aus dem Paket, die im ELF keine Funktion hinterlässt, gehört nicht in die SBOM dieses Geräts.

Die FreeRTOS-Version steht hier im ELF selbst, weil der Debug-Build von STM32CubeIDE die Makros des Quellcodes in den Abschnitt .debug_macro schreibt. Ein Release-Build ohne Debug-Informationen hat diese Zeile nicht mehr. Dann nehmen Sie die Version aus Schritt 2.

Gelinkte Funktionen aus HAL, CMSIS-RTOS2 und FreeRTOS
nm STM32F429I-Oscilloscope.elf | grep -E " T (HAL_Init|osKernelStart|vTaskStartScheduler|xTaskCreate)$"
Ausgabe
08004ee9 T HAL_Init
08007f31 T osKernelStart
0800964d T vTaskStartScheduler
080095f1 T xTaskCreate
FreeRTOS-Version aus den Debug-Informationen
strings -a STM32F429I-Oscilloscope.elf | grep "tskKERNEL_VERSION_NUMBER"
Ausgabe
RTOS_ID_s ("FreeRTOS " tskKERNEL_VERSION_NUMBER)
tskKERNEL_VERSION_NUMBER "V10.3.1"
KERNEL_ID ("FreeRTOS " tskKERNEL_VERSION_NUMBER)
Compiler
strings -a STM32F429I-Oscilloscope.elf | grep -m1 "GCC: "
Ausgabe
GCC: (GNU Tools for STM32 9-2020-q2-update.20201001-1621) 9.3.1 20200408 (release)

Was LegacyMind dabei automatisch macht

Builds für Mikrocontroller aus Keil MDK, IAR oder GNU Arm. Gefunden werden die eingebauten Bibliotheken mit Version, etwa CMSIS-Packs, RTX5, FreeRTOS, lwIP, mbedTLS und STM32Cube. Dazu Härtung (Stack-Canary, MPU, Privilegientrennung) und eingebettete Schlüssel.

Jede Komponente mit belegter Version wird gegen die Schwachstellenquellen abgeglichen. Belegt die Datei keine Version, bleibt das Feld leer. Die SBOM exportieren Sie als CycloneDX oder SPDX.

Die Konformitätsaussage treffen Sie. Diese Seite und unsere Berichte liefern technische Feststellungen als Grundlage dafür.

Häufige Fragen

01Reicht die SBOM, die ST dem Cube-Paket beilegt?

Für Ihr Gerät nicht. Sie beschreibt das Paket, und in STM32CubeF4 v1.28.3 fehlen darin die fünf Bibliotheken unter Middlewares/Third_Party. Ihre SBOM nennt, was Ihr Build gelinkt hat, mit Version.

02Welche Datei aus STM32CubeIDE nehme ich?

Das .elf aus dem Build-Ordner, etwa Debug oder Release. Dazu die .ioc des Projekts, sie nennt die Paketversion.

03Gilt das auch für Keil und IAR?

Ja. Keil schreibt ein .axf, IAR ein .out, beides sind ELF-Dateien. Die Middlewares kommen aus demselben Cube-Paket.

04Gehört der HAL-Treiber in die SBOM?

Ja. Er ist Code eines Dritten, der im Gerät läuft. Der CRA verlangt in Anhang I Teil II, die Komponenten zu erfassen, mindestens die direkten Abhängigkeiten.

Quellen

  1. [1]STMicroelectronics: STM32CubeF4, Release v1.28.3
  2. [2]Prüfling: mmahdim/STM32F4-Scope, Commit c3d1f92
  3. [3]Verordnung (EU) 2024/2847, Cyber Resilience Act
  4. [4]BSI TR-03183-2, Version 2.1.0
  5. [5]GNU Binutils: nm und strings

Prüfen Sie Ihr eigenes Image

Im kostenfreien CRA-Readiness-Check laden Sie ein AXF, ein Firmware-Image oder eine Lieferanten-SBOM hoch. Bericht und SBOM bekommen Sie binnen drei Werktagen.