Engineers with a laptop at automation test rigs in a bright production hall

SBOM

NIST SSDF (SP 800-218): the four practice groups, explained

Last updated:

The Secure Software Development Framework (SSDF) is NIST Special Publication 800-218 (Version 1.1, published February 2022), organized into four practice groups — Prepare the Organization, Protect the Software, Produce Well-Secured Software, and Respond to Vulnerabilities — read as a lifecycle rather than a checklist. Unlike a certification scheme, it is written as a set of named outcomes, not a pass/fail control catalogue: NIST's SSDF project page describes the goal as helping organisations "reduce the number of vulnerabilities in released software... and address root causes" of vulnerabilities, while giving producers and acquirers a shared vocabulary for secure-development conversations.

Key takeaways

  • The SP 800-218 version 1.1 document defines 19 practices, broken down into 42 tasks.
  • The attestation layer on top has changed.
  • NIST published SP 800-218 Revision 1, the initial public draft of SSDF version 1.2, on 17 December 2025; its comment period closed on 30 January 2026.
  • SSDF is tool-neutral, so each task needs translating into your build system.

What are the four SSDF practice groups?

NIST's SSDF project page organises every practice under four groups, each with its own stated purpose:

Group Abbreviation Purpose, as stated by NIST
Prepare the Organization PO "Ensure that the organization's people, processes, and technology are prepared to perform secure software development"
Protect the Software PS "Protect all components of the software from tampering and unauthorized access"
Produce Well-Secured Software PW "Produce well-secured software with minimal security vulnerabilities in its releases"
Respond to Vulnerabilities RV "Identify residual vulnerabilities in software releases and respond appropriately to address those vulnerabilities"

Read in order, the groups form a lifecycle: PO prepares the organisation, PS keeps the source and build pipeline trustworthy, PW holds the day-to-day secure-coding, design and testing practices, and RV closes the loop once a vulnerability is found after release.

Which practices sit under each group?

The SP 800-218 version 1.1 document defines 19 practices, broken down into 42 tasks. Each task comes with notional implementation examples and a reference column that points to other frameworks, including IEC 62443-4-1. The right-hand column is our reading for a firmware team, not NIST text.

ID Practice (NIST title, shortened) What it means for a firmware team
PO.1 Define security requirements for software development Written security requirements for the device, the build and suppliers
PO.2 Implement roles and responsibilities Named owners for the build, signing keys and vulnerability response
PO.3 Implement supporting toolchains Build tooling chosen, secured and configured to leave an audit trail
PO.4 Define and use criteria for software security checks Release gates: what must pass before an image ships
PO.5 Implement and maintain secure environments for development Build hosts and CI runners separated and hardened
PS.1 Protect all forms of code from unauthorized access and tampering Layers, configs and recipes in access-controlled version control
PS.2 Provide a mechanism for verifying software release integrity Signed images, published hashes, provenance
PS.3 Archive and protect each software release Image, sources, SBOM and integrity data kept per release
PW.1 Design software to meet security requirements and mitigate risks Threat model of the device and its update path
PW.2 Review the software design Design review against those requirements
PW.4 Reuse existing, well-secured software when feasible Vetted open-source and vendor SDK components
PW.5 Create source code by adhering to secure coding practices Coding rules for C/C++ and scripts
PW.6 Configure the compilation and build processes to improve executable security Toolchain versions and hardening flags under change control
PW.7 Review and/or analyze human-readable code Code review and static analysis
PW.8 Test executable code Fuzzing, dynamic and integration tests on target
PW.9 Configure software to have secure settings by default No default passwords, services off unless needed
RV.1 Identify and confirm vulnerabilities on an ongoing basis Monitoring CVEs and reports for every supported release
RV.2 Assess, prioritize, and remediate vulnerabilities Triage, fix and ship updates
RV.3 Analyze vulnerabilities to identify their root causes Fix the class of bug, not only the instance

The numbering skips PW.3: in version 1.1, "Verify Third-Party Software Complies with Security Requirements (PW.3)" was moved into PW.4, and its tasks now live under PW.4.4 and PO.1.3.

Why does SSDF exist, and what role did Executive Order 14028 play?

NIST's SSDF project page states that SP 800-218 includes explicit mappings from Executive Order 14028, "Improving the Nation's Cybersecurity," Section 4(e) clauses, to the SSDF practices and tasks that address each provision. That mapping is what ties a voluntary NIST framework to US federal software procurement in practice: agencies and the vendors that sell software to them use the SSDF as the reference point for the secure-development practices EO 14028 calls for.

The attestation layer on top has changed. OMB memorandum M-22-18 required agencies to "obtain a self-attestation from the software producer before using the software," which led to CISA's common form (see our guide to the Secure Software Development Attestation Form). On 23 January 2026, OMB memorandum M-26-05 rescinded M-22-18 and its companion M-23-16. Under M-26-05, agencies "may choose to use" the attestation form, may require a current SBOM by contract, and can reference SP 800-218 among other resources. For a supplier, SSDF stays the shared vocabulary; whether a signed attestation is needed now depends on the individual contract.

What is SSDF version 1.2?

NIST published SP 800-218 Revision 1, the initial public draft of SSDF version 1.2, on 17 December 2025; its comment period closed on 30 January 2026. NIST's announcement describes "new and improved practices, tasks, and examples for the secure and reliable development, delivery, and improvement of software," and the page lists Executive Order 14306 under laws and regulations. As of this update, version 1.1 remains the final publication, so cite v1.1 task IDs in evidence and contracts, and re-check them when the final Revision 1 is published: a revision can move tasks, as version 1.1 did with PW.3.

What is SP 800-218A, the generative AI profile?

In July 2024, NIST published SP 800-218A, "Secure Software Development Practices for Generative AI and Dual-Use Foundation Models: An SSDF Community Profile." It is a companion, not a replacement: NIST states it "should be used in conjunction with" SP 800-218, adding practices and tasks specific to the development lifecycle of AI models. It matters to device makers only if they train or ship such models.

How do SSDF tasks map onto a Yocto or Buildroot firmware build?

SSDF is tool-neutral, so each task needs translating into your build system. The table maps the build-relevant tasks to mechanisms Yocto (BitBake) and Buildroot already provide. The task column condenses SP 800-218 wording; the mechanism and evidence columns are SoftWSP's interpretation, not NIST guidance.

Task What SP 800-218 asks (condensed) Yocto / Buildroot mechanism Evidence to keep per release
PO.3.3 Configure tools to generate artifacts of their support for secure development CI logs; Yocto buildhistory; Buildroot make legal-info output Build log and configuration, archived with the release
PO.5.1 Separate and protect each environment involved in development Dedicated build runners, multi-factor access, network separation from office and production Runner inventory and access list
PS.1.1 Store all forms of code, including configuration-as-code, under least privilege Layers, local.conf, bblayers.conf, Buildroot defconfig and BR2_EXTERNAL tree in access-controlled Git Repository permissions, commit IDs per release
PS.2.1 Make integrity verification information available to acquirers Signed update package, published hashes, build provenance Signature, hash list, provenance file
PS.3.1 Securely archive files and supporting data, such as integrity information and provenance Source mirror tarballs in DL_DIR (BB_GENERATE_MIRROR_TARBALLS) or Buildroot's download directory after make source, plus the image Read-only release archive
PS.3.2 Collect, safeguard, maintain and share provenance data for all components, for example in an SBOM Yocto create-spdx (inherited by default) writes IMAGE-MACHINE.spdx.json; Buildroot legal-info One SBOM per image version
PW.4.1, PW.4.4 Acquire well-secured components and verify they keep meeting requirements over their life cycle Pinned versions with SRC_URI[sha256sum]; Buildroot .hash files; a known-vulnerability check Checksums, CVE check report
PW.6.1, PW.6.2 Use build tools with security features; define and enforce approved configurations Toolchain version under change control; hardening flags in the distro or defconfig; warnings treated as errors Distro configuration, toolchain version
RV.1.1 Gather vulnerability information from users and public sources and investigate credible reports Monitoring each shipped SBOM against NVD, KEV and vendor advisories Monitoring records, triage tickets
RV.1.3 Have a vulnerability disclosure and remediation policy, with roles and processes Published disclosure policy and a PSIRT Policy with version history

Sources: NIST SP 800-218 v1.1 task table; Yocto Project and Buildroot manuals, read 2026-11-10.

Two BitBake settings cover a lot of PW.4 and PS.3 cheaply. According to the BitBake fetcher documentation, BB_STRICT_CHECKSUM turns any download without a checksum into an error, and BB_NO_NETWORK makes any network access fatal, which is useful for checking that a source mirror is complete. Buildroot's equivalent is the per-package .hash file: the Buildroot manual says it must be added whenever hash checking is possible, and it validates both the downloaded sources and the licence files. make source downloads everything first so the build itself can run offline.

How does SSDF connect to a firmware SBOM?

SBOMs appear in SSDF by name. Task PS.3.2 asks producers to "collect, safeguard, maintain, and share provenance data for all components of each software release (e.g., in a software bill of materials [SBOM])", and its first example is making that data available to acquirers "preferably using standards-based formats." PW.4.4's examples include regularly checking components for publicly known vulnerabilities, and RV.1.1 starts with monitoring vulnerability databases. All three need a component list that matches what actually shipped.

For firmware, that list comes from the build system, from the finished binary, or ideally both, since the binary also shows prebuilt vendor libraries the recipes never describe. Our guide to Yocto and Buildroot SBOMs vs firmware image scanning compares the two, and firmware SBOM: building one when you don't have the source covers the binary side. The release-integrity tasks, PS.2.1 and PS.3.1, are where build provenance comes in: see SLSA supply-chain levels and the in-toto attestation framework.

Worked example: what SSDF evidence does one gateway release produce?

Synthetic example: the product, version and setup are invented for illustration. A company builds an industrial Ethernet gateway with Yocto and ships firmware release 4.2.0. The release leaves this trail:

  1. Freeze (PS.1.1)The release branch records the commit ID of every layer, plus local.conf and bblayers.conf, in a protected repository.
  2. Build (PO.5.1, PW.4.1)A dedicated CI runner with no interactive developer logins builds the image. Sources come from an internal mirror, and the release build sets BB_NO_NETWORK to prove the mirror is complete.
  3. Build outputs (PS.3.2, PW.4.4)The build writes the .wic image, the SPDX SBOM from create-spdx and a CVE check report.
  4. Image check (PS.3.2)An SBOM is extracted from the final update package and compared with the build SBOM; the free SBOM diff tool lists added, removed and version-changed components, and an engineer explains each difference.
  5. Sign (PS.2.1)A separate signing service, whose key the build job cannot read, signs the update package; the SHA-256 hashes go on the support page.
  6. Archive (PS.3.1)Image, both SBOMs, signature, provenance and the source mirror tarballs go into a read-only release archive.
  7. After release (RV.1.1, RV.1.3)The SBOM is monitored for new CVEs, and a report from a customer enters the PSIRT queue with a case number.

When a questionnaire asks "how do you meet PS.2.1?", the answer is the signature and hash list of release 4.2.0, not a policy paragraph.

How does SSDF differ from CISA's Secure by Design?

SSDF is NIST's named set of practices and tasks (PO, PS, PW, RV) that a team maps its lifecycle against, with a direct line to EO 14028. Secure by Design is CISA-led guidance built around three principles and a voluntary pledge to seven measurable goals, with no PO/PS/PW/RV structure; see CISA Secure by Design: principles and the pledge, explained. The two are complementary: SSDF for lifecycle practices, Secure by Design for principles and a public commitment.

How does SSDF line up with IEC 62443-4-1 and the CRA?

SP 800-218's reference column already cites IEC 62443-4-1 requirement IDs for many tasks: PS.1.1 points to SM-6, SM-7 and SM-8; PS.2.1 to SM-6, SM-8 and SUM-4; RV.1.3 to DM-1 through DM-5. A device maker already assessed against IEC 62443-4-1 can reuse much of that evidence for an SSDF mapping, and the reverse.

The EU Cyber Resilience Act does not name SSDF. Its essential requirements in Annex I are what a product with digital elements must meet, and SSDF evidence can feed the technical documentation that shows it. Any SSDF-to-CRA mapping is the manufacturer's own analysis, not an official crosswalk.

What are the common pitfalls?

  • Treating SSDF as a certificate. SP 800-218 is a set of recommendations, and NIST does not certify conformance.
  • Policies without artifacts. PO.3.3 asks for tools that generate artifacts. If the build leaves no log, SBOM or signature per release, the practice exists only on paper.
  • An SBOM from the build tree only. Prebuilt vendor libraries, bootloaders and modem blobs often bypass the recipes; compare against an image-derived SBOM.
  • A signing key the build can read. If any build step can reach the key, a compromised dependency can sign its own payload. Keep signing in a separate service.
  • An archive without sources. Rebuilding a five-year-old release for a security fix needs the exact source tarballs and layer commits, not only the image (PS.3.1).
  • One SBOM per product instead of per release. PS.3.2 says "each software release"; an SBOM for 4.1 tells you nothing about 4.2.

Where should a firmware team start?

  1. Map your existing lifecycle to PO/PS/PW/RV before adding new processMost teams already do pieces of several groups; the value is naming the gaps.
  2. Treat PW as the biggest group and budget accordinglyEight of the 19 practices sit under Produce Well-Secured Software.
  3. Make PS evidence automaticChecksums on every fetch, an SBOM and a signature per image and a read-only archive cost little once they are part of the build.
  4. Check the federal position for each contractSince M-26-05, attestation is an agency choice; read the contract rather than assuming the M-22-18 rules.
  5. If you build or ship AI models, read SP 800-218A alongside SP 800-218,not instead of it.

SoftWSP covers one slice of this. It extracts an SBOM from the shipped firmware binary as CycloneDX 1.6 JSON, matches the components against NVD, CISA KEV, FIRST EPSS and CISA's ICS advisories, and drafts a cited report that an engineer reviews before it is delivered. That is evidence for PS.3.2 and an input to PW.4.4 and RV.1.1, and watchlist alerts on a CVE ID or vendor and product help with ongoing monitoring. It does not sign builds, generate provenance or decide whether a finding applies to your configuration; those stay with your build and PSIRT teams. See device firmware security and PSIRT as a service.

This guide is general information, not legal advice. Sources read directly on 2026-11-10.

Put this guide to work

Frequently asked questions

What is the SSDF and what does SP 800-218 cover?

The Secure Software Development Framework (SSDF) is NIST Special Publication 800-218, titled "Secure Software Development Framework (SSDF) Version 1.1: Recommendations for Mitigating the Risk of Software Vulnerabilities," published February 2022. NIST's own SSDF project page states its purpose is to help organisations "reduce the number of vulnerabilities in released software, reduce the potential impact of exploitation of undetected vulnerabilities, and address root causes" of vulnerabilities, and to give producers and acquirers a common language for secure development.

What are the four SSDF practice groups?

Prepare the Organization (PO), Protect the Software (PS), Produce Well-Secured Software (PW), and Respond to Vulnerabilities (RV). NIST's SSDF project page quotes the purpose of each: PO ensures people, processes and technology are ready for secure development; PS protects software components from tampering and unauthorised access; PW aims to produce software with minimal security vulnerabilities; and RV covers identifying residual vulnerabilities after release and responding appropriately.

How does SSDF relate to Executive Order 14028?

NIST's SSDF project page states that SP 800-218 includes mappings from Executive Order 14028 Section 4(e) clauses to the corresponding SSDF practices and tasks that address each provision. Other sources commonly associate EO 14028 and SSDF with specific self-attestation requirements; for any claim about mandatory self-attestation, consult official OMB/CISA guidance directly rather than a secondary summary.

Is NIST's SSDF the same as CISA's Secure by Design?

No. SSDF is a NIST technical framework of named practices and tasks (PO, PS, PW, RV) that an organisation can map its software development lifecycle against. CISA's Secure by Design is separate voluntary guidance built around three principles and a pledge to seven measurable goals; it does not use the SSDF's PO/PS/PW/RV structure. See the Secure by Design guide below for that framework; the two are complementary, not interchangeable.

What is SP 800-218A?

SP 800-218A, published July 2024, is titled "Secure Software Development Practices for Generative AI and Dual-Use Foundation Models: An SSDF Community Profile." It states it should be used alongside, not instead of, SP 800-218, adding AI-specific practices, tasks, recommendations and considerations for the software development lifecycle of AI models. NIST developed it to fulfil an Executive Order requirement for a companion resource to the SSDF covering generative AI and dual-use foundation models.

Sources

  1. NIST: SP 800-218, Secure Software Development Framework (SSDF) Version 1.1
  2. NIST: Secure Software Development Framework (SSDF) project page
  3. NIST: SP 800-218A, Secure Software Development Practices for Generative AI and Dual-Use Foundation Models
  4. Federal Register: Executive Order 14028, Improving the Nation's Cybersecurity (86 FR 26633, 17 May 2021)
  5. NIST: SP 800-218 Version 1.1 full text (PDF), practice and task table
  6. NIST: SP 800-218 Rev. 1 (Initial Public Draft), SSDF Version 1.2, 17 December 2025
  7. OMB: Memorandum M-22-18, Enhancing the Security of the Software Supply Chain through Secure Software Development Practices
  8. OMB: Memorandum M-26-05, Adopting a Risk-based Approach to Software and Hardware Security (23 January 2026)
  9. BitBake User Manual: File download support (checksums, BB_STRICT_CHECKSUM, BB_NO_NETWORK)
  10. Yocto Project: Maintaining build output quality with buildhistory
  11. Buildroot user manual (.hash files, offline builds with make source)
Was this guide helpful?

In this cluster

NIST SSDF (SP 800-218): the four practice groups, explained