draft-ietf-opsawg-sbom-access-00.txt | draft-ietf-opsawg-sbom-access-01.txt | |||
---|---|---|---|---|
Network Working Group E. Lear | Network Working Group E. Lear | |||
Internet-Draft Cisco Systems | Internet-Draft Cisco Systems | |||
Intended status: Standards Track S. Rose | Intended status: Standards Track S. Rose | |||
Expires: July 30, 2021 NIST | Expires: 19 November 2021 NIST | |||
January 26, 2021 | 18 May 2021 | |||
Discovering And Accessing Software Bills of Materials | Discovering And Accessing Software Bills of Materials | |||
draft-ietf-opsawg-sbom-access-00 | draft-ietf-opsawg-sbom-access-01 | |||
Abstract | Abstract | |||
Software bills of materials (SBOMs) are formal descriptions of what | Software bills of materials (SBOMs) are formal descriptions of what | |||
pieces of software are included in a product. This memo specifies a | pieces of software are included in a product. This memo specifies a | |||
different means for SBOMs to be retrieved. | different means for SBOMs to be retrieved. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
skipping to change at page 1, line 33 ¶ | skipping to change at page 1, line 33 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on July 30, 2021. | This Internet-Draft will expire on 19 November 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
(https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
described in the Simplified BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. How This Information Is Used . . . . . . . . . . . . . . 3 | 1.1. Cases Not Addressed . . . . . . . . . . . . . . . . . . . 3 | |||
1.2. SBOM formats . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. How This Information Is Used . . . . . . . . . . . . . . 4 | |||
1.3. Discussion points . . . . . . . . . . . . . . . . . . . . 4 | 1.3. SBOM formats . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. The mud-sbom extension model extension . . . . . . . . . . . 4 | 1.4. Discussion points . . . . . . . . . . . . . . . . . . . . 4 | |||
3. The mud-sbom augmentation to the MUD YANG model . . . . . . . 5 | 2. The .well-known/sbom endpoint set . . . . . . . . . . . . . . 5 | |||
4. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3. The mud-sbom extension model extension . . . . . . . . . . . 5 | |||
4.1. Without ACLS . . . . . . . . . . . . . . . . . . . . . . 8 | 4. The mud-sbom augmentation to the MUD YANG model . . . . . . . 5 | |||
4.2. Located on the Device . . . . . . . . . . . . . . . . . . 8 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4.3. SBOM Obtained from Contact Information . . . . . . . . . 9 | 5.1. Without ACLS . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4.4. With ACLS . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5.2. Located on the Device . . . . . . . . . . . . . . . . . . 9 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 5.3. SBOM Obtained from Contact Information . . . . . . . . . 9 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 5.4. With ACLS . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
6.1. MUD Extension . . . . . . . . . . . . . . . . . . . . . . 13 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | |||
6.2. Well-Known Prefix . . . . . . . . . . . . . . . . . . . . 13 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | |||
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 7.1. MUD Extension . . . . . . . . . . . . . . . . . . . . . . 13 | |||
7.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 7.2. Well-Known Prefix . . . . . . . . . . . . . . . . . . . . 14 | |||
7.2. Informative References . . . . . . . . . . . . . . . . . 14 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 14 | ||||
8.2. Informative References . . . . . . . . . . . . . . . . . 14 | ||||
Appendix A. Changes from Earlier Versions . . . . . . . . . . . 14 | Appendix A. Changes from Earlier Versions . . . . . . . . . . . 14 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
1. Introduction | 1. Introduction | |||
Software bills of material (SBOMs) are descriptions of what software, | Software bills of material (SBOMs) are descriptions of what software, | |||
including versioning and dependencies, a device contains. There are | including versioning and dependencies, a device contains. There are | |||
different SBOM formats such as Software Package Data Exchange [SPDX], | different SBOM formats such as Software Package Data Exchange [SPDX] | |||
Software Identity Tags [SWID], or CycloneDX[CycloneDX12]. | or CycloneDX[CycloneDX12]. | |||
This memo specifies means by which SBOMs can be advertised and | This memo specifies means by which SBOMs can be advertised and | |||
retrieved. | retrieved. | |||
The mechanisms specified in this document are meant to satisfy | The mechanisms specified in this document are meant to satisfy | |||
several use cases: | several use cases: | |||
o An application-layer management system retrieving an SBOM in order | * A network-layer management system retrieving an SBOM from an IoT | |||
device as part of its ongoing lifecycle. Such devices may or may | ||||
not have interfaces available to query SBOM information. | ||||
* An application-layer management system retrieving an SBOM in order | ||||
to evaluate the posture of an application server of some form. | to evaluate the posture of an application server of some form. | |||
These application servers may themselves be containers or | These application servers may themselves be containers or | |||
hypervisors. Discovery of the topology of a server is beyond the | hypervisors. Discovery of the topology of a server is beyond the | |||
scope of this memo. | scope of this memo. | |||
o A network-layer management system retrieving an SBOM from an IoT | ||||
device as part of its ongoing lifecycle. Such devices may or may | ||||
not have interfaces available to query SBOM information. | ||||
To satisfy these two key use cases, SBOMs may be found in one of | To satisfy these two key use cases, SBOMs may be found in one of | |||
three ways: | three ways: | |||
o on devices themselves | * on devices themselves | |||
o on a web site (e.g., via URI) | * on a web site (e.g., via URI) | |||
o through some form of out-of-band contact with the supplier. | * through some form of out-of-band contact with the supplier. | |||
In the first case, devices will have interfaces that permit direct | In the first case, devices will have interfaces that permit direct | |||
SBOM retrieval. Examples of these interfaces might be an HTTP or | SBOM retrieval. Examples of these interfaces might be an HTTP, COAP | |||
COAP endpoint for retrieval. There may also be private interfaces as | or [OpenC2] endpoint for retrieval. There may also be private | |||
well. | interfaces as well. | |||
In the second case, when a device does not have an appropriate | In the second case, when a device does not have an appropriate | |||
interface to retrieve an SBOM, but one is directly available from the | interface to retrieve an SBOM, but one is directly available from the | |||
manufacturer, a URI to that information must be discovered. | manufacturer, a URI to that information must be discovered. | |||
In the third case, a supplier may wish to make an SBOM available | In the third case, a supplier may wish to make an SBOM available | |||
under certain circumstances, and may need to individually evaluate | under certain circumstances, and may need to individually evaluate | |||
requests. The result of that evaluation might be the SBOM itself or | requests. The result of that evaluation might be the SBOM itself or | |||
a restricted URL or no access. | a restricted URL or no access. | |||
skipping to change at page 3, line 40 ¶ | skipping to change at page 3, line 43 ¶ | |||
To enable network-layer discovery, particularly for IOT-based | To enable network-layer discovery, particularly for IOT-based | |||
devices, an extension to Manufacturer Usage Descriptions (MUD) may be | devices, an extension to Manufacturer Usage Descriptions (MUD) may be | |||
used[RFC8520]. | used[RFC8520]. | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
1.1. How This Information Is Used | 1.1. Cases Not Addressed | |||
[ This section to be removed prior to publication ] | ||||
A separate use case may be addressed in future versions of this | ||||
document: | ||||
* Related to the application layer, software as a service may | ||||
involve multiple backend systems, depending on many factors. One | ||||
example might be a large cloud-based service that offers | ||||
spreadsheets, email, and document authoring and management. | ||||
Depending on what service is being used, a different set of back | ||||
end services may in turn be invoking different software that | ||||
should be listed. | ||||
The reason why this use case isn't addressed here is that it may be | ||||
better addressed inline within HTML. Further discussion is required. | ||||
1.2. How This Information Is Used | ||||
SBOMs are used for numerous purposes, including vulnerability | SBOMs are used for numerous purposes, including vulnerability | |||
assessment, license management, and inventory management. This memo | assessment, license management, and inventory management. This memo | |||
provides means for either automated or semi-automated collection of | provides means for either automated or semi-automated collection of | |||
that information. For devices that can output a MUD URL or establish | that information. For devices that can output a MUD URL or establish | |||
a well-known URI, the mechanism may be highly automated. For devices | a well-known URI, the mechanism may be highly automated. For devices | |||
that have a MUD URL in either their documentation or within a QR code | that have a MUD URL in either their documentation or within a QR code | |||
on a box, the mechanism is semi-automated (someone has to scan the QR | on a box, the mechanism is semi-automated (someone has to scan the QR | |||
code or enter the URL). | code or enter the URL). | |||
Note that SBOMs may change more frequently than access control | Note that SBOMs may change more frequently than access control | |||
requirements. A change to software does not necessarily mean a | requirements. A change to software does not necessarily mean a | |||
change to control channels that are used. Therefore, it is important | change to control channels that are used. Therefore, it is important | |||
to retrieve the MUD file as suggested by the manufacturer in the | to retrieve the MUD file as suggested by the manufacturer in the | |||
cache-validity period. In many cases, only the SBOM list will have | cache-validity period. In many cases, only the SBOM list will have | |||
been updated. | been updated. | |||
1.2. SBOM formats | 1.3. SBOM formats | |||
There are multiple ways to express an SBOM. When these are retrieved | There are multiple ways to express an SBOM. When these are retrieved | |||
either directly from the device or directly from a web server, tools | either directly from the device or directly from a web server, tools | |||
will need to observe the content-type header to determine precisely | will need to observe the content-type header to determine precisely | |||
which format is being transmitted. Because IoT devices in particular | which format is being transmitted. Because IoT devices in particular | |||
have limited capabilities, use of a specific Accept: header in HTTP | have limited capabilities, use of a specific Accept: header in HTTP | |||
or the Accept Option in CoAP is NOT RECOMMENDED. Instead, backend | or the Accept Option in CoAP is NOT RECOMMENDED. Instead, backend | |||
tooling MUST silently discard SBOM information sent with a media type | tooling MUST silently discard SBOM information sent with a media type | |||
that is not understood. | that is not understood. | |||
1.3. Discussion points | 1.4. Discussion points | |||
The following is discussion to be removed at time of RFC publication. | The following is discussion to be removed at time of RFC publication. | |||
o Is the model structured correctly? | * Is the model structured correctly? | |||
o Are there other retrieval mechanisms that need to be specified? | * Are there other retrieval mechanisms that need to be specified? | |||
o Do we need to be more specific in how to authenticate and retrieve | * Do we need to be more specific in how to authenticate and retrieve | |||
SBOMs? | SBOMs? | |||
o What are the implications if the MUD URL is an extension in a | * What are the implications if the MUD URL is an extension in a | |||
certificate (e.g. an IDevID cert)? | certificate (e.g. an IDevID cert)? | |||
2. The mud-sbom extension model extension | 2. The .well-known/sbom endpoint set | |||
If a host offers this service, it will offer the RESTful endpoint | ||||
beginning with "{ORIGIN}/.well-known/sbom/base". | ||||
3. The mud-sbom extension model extension | ||||
We now formally define this extension. This is done in two parts. | We now formally define this extension. This is done in two parts. | |||
First, the extension name "sbom" is listed in the "extensions" array | First, the extension name "sbom" is listed in the "extensions" array | |||
of the MUD file. | of the MUD file. N.B., this schema extension is intended to be used | |||
wherever it might be appropriate (e.g., not just MUD). | ||||
Second, the "mud" container is augmented with a list of SBOM sources. | Second, the "mud" container is augmented with a list of SBOM sources. | |||
This is done as follows: | This is done as follows: | |||
module: ietf-mud-sbom | module: ietf-mud-sbom | |||
augment /mud:mud: | augment /mud:mud: | |||
+--rw sboms* [version-info] | +--rw sbom | |||
+--rw version-info string | ||||
+--rw (sbom-type)? | +--rw (sbom-type)? | |||
+--:(url) | +--:(cloud) | |||
| +--rw sbom-url? inet:uri | | +--rw sboms* [version-info] | |||
+--:(local-uri) | | +--rw version-info string | |||
| +--rw sbom-local* enumeration | | +--rw sbom-url? inet:uri | |||
+--:(local-well-known) | ||||
| +--rw local-well-known? empty | ||||
+--:(contact-info) | +--:(contact-info) | |||
+--rw contact-uri? inet:uri | | +--rw contact-uri inet:uri | |||
+--:(openc2) | ||||
+--rw openc2-uri inet:uri | ||||
3. The mud-sbom augmentation to the MUD YANG model | 4. The mud-sbom augmentation to the MUD YANG model | |||
<CODE BEGINS>file "ietf-mud-sbom@2020-03-06.yang" | <CODE BEGINS> | |||
module ietf-mud-sbom { | file "ietf-mud-sbom@2021-04-29.yang" | |||
yang-version 1.1; | module ietf-mud-sbom { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-mud-sbom"; | yang-version 1.1; | |||
prefix mud-sbom; | namespace "urn:ietf:params:xml:ns:yang:ietf-mud-sbom"; | |||
prefix mud-sbom; | ||||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
import ietf-mud { | import ietf-mud { | |||
prefix mud; | prefix mud; | |||
} | } | |||
organization | organization | |||
"IETF OPSAWG (Ops Area) Working Group"; | "IETF OPSAWG (Ops Area) Working Group"; | |||
contact | contact | |||
"WG | "WG | |||
Web: http://tools.ietf.org/wg/opsawg/ | Web: http://tools.ietf.org/wg/opsawg/ | |||
WG List: opsawg@ietf.org | WG List: opsawg@ietf.org | |||
Author: Eliot Lear lear@cisco.com "; | Author: Eliot Lear lear@cisco.com | |||
description | Author: Scott Rose scott.rose@nist.gov"; | |||
"This YANG module augments the ietf-mud model to provide for | description | |||
reporting of SBOMs. | "This YANG module augments the ietf-mud model to provide for | |||
reporting of SBOMs. | ||||
Copyright (c) 2019 IETF Trust and the persons identified as | Copyright (c) 2020 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC XXXX | |||
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for | (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | |||
full legal notices. | for full legal notices. | |||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
they appear in all capitals, as shown here. "; | they appear in all capitals, as shown here. "; | |||
revision 2020-03-06 { | revision 2021-04-29 { | |||
description | description | |||
"Initial proposed standard."; | "Initial proposed standard."; | |||
reference | reference | |||
"RFC XXXX: Extension for MUD Reporting"; | "RFC XXXX: Extension for MUD SBOM"; | |||
} | } | |||
grouping mud-sbom-extension { | grouping mud-sbom-extension { | |||
description | description | |||
"SBOM extension grouping"; | "SBOM extension grouping"; | |||
list sboms { | container sbom { | |||
key "version-info"; | description | |||
leaf version-info { | "container of methods to get an SBOM."; | |||
type string; | ||||
description | ||||
"A version string that is applicable for this SBOM list entry. | ||||
The format of this string is left to the device manufacturer. | ||||
How the network administrator determines the version of | ||||
software running on the device is beyond the scope of this | ||||
memo."; | ||||
} | ||||
choice sbom-type { | ||||
case url { | ||||
leaf sbom-url { | ||||
type inet:uri; | ||||
description | ||||
"A statically located URI."; | ||||
} | ||||
} | ||||
case local-uri { | ||||
leaf-list sbom-local { | ||||
type enumeration { | ||||
enum coap { | ||||
description | ||||
"Use COAP schema to retrieve SBOM"; | ||||
} | ||||
enum coaps { | ||||
description | ||||
"Use COAPS schema to retrieve SBOM"; | ||||
} | ||||
enum http { | ||||
description | ||||
"Use HTTP schema to retrieve SBOM"; | ||||
} | ||||
enum https { | ||||
description | ||||
"Use HTTPS schema to retrieve SBOM"; | ||||
} | ||||
} | ||||
description | ||||
"The choice of sbom-local means that the SBOM resides at | ||||
a location indicated by an indicted scheme for the | ||||
device in question, at well known location | ||||
'/.well-known/sbom'. For example, if the MUD file | ||||
indicates that coaps is to be used and the host is | ||||
located at address 10.1.2.3, the SBOM could be retrieved | ||||
at 'coaps://10.1.2.3/.well-known/sbom'. N.B., coap and | ||||
http schemes are NOT RECOMMENDED."; | ||||
} | ||||
} | ||||
case contact-info { | ||||
leaf contact-uri { | ||||
type inet:uri; | ||||
description | ||||
"This MUST be either a tel, http, https, or | ||||
mailto uri schema that customers can use to | ||||
contact someone for SBOM information."; | ||||
} | ||||
} | ||||
description | ||||
"choices for SBOM retrieval."; | ||||
} | ||||
description | ||||
"list of methods to get an SBOM."; | ||||
} | ||||
} | ||||
augment "/mud:mud" { | choice sbom-type { | |||
description | description | |||
"Add extension for SBOMs."; | "SBOM type"; | |||
uses mud-sbom-extension; | case cloud { | |||
} | list sboms { | |||
} | key "version-info"; | |||
description | ||||
"A list of SBOMs tied to different s/w | ||||
or h/w versions."; | ||||
leaf version-info { | ||||
type string; | ||||
description | ||||
"The version to which this SBOM refers."; | ||||
} | ||||
leaf sbom-url { | ||||
type inet:uri; | ||||
description | ||||
"A statically located URI."; | ||||
} | ||||
} | ||||
} | ||||
case local-well-known { | ||||
leaf local-well-known { | ||||
type empty; | ||||
description | ||||
"SBOM information is to be retrieved via | ||||
https from the host on port 443, at | ||||
https://{hostname}/.well-known/sbom, where | ||||
hostname is replaced with the host to which | ||||
this MUD extension refers."; | ||||
} | ||||
} | ||||
case contact-info { | ||||
leaf contact-uri { | ||||
type inet:uri; | ||||
mandatory true; | ||||
description | ||||
"This MUST be either a tel, http, https, or | ||||
mailto uri schema that customers can use to | ||||
contact someone for SBOM information."; | ||||
} | ||||
} | ||||
case openc2 { | ||||
leaf openc2-uri { | ||||
type inet:uri; | ||||
mandatory true; | ||||
description | ||||
"A link to the OpenC2 https RESTful | ||||
\t mapping. The OpenC2 protocol is then | ||||
used to retrieve the SBOM"; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
} | ||||
<CODE ENDS> | augment "/mud:mud" { | |||
4. Examples | description | |||
"Add extension for SBOMs."; | ||||
uses mud-sbom-extension; | ||||
} | ||||
} | ||||
<CODE ENDS> | ||||
5. Examples | ||||
In this example MUD file that uses a cloud service, the Frobinator | In this example MUD file that uses a cloud service, the Frobinator | |||
presents a location of the SBOM in a URL. Note, the ACLs in a MUD | presents a location of the SBOM in a URL. Note, the ACLs in a MUD | |||
file are NOT required, although they are a very good idea for IP- | file are NOT required, although they are a very good idea for IP- | |||
based devices. The first MUD file demonstrates how to get the SBOM | based devices. The first MUD file demonstrates how to get the SBOM | |||
without ACLs, and the second has ACLs. | without ACLs, and the second has ACLs. | |||
4.1. Without ACLS | 5.1. Without ACLS | |||
{ | ||||
"ietf-mud:mud": { | ||||
"mud-version": 1, | ||||
"mud-url": "https://iot-device.example.com/dnsname", | ||||
"last-update": "2019-01-15T10:22:47+00:00", | ||||
"cache-validity": 48, | ||||
"is-supported": true, | ||||
"systeminfo": "device that wants to talk to a cloud service", | ||||
"mfg-name": "Example, Inc.", | ||||
"documentation": "https://frobinator.example.com/doc/frob2000", | ||||
"model-name": "Frobinator 2000", | ||||
"extensions" : [ | ||||
"sbom" | ||||
], | ||||
"sboms" : [ | ||||
{ | ||||
"version-info" : "FrobOS Release 1.1", | ||||
"sbom-url" : "https://frobinator.example.com/sboms/f20001.1", | ||||
} | ||||
] | ||||
} | ||||
} | ||||
4.2. Located on the Device | ||||
{ | { | |||
"ietf-mud:mud": { | "ietf-mud:mud": { | |||
"mud-version": 1, | "mud-version": 1, | |||
"mud-url": "https://iot-device.example.com/dnsname", | "mud-url": "https://iot-device.example.com/dnsname", | |||
"last-update": "2019-01-15T10:22:47+00:00", | "last-update": "2019-01-15T10:22:47+00:00", | |||
"cache-validity": 48, | "cache-validity": 48, | |||
"is-supported": true, | "is-supported": true, | |||
"systeminfo": "device that wants to talk to a cloud service", | "systeminfo": "device that wants to talk to a cloud service", | |||
"mfg-name": "Example, Inc.", | "mfg-name": "Example, Inc.", | |||
"documentation": "https://frobinator.example.com/doc/frob2000", | "documentation": "https://frob.example.com/doc/frob2000", | |||
"model-name": "Frobinator 2000", | "model-name": "Frobinator 2000", | |||
"extensions" : [ | "extensions" : [ | |||
"sbom" | "sbom" | |||
], | ], | |||
"sboms" : [ | "sboms" : { "sbom" : [ | |||
{ | { | |||
"version-info" : "FrobOS Release 1.1", | "version-info" : "FrobOS Release 1.1", | |||
"sbom-local" : "coaps:///.well-known/sbom", | "sbom-url" : "https://frob.example.com/sboms/f20001.1", | |||
} | } | |||
] | ] | |||
} | ||||
} | } | |||
} | } | |||
4.3. SBOM Obtained from Contact Information | 5.2. Located on the Device | |||
{ | { | |||
"ietf-mud:mud": { | "ietf-mud:mud": { | |||
"mud-version": 1, | "mud-version": 1, | |||
"mud-url": "https://iot-device.example.com/dnsname", | "mud-url": "https://iot-device.example.com/dnsname", | |||
"last-update": "2019-01-15T10:22:47+00:00", | "last-update": "2019-01-15T10:22:47+00:00", | |||
"cache-validity": 48, | "cache-validity": 48, | |||
"is-supported": true, | "is-supported": true, | |||
"systeminfo": "device that wants to talk to a cloud service", | "systeminfo": "device that wants to talk to a cloud service", | |||
"mfg-name": "Example, Inc.", | "mfg-name": "Example, Inc.", | |||
"documentation": "https://frobinator.example.com/doc/frob2000", | "documentation": "https://frob.example.com/doc/frob2000", | |||
"model-name": "Frobinator 2000", | "model-name": "Frobinator 2000", | |||
"extensions" : [ | "extensions" : [ | |||
"sbom" | "sbom" | |||
], | ], | |||
"sboms" : [ | "sboms" : "sbom" : { | |||
{ | "sbom-local" : "coaps:///.well-known/sbom", | |||
"version-info" : "FrobOS Release 1.1", | } | |||
} | ||||
} | ||||
5.3. SBOM Obtained from Contact Information | ||||
{ | ||||
"ietf-mud:mud": { | ||||
"mud-version": 1, | ||||
"mud-url": "https://iot-device.example.com/dnsname", | ||||
"last-update": "2019-01-15T10:22:47+00:00", | ||||
"cache-validity": 48, | ||||
"is-supported": true, | ||||
"systeminfo": "device that wants to talk to a cloud service", | ||||
"mfg-name": "Example, Inc.", | ||||
"documentation": "https://frob.example.com/doc/frob2000", | ||||
"model-name": "Frobinator 2000", | ||||
"extensions" : [ | ||||
"sbom" | ||||
], | ||||
"sboms" : { "sbom" : { | ||||
"contact-uri" : "mailto:sbom-requst@example.com", | "contact-uri" : "mailto:sbom-requst@example.com", | |||
} | } | |||
] | } | |||
} | } | |||
} | } | |||
4.4. With ACLS | 5.4. With ACLS | |||
{ | { | |||
"ietf-mud:mud": { | "ietf-mud:mud": { | |||
"mud-version": 1, | "mud-version": 1, | |||
"mud-url": "https://iot-device.example.com/dnsname", | "mud-url": "https://iot-device.example.com/dnsname", | |||
"last-update": "2019-01-15T10:22:47+00:00", | "last-update": "2019-01-15T10:22:47+00:00", | |||
"cache-validity": 48, | "cache-validity": 48, | |||
"is-supported": true, | "is-supported": true, | |||
"systeminfo": "device that wants to talk to a cloud service", | "systeminfo": "device that wants to talk to a cloud service", | |||
"mfg-name": "Example, Inc.", | "mfg-name": "Example, Inc.", | |||
"documentation": "https://frobinator.example.com/doc/frob2000", | "documentation": "https://frob.example.com/doc/frob2000", | |||
"model-name": "Frobinator 2000", | "model-name": "Frobinator 2000", | |||
"extensions" : [ | "extensions" : [ | |||
"sbom" | "sbom" | |||
], | ], | |||
"sboms" : [ | "sboms" : "sbom" : [ | |||
{ | { | |||
"version-info" : "FrobOS Release 1.1", | "version-info" : "FrobOS Release 1.1", | |||
"sbom-url" : "https://frobinator.example.com/sboms/f20001.1", | "sbom-url" : "https://frob.example.com/sboms/f20001.1", | |||
} | }, | |||
], | ], | |||
"from-device-policy": { | ||||
"access-lists": { | ||||
"access-list": [ | ||||
{ | ||||
"name": "mud-96898-v4fr" | ||||
}, | ||||
{ | ||||
"name": "mud-96898-v6fr" | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
"to-device-policy": { | ||||
"access-lists": { | ||||
"access-list": [ | ||||
{ | ||||
"name": "mud-96898-v4to" | ||||
}, | ||||
{ | ||||
"name": "mud-96898-v6to" | ||||
} | ||||
] | ||||
} | ||||
} | ||||
}, | ||||
"ietf-access-control-list:acls": { | ||||
"acl": [ | ||||
{ | ||||
"name": "mud-96898-v4to", | ||||
"type": "ipv4-acl-type", | ||||
"aces": { | ||||
"ace": [ | ||||
{ | ||||
"name": "cl0-todev", | ||||
"matches": { | ||||
"ipv4": { | ||||
"ietf-acldns:src-dnsname": "cloud-service.example.com" | ||||
} | ||||
}, | ||||
"actions": { | ||||
"forwarding": "accept" | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"name": "mud-96898-v4fr", | ||||
"type": "ipv4-acl-type", | ||||
"aces": { | ||||
"ace": [ | ||||
{ | ||||
"name": "cl0-frdev", | ||||
"matches": { | ||||
"ipv4": { | ||||
"ietf-acldns:dst-dnsname": "cloud-service.example.com" | ||||
} | ||||
}, | ||||
"actions": { | ||||
"forwarding": "accept" | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"name": "mud-96898-v6to", | ||||
"type": "ipv6-acl-type", | ||||
"aces": { | ||||
"ace": [ | ||||
{ | ||||
"name": "cl0-todev", | ||||
"matches": { | ||||
"ipv6": { | ||||
"ietf-acldns:src-dnsname": "cloud-service.example.com" | ||||
} | ||||
}, | ||||
"actions": { | ||||
"forwarding": "accept" | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | }, | |||
{ | "from-device-policy": { | |||
"name": "mud-96898-v6fr", | "access-lists": { | |||
"type": "ipv6-acl-type", | "access-list": [ | |||
"aces": { | { | |||
"ace": [ | "name": "mud-96898-v4fr" | |||
{ | }, | |||
"name": "cl0-frdev", | { | |||
"matches": { | "name": "mud-96898-v6fr" | |||
"ipv6": { | } | |||
"ietf-acldns:dst-dnsname": "cloud-service.example.com" | ] | |||
} | } | |||
}, | }, | |||
"actions": { | "to-device-policy": { | |||
"forwarding": "accept" | "access-lists": { | |||
} | "access-list": [ | |||
} | { | |||
] | "name": "mud-96898-v4to" | |||
} | }, | |||
} | { | |||
] | "name": "mud-96898-v6to" | |||
} | } | |||
} | ] | |||
} | ||||
} | ||||
}, | ||||
"ietf-access-control-list:acls": { | ||||
"acl": [ | ||||
{ | ||||
"name": "mud-96898-v4to", | ||||
"type": "ipv4-acl-type", | ||||
"aces": { | ||||
"ace": [ | ||||
{ | ||||
"name": "cl0-todev", | ||||
"matches": { | ||||
"ipv4": { | ||||
"ietf-acldns:src-dnsname": "cloud.example.com" | ||||
} | ||||
}, | ||||
"actions": { | ||||
"forwarding": "accept" | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"name": "mud-96898-v4fr", | ||||
"type": "ipv4-acl-type", | ||||
"aces": { | ||||
"ace": [ | ||||
{ | ||||
"name": "cl0-frdev", | ||||
"matches": { | ||||
"ipv4": { | ||||
"ietf-acldns:dst-dnsname": "cloud.example.com" | ||||
} | ||||
}, | ||||
"actions": { | ||||
"forwarding": "accept" | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"name": "mud-96898-v6to", | ||||
"type": "ipv6-acl-type", | ||||
"aces": { | ||||
"ace": [ | ||||
{ | ||||
"name": "cl0-todev", | ||||
"matches": { | ||||
"ipv6": { | ||||
"ietf-acldns:src-dnsname": "cloud.example.com" | ||||
} | ||||
}, | ||||
"actions": { | ||||
"forwarding": "accept" | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"name": "mud-96898-v6fr", | ||||
"type": "ipv6-acl-type", | ||||
"aces": { | ||||
"ace": [ | ||||
{ | ||||
"name": "cl0-frdev", | ||||
"matches": { | ||||
"ipv6": { | ||||
"ietf-acldns:dst-dnsname": "cloud.example.com" | ||||
} | ||||
}, | ||||
"actions": { | ||||
"forwarding": "accept" | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
At this point, the management system can attempt to retrieve the | At this point, the management system can attempt to retrieve the | |||
SBOM, and determine which format is in use through the content-type | SBOM, and determine which format is in use through the content-type | |||
header on the response to a GET request. | header on the response to a GET request. | |||
5. Security Considerations | 6. Security Considerations | |||
SBOMs provide an inventory of software. If firmware is available to | SBOMs provide an inventory of software. If firmware is available to | |||
an attacker, the attacker may well already be able to derive this | an attacker, the attacker may well already be able to derive this | |||
very same software inventory. Manufacturers MAY restrict access to | very same software inventory. Manufacturers MAY restrict access to | |||
SBOM information using appropriate authorization semantics within | SBOM information using appropriate authorization semantics within | |||
HTTP. In particular, if a system attempts to retrieve an SBOM via | HTTP. In particular, if a system attempts to retrieve an SBOM via | |||
HTTP, if the client is not authorized, the server MUST produce an | HTTP and the client is not authorized, the server MUST produce an | |||
appropriate error, with instructions on how to register a particular | appropriate error, with instructions on how to register a particular | |||
client. One example may be to issue a certificate to the client for | client. One example may be to issue a certificate to the client for | |||
this purpose after a registration process has taken place. Another | this purpose after a registration process has taken place. Another | |||
example would involve the use of OAUTH in combination with a | example would involve the use of OAUTH in combination with a | |||
federations of SBOM servers. | federations of SBOM servers. | |||
Another risk is a skew in the SBOM listing and the actual software | Another risk is a skew in the SBOM listing and the actual software | |||
inventory of a device/container. For example, a manufactuer may | inventory of a device/container. For example, a manufacturer may | |||
update the SBOM on its server, but an individual device has not be | update the SBOM on its server, but an individual device has not be | |||
upgraded yet. This may result in an incorrect policy being applied | upgraded yet. This may result in an incorrect policy being applied | |||
to a device. A unique mapping of a device's firmware version and its | to a device. A unique mapping of a device's firmware version and its | |||
SBOM can minimize this risk. | SBOM can minimize this risk. | |||
To further mitigate attacks against a device, manufacturers SHOULD | To further mitigate attacks against a device, manufacturers SHOULD | |||
recommend access controls through the normal MUD mechanism. | recommend access controls through the normal MUD mechanism. | |||
6. IANA Considerations | 7. IANA Considerations | |||
6.1. MUD Extension | 7.1. MUD Extension | |||
The IANA is requested to add "controller-candidate" to the MUD | The IANA is requested to add "controller-candidate" to the MUD | |||
extensions registry as follows: | extensions registry as follows: | |||
Extension Name: sbom | Extension Name: sbom | |||
Standard reference: This document | Standard reference: This document | |||
6.2. Well-Known Prefix | 7.2. Well-Known Prefix | |||
The following well known URI is requested in accordance with | The following well known URI is requested in accordance with | |||
[RFC8615]: | [RFC8615]: | |||
URI suffix: "sbom" | URI suffix: "sbom" | |||
Change controller: "IETF" | Change controller: "IETF" | |||
Specification document: This memo | Specification document: This memo | |||
Related information: See ISO/IEC 19970-2 and SPDX.org | Related information: See ISO/IEC 19970-2 and SPDX.org | |||
7. References | 8. References | |||
7.1. Normative References | 8.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | ||||
RFC 6991, DOI 10.17487/RFC6991, July 2013, | ||||
<https://www.rfc-editor.org/info/rfc6991>. | ||||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8520] Lear, E., Droms, R., and D. Romascanu, "Manufacturer Usage | [RFC8520] Lear, E., Droms, R., and D. Romascanu, "Manufacturer Usage | |||
Description Specification", RFC 8520, | Description Specification", RFC 8520, | |||
DOI 10.17487/RFC8520, March 2019, | DOI 10.17487/RFC8520, March 2019, | |||
<https://www.rfc-editor.org/info/rfc8520>. | <https://www.rfc-editor.org/info/rfc8520>. | |||
[RFC8615] Nottingham, M., "Well-Known Uniform Resource Identifiers | [RFC8615] Nottingham, M., "Well-Known Uniform Resource Identifiers | |||
(URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019, | (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019, | |||
<https://www.rfc-editor.org/info/rfc8615>. | <https://www.rfc-editor.org/info/rfc8615>. | |||
7.2. Informative References | 8.2. Informative References | |||
[CycloneDX12] | [CycloneDX12] | |||
cylonedx.org, "CycloneDX XML Reference v1.2", May 2020. | cylonedx.org, "CycloneDX XML Reference v1.2", May 2020. | |||
[SPDX] The Linux Foundation, "SPDX Specification 2.1", 2016. | [OpenC2] Lemire, D., Ed., "Specification for Transfer of OpenC2 | |||
Messages via HTTPS Version 1.0", July 2019, | ||||
<https://docs.oasis-open.org/openc2/open-impl-https/v1.0/ | ||||
open-impl-https-v1.0.html>. | ||||
[SWID] ISO/IEC, "Information technology -- IT asset management -- | [SPDX] The Linux Foundation, "SPDX Specification 2.1", 2016. | |||
Part 2: Software identification tag", ISO 19770-2:2015, | ||||
2015. | ||||
Appendix A. Changes from Earlier Versions | Appendix A. Changes from Earlier Versions | |||
Draft -00: | Draft -00: | |||
o Initial revision | * Initial revision | |||
Authors' Addresses | Authors' Addresses | |||
Eliot Lear | Eliot Lear | |||
Cisco Systems | Cisco Systems | |||
Richtistrasse 7 | Richtistrasse 7 | |||
Wallisellen CH-8304 | CH-8304 Wallisellen | |||
Switzerland | Switzerland | |||
Phone: +41 44 878 9200 | Phone: +41 44 878 9200 | |||
Email: lear@cisco.com | Email: lear@cisco.com | |||
Scott Rose | Scott Rose | |||
NIST | NIST | |||
100 Bureau Dr | 100 Bureau Dr | |||
Gaithersburg MD 20899 | Gaithersburg MD, 20899 | |||
USA | United States of America | |||
Phone: +1 301-975-8439 | Phone: +1 301-975-8439 | |||
Email: scott.rose@nist.gov | Email: scott.rose@nist.gov | |||
End of changes. 66 change blocks. | ||||
362 lines changed or deleted | 381 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |