Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

specification first cut #9

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

specification first cut #9

wants to merge 3 commits into from

Conversation

JustinCappos
Copy link
Collaborator

This isn't quite ready, but has a fair number of ideas in it which I'd like review on. Don't merge this PR until we iterate a bit...

honest. When malicious parties interfere in the process, SBOMit provides
a mix of traceability (knowing which party was malicious) and prevention
(blocking malicious software from being trusted), depending on how the
in-toto steps are configured..
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this also depends on what the attacker has compromised. A compromised key/malicious user could be traced, while an unauthorized user could be prevented, etc

specification.md Outdated Show resolved Hide resolved

#### SIT

A SIT may be verified in two ways.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

who verifies an SIT vs an SBOMit document? Should the SIT verifier get some assurance that someone checked the SBOMit document?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if this is possible to do. A SIT is an SBOM (CycloneDX, SPDX, etc.) and I don't think we can add custom verification (as I understand it).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice if we could at least add an attestation that someone verified the full SBOMit document (maybe as a wrapper around the SBOM verification). Otherwise the end user is only getting a signed SBOM

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine but if they have to add functionality to their SBOM verification, then it seems like they could just do the SBOMit document verification. Or do you think that people will want to just check the attestation and then say it is okay?

I see checking an attestation as roughly equivalent to signing the SBOM with the attestation key.

First, the SBOMit document may be downloaded and then verified. This provides
strong security guarantees, but is a fairly heavyweight operation.

Second, the SIT may have its signature checked, much like any signed SBOM.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is the key for this distributed?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm imagining the same as you would usually for an SBOM. I'm actually not completely clear how this process works in every case today. I imagine it is like in-toto layout keys, where they are just assumed to exist on the client, but I would love to learn the "correct" way, if I'm wrong.

## Introduction

### Motivation
A major problem with the state of an SBOM today is that the documents are
often inaccurate. This is largely because the documents are derived by looking
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, but "inaccurate" in what sense? When practitioners like @hosseinsia say that an SBOM is "inaccurate," they mean that the list of dependencies may be incomplete or even inaccurate. The meaning written here is quite different, and not yet what people who need SBOMs worry about in practice. I think we need a stronger motivation with a better story.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As @trishankatdatadog mentioned, at the moment inaccurate means that different tooling might produce SBOM with different list of dependencies, some of which do not really exist or are not used in a software, and some others might not be detected due to them being added dynamically later or through chains of dependencies.

However, one thing that is lacking in almost all of SBOM reports (and I believe in-toto can help) is a mechanism to verify their claims. At the moment, you have to reproduce SBOM using the tooling or other's tooling and compare two SBOM files (semantically, as the formats and order of them might be different). In my ideal world, if SBOMit could provide a proof/reasoning why a SBOM tool believes that this dependency should be included would be really useful. Basically that is my interpretation of 'verifiable SBOM'

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, would you like to take a cut? I don't have enough context on how people are using SBOMs in different steps.

### Motivation
A major problem with the state of an SBOM today is that the documents are
often inaccurate. This is largely because the documents are derived by looking
at the resulting software and trying to understand what happened in the past.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are different places that SBOM is generated. One could be sourcecode-based SBOM. In that case, this statement does not really fit. I think the only place this makes sense is when SBOM is generated after build (like the way Software Composition Analysis (SCA tooling) works). There are also other tooling that can extract SBOMs at runtime, and that have the capability of extracting list of dynamic dependencies.

at the resulting software and trying to understand what happened in the past.

This specification proposes a means to generate metadata for an SBOM while the
software is being created. Furthermore, the means by which this information

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is called build-time SBOM. Do you want to limit SBOMit to that?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, we want to cover all cases, as in-toto does.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. Then the phrase SBOM while the software is being created might need to be revised to prevent others implying build-time SBOM.

hold, so that a party cannot appear to be innocent given a re-execution of a
supply chain with all honest participants.

* prevention -- this is when an attack is blocked from having any impact. This

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this include attacks such as dependency confusion attacks?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I talk about this below with the OSS risks...

in-toto steps are configured..


### Definitions
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not crazy about these names. They are not immediately self-descriptive, and I think we can do better.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm open to changing them, especially SIT. I just threw that together on the flight.


### Definitions

SIT -- An SBOM which is derived from a SBOMit document. It can
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting: by "derived," do you mean that an SBOMIT document is something like a high-level intermediate representation from SBOMs that can then be used to generate low-level "machine code," so to speak?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you can think of it this way. It is like the complete "source" document which contains things like in-toto metadata which will not be in the SBOM (SIT).

One key goal of our design is to provide as much security as possible in all
cases. Security should degrade gracefully when the attacker gains new
capabilities. Hence, we will consider attacker models where the attacker is
exceedingly powerful and try to restrict the damage they can do even in those
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"exceedingly powerful" is still a little bit wishy-washy. Can they, for example, compromise all of the keys used to sign root layouts?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. I list that case below.

can show this was the cause, but users will trust a new, maliciously
generated layout which replaces signing keys.

From (Endor Lab's top 10 OSS risks)[https://www.endorlabs.com/blog/introducing-the-top-10-open-source-software-oss-risks],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this should come much earlier. I really don't understand what this threat model is trying to say. What sort of attacker goals are we most worried about? Those tampering with just the list of dependencies, or does the tampering extend to the software artefacts themselves?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This covers both cases. I don't want to describe someone else's work here, but wanted to give some pointers to an external list to show we're handling a broad set of cases.

specification.md Outdated Show resolved Hide resolved
@trishankatdatadog trishankatdatadog dismissed their stale review April 24, 2023 17:08

Accidentally chose "Approve" instead of "Comment"

JustinCappos and others added 2 commits April 24, 2023 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants