HBOM generation: collecting hardware and firmware inventory
An HBOM is assembled, not scanned. Good generation combines what the supplier declares with what the device reports, and records which is which.
- Use four sources: supplier HBOMs, in-band OS tools, out-of-band management interfaces and procurement records.
- Redfish FirmwareInventory covers platform firmware that does not execute in the host OS.
- Normalise identifiers (manufacturer, part number, CPE, serial) before merging data.
- Model firmware as a child of the hardware it runs on, as CycloneDX recommends.
Four sources of truth
| Source | Examples | Strength | Limitation |
|---|---|---|---|
| Supplier HBOM | OEM declaration using CISA taxonomy fields | Sub-component detail, provenance, part numbers [1] | Design-time; may not reflect field changes |
| In-band collection | dmidecode, lshw, fwupd | Serials, firmware versions, installed modules [2][3] | Relies on what firmware reports [4] |
| Out-of-band collection | Redfish on BMCs, vendor management APIs | Agentless firmware inventory [5] | Coverage varies by vendor and model |
| Procurement records | Purchase orders, delivery notes, RMA records | Contracted supplier and quantities | Rarely component-level |
Step 0: decide scope and depth
Decide which estates come first and how deep each HBOM should go. For most organisations, replaceable modules and all firmware-bearing components are the right depth for operational HBOMs; component-level detail with locations is reserved for critical products, where the CISA taxonomy’s provenance fields matter most.
Step 1: start from the supplier declaration
Where suppliers provide HBOMs, they are the most reliable source for what sits below the management interface: sub-assemblies, component manufacturers, manufacturing and assembly locations, and date codes. The CISA framework recommends a parent-child structure in which a product breaks down into assemblies and components, each linked by part identifiers [1]. Ask for it in procurement (see HBOM procurement requirements).
Step 2: collect in band
On hosts you control, lshw reports memory configuration, firmware version, mainboard and CPU details [2], dmidecode reads SMBIOS for manufacturer, model, serial and BIOS version [4], and fwupdmgr get-devices lists devices fwupd can see, with their firmware [3]. Record the tool and version with each observation so that later reviewers know how a value was obtained.
Step 3: collect out of band
For servers, Redfish is the most consistent route. Its update service exposes a FirmwareInventory collection for platform firmware that “does not execute within a host operating system” and a SoftwareInventory collection for host-executed components such as drivers; entries include version, manufacturer, release date and links to related hardware resources [5]. A request to /redfish/v1/UpdateService/FirmwareInventory on a BMC returns the collection without an agent on the host.
Step 4: normalise identifiers
Merging only works if identifiers agree. Normalise manufacturer names, keep both supplier and manufacturer part numbers (the CISA taxonomy distinguishes them [1]), record serial numbers for instances, and assign CPE names where they exist; CPE 2.3 distinguishes hardware from operating systems and applications through its part attribute [6]. A consistent unique identifier per component also satisfies one of CERT-In’s minimum elements [7].
Step 5: express it in CycloneDX or SPDX
In CycloneDX, represent the physical part as a device component and its firmware as a firmware component; the specification says “a hardware device containing firmware SHOULD include a component for the physical hardware itself” [8]. Nest sub-assemblies as child components and use dependencies for relationships. Attach hashes to firmware images where available. The CycloneDX for hardware BOMs article gives an example.
Step 6: mark provenance of each value
Keep a property on each field or component that says whether it was declared by the supplier, observed in band or observed out of band. When the sources disagree, for example a different firmware version or an unexpected module, that disagreement is a finding, not noise. It feeds directly into HBOM validation.
Step 7: regenerate on change
Regenerate the operational HBOM after firmware updates, part replacements and RMAs, and on a schedule. Each run becomes a new version that can be compared with the last, which is the basis of HBOM management.
How IntelliXBOM helps
IntelliXBOM generates and ingests HBOMs in CycloneDX and SPDX, merges supplier and collected data, and keeps each run as a version with component-level diffs. It then correlates devices and firmware with vulnerabilities, EOL dates and business services.
Frequently asked questions
Can an HBOM be generated automatically?
The operational part can, using in-band tools and management interfaces such as Redfish. Sub-component detail and provenance usually have to come from the supplier, so a complete HBOM combines automated collection with supplier declarations.
Which format should I use for a generated HBOM?
CycloneDX and SPDX both work. CycloneDX has explicit device and firmware component types; SPDX 3.0 has device and firmware software purposes. Use the same format family as your SBOMs so the inventories can be linked.
How often should an HBOM be regenerated?
After every firmware update, part replacement or RMA, and on a regular schedule to catch unrecorded changes. Keeping each run as a version lets you compare states over time.
Sources
- A Hardware Bill of Materials (HBOM) Framework for Supply Chain Risk Management (September 2023)CISA ICT SCRM Task Forcewww.cisa.gov/sites/default/files/2023-09/A%20Hardware%20Bill%20of%20Materials%20Framework%20for%20Supply%20Chain%20Risk%20Management%20(508).pdf
- lshw, Hardware Listerlshw project (GitHub)github.com/lyonel/lshw
- fwupd, firmware update daemonfwupd project (GitHub)github.com/fwupd/fwupd
- Dmidecodedmidecode project (Savannah)www.nongnu.org/dmidecode/
- DSP2062, Redfish Firmware Update White PaperDMTFwww.dmtf.org/sites/default/files/standards/documents/DSP2062_1.0.0.pdf
- NIST IR 7695, Common Platform Enumeration: Naming Specification Version 2.3NISTcsrc.nist.gov/pubs/ir/7695/final
- Technical Guidelines on SBOM, QBOM & CBOM, AIBOM and HBOM, Version 2.0 (9 July 2025)CERT-In, Government of Indiawww.cert-in.org.in/PDF/TechnicalGuidelines-on-SBOM,QBOM&CBOM,AIBOM_and_HBOM_ver2.0.pdf
- CycloneDX v1.6 JSON ReferenceOWASP CycloneDXcyclonedx.org/docs/1.6/json/
Sources checked in September 2026. Regulations and guidance change; always refer to the issuing body’s current publication. This content is for general information and is not legal advice.