Firmware analysis¶
Uploading the shipped binary lets alloy-it derive an inventory from what actually went out the door, rather than from a document describing what was meant to. Where a vendor SBOM also exists, the two are compared.
Firmware is never analysed automatically
Completing an upload does not open the file. A derived SBOM is created only when you explicitly click Generate SBOM from firmware. Scheduled rescans re-query vulnerability data against inventories that already exist; they never re-extract a binary.
This is deliberate. Customer firmware is sensitive, and opening it should be a decision someone made, not a side effect of an upload finishing.
Multi-binary releases¶
A release can hold several binaries: a bootloader, a kernel, a root filesystem, an application, a full image, a bundle. Each is tagged with its role and analysed independently, producing its own derived SBOM. Release-level views show the union.
This matters for scoping: "the vulnerability is in the bootloader, not the application" is a triage answer, and it needs the binaries to have been kept apart.
What to expect by format¶
Detection runs on upload: classification only, the file is not opened. Extraction quality is what decides whether a derived SBOM is meaningful, and the interface tells you what to expect before you analyse rather than after.
| Format | Extraction | Expected derived SBOM |
|---|---|---|
SquashFS (hsqs/sqsh) |
sasquatch | Good: package metadata usually intact |
| ext2/3/4 | e2fsprogs (debugfs) |
Good |
| UBI / UBIFS | ubireader_extract_files |
Good |
| JFFS2 | jefferson |
Good |
| cramfs, EROFS, ISO9660 | 7z / fsck.erofs |
Good |
| Android sparse / boot images | simg2img |
Good once the filesystem is reached |
| U-Boot uImage, FIT | unblob | Depends on the payload inside |
| Archives (tar, gzip, xz, zstd, lz4, zip, 7z, cpio) | native tools | Good: covers what the archive holds |
.deb / .ipk / .rpm |
ar / 7z | Package contents only, not a full firmware inventory |
| ELF, PE, Mach-O | scanned directly | Sparse: a single binary rarely carries package metadata |
| Intel HEX, Motorola S-record | n/a | Empty: bare-metal images have no package database |
| Raw / high-entropy | not possible | Empty: flagged likely_encrypted; decrypt first |
Bare-metal and MCU images¶
If you ship Intel HEX, S-record, or raw Cortex-M images, a derived SBOM will be empty or nearly so. There is no package manager in the image to read, and no amount of extraction will invent one.
The working path is a vendor SBOM from your build system (Zephyr west spdx, Yocto SPDX)
attached to the same release. Where the optional deep-analysis profile is deployed, these
images still gain value through hardening and version-string findings.
Encrypted images¶
Detected by entropy and flagged likely_encrypted before analysis. Nothing can be derived
until the image is decrypted.
Compare: trust but verify¶
When a release carries both a vendor SBOM and a derived inventory, the Compare tab shows a read-only diff. Neither side overwrites the other, and both stay under monitoring.
Treat differences as triage input rather than as errors:
- A component in the binary but absent from the vendor document is the finding you most want before an authority finds it for you.
- A component in the document but not the binary may be a build-time dependency that never shipped, worth recording as a triage justification.
The Unified inventory view merges the two for reading, with source badges and findings deduplicated. That merge is presentation and counting only; the stored inventories stay separate.
Match-rate caveats¶
Vulnerability matching depends on component identity, and embedded root filesystems are the hard case:
- Components carrying a PURL match well.
- Components the scanner can only name, common in embedded rootfs, match by name and an ecosystem guess. Both false negatives and mismatches are possible.
The vendor ↔ derived compare exists partly to make that gap visible. Triage is where the gap gets closed, with a human decision and a written justification.
Extraction is best-effort¶
When extraction fails or finds no clear root filesystem, the analyzer falls back to scanning the raw file and records a warning on the binary, visible in the analysis notes, not buried in an audit log.
Every analysis produces a downloadable report artifact: what was extracted, which tools ran, and any warnings. It lives on the Artifacts tab of the release, and it belongs in an evidence pack.
Deep analysis¶
Where your deployment enables the optional deep-analysis profile, a Deep analysis action runs an EMBA-class scan: binary hardening counts, kernel configuration findings, and detected version strings, alongside an SBOM that feeds the normal CVE path.
It takes tens of minutes to hours. It is not part of the default stack, and it is most valuable precisely where ordinary extraction is weakest: bare-metal and MCU images.
Next¶
- Monitoring: what happens after the inventory exists
- Triage: deciding what is actually in the product
- Products and releases: where firmware attaches