Skip to content

Commit 453d95b

Browse files
Merge pull request #89 from opencomputeproject/solid
Integrate SOLID
2 parents f80a9b2 + aedd01c commit 453d95b

11 files changed

Lines changed: 294 additions & 448 deletions

Documentation/corim_profile/OCP-SAFE-CoRIM-Extension-Profile-Specification.md

Lines changed: 5 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ ocp-safe-sfr-map = {
140140
&(scope-number: 3) => integer
141141
? &(fw-identifiers: 4) => [ + fw-identifier ]
142142
? &(issues: 5) => [ + issue-entry ]
143+
? &(solid-version: 6) => tstr
143144
* $$ocp-safe-sfr-map-ext
144145
}
145146
```
@@ -162,7 +163,8 @@ ocp-safe-sfr-map = {
162163
| Field | Key | Type | Description |
163164
|-------|-----|------|-------------|
164165
| fw-identifiers | 4 | array | Array of firmware identifier objects |
165-
| issues | 6 | array | Array of security issues identified during review |
166+
| issues | 5 | array | Array of security issues identified during review |
167+
| solid-version | 6 | tstr | Version of the SOLID requirements checked against |
166168

167169
### Firmware Identifiers
168170

@@ -307,172 +309,11 @@ To ensure broad interoperability:
307309

308310
### Profile CDDL
309311

310-
```cddl
311-
; Auditor CoRIM – Corim which embeds the SFR fields
312-
; OCP SAFE SFR CoRIM Profile OID: 1.3.6.1.4.1.42623.1.1
313-
314-
$$measurement-values-map-extension //= (
315-
&(ocp-safe-sfr: -1) => ocp-safe-sfr-map ; Private extension for OCP SAFE SFR
316-
)
317-
318-
ocp-safe-sfr-map = {
319-
&(review-framework-version: 0) => tstr
320-
&(report-version: 1) => tstr
321-
&(completion-date: 2) => time
322-
&(scope-number: 3) => integer
323-
? &(fw-identifiers: 4) => [ + fw-identifier ]
324-
? &(issues: 5) => [ + issue-entry ]
325-
* $$ocp-safe-sfr-map-ext
326-
}
327-
328-
issue-entry = {
329-
&(title: 0) => tstr
330-
&(description: 1) => tstr
331-
&(assessment: 2) => $assessment
332-
?&(cwe: 3) => tstr
333-
?&(cve: 4) => tstr
334-
* $$ocp-safe-issue-entry-ext
335-
}
336-
337-
$assessment /= cvss
338-
339-
cvss = {
340-
&(score: 0) => tstr
341-
&(vector: 1) => tstr
342-
&(version: 2) => tstr
343-
}
344-
345-
fw-identifier = non-empty<{
346-
? &(fw-version: 0) => version-map
347-
? &(fw-file-digests: 1) => digests-type
348-
? &(repo-tag: 2) => tstr
349-
? &(src-manifest: 3) => src-manifest
350-
}>
351-
352-
manifest-entry = {
353-
&(filename: 0) => tstr
354-
&(file-hash: 1) => digests-type
355-
}
356-
357-
src-manifest = {
358-
&(manifest-digest: 0) => digests-type
359-
&(manifest: 1) => [ + manifest-entry ]
360-
}
361-
```
312+
[This file](./ocp-safe-sfr-profile.cddl) contains the formal definition.
362313

363314
### Example CoRIM with SFR Extension
364315

365-
The following example demonstrates a complete CoRIM structure containing OCP S.A.F.E. SFR security review findings:
366-
367-
```cbor-diag
368-
/ tagged-corim-map / 501({
369-
/ corim.id (0) /
370-
0: "acme-trap-audit-2025-08-03",
371-
/ corim.profile (3) /
372-
3: 111(h'060A2B0601040182F4170101'), / OID 1.3.6.1.4.1.42623.1.1 for OCP SAFE SFR profile /
373-
/ corim.entities (5) /
374-
5: [
375-
/ audit-entity / {
376-
/ entity-name (0) / 0: "My Pentest Corporation",
377-
/ role (2) / 2: [ 1 ] / manifest-creator /
378-
}
379-
],
380-
/ corim.tags / 1 : [
381-
/ concise-mid-tag / 506( <<
382-
/ concise-mid-tag / {
383-
/ comid.tag-identity / 1 : {
384-
/ comid.tag-id / 0 : "acme-trap-review-comid-001"
385-
},
386-
/ comid.triples / 4 : {
387-
/ conditional-endorsement-triples / 10 : [
388-
[ / conditional-endorsement-triple-record /
389-
[ / conditions array /
390-
[ / *** stateful-environment-record *** /
391-
/ environment-map / {
392-
/ comid.class / 0 : {
393-
/ comid.vendor / 1 : "ACME Inc.",
394-
/ comid.model / 2 : "ACME RoadRunner Trap"
395-
}
396-
},
397-
[ / claims-list /
398-
/ *** measurement-map *** / {
399-
/ comid.mval / 1 : {
400-
/ comid.digests / 2 : [ [
401-
/ hash-alg-id / -43, / sha384 /
402-
/ hash-value / h'52047e070cddf496a7f77bf6a47792797e8ee90a149bb7555d08c5f93c5ca7ea46a63a7c99edaa1659e8afadfb9c6114'
403-
],
404-
[
405-
/ hash-alg-id / -44, / sha512 /
406-
/ hash-value / h'12a5b961a5eb7e548ed436fe7b5848d428bff908cb6ffcb47ec3ac1e2a43e0b8d1ff047d387fb0a940dc7b8b0014acf344364c43ab4de624dcd15f98bee552a5'
407-
]
408-
]
409-
}
410-
}
411-
]
412-
]
413-
], /*** end stateful-environment-records ***/
414-
[ /*** endorsements ***/
415-
[ /*** endorsed-triple-record ***/
416-
/ environment-map / {
417-
/ class / 0 : {
418-
/ vendor / 1 : "ACME Inc.",
419-
/ model / 2 : "ACME RoadRunner Trap"
420-
}
421-
},
422-
[ / endorsement #1/
423-
/ measurement-map / {
424-
/ comid.mval / 1 : { / measurement-values-map /
425-
/ ocp-safe-sfr / -1 : {
426-
/ 0: review-framework-version / 0: "1.1",
427-
/ 1: report-version / 1: "1.2",
428-
/ 2: completion-date / 2: 1(1687651200),
429-
/ 3: scope-number / 3: 1,
430-
/ 4: fw-identifiers / 4: [
431-
/fw-identifier / {
432-
/ 0: fw-version / 0: {
433-
/ 0: version / 0: "1.2.3",
434-
/ 1: version-scheme / 1: "semver"
435-
}
436-
}
437-
],
438-
/ 5: issues / 6: [
439-
/ issue-entry / {
440-
/ 0: title / 0: "Memory corruption when reading record from SPI flash",
441-
/ 1: description / 1: "Due to insufficient input validation in the firmware, a local attacker who tampers with a configuration structure in SPI flash, can cause stack-based memory corruption.",
442-
/ 2: assessment / 2: {
443-
/ 0: cvss-score / 0: "7.9",
444-
/ 1: cvss-vector / 1: "AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:H/A:L",
445-
/ 2: cvss-version / 2: "3.1"
446-
},
447-
/ 3: cwe / 3: "CWE-111"
448-
},
449-
/ issue-entry / {
450-
/ 0: title / 0: "Debug commands enable arbitrary memory read/write",
451-
/ 1: description / 1: "The firmware exposes debug command handlers that enable host-side drivers to read and write arbitrary regions of the device's SRAM.",
452-
/ 2: assessment / 2: {
453-
/ 0: cvss-score / 0: "8.7",
454-
/ 1: cvss-vector / 1: "AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L",
455-
/ 2: cvss-version / 2: "3.1"
456-
},
457-
/ 3: cwe / 3: "CWE-222",
458-
/ 4: cve / 4: "CVE-2014-10000"
459-
}
460-
]
461-
}
462-
}
463-
}
464-
]
465-
]
466-
]
467-
]
468-
]
469-
}
470-
}
471-
>> )
472-
]
473-
}
474-
)
475-
```
316+
[This example file](./examples/ocp-safe-sfr-fw-example.diag) demonstrates a complete CoRIM structure containing OCP S.A.F.E. SFR security review findings.
476317

477318
## References
478319

Documentation/corim_profile/examples/ocp-safe-sfr-fw-example.diag

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@
9090
/ 3: cwe / 3: "CWE-222",
9191
/ 4: cve / 4: "CVE-2014-10000"
9292
}
93-
]
93+
],
94+
/ 6: solid-version / 6: "1.0",
9495
}
9596
}
9697
}

Documentation/corim_profile/ocp-safe-sfr-profile.cddl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ ocp-safe-sfr-map = {
1212
&(scope-number: 3) => integer
1313
? &(fw-identifiers: 4) => [ + fw-identifier ]
1414
? &(issues: 5) => [ + issue-entry ]
15+
? &(solid-version: 6) => tstr
1516
* $$ocp-safe-sfr-map-ext
1617
}
1718

Documentation/framework.md

Lines changed: 5 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ The conditions under which these reviews take place, are of two main types:
142142
At a high level, the process flows through the following sequence of steps:
143143

144144
1. DV selects an SRP from the list of [approved providers](./security_review_providers.md).
145-
2. DV and SRP prepare a scope for the security review according to the [Security Review Scope](#security-review-scope) information provided below and in the supplementary [review areas](./review_areas.md).
145+
2. DV and SRP prepare a scope specific to the security review according to the general [Review Scope](./review_scope.md).
146146
3. SRP performs the security review.
147147
4. DV addresses any findings from the SRP.
148148
5. SRP reviews the changes and issues the final reports.
@@ -167,93 +167,15 @@ The key objectives of this framework are:
167167
* Through iterative refinement of review areas, testing scopes, and reporting requirements, progressively advance the
168168
security posture of hardware and firmware components across the supply chain.
169169

170-
## Security Review Scope
171-
172-
The following sections describe at a high level the areas that should be in scope for any security audit performed under
173-
this framework.
174-
They are intended as starting points for DVs and SRPs when undertaking a device or firmware security assessment. Under
175-
the framework, it is required for every production version of device firmware to have undergone the assessment. A more
176-
detailed
177-
description of the scopes is provided in the [review areas](./review_areas.md) document.
178-
179-
* **Threat Model** \
180-
The SRP should assess the DV’s documented threat models and perform a gap analysis, ensuring they are adequately
181-
covered by the observed hardware and firmware implementation. If the DV cannot provide a threat model, then the SRP
182-
should create one as part of the assessment scope. The threat model document should include the following details, and
183-
be aligned with the in-scope and out-of-scope threats described by
184-
the [Common Security Threats](https://www.opencompute.org/documents/common-security-threats-notes-1-pdf)
185-
document:
186-
* **Security Objectives**: The high-level security objectives or key
187-
risks exposed by the firmware. Examples of such objectives may include the strict requirement that the secure boot
188-
or firmware anti-rollback features must not be subverted or bypassed by an attacker.
189-
* **Adversarial Model**: A listing of all threat actors along with their
190-
motivation and capabilities. Examples may include a simple opportunistic hardware adversary, or advanced
191-
persistent threats that are able to keep the device under antagonistic conditions for an extended duration.
192-
* **Attack Surface Enumeration**: A listing of all remote, local and
193-
physical attack surfaces exposed by the device. Examples may include mailbox or IPC interfaces exposed via MMIO, a
194-
command shell exposed via a serial interface, inter-chip buses which transmit sensitive data, or external
195-
non-volatile storage media.
196-
* **Critical Assets**: A listing of all security-impacting assets within
197-
the firmware, and the corresponding Confidentiality, Integrity and Availability requirements for each. Examples of
198-
critical assets may include secret keys, the fuse configuration, or any configuration data residing in external flash.
199-
200-
The SAFE program defines 3 security review scopes. These scopes increase with complexity of attacks in the threat model.
201-
It is expected that devices will have reviews done with different review scopes. For example, a CPU may have a scope 3
202-
review of the root of trust due to the need for glitch protection when using a long-term device private key. This CPU
203-
may use a scope 2 review for the application cores.
204-
205-
* **Scope 1 Code and Architecture Assessment**
206-
* **Source Code Review** \
207-
The SRP should perform a whitebox security review of the device’s ROM and mutable firmware source code for
208-
identification of vulnerabilities and lapses in industry best practices. Issues uncovered during the review should
209-
be fixed by the DV and subsequently verified as fixed by the SRP. The review scope should include:
210-
* Analysis of the firmware loading and verification procedures to ensure that a secure boot implementation is
211-
present and cannot be circumvented. All critical assets that impact the device’s security must be
212-
cryptographically signed. The
213-
OCP [Secure Boot](https://www.opencompute.org/documents/secure-boot-2-pdf)
214-
document should be used for guidance.
215-
* Discovery of hard-coded credentials, seeds, private keys, or symmetric secrets.
216-
* Identifying temporal and spatial memory safety issues that arise due to improper input validation or race
217-
conditions that may occur along the attack surfaces that were identified in the threat model.
218-
* Discovery of remnant debug handlers on production builds
219-
* Analysis of the cryptographic constructions employed by the firmware when protecting the confidentiality or
220-
integrity of any critical assets.
221-
* Improper handling of cryptographic material, e.g. keys, counters, nonces, seeds.
222-
* Trust-boundary violations between privilege levels or across components, such as confused deputy problems or
223-
insufficient privilege separation between a firmware’s user and supervisor modes.
224-
* Identify outdated third-party libraries which are associated with publicly known CVEs.
225-
* Evaluation of exploit mitigation technologies such as: Address space randomization, stack canaries, data
226-
execution prevention, NULL page mapping, guard pages, and so on.
227-
* **Sensitive Functionality Review** \
228-
The SRP should review the firmware source code and should describe the presence and scope of all
229-
security-sensitive or commonly “restricted” functionality. This review can be used by consumers to measure risk
230-
and to configure deployment or isolation controls. The review scope should include:
231-
* TCG DICE implementation.
232-
* SPDM implementation.
233-
* Remote firmware update, manageability, or command and control functionality.
234-
* Manufacturing, debug, diagnostics, testing and logging capabilities.
235-
* Unauthenticated APIs.
236-
* Safe generation and handling of all cryptographic material.
237-
* Encryption capability controls (disk encryption, erase, rotation).
238-
* Secure boot key rotation capabilities.
239-
* **Scope 2 - Focusing on Trust boundaries:** Includes all of the areas of Scope 1 above, with deeper review focus of the following areas:
240-
* Trusted execution environment assessment
241-
* Handling of trust boundaries
242-
* Attestation and non-repudiation across boundaries
243-
* Authenticated and encrypted IO, e.g., PCIe-IDE, TDISP, or vendor proprietary
244-
* **Scope 3 - Resilience to physical attacks**
245-
* Critical components and operations are designed to securely handle glitch attacks in a documented way
246-
* Crypto blocks are designed to be resistant to side channel analysis.
247-
248170
## OCP Report Deliverables
249171

250172
This framework stipulates that the following be delivered to the OCP SAFE program for publication in the appropriate
251173
public [GitHub](https://github.com/opencomputeproject/OCP-Security-SAFE) repositories after the review (and remediation and re-testing)
252174
has concluded:
253175

254176
* **Scope Document** \
255-
DV and SRP should jointly negotiate the scope of the review, based on the
256-
[review areas](#security-review-scope). As alluded to above, the areas are neither exhaustive nor complete, therefore
177+
DV and SRP should jointly negotiate the scope of the review, based on the general
178+
[Review Scope](./review_scope.md). As alluded to above, the areas are neither exhaustive nor complete, therefore
257179
the DV is encouraged to socialize the Scope with the OCP Security WG, either through its regular calls, or on its
258180
mailing list. The scope itself can be any number of documents, as long as the concatenation of them is provided to the OCP Security
259181
WG. Aside from level of assessment effort, no part of the DV/SRP statement of work, NDAs, etc. needs to be published.
@@ -262,7 +184,7 @@ has concluded:
262184
in the signed SFR (after remediation and retesting). This document will summarize the audit scope, and uniquely identify
263185
the vendor, device and firmware version by means of a firmware hash. This report will enumerate all vulnerabilities
264186
with a CVSS score and a brief summary. The short-form report specification can be found in
265-
[Appendix B](#appendix-b-machine-readable-short-form-report-format). To claim OCP SAFE endorsement for a
187+
[here](./corim_profile/ocp-safe-sfr-profile.cddl). To claim OCP SAFE endorsement for a
266188
product-firmware combination this report must be published to the OCP GitHub repository. This signed SFR is delivered
267189
to the DV for publication.
268190
* **GitHub Pull Request Submission**\
@@ -278,8 +200,7 @@ has concluded:
278200
the submission may choose to additionally include the human-readable SFR documents.
279201
* **SRP Public Key Pull Request Path**\
280202
The public signing key of each SRP is published to the location SRP_certificates/$SRP. These are to be published and maintained by
281-
the SRP, and may be revoked by the TAC (see [Disqualification](#Disqualification) above).
282-
203+
the SRP, and may be revoked by the TAC (see [SRP Approval Process](./srp_approval_process.md)).
283204

284205
In addition to the short-form report, the SRP should deliver to the DV a detailed report. This report will likely be
285206
protected by NDA and will not be published. The DV should address the findings in the report. The DV is encouraged to
@@ -313,8 +234,3 @@ Several SRP sample reports can be found in [Appendix A](#appendix-a-example-repo
313234
and other [public reports](https://www.nccgroup.com/us/research-blog/?category=18157#hub)
314235
* NCC's first review of [Caliptra](https://chipsalliance.github.io/Caliptra/) can be
315236
found [here](https://github.com/chipsalliance/Caliptra/blob/main/doc/NCC_Group_Microsoft_MSFT283_Report_2023-10-13_v1.2.pdf)
316-
317-
# Appendix B: Machine Readable Short-Form Report Format
318-
319-
A reference implementation of the library to produce and verify short form reports is available
320-
in [this repo](https://github.com/opencomputeproject/OCP-Security-SAFE).

0 commit comments

Comments
 (0)