-
Notifications
You must be signed in to change notification settings - Fork 98
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
[Feedback]: Not clear how to represent Appendix Q: Cryptographic Modules #606
Comments
Thanks for the feedback. Constraints, and most importantly clearer documentation and examples, should come in tasks from the upcoming #809 epic. Stay tuned for more details. UPDATE: Apologies, I made a typo slip up, edited from 807 tracker to 809 as intended. |
The analysis and (re)modeling of cryptographic modules will be tracked under this issue.
Note this issue also impacts the "validation" #813 |
The PMO requests cryptographic modules be enumerated in three different categories:
The table in the issue above is the DIT table. Including all three (DIT, DAR and Other) below to be complete: DITDAROther |
The information needs of these three tables is very similar.
For all three there is a subject component with an associated validation component. block-beta
columns 1
A["Component A"]
space
B["Validation A"]
A --- B
With Data in Transit, the FedRAMP PMO is interested in both ends of the communication. From an OSCAL perspective, this results in two subject components, each with an associated validation component. block-beta
columns 3
A["Component A"]
blockArrowId5<["Encrypted<br />Communication"]>(x)
D["Component B"]
space
space
space
A --- B["Validation A"]
space
D --- E["Validation B"]
From a data modeling perspective, this is a very similar relationship to interconnections, where the relationship is depicted as block-beta
columns 5
A["'this-system'<br />component"]
space
C["'interconnection'<br />component"]
space
B["'system'<br />component"]
C --- A
C --- B
As a result, we are considering the following block-beta
columns 5
A["'hardware'<br />'software'<br />or 'service'<br />component"]
space
C["Connection"]
space
D["'hardware'<br />'software'<br />or 'service'<br />component"]
space
space
space
space
space
A --- B["'validation' component"]
space
space
space
D --- E["'validation' component"]
C --- A
C --- D
This introduces a "connection" component type, where use the "asset-type" property to depict the nature of the connection. In this case, "encrypted-communication". We believe this construct, along with allowing other "asset-type" property values, will support infrastructure as code capabilities. |
Data In Transit (DIT) Example: An internal web server communicates with a database server via TLS 1.3. block-beta
columns 6
A["Web Server<br />'software' component"]
space
C["Connection<br />TLS 1.3"]
space
D["Database<br />'software'<br />component"]
space
space
space
space
space
space
space
A --- B["Web Server's TLS 1.3<br />cryptographic module<br />'validation' component"]
space
space
space
D --- E["Database Server's TLS 1.3<br />cryptographic module<br />'validation' component"]
space
C --- A
C --- D
Web Server Component: <component uuid="11111111-2222-4000-8000-009000300200" type="software">
<title>Web Server</title>
<description>
<p>This is a web server that communicates with a database via
an encrypted connection</p>
</description>
<prop name="asset-type" value="web-server"/>
<prop name="baseline-configuration-name" value="Baseline Config. Name"/>
<prop name="allows-authenticated-scan" value="no" />
<prop name="scan-type" value="web" ns="http://fedramp.gov/ns/oscal" />
<link rel="validation" href="#11111111-2222-4000-8000-009001200002" />
<status state="operational"/>
</component>
Web Server's Validation Component <component uuid="11111111-2222-4000-8000-009001200002" type="validation">
<title>Cryptographic Module Name</title>
<description>
<p>Provide a description and any pertinent note regarding the use of this CM.</p>
<p>For example, any supporting notes on FIPS status (e.g. historical) or lack of FIPS
compliance (e.g., Module in Process).</p>
</description>
<prop name="asset-type" class="uses-os" value="cryptographic-module"/>
<prop name="validation-type" value="fips-140-3"/>
<prop name="validation-reference" value="3920"/>
<prop name="vendor-name" value="CM Vendor" ns="http://fedramp.gov/ns/oscal" />
<prop name="function" value="data-in-transit" ns="http://fedramp.gov/ns/oscal">
<remarks>
<p>Usage statement</p>
</remarks>
</prop>
<link rel="proof-of-compliance"
href="https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/3920"/>
<status state="operational"/>
</component> Database Server <component uuid="11111111-2222-4000-8000-009000300100" type="software">
<title>Database Sample</title>
<description>
<p>None</p>
</description>
<prop name="asset-type" value="database"/>
<prop name="baseline-configuration-name" value="Baseline Config. Name"/>
<prop name="allows-authenticated-scan" value="yes"/>
<prop name="scan-type" value="database" ns="http://fedramp.gov/ns/oscal" />
<link rel="used-by" href="#11111111-2222-4000-8000-009000500006" />
<link rel="validation" href="#11111111-2222-4000-8000-009001200001" />
<status state="operational"/>
<protocol name="postgresql">
<port-range start="5432" end="5432" transport="TCP" />
<port-range start="5432" end="5432" transport="UDP" />
</protocol>
</component> Database Server's Validation Component <component uuid="11111111-2222-4000-8000-009001200001" type="validation">
<title>Cryptographic Module Name</title>
<description>
<p>Provide a description and any pertinent note regarding the use of this CM.</p>
<p>For data-at-rest modules, describe type of encryption implemented (e.g., full disk,
file, record-level, etc.)</p>
<p>Lastly, provide any supporting notes on FIPS status (e.g. historical) or lack of FIPS
compliance (e.g., Module in Process).</p>
</description>
<prop name="asset-type" class="embedded" value="cryptographic-module" />
<prop name="validation-type" value="fips-140-2"/>
<prop name="validation-reference" value="3928"/>
<prop name="vendor-name" value="CM Vendor" ns="http://fedramp.gov/ns/oscal" />
<prop name="function" value="data-in-transit" ns="http://fedramp.gov/ns/oscal">
<remarks>
<p>Usage statement</p>
</remarks>
</prop>
<link rel="proof-of-compliance"
href="https://csrc.nist.gov/projects/cryptographic-module-validation-program/Certificate/3928"/>
<status state="operational"/>
</component> Communication Component <component uuid="11111111-2222-4000-8000-009001400001" type="connection">
<title>Encrypted Communication</title>
<description>
<p>An encryptred communication between the web server and
the database server for the purpose of performing SQL queries.</p>
</description>
<prop name="asset-type" value="encrypted" />
<prop name="asset-id" value="ref-01" />
<prop name="implementation-point" value="internal" />
<prop name="connection-security" value="tls-1.3" ns="http://fedramp.gov/ns/oscal" />
<link rel="used-by" href="#11111111-2222-4000-8000-009000300100" />
<link rel="used-by" href="#11111111-2222-4000-8000-009000300200" />
<status state="operational"></status>
</component>
|
@devbytyler thank you for the great questions and participation! This is still a work in progress. The "connection" component is only for data in transit. RefThank you for highlighting that "Ref #" isn't explicitly addressed yet. We have to determine if it is even necessary in OSCAL given how the OSCAL version of the content is used. The challenge is finding a way to apply it consistently across all three table types (DIT, DAR, and Other). With DIT it is most appropriately associated with the "connection" component from a data modeling and normalization perspective; however, with DAR and Other, the "validation" component is the most appropriate location for a reference number. Any thoughts/insights are appreciated here. Cryptographic Module Implementation PointPlease note, we still need to define a property to capture the module implementation check boxes. (Embedded, Third-party, Uses OS, In FIPS Mode, Other). This is best captured in the "validation" component. I'd prefer to simply use core OSCAL's "implementation-point" property for this; however, the only allowed values for that property are "internal" and "external". We could create a FedRAMP Extension (FRX) by the same name, but have avoided doing that as a general rule to avoid confusion. (and because some tools are not good about checking whether a property is in the core OSCAL namespace or another namespace). As a result, I am considering a FedRAMP Extension/prop name recommendation of "module-implementation" or "cm-implementation-point". Connection vs. ServiceI am not sure we view "service" components the same way. In my view the database is represented using either a "software" component or a "service" component.
Either way, the database component include the The "communication" component is the only representation of the interaction between the web server and the database. block-beta
columns 6
A["Web Server<br />'software' component"]
space
C["TLS 1.3 Connection<br />'connection' component"]
space
D["Database Service<br />'service' component"]
space
space
space
space
space
space
space
A --- B["Web Server's TLS 1.3<br />cryptographic module<br />'validation' component"]
space
space
space
D --- E["Database Service's TLS 1.3<br />cryptographic module<br />'validation' component"]
space
C --- A
C --- D
I want to better understand your thinking on this point. |
@devbytyler I just re-read your comment from Tuesday and realized that I missed an important part of what you were asking about Ref #. We will factor in the best way to link the Ports Protocols and Services table entries to Appendix Q in OSCAL. I still maintain that the Ref # may not be necessary in OSCAL, even when considering that use case, but more analysis is required before a definitive statement can be made. |
As a general comment to this issue, this analysis work attempts to keep the following guiding principles in mind:
|
Cryptographic modules have been underdefined in FedRAMP's representation of OSCAL. This has been causing challenges when responding to Appendix Q. For example, if a web server is using a FIPS validated OpenSSL cryptographic module within the underlying operating system, we have incorrectly attempted to model that as a direct relationship between the web server and the "validation" component. Historic, but Wrongblock-beta
columns 1
A["Component A"]
space
B["Validation A"]
A --- B
We should actually be attempting to model this: I would like to propose the above situation is modeled like this: This is interpreted as follows:
NOTE: Still working on the best way to clarify which crypto module is used by a component for a particular communication, when more than one communication scenario exists for the component. |
The following constraints are required and are not likely to change as a result of follow-up re-modeling efforts: Per the above comment, cryptographic modules must be defined as their own component and linked to the components that use them. Cryptographic ModulesA cryptographic module is represented as a "software" component with an "asset-type" property value of "cryptographic-module".
All cryptographic modules must have the following, which are required of all software components and should already be addressed under other issues:
FIPS Validation ComponentsWhile other forms of validation may be documented in the SSP using "validation" components, FedRAMP is only interested in FIPS validation components. All others may be ignored.
All FIPS validation components must have:
Automated CorrelationUnfortunately, I can find no information that the CMVP database offers an API nor an up-to-date XML or JSON file for machine-readable reference. I sent an email to the NIST CMVP program managers this evening asking if any such capability exists or is in-plan. If/when such a capability exists, we will want to validate the certificate #'s via the API and possibly even cross-check some of the information required above against the CMVP data, such as software name, vendor name, and version number. |
This is a ...
request - need something additional provided
This relates to ...
What is your feedback?
The guide for OSCAL-based FedRAMP SSPs is unclear how to represent several concepts of Appendix Q, namely:
For the last two item mentioned, the template language implies that "usage" and "notes" is commentary on the row itself, meaning that the "row" would require some type of data structure to capture the details.
Currently, the only direction given is to link validation and product components together, but that leaves the rest of the data unrepresented.
Internally, we've discussed representing the row as a "data-flow" component to capture the details, but we try to avoid going wild west as much as possible and would appreciate some official direction.
Talked this over with @david-waltermire and @Rene2mt a few weeks back and we agreed this required further discussion.
Where, exactly?
Pages 34 and 35 of the Guide to OSCAL-based FedRAMP System Security Plans (SSP)
Other information
No response
The text was updated successfully, but these errors were encountered: