Replies: 3 comments 1 reply
-
This is a super great question, but a lot to unpack! I will have to think about some of these questions. |
Beta Was this translation helpful? Give feedback.
-
I was also thinking about this. Wouldn't "option 3" be to model separate components with their own control implementation? This would be very granular, but it would look like this: "capabilities": [
{
"uuid": "c1050857-93d9-4654-b363-296c5523dd01",
"name": "Software Application",
"description": "a description",
"incorporates-components": [
{
"component-uuid": "8eaa855e-d749-441f-894f-9f96ac91487c",
"description": "file1.txt"
},
{
"component-uuid": "28bea7a9-386a-45ec-bc4b-aabce3373c38",
"description": "file2.txt"
}
]
}
],
"components": [
{ "uuid": "8eaa855e-d749-441f-894f-9f96ac91487c",
"type": "software",
"title": "file1.txt",
"description": "file1.txt",
"control-implementations": [
{
"uuid": "cfcdd674-8595-4f98-a9d1-3ac70825c49f",
"source": "../../../nist.gov/SP800-53/rev5/json/NIST_SP-800-53_rev5_catalog.json",
"description": "partial implementation of the SP 800-53 rev5 catalog",
"implemented-requirements": [
{
"uuid": "d1016df0-9b5c-4839-86cd-f9c1d113077b",
"description": "the application uses the internal system clock to generate time stamps",
"control-id": "au-8",
"statements": [
{
"statement-id": "au-8_smt.a",
"uuid": "559d97e1-69d9-4646-a799-53bb0b4946cd",
"description": "the application uses the internal system clock to generate time stamps",
"links": [
{
"href": "src/examples/file1.txt#L7",
"rel": "reference"
}
]
}
]
}
]
}
]
},
{ "uuid": "28bea7a9-386a-45ec-bc4b-aabce3373c38",
"type": "software",
"title": "file2.txt",
"description": "file2.txt",
"control-implementations": [
{
"uuid": "eb6ae2d9-ced8-4b84-b303-64c54980a31b",
"source": "../../../nist.gov/SP800-53/rev5/json/NIST_SP-800-53_rev5_catalog.json",
"description": "partial implementation of the SP 800-53 rev5 catalog",
"implemented-requirements": [
{
"uuid": "e9eb80ed-2717-4853-9943-da670bf63756",
"description": "the application uses the internal system clock to generate time stamps",
"control-id": "au-8",
"statements": [
{
"statement-id": "au-8_smt.a",
"uuid": "8daef7cb-53ac-425f-b0f4-c80f2d82f01c",
"description": "the application uses the internal system clock to generate time stamps",
"links": [
{
"href": "src/examples/file2.txt#L20",
"rel": "reference"
}
]
}
]
}
]
}
]
}
]
|
Beta Was this translation helpful? Give feedback.
-
@sunstonesecure-robert and @Agh42 -- The main difference between a component definition (CDef) and SSP is who governs the data and the authoritative level. |
Beta Was this translation helpful? Give feedback.
-
All examples I've seen so far show security controls represented in the OSCAL
component-definition
with a single reference underimplemented-requirements
to represent a single description or idea of how that control is satisfied by whatever resource thecomponent-definition
itself represents. But what if there are multiple implementations of settings, source code, or policy that you want to link to a control?My team is building a
component definition
to represent an application we build form source code, and want to directly reference parts of the codebase for some applicable security controls under thecomponent-definition/components/control-implementations/implemented-requirements/
section of thecomponent-definition
.We're working on some custom tools to scan a project's source code for code comments that contain "control reference" annotations that would tag those sections for a given security control, and then be automatically built into a
component-definition
model document that our CI/CD pipeline automatically generates when the application gets built. Those "control references" would look something like:There are instances where multiple different parts of the code could apply to a singular security control or control statement -- but with different implementation details for a description, and I'm not sure exactly how that should be represented in the
component-definition
model.Option 1 - multiple statements but with unique UUIDs
My first idea was to list multiples of the same statement (
au-8_smt.a
) under its parent control (au-8
)implemented-requirement
object, but see that the Component Definition JSON Format Reference mentions a Constraints: IS UNIQUE forstatement
. Does this mean that there can be only ONE of each statement in general, or could I have multiples listed with each having its own unique UUID like so?:This shows multiples of the same
au-8_smt.a
statement, but with each having their ownuuid
, uniquedescription
describing different implementation details, and different URIhref
to source code files and lines. This level of detail and ability to directly map individual parts of the code to a control are very desirable.Option 2 - single statement but with multiple href links
The second idea was to represent the multiples by having a single statement object, but with multiple
links/href
URIs to each source code location:The downside with this option is losing the individual
description
fields that each of the references previously had.Option 2 seems like the cleanest solution, but the loss of detail from not having unique descriptions for each referenced implementation seems like it might introduce ambiguity later on, especially when trying to diligently track code and code changes to exact controls.
Are either of these two options better than the other, or is there another solution for representing this use case in OSCAL's
component-definition
that I might be missing?Beta Was this translation helpful? Give feedback.
All reactions