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

Profile parameter interpretation #106

Closed
anweiss opened this issue Feb 7, 2018 · 8 comments
Closed

Profile parameter interpretation #106

anweiss opened this issue Feb 7, 2018 · 8 comments
Assignees
Labels
Discussion Needed This issues needs to be reviewed by the OSCAL development team. Scope: Modeling Issues targeted at development of OSCAL formats

Comments

@anweiss
Copy link
Contributor

anweiss commented Feb 7, 2018

Currently, "Profile" parameter values are completely ambiguous. The schema also only allows simple text values (value = element value { text }). As such, it is left up to "Implementation" to interpret, parse and implement these parameter values. I'm curious if there's a way we can mitigate the level of effort that a system "Implementer" would have to put in to interpret these values by also allowing numeric types. This would simplify parsing of param values that can be easily represented numerically.

@wendellpiez, thoughts?

@anweiss
Copy link
Contributor Author

anweiss commented Feb 8, 2018

Another scenario that comes to mind is when a "Profile" parameter augmentation references another "Profile" parameter as a comparison. For example, in the FedRAMP Moderate "profile", the parameter for subcontrol ID "ac.2.5" references control ID "ac.12" in that the value for "ac.2.5" must be a shorter timeframe than the parameter for "ac.12". In this case, it would be great if we could allow for a numeric condition here using some syntax that we define ... something like, # < ac.12 ... where the # represents the current control param value must be less-than the param value of ac.12.

@wendellpiez
Copy link
Contributor

We have talked about wiring data typing constraints into the declarations model; presumably that could serve parameter values as well as property values. In the XML stack, we get some data types for free, such as strings, integers, URIs and (ISO-formatted) dates. We have also talked about constraints such as "the value must be an integer between 0 and 10 inclusive". So yes, there are definitely ways we could mitigate these issues for implementers - assuming that validation of lexical forms against these types can be performed before processing (and that there is handling defined for invalid data). However, we also know that in the real world, these guys can be peculiar and complicated, and while XSD has a "duration" data type, it doesn't have (for example) frequency or range of frequencies, such as "at least every six months". (And then there's the notation question.)

The second note describes co-occurrence constraints on the values of parameters assigned in the same profile (albeit conceivably in different 'import hierarchies' of the same profile). This is interesting. Making these work implies data typing (so we can deterministically compare values, for example), but also more.

The cheap/easy way to do either of these in XML is with a layer on top, for example a Schematron or XSLT that would perform the test and flag an error. However, that is effectively an implementation-level solution, which is what @anweiss is saying it would be nice not to need. I concur, if there's a 20% solution for 80% of the problem here, it might belong lower in the OSCAL stack. (Not that I'm against layering.) It might well be to support simple numbers, but not (yet) durations or frequencies.

FWIW, at present OSCAL declarations apply to (and work well with) OSCAL catalogs and with catalog-like artifacts (such as my "worksheets"), but not -- yet -- profiles. We will have to think about that too.

@anweiss
Copy link
Contributor Author

anweiss commented Feb 8, 2018

Awesome! Yea, I'm less concerned about the type constraints we can implement and that are available in XSD/JSON schema and more interested in co-occurrence constraints on the parameter values where applicable.

david-waltermire added a commit that referenced this issue Apr 3, 2018
# The first commit's message is:

# This is a combination of 54 commits.
# The first commit's message is:

# This is a combination of 4 commits.
# The first commit's message is:

# This is a combination of 2 commits.
# The first commit's message is:

# This is a combination of 2 commits.
# The first commit's message is:

# This is a combination of 6 commits.
# The first commit's message is:

# This is a combination of 3 commits.
# The first commit's message is:

# This is a combination of 111 commits.
# The first commit's message is:

Initial commit of docs branch.

# This is the commit message #2:

Create CONTRIBUTING.md
# This is the commit message #3:

Create ROADMAP.md
# This is the commit message #4:

Update README.md
# This is the commit message #5:

Create README.md
# This is the commit message #6:

Update README.md
# This is the commit message #7:

Update README.md
# This is the commit message #8:

Create OSCAL-PRODUCERS.md
# This is the commit message #9:

Create OSCAL-CONSUMERS.md
# This is the commit message #10:

Update and rename OSCAL-CONSUMERS.md to USERS.md
# This is the commit message #11:

Update and rename OSCAL-PRODUCERS.md to IMPLEMENTERS.md
# This is the commit message #12:

Rename CONTRIBUTING.md to CONTRIBUTORS.md
# This is the commit message #13:

Update README.md
# This is the commit message #14:

Update README.md
# This is the commit message #15:

Update USERS.md
# This is the commit message #16:

Update README.md
# This is the commit message #17:

Update IMPLEMENTERS.md
# This is the commit message #18:

Update README.md
# This is the commit message #19:

Update ROADMAP.md
# This is the commit message #20:

Update USERS.md
# This is the commit message #21:

Update CONTRIBUTORS.md
# This is the commit message #22:

Update README.md
# This is the commit message #23:

Update README.md
# This is the commit message #24:

Update IMPLEMENTERS.md
# This is the commit message #25:

Update IMPLEMENTERS.md
# This is the commit message #26:

Rename CONTRIBUTORS.md to CONTRIBUTING.md
# This is the commit message #27:

Create control.md
# This is the commit message #28:

Update control.md
# This is the commit message #29:

Update control.md
# This is the commit message #30:

Update control.md
# This is the commit message #31:

Update control.md
# This is the commit message #32:

Add files via upload
# This is the commit message #33:

Update control.md
# This is the commit message #34:

Create temp.md
# This is the commit message #35:

Delete NIST-SP-800-53-Rev4-AC1.png
# This is the commit message #36:

Add files via upload
# This is the commit message #37:

Delete temp.md
# This is the commit message #38:

Add files via upload
# This is the commit message #39:

Update control.md
# This is the commit message #40:

Add files via upload
# This is the commit message #41:

Add files via upload
# This is the commit message #42:

Update control.md
# This is the commit message #43:

Update CONTRIBUTING.md
# This is the commit message #44:

Update CONTRIBUTING.md
# This is the commit message #45:

Update USERS.md
# This is the commit message #46:

Update CONTRIBUTING.md
# This is the commit message #47:

Delete CONTRIBUTING.md
# This is the commit message #48:

Delete USERS.md
# This is the commit message #49:

Add files via upload
# This is the commit message #50:

Delete CSA-CCM-IAM02.png
# This is the commit message #51:

Update control.md
# This is the commit message #52:

Update control.md
# This is the commit message #53:

Update control.md
# This is the commit message #54:

Update control.md
# This is the commit message #55:

Update control.md
# This is the commit message #56:

Update control.md
# This is the commit message #57:

Update control.md
# This is the commit message #58:

Update control.md
# This is the commit message #59:

Update control.md
# This is the commit message #60:

Update control.md
# This is the commit message #61:

Delete NIST-SP-800-53-AC1-in-OSCAL-XML.png
# This is the commit message #62:

Update README.md
# This is the commit message #63:

Update control.md
# This is the commit message #64:

Update control.md
# This is the commit message #65:

Add files via upload
# This is the commit message #66:

Delete ISO-27001-Control-A9.png
# This is the commit message #67:

Update control.md
# This is the commit message #68:

Add files via upload
# This is the commit message #69:

Add files via upload
# This is the commit message #70:

Delete ISO-27002-Control-9.1.1-part1.png
# This is the commit message #71:

Delete ISO-27002-Control-9.1.1-part2.png
# This is the commit message #72:

Update control.md
# This is the commit message #73:

Update control.md
# This is the commit message #74:

Update control.md
# This is the commit message #75:

Update control.md
# This is the commit message #76:

Update control.md
# This is the commit message #77:

Update README.md
# This is the commit message #78:

Update IMPLEMENTERS.md
# This is the commit message #79:

Add files via upload
# This is the commit message #80:

Delete oscal-layers.png
# This is the commit message #81:

Add files via upload
# This is the commit message #82:

Delete oscal-layers.png
# This is the commit message #83:

Add files via upload
# This is the commit message #84:

Update IMPLEMENTERS.md
# This is the commit message #85:

Update control.md
# This is the commit message #86:

Update IMPLEMENTERS.md
# This is the commit message #87:

Update control.md
# This is the commit message #88:

Rename IMPLEMENTERS.md to docs/prose/IMPLEMENTERS.md
# This is the commit message #89:

Rename IMPLEMENTERS.md to implementers.md
# This is the commit message #90:

Rearranged and outlined catalog documentation based on the conversation with karen and Wendell.

# This is the commit message #91:

Create catalog-xml.md
# This is the commit message #92:

Rename control.md to catalog.md
# This is the commit message #93:

Update catalog.md
# This is the commit message #94:

Update catalog.md
# This is the commit message #95:

Update catalog.md
# This is the commit message #96:

Update catalog-xml.md
# This is the commit message #97:

Update catalog-xml.md
# This is the commit message #98:

Update catalog-xml.md
# This is the commit message #99:

Update catalog-xml.md
# This is the commit message #100:

Update catalog-xml.md
# This is the commit message #101:

Update catalog-xml.md
# This is the commit message #102:

Update catalog-xml.md
# This is the commit message #103:

Update catalog-xml.md
# This is the commit message #104:

Update catalog-xml.md
# This is the commit message #105:

Update catalog-xml.md
# This is the commit message #106:

Docset migration to Slate

# This is the commit message #107:

Removing unused file.

# This is the commit message #108:

Update README.md

Corrected a typo
# This is the commit message #109:

Add files via upload

Graphical representation of OSCAL schemas aligned with Risk Management Framework steps and tasks.
# This is the commit message #110:

Create CONTRIBUTING.md
# This is the commit message #111:

Create ROADMAP.md
# This is the commit message #2:

Create README.md
# This is the commit message #3:

Update README.md
# This is the commit message #2:

Create OSCAL-PRODUCERS.md
# This is the commit message #3:

Create OSCAL-CONSUMERS.md
# This is the commit message #4:

Update and rename OSCAL-CONSUMERS.md to USERS.md
# This is the commit message #5:

Update and rename OSCAL-PRODUCERS.md to IMPLEMENTERS.md
# This is the commit message #6:

Rename CONTRIBUTING.md to CONTRIBUTORS.md
# This is the commit message #2:

Update USERS.md
# This is the commit message #2:

Update IMPLEMENTERS.md
# This is the commit message #2:

Update ROADMAP.md
# This is the commit message #3:

Update USERS.md
# This is the commit message #4:

Update CONTRIBUTORS.md
# This is the commit message #2:

Update IMPLEMENTERS.md
# This is the commit message #3:

Update IMPLEMENTERS.md
# This is the commit message #4:

Rename CONTRIBUTORS.md to CONTRIBUTING.md
# This is the commit message #5:

Create control.md
# This is the commit message #6:

Update control.md
# This is the commit message #7:

Update control.md
# This is the commit message #8:

Update control.md
# This is the commit message #9:

Update control.md
# This is the commit message #10:

Add files via upload
# This is the commit message #11:

Update control.md
# This is the commit message #12:

Create temp.md
# This is the commit message #13:

Delete NIST-SP-800-53-Rev4-AC1.png
# This is the commit message #14:

Add files via upload
# This is the commit message #15:

Delete temp.md
# This is the commit message #16:

Add files via upload
# This is the commit message #17:

Update control.md
# This is the commit message #18:

Add files via upload
# This is the commit message #19:

Add files via upload
# This is the commit message #20:

Update control.md
# This is the commit message #21:

Update CONTRIBUTING.md
# This is the commit message #22:

Update CONTRIBUTING.md
# This is the commit message #23:

Update USERS.md
# This is the commit message #24:

Update CONTRIBUTING.md
# This is the commit message #25:

Delete CONTRIBUTING.md
# This is the commit message #26:

Delete USERS.md
# This is the commit message #27:

Add files via upload
# This is the commit message #28:

Delete CSA-CCM-IAM02.png
# This is the commit message #29:

Update control.md
# This is the commit message #30:

Update control.md
# This is the commit message #31:

Update control.md
# This is the commit message #32:

Update control.md
# This is the commit message #33:

Update control.md
# This is the commit message #34:

Update control.md
# This is the commit message #35:

Update control.md
# This is the commit message #36:

Update control.md
# This is the commit message #37:

Update control.md
# This is the commit message #38:

Update control.md
# This is the commit message #39:

Delete NIST-SP-800-53-AC1-in-OSCAL-XML.png
# This is the commit message #40:

Update README.md
# This is the commit message #41:

Update control.md
# This is the commit message #42:

Update control.md
# This is the commit message #43:

Add files via upload
# This is the commit message #44:

Delete ISO-27001-Control-A9.png
# This is the commit message #45:

Update control.md
# This is the commit message #46:

Add files via upload
# This is the commit message #47:

Add files via upload
# This is the commit message #48:

Delete ISO-27002-Control-9.1.1-part1.png
# This is the commit message #49:

Delete ISO-27002-Control-9.1.1-part2.png
# This is the commit message #50:

Update control.md
# This is the commit message #51:

Update control.md
# This is the commit message #52:

Update control.md
# This is the commit message #53:

Update control.md
# This is the commit message #54:

Update control.md
# This is the commit message #2:

Update IMPLEMENTERS.md
# This is the commit message #3:

Add files via upload
# This is the commit message #4:

Delete oscal-layers.png
# This is the commit message #5:

Add files via upload
# This is the commit message #6:

Delete oscal-layers.png
# This is the commit message #7:

Add files via upload
# This is the commit message #8:

Update IMPLEMENTERS.md
# This is the commit message #9:

Update control.md
# This is the commit message #10:

Update IMPLEMENTERS.md
# This is the commit message #11:

Update control.md
# This is the commit message #12:

Rename IMPLEMENTERS.md to docs/prose/IMPLEMENTERS.md
# This is the commit message #13:

Rename IMPLEMENTERS.md to implementers.md
# This is the commit message #14:

Rearranged and outlined catalog documentation based on the conversation with karen and Wendell.

# This is the commit message #15:

Create catalog-xml.md
# This is the commit message #16:

Rename control.md to catalog.md
# This is the commit message #17:

Update catalog.md
# This is the commit message #18:

Update catalog.md
# This is the commit message #19:

Update catalog.md
# This is the commit message #20:

Update catalog-xml.md
# This is the commit message #21:

Update catalog-xml.md
# This is the commit message #22:

Update catalog-xml.md
# This is the commit message #23:

Update catalog-xml.md
# This is the commit message #24:

Update catalog-xml.md
# This is the commit message #25:

Update catalog-xml.md
# This is the commit message #26:

Update catalog-xml.md
# This is the commit message #27:

Update catalog-xml.md
# This is the commit message #28:

Update catalog-xml.md
# This is the commit message #29:

Fixed typos, updated repo documentation, and migrated documentation for use in Slate.

Corrected a typo (+4 squashed commit)

Squashed commit:

[6ada57f] Removing unused file.

[503ad71] Docset migration to Slate

[351257e] Update catalog-xml.md

[aae1e8b] Add files via upload

Graphical representation of OSCAL schemas aligned with Risk Management Framework steps and tasks.
@david-waltermire
Copy link
Contributor

We will address this in the Implementation layer work (#92). Changes to the Catalog and Profile models will be needed at that time.,

@david-waltermire david-waltermire added this to the OSCAL 1.0 M2 milestone Apr 6, 2018
@david-waltermire david-waltermire added Discussion Needed This issues needs to be reviewed by the OSCAL development team. and removed help wanted labels Apr 6, 2018
@david-waltermire david-waltermire modified the milestones: OSCAL 1.0 M2, OSCAL 1.0 M1 Apr 6, 2018
@gregelin
Copy link

I very much agree with @anweiss statements. The current vagueness of parameters in 800-53 are obstacles to improved workflows. I also agree with @wendellpiez noteworthiness of "co-occurrence constraints on the values of parameters assigned in the same profile."

The 20% solution that provides 80% of the value could be an improved naming schema for the parameters. I've noted a need for unique naming of parameters as an additional acceptance criteria in #66

Since 800-53 catalog does not provide a machine-usable parameter naming schema, OSCAL needs a format for a "parameter key definition and translation index" which provides a common format for a rossetta stone for translating the the catalog's parameters up to a common structure and values back down again.

We can't control the quality of catalog's parameter structure. But we can always create a table that equates some path description to a parameter (e.g., AU-3>b>Selection) to an agreed upon key (e.g., AU-3.b.Selection).

If the protocol/structure for indexing the keys is part of the implementation standard, the following benefits follow:

  • profiles can contain parameter values
  • vendors and enterprises can programmatically maintain parameters across different catalogs and profiles from a single source
  • recommended implementers need to only 1 interpreter for consuming parameters
  • parameter type definition and rules like the ones @anweiss and @wendellpiez discuss can be maintained at both the profile and implementation layer without having to change the catalog.

@wendellpiez
Copy link
Contributor

wendellpiez commented Apr 11, 2018

NB: currently, the models do not provide for parameters to have "names" (unique or otherwise) although we have elements for their "description", "label" and "value" (for setting a value or a default value for a calling profile), none of which must be unique to that parameter. To address parameters, we use their @id attributes, which must be unique (within document scope) to be valid to ID constraints declared in the schema. That is, they can be trusted to be unique and useful for addressing (since any element with ID 'x' will be the only such element), but not guaranteed to be "meaningful" in any way: in the current design these IDs could be opaque UUIDs, as long as they don't repeat in the document.

The same thing is incidentally true of other ID-carrying elements including controls and subcontrols -- or not incidentally, since those cases also show there is another approach, inasmuch as there, we have properties and the declarations model available to permit controsl (and subcontrols and parts) to be assigned "name" properties which indeed (via a validation against appropriate declarations) may have many or all of the characteristics described here for parameter names -- and which are orthogonal to the (guaranteed unique but potentially opaque) ID value (the control/@id in the XML). So we see

<control id="ac.1" ...>
  <prop class="name">AC-1</prop>

etc. This semantic overloading is useful since it gives us multiple ways to address these elements (by ID, by name property, by brute-force XPath etc) as well as the ability to cross-check them against each other. Yet at the same time, the responsibility for designing and enforcing such a constraint (in its particulars -- here, for example, we expect to see a clean mapping between the values) goes to the catalog designers/publishers, not the standard. While OSCAL provides a mechanism to support making (and enforcing) such declarations, in other words, it doesn't mandate any particular declarations for this purpose.

Among other things this makes me wonder whether the requirements stipulated here must really be addressed in the design of the SP800-53 catalogs (and presumably of other catalogs to come), and not of OSCAL -- irrespective of whether/how it applies to either/both @id values (whether/how normalized and schematic, i.e. not only unique but meaningful), and arbitrary properties.

At the same time, it would also be relatively easy/painless to add prop to the model for param, so parameters could have their own properties. Presumably we then also add @class to param to be able to expose these properties to validation (of cardinality, values assignment etc.) against declarations (but OSCAL declarations not schema or other hard-wired declarations). This would provide another easy approach both to exposing (addressing) the parameters themselves, and to constraining them (or confirming such constraints are met). param already permits the link element, since extant usage suggests show us that whenever a parameter is set, a link or two is sure to come with it.

Note that we might wish to permit the above while also constraining @id values (or anything else) in the way @gregelin describes. But I still think it's a problem that might belong to the particular catalog and its user community, not to the OSCAL format.

@anweiss
Copy link
Contributor Author

anweiss commented Apr 18, 2018

On the JSON side of things, something that might help and that we can already take advantage of today with JSON schema draft-07 is that of conditional schema evaluation provided by the if, then and else keywords. Here's an example (courtesy of https://stackoverflow.com/a/38781027):

{
  "type": "object",
  "properties": {
    "foo": { "type": "string" },
    "bar": { "type": "string" }
  },
  "if": {
    "properties": {
      "foo": { "enum": ["bar"] }
    }
  },
  "then": { "required": ["bar"] }
}

In the example above, if the value of thefoo property equals bar, then the bar property is required.

Granted, this only applies to conditional requirements of properties and not conditions expressed as relationships among properties. Support for the latter won't be made available until draft-09 of JSON schema which is due in November.

@david-waltermire
Copy link
Contributor

These requirements should be considered as part of #474. Closing this issue in favor of the new issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Discussion Needed This issues needs to be reviewed by the OSCAL development team. Scope: Modeling Issues targeted at development of OSCAL formats
Projects
None yet
Development

No branches or pull requests

6 participants