From 62c8b73023165ed02702dee6ffc78f506f0db08b Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 17:11:44 -0400 Subject: [PATCH 01/13] gitignore updates --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 3d9c257..9be03bd 100644 --- a/.gitignore +++ b/.gitignore @@ -157,9 +157,6 @@ _testmain.go # Output of the go coverage tool, specifically when used with LiteIDE *.out -# external packages folder -vendor/*/ - nlp/DTR/ nlp/CSEngine/ nlp/UCP/ From 294834884f3f31ffd6d0dd3582c1ad30309b7056 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 17:12:50 -0400 Subject: [PATCH 02/13] base docs --- docs/Makefile | 20 + docs/README.md | 1 + docs/compliance/cis.md | 9 + docs/compliance/fedramp.md | 11 + docs/compliance/index.md | 13 + docs/compliance/nist/800_53.md | 9 + docs/compliance/reference/800-53/AC.md | 2131 ++++++++++++++++++++++++ docs/compliance/reference/800-53/AT.md | 146 ++ docs/compliance/reference/800-53/AU.md | 1247 ++++++++++++++ docs/compliance/reference/800-53/CA.md | 334 ++++ docs/compliance/reference/800-53/CM.md | 1014 +++++++++++ docs/compliance/reference/800-53/CP.md | 710 ++++++++ docs/compliance/reference/800-53/IA.md | 1008 +++++++++++ docs/compliance/reference/800-53/IR.md | 459 +++++ docs/compliance/reference/800-53/MA.md | 384 +++++ docs/compliance/reference/800-53/MP.md | 392 +++++ docs/compliance/reference/800-53/PE.md | 680 ++++++++ docs/compliance/reference/800-53/PL.md | 196 +++ docs/compliance/reference/800-53/PM.md | 238 +++ docs/compliance/reference/800-53/PS.md | 249 +++ docs/compliance/reference/800-53/RA.md | 292 ++++ docs/compliance/reference/800-53/SA.md | 1292 ++++++++++++++ docs/compliance/reference/800-53/SC.md | 1774 ++++++++++++++++++++ docs/compliance/reference/800-53/SI.md | 1207 ++++++++++++++ 24 files changed, 13816 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/README.md create mode 100644 docs/compliance/cis.md create mode 100644 docs/compliance/fedramp.md create mode 100644 docs/compliance/index.md create mode 100644 docs/compliance/nist/800_53.md create mode 100644 docs/compliance/reference/800-53/AC.md create mode 100644 docs/compliance/reference/800-53/AT.md create mode 100644 docs/compliance/reference/800-53/AU.md create mode 100644 docs/compliance/reference/800-53/CA.md create mode 100644 docs/compliance/reference/800-53/CM.md create mode 100644 docs/compliance/reference/800-53/CP.md create mode 100644 docs/compliance/reference/800-53/IA.md create mode 100644 docs/compliance/reference/800-53/IR.md create mode 100644 docs/compliance/reference/800-53/MA.md create mode 100644 docs/compliance/reference/800-53/MP.md create mode 100644 docs/compliance/reference/800-53/PE.md create mode 100644 docs/compliance/reference/800-53/PL.md create mode 100644 docs/compliance/reference/800-53/PM.md create mode 100644 docs/compliance/reference/800-53/PS.md create mode 100644 docs/compliance/reference/800-53/RA.md create mode 100644 docs/compliance/reference/800-53/SA.md create mode 100644 docs/compliance/reference/800-53/SC.md create mode 100644 docs/compliance/reference/800-53/SI.md diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..755c698 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +.PHONY: vendor + +default: run + +vendor: + cd generator; \ + dep ensure + +test: + cd generator; \ + go vet `go list ./... | grep -v /vendor/`; \ + go test -v -race `go list ./... | grep -v /vendor/` + +build: + cp -r ../opencontrol/components generator/ + docker build -t docker/compliance-doc-generator:latest generator/ + +run: build + docker run -it --rm -v "$$PWD/compliance/reference/800-53":/800-53 docker/compliance-doc-generator:latest + rm -rf generator/components diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..747aab1 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +The content in this folder is used to update the compliance documentation on docs.docker.com. \ No newline at end of file diff --git a/docs/compliance/cis.md b/docs/compliance/cis.md new file mode 100644 index 0000000..29dfed2 --- /dev/null +++ b/docs/compliance/cis.md @@ -0,0 +1,9 @@ +--- +description: CIS Docker Benchmark information +keywords: standards, compliance, security, benchmark +title: CIS Docker Benchmark +--- + +The Center for Information Security (CIS) Docker Benchmark is a reference document that can be used by system administrators, security and audit professionals and other IT roles in order to establish a secure configuration baseline for the Docker Engine. + +The latest benchmark for Docker v1.13.0 can be found [here](https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf). The open source [Docker Bench for Security](https://github.com/docker/docker-bench-security) toolkit can also be used to validate a running instance of Docker against the CIS Docker Benchmark. diff --git a/docs/compliance/fedramp.md b/docs/compliance/fedramp.md new file mode 100644 index 0000000..708ef12 --- /dev/null +++ b/docs/compliance/fedramp.md @@ -0,0 +1,11 @@ +--- +description: FedRAMP compliance guidance for Docker Enterprise Edition +keywords: standards, compliance, security +title: FedRAMP +--- + +The [Federal Risk and Authorization Management Program (FedRAMP)](https://www.fedramp.gov/) is a U.S. Federal Government-wide program that provides for a standardized apporach to security assessment and authorization. Federal agencies that choose to leverage cloud services must ensure that they're utilizing FedRAMP-authorized providers. The security controls FedRAMP requires a provider to adhere to are a subset of the controls documented by NIST Special Publication 800-53. As with the baselines set within NIST 800-53 (low, moderate and high), FedRAMP also incorporates these same baselines in its authorization process. In addition, when agencies deploy systems (like Docker Enterprise Edition) on top of these providers, they must acquire an Authority to Operate (ATO) for those system that are in line with those agencies' own security procedures. + +It is important to note that Docker, Inc is not a cloud service provider. While Docker does offer various SaaS-hosted services, which include Docker Hub, Docker Store and Docker Cloud, these services are *not* FedRAMP provisionally authorized. However, Docker's Enterprise product stack can be installed on top of compute services offered by a number of FedRAMP provisionally-authorized infrastructure-as-a-service (IaaS) providers. Examples include Microsoft Azure Government and Amazon Web Services GovCloud. Agencies can subsequently inherit the FedRAMP controls already satisfied by those providers and can combine those controls with the NIST 800-53 controls applicable to Docker Enterprise Edition and that which are documented on our site in order to gain an ATO for Docker Enterprise Edition. + +Refer to the [NIST 800-53](/compliance/nist/800_53/) section for more information on the applicable NIST 800-53 controls. diff --git a/docs/compliance/index.md b/docs/compliance/index.md new file mode 100644 index 0000000..53e2f7a --- /dev/null +++ b/docs/compliance/index.md @@ -0,0 +1,13 @@ +--- +description: Compliance guidance for Docker Enterprise Edition +keywords: standards, compliance, security +title: Docker standards and compliance +--- + +We want to ensure that Docker Enterprise Edition can be used in a manner that meets the requirements of various security and compliance standards. You can use this documentation in order to validate your Docker Enterprise Edition deployment against applicable security controls and configuration baselines. The documents that we've highlighted thus far are as follows: + +- [NIST Special Publication (SP) 800-53 Revision 4](/compliance/nist/800_53/) +- [Federal Risk and Authorization Management Program (FedRAMP)](/compliance/fedramp/) +- [CIS Docker Benchmark](/compliance/cis/) + +Docker also maintains an open source repository at [https://github.com/docker/compliance](https://github.com/docker/compliance) where you can find a number of compliance resources. These include tools for auto-generating security documentation, auditing Docker Enterprise Edition systems against the security controls and even an experimental natural language processing utility for proofreading security narratives. diff --git a/docs/compliance/nist/800_53.md b/docs/compliance/nist/800_53.md new file mode 100644 index 0000000..b13d833 --- /dev/null +++ b/docs/compliance/nist/800_53.md @@ -0,0 +1,9 @@ +--- +description: NIST 800-53 compliance guidance for Docker Enterprise Edition +keywords: standards, compliance, security +title: NIST 800-53 +--- + +NIST Special Publication 800-53 contains a listing of security controls that entities often reference for ensuring the security and validity of their technology systems. The official listing of controls can be found on the NIST website [here](https://nvd.nist.gov/800-53). + +Many of the NIST 800-53 controls are applicable to the components that make up the Docker Enterprise Edition software stack. Refer to the [NIST 800-53 reference](/compliance/reference/800-53/) for more details. diff --git a/docs/compliance/reference/800-53/AC.md b/docs/compliance/reference/800-53/AC.md new file mode 100644 index 0000000..5cdc9e7 --- /dev/null +++ b/docs/compliance/reference/800-53/AC.md @@ -0,0 +1,2131 @@ +--- +title: "Access Control" +description: "Access Control reference" +keywords: "standards, compliance, security, 800-53, Access Control" +--- + +## AC-1 Access Control Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. An access control policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the access control policy and associated access controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Access control policy [Assignment: organization-defined frequency]; and
    2. +
    3. Access control procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-2 Account Management + +**Description:** + +The organization: +
    +
  1. Identifies and selects the following types of information system accounts to support organizational missions/business functions: [Assignment: organization-defined information system account types];
  2. +
  3. Assigns account managers for information system accounts;
  4. +
  5. Establishes conditions for group and role membership;
  6. +
  7. Specifies authorized users of the information system, group and role membership, and access authorizations (i.e., privileges) and other attributes (as required) for each account;
  8. +
  9. Requires approvals by [Assignment: organization-defined personnel or roles] for requests to create information system accounts;
  10. +
  11. Creates, enables, modifies, disables, and removes information system accounts in accordance with [Assignment: organization-defined procedures or conditions];
  12. +
  13. Monitors the use of information system accounts;
  14. +
  15. Notifies account managers:
  16. + +
      +
    1. When accounts are no longer required;
    2. +
    3. When users are terminated or transferred; and
    4. +
    5. When individual information system usage or need-to-know changes;
    6. +
    +
  17. Authorizes access to the information system based on:
  18. + +
      +
    1. A valid access authorization;
    2. +
    3. Intended system usage; and
    4. +
    5. Other attributes as required by the organization or associated missions/business functions;
    6. +
    +
  19. Reviews accounts for compliance with account management requirements [Assignment: organization-defined frequency]; and
  20. +
  21. Establishes a process for reissuing shared/group account credentials (if deployed) when individuals are removed from the group.
  22. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-2 (1) Automated System Account Management + +**Description:** + +The organization employs automated mechanisms to support the management of information system accounts. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-2 (2) Removal Of Temporary / Emergency Accounts + +**Description:** + +The information system automatically [Selection: removes; disables] temporary and emergency accounts after [Assignment: organization-defined time period for each type of account]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)none
configured by customer
service provider system specific
+ +## AC-2 (3) Disable Inactive Accounts + +**Description:** + +The information system automatically disables inactive accounts after [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)none
configured by customer
service provider system specific
+ +## AC-2 (4) Automated Audit Actions + +**Description:** + +The information system automatically audits account creation, modification, enabling, disabling, and removal actions, and notifies [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-2 (5) Inactivity Logout + +**Description:** + +The organization requires that users log out when [Assignment: organization-defined time-period of expected inactivity or description of when to log out]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-2 (6) Dynamic Privilege Management + +**Description:** + +The information system implements the following dynamic privilege management capabilities: [Assignment: organization-defined list of dynamic privilege management capabilities]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-2 (7) Role-Based Schemes + +**Description:** + +The organization: +
    +
  1. Establishes and administers privileged user accounts in accordance with a role-based access scheme that organizes allowed information system access and privileges into roles;
  2. +
  3. Monitors privileged role assignments; and
  4. +
  5. Takes [Assignment: organization-defined actions] when privileged role assignments are no longer appropriate.
  6. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-2 (8) Dynamic Account Creation + +**Description:** + +The information system creates [Assignment: organization-defined information system accounts] dynamically. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-2 (9) Restrictions On Use Of Shared / Group Accounts + +**Description:** + +The organization only permits the use of shared/group accounts that meet [Assignment: organization-defined conditions for establishing shared/group accounts]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-2 (10) Shared / Group Account Credential Termination + +**Description:** + +The information system terminates shared/group account credentials when members leave the group. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-2 (11) Usage Conditions + +**Description:** + +The information system enforces [Assignment: organization-defined circumstances and/or usage conditions] for [Assignment: organization-defined information system accounts]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-2 (12) Account Monitoring / Atypical Usage + +**Description:** + +The organization: +
    +
  1. Monitors information system accounts for [Assignment: organization-defined atypical usage]; and
  2. +
  3. Reports atypical usage of information system accounts to [Assignment: organization-defined personnel or roles].
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-2 (13) Disable Accounts For High-Risk Individuals + +**Description:** + +The organization disables accounts of users posing a significant risk within [Assignment: organization-defined time period] of discovery of the risk. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
configured by customer
service provider system specific
+ +## AC-3 Access Enforcement + +**Description:** + +The information system enforces approved authorizations for logical access to information and system resources in accordance with applicable access control policies. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-3 (1) Restricted Access To Privileged Functions + +**Description:** + +[Withdrawn: Incorporated into AC-6]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (2) Dual Authorization + +**Description:** + +The information system enforces dual authorization for [Assignment: organization-defined privileged commands and/or other organization-defined actions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (3) Mandatory Access Control + +**Description:** + +The information system enforces [Assignment: organization-defined mandatory access control policy] over all subjects and objects where the policy: +
    +
  1. Is uniformly enforced across all subjects and objects within the boundary of the information system;
  2. +
  3. Specifies that a subject that has been granted access to information is constrained from doing any of the following;
  4. + +
      +
    1. Passing the information to unauthorized subjects or objects;
    2. +
    3. Granting its privileges to other subjects;
    4. +
    5. Changing one or more security attributes on subjects, objects, the information system, or information system components;
    6. +
    7. Choosing the security attributes and attribute values to be associated with newly created or modified objects; or
    8. +
    9. Changing the rules governing access control; and
    10. +
    +
  5. Specifies that [Assignment: organization-defined subjects] may explicitly be granted [Assignment: organization-defined privileges (i.e., they are trusted subjects)] such that they are not limited by some or all of the above constraints.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (4) Discretionary Access Control + +**Description:** + +The information system enforces [Assignment: organization-defined discretionary access control policy] over defined subjects and objects where the policy specifies that a subject that has been granted access to information can do one or more of the following: +
    +
  1. Pass the information to any other subjects or objects;
  2. +
  3. Grant its privileges to other subjects;
  4. +
  5. Change security attributes on subjects, objects, the information system, or the information system�s components;
  6. +
  7. Choose the security attributes to be associated with newly created or revised objects; or
  8. +
  9. Change the rules governing access control.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (5) Security-Relevant Information + +**Description:** + +The information system prevents access to [Assignment: organization-defined security-relevant information] except during secure, non-operable system states. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (6) Protection Of User And System Information + +**Description:** + +[Withdrawn: Incorporated into MP-4 and SC-28]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (7) Role-Based Access Control + +**Description:** + +The information system enforces a role-based access control policy over defined subjects and objects and controls access based upon [Assignment: organization-defined roles and users authorized to assume such roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (8) Revocation Of Access Authorizations + +**Description:** + +The information system enforces the revocation of access authorizations resulting from changes to the security attributes of subjects and objects based on [Assignment: organization-defined rules governing the timing of revocations of access authorizations]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (9) Controlled Release + +**Description:** + +The information system does not release information outside of the established system boundary unless: +
    +
  1. The receiving [Assignment: organization-defined information system or system component] provides [Assignment: organization-defined security safeguards]; and
  2. +
  3. [Assignment: organization-defined security safeguards] are used to validate the appropriateness of the information designated for release.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-3 (10) Audited Override Of Access Control Mechanisms + +**Description:** + +The organization employs an audited override of automated access control mechanisms under [Assignment: organization-defined conditions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 Information Flow Enforcement + +**Description:** + +The information system enforces approved authorizations for controlling the flow of information within the system and between interconnected systems based on [Assignment: organization-defined information flow control policies]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
configured by customer
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AC-4 (1) Object Security Attributes + +**Description:** + +The information system uses [Assignment: organization-defined security attributes] associated with [Assignment: organization-defined information, source, and destination objects] to enforce [Assignment: organization-defined information flow control policies] as a basis for flow control decisions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (2) Processing Domains + +**Description:** + +The information system uses protected processing domains to enforce [Assignment: organization-defined information flow control policies] as a basis for flow control decisions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (3) Dynamic Information Flow Control + +**Description:** + +The information system enforces dynamic information flow control based on [Assignment: organization-defined policies]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (4) Content Check Encrypted Information + +**Description:** + +The information system prevents encrypted information from bypassing content-checking mechanisms by [Selection (one or more): decrypting the information; blocking the flow of the encrypted information; terminating communications sessions attempting to pass encrypted information; [Assignment: organization-defined procedure or method]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (5) Embedded Data Types + +**Description:** + +The information system enforces [Assignment: organization-defined limitations] on embedding data types within other data types. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (6) Metadata + +**Description:** + +The information system enforces information flow control based on [Assignment: organization-defined metadata]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (7) One-Way Flow Mechanisms + +**Description:** + +The information system enforces [Assignment: organization-defined one-way information flows] using hardware mechanisms. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (8) Security Policy Filters + +**Description:** + +The information system enforces information flow control using [Assignment: organization-defined security policy filters] as a basis for flow control decisions for [Assignment: organization-defined information flows]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
configured by customer
service provider system specific
Docker Enterprise Edition Enginecomplete
configured by customer
service provider system specific
Universal Control Plane (UCP)complete
configured by customer
service provider system specific
+ +## AC-4 (9) Human Reviews + +**Description:** + +The information system enforces the use of human reviews for [Assignment: organization-defined information flows] under the following conditions: [Assignment: organization-defined conditions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (10) Enable / Disable Security Policy Filters + +**Description:** + +The information system provides the capability for privileged administrators to enable/disable [Assignment: organization-defined security policy filters] under the following conditions: [Assignment: organization-defined conditions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (11) Configuration Of Security Policy Filters + +**Description:** + +The information system provides the capability for privileged administrators to configure [Assignment: organization-defined security policy filters] to support different security policies. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (12) Data Type Identifiers + +**Description:** + +The information system, when transferring information between different security domains, uses [Assignment: organization-defined data type identifiers] to validate data essential for information flow decisions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (13) Decomposition Into Policy-Relevant Subcomponents + +**Description:** + +The information system, when transferring information between different security domains, decomposes information into [Assignment: organization-defined policy-relevant subcomponents] for submission to policy enforcement mechanisms. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (14) Security Policy Filter Constraints + +**Description:** + +The information system, when transferring information between different security domains, implements [Assignment: organization-defined security policy filters] requiring fully enumerated formats that restrict data structure and content. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (15) Detection Of Unsanctioned Information + +**Description:** + +The information system, when transferring information between different security domains, examines the information for the presence of [Assignment: organized-defined unsanctioned information] and prohibits the transfer of such information in accordance with the [Assignment: organization-defined security policy]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (16) Information Transfers On Interconnected Systems + +**Description:** + +[Withdrawn: Incorporated into AC-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (17) Domain Authentication + +**Description:** + +The information system uniquely identifies and authenticates source and destination points by [Selection (one or more): organization, system, application, individual] for information transfer. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (18) Security Attribute Binding + +**Description:** + +The information system binds security attributes to information using [Assignment: organization-defined binding techniques] to facilitate information flow policy enforcement. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (19) Validation Of Metadata + +**Description:** + +The information system, when transferring information between different security domains, applies the same security policy filtering to metadata as it applies to data payloads. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (20) Approved Solutions + +**Description:** + +The organization employs [Assignment: organization-defined solutions in approved configurations] to control the flow of [Assignment: organization-defined information] across security domains. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-4 (21) Physical / Logical Separation Of Information Flows + +**Description:** + +The information system separates information flows logically or physically using [Assignment: organization-defined mechanisms and/or techniques] to accomplish [Assignment: organization-defined required separations by types of information]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
configured by customer
service provider system specific
Universal Control Plane (UCP)complete
configured by customer
service provider system specific
+ +## AC-4 (22) Access Only + +**Description:** + +The information system provides access from a single device to computing platforms, applications, or data residing on multiple different security domains, while preventing any information flow between the different security domains. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-5 Separation Of Duties + +**Description:** + +The organization: +
    +
  1. Separates [Assignment: organization-defined duties of individuals];
  2. +
  3. Documents separation of duties of individuals; and
  4. +
  5. Defines information system access authorizations to support separation of duties.
  6. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AC-6 Least Privilege + +**Description:** + +The organization employs the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) which are necessary to accomplish assigned tasks in accordance with organizational missions and business functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (1) Authorize Access To Security Functions + +**Description:** + +The organization explicitly authorizes access to [Assignment: organization-defined security functions (deployed in hardware, software, and firmware) and security-relevant information]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (2) Non-Privileged Access For Nonsecurity Functions + +**Description:** + +The organization requires that users of information system accounts, or roles, with access to [Assignment: organization-defined security functions or security-relevant information], use non-privileged accounts or roles, when accessing nonsecurity functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (3) Network Access To Privileged Commands + +**Description:** + +The organization authorizes network access to [Assignment: organization-defined privileged commands] only for [Assignment: organization-defined compelling operational needs] and documents the rationale for such access in the security plan for the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (4) Separate Processing Domains + +**Description:** + +The information system provides separate processing domains to enable finer-grained allocation of user privileges. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (5) Privileged Accounts + +**Description:** + +The organization restricts privileged accounts on the information system to [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (6) Privileged Access By Non-Organizational Users + +**Description:** + +The organization prohibits privileged access to the information system by non-organizational users. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (7) Review Of User Privileges + +**Description:** + +The organization: +
    +
  1. Reviews [Assignment: organization-defined frequency] the privileges assigned to [Assignment: organization-defined roles or classes of users] to validate the need for such privileges; and
  2. +
  3. Reassigns or removes privileges, if necessary, to correctly reflect organizational mission/business needs.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-6 (8) Privilege Levels For Code Execution + +**Description:** + +The information system prevents [Assignment: organization-defined software] from executing at higher privilege levels than users executing the software. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Universal Control Plane (UCP)complete
service provider system specific
+ +## AC-6 (9) Auditing Use Of Privileged Functions + +**Description:** + +The information system audits the execution of privileged functions. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-6 (10) Prohibit Non-Privileged Users From Executing Privileged Functions + +**Description:** + +The information system prevents non-privileged users from executing privileged functions to include disabling, circumventing, or altering implemented security safeguards/countermeasures. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-7 Unsuccessful Logon Attempts + +**Description:** + +The information system: +
    +
  1. Enforces a limit of [Assignment: organization-defined number] consecutive invalid logon attempts by a user during a [Assignment: organization-defined time period]; and
  2. +
  3. Automatically [Selection: locks the account/node for an [Assignment: organization-defined time period]; locks the account/node until released by an administrator; delays next logon prompt according to [Assignment: organization-defined delay algorithm]] when the maximum number of unsuccessful attempts is exceeded.
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-7 (1) Automatic Account Lock + +**Description:** + +[Withdrawn: Incorporated into AC-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-7 (2) Purge / Wipe Mobile Device + +**Description:** + +The information system purges/wipes information from [Assignment: organization-defined mobile devices] based on [Assignment: organization-defined purging/wiping requirements/techniques] after [Assignment: organization-defined number] consecutive, unsuccessful device logon attempts. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-8 System Use Notification + +**Description:** + +The information system: +
    +
  1. Displays to users [Assignment: organization-defined system use notification message or banner] before granting access to the system that provides privacy and security notices consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance and states that:
  2. + +
      +
    1. Users are accessing a U.S. Government information system;
    2. +
    3. Information system usage may be monitored, recorded, and subject to audit;
    4. +
    5. Unauthorized use of the information system is prohibited and subject to criminal and civil penalties; and
    6. +
    7. Use of the information system indicates consent to monitoring and recording;
    8. +
    +
  3. Retains the notification message or banner on the screen until users acknowledge the usage conditions and take explicit actions to log on to or further access the information system; and
  4. +
  5. For publicly accessible systems:
  6. + +
      +
    1. Displays system use information [Assignment: organization-defined conditions], before granting further access;
    2. +
    3. Displays references, if any, to monitoring, recording, or auditing that are consistent with privacy accommodations for such systems that generally prohibit those activities; and
    4. +
    5. Includes a description of the authorized uses of the system.
    6. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-9 Previous Logon (Access) Notification + +**Description:** + +The information system notifies the user, upon successful logon (access) to the system, of the date and time of the last logon (access). +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-9 (1) Unsuccessful Logons + +**Description:** + +The information system notifies the user, upon successful logon/access, of the number of unsuccessful logon/access attempts since the last successful logon/access. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-9 (2) Successful / Unsuccessful Logons + +**Description:** + +The information system notifies the user of the number of [Selection: successful logons/accesses; unsuccessful logon/access attempts; both] during [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-9 (3) Notification Of Account Changes + +**Description:** + +The information system notifies the user of changes to [Assignment: organization-defined security-related characteristics/parameters of the user�s account] during [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-9 (4) Additional Logon Information + +**Description:** + +The information system notifies the user, upon successful logon (access), of the following additional information: [Assignment: organization-defined information to be included in addition to the date and time of the last logon (access)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-10 Concurrent Session Control + +**Description:** + +The information system limits the number of concurrent sessions for each [Assignment: organization-defined account and/or account type] to [Assignment: organization-defined number]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-11 Session Lock + +**Description:** + +The information system: +
    +
  1. Prevents further access to the system by initiating a session lock after [Assignment: organization-defined time period] of inactivity or upon receiving a request from a user; and
  2. +
  3. Retains the session lock until the user reestablishes access using established identification and authentication procedures.
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-11 (1) Pattern-Hiding Displays + +**Description:** + +The information system conceals, via the session lock, information previously visible on the display with a publicly viewable image. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-12 Session Termination + +**Description:** + +The information system automatically terminates a user session after [Assignment: organization-defined conditions or trigger events requiring session disconnect]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AC-12 (1) User-Initiated Logouts / Message Displays + +**Description:** + +The information system: +
    +
  1. Provides a logout capability for user-initiated communications sessions whenever authentication is used to gain access to [Assignment: organization-defined information resources]; and
  2. +
  3. Displays an explicit logout message to users indicating the reliable termination of authenticated communications sessions.
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Universal Control Plane (UCP)complete
service provider system specific
+ +## AC-14 Permitted Actions Without Identification Or Authentication + +**Description:** + +The organization: +
    +
  1. Identifies [Assignment: organization-defined user actions] that can be performed on the information system without identification or authentication consistent with organizational missions/business functions; and
  2. +
  3. Documents and provides supporting rationale in the security plan for the information system, user actions not requiring identification or authentication.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-14 (1) Necessary Uses + +**Description:** + +[Withdrawn: Incorporated into AC-14]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 Security Attributes + +**Description:** + +The organization: +
    +
  1. Provides the means to associate [Assignment: organization-defined types of security attributes] having [Assignment: organization-defined security attribute values] with information in storage, in process, and/or in transmission;
  2. +
  3. Ensures that the security attribute associations are made and retained with the information;
  4. +
  5. Establishes the permitted [Assignment: organization-defined security attributes] for [Assignment: organization-defined information systems]; and
  6. +
  7. Determines the permitted [Assignment: organization-defined values or ranges] for each of the established security attributes.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (1) Dynamic Attribute Association + +**Description:** + +The information system dynamically associates security attributes with [Assignment: organization-defined subjects and objects] in accordance with [Assignment: organization-defined security policies] as information is created and combined. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (2) Attribute Value Changes By Authorized Individuals + +**Description:** + +The information system provides authorized individuals (or processes acting on behalf of individuals) the capability to define or change the value of associated security attributes. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (3) Maintenance Of Attribute Associations By Information System + +**Description:** + +The information system maintains the association and integrity of [Assignment: organization-defined security attributes] to [Assignment: organization-defined subjects and objects]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (4) Association Of Attributes By Authorized Individuals + +**Description:** + +The information system supports the association of [Assignment: organization-defined security attributes] with [Assignment: organization-defined subjects and objects] by authorized individuals (or processes acting on behalf of individuals). +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (5) Attribute Displays For Output Devices + +**Description:** + +The information system displays security attributes in human-readable form on each object that the system transmits to output devices to identify [Assignment: organization-identified special dissemination, handling, or distribution instructions] using [Assignment: organization-identified human-readable, standard naming conventions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (6) Maintenance Of Attribute Association By Organization + +**Description:** + +The organization allows personnel to associate, and maintain the association of [Assignment: organization-defined security attributes] with [Assignment: organization-defined subjects and objects] in accordance with [Assignment: organization-defined security policies]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (7) Consistent Attribute Interpretation + +**Description:** + +The organization provides a consistent interpretation of security attributes transmitted between distributed information system components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (8) Association Techniques / Technologies + +**Description:** + +The information system implements [Assignment: organization-defined techniques or technologies] with [Assignment: organization-defined level of assurance] in associating security attributes to information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (9) Attribute Reassignment + +**Description:** + +The organization ensures that security attributes associated with information are reassigned only via re-grading mechanisms validated using [Assignment: organization-defined techniques or procedures]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-16 (10) Attribute Configuration By Authorized Individuals + +**Description:** + +The information system provides authorized individuals the capability to define or change the type and value of security attributes available for association with subjects and objects. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-17 Remote Access + +**Description:** + +The organization: +
    +
  1. Establishes and documents usage restrictions, configuration/connection requirements, and implementation guidance for each type of remote access allowed; and
  2. +
  3. Authorizes remote access to the information system prior to allowing such connections.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-17 (1) Automated Monitoring / Control + +**Description:** + +The information system monitors and controls remote access methods. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
Authentication and Authorization Service (eNZi)complete
configured by customer
+ +## AC-17 (2) Protection Of Confidentiality / Integrity Using Encryption + +**Description:** + +The information system implements cryptographic mechanisms to protect the confidentiality and integrity of remote access sessions. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AC-17 (3) Managed Access Control Points + +**Description:** + +The information system routes all remote accesses through [Assignment: organization-defined number] managed network access control points. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AC-17 (4) Privileged Commands / Access + +**Description:** + +The organization: +
    +
  1. Authorizes the execution of privileged commands and access to security-relevant information via remote access only for [Assignment: organization-defined needs]; and
  2. +
  3. Documents the rationale for such access in the security plan for the information system.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-17 (5) Monitoring For Unauthorized Connections + +**Description:** + +[Withdrawn: Incorporated into SI-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-17 (6) Protection Of Information + +**Description:** + +The organization ensures that users protect information about remote access mechanisms from unauthorized use and disclosure. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-17 (7) Additional Protection For Security Function Access + +**Description:** + +[Withdrawn: Incorporated into AC-3 (10)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-17 (8) Disable Nonsecure Network Protocols + +**Description:** + +[Withdrawn: Incorporated into CM-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-17 (9) Disconnect / Disable Access + +**Description:** + +The organization provides the capability to expeditiously disconnect or disable remote access to the information system within [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
configured by customer
Docker Enterprise Edition Enginecomplete
configured by customer
Universal Control Plane (UCP)complete
configured by customer
+ +## AC-18 Wireless Access + +**Description:** + +The organization: +
    +
  1. Establishes usage restrictions, configuration/connection requirements, and implementation guidance for wireless access; and
  2. +
  3. Authorizes wireless access to the information system prior to allowing such connections.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-18 (1) Authentication And Encryption + +**Description:** + +The information system protects wireless access to the system using authentication of [Selection (one or more): users; devices] and encryption. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-18 (2) Monitoring Unauthorized Connections + +**Description:** + +[Withdrawn: Incorporated into SI-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-18 (3) Disable Wireless Networking + +**Description:** + +The organization disables, when not intended for use, wireless networking capabilities internally embedded within information system components prior to issuance and deployment. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-18 (4) Restrict Configurations By Users + +**Description:** + +The organization identifies and explicitly authorizes users allowed to independently configure wireless networking capabilities. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-18 (5) Antennas / Transmission Power Levels + +**Description:** + +The organization selects radio antennas and calibrates transmission power levels to reduce the probability that usable signals can be received outside of organization-controlled boundaries. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-19 Access Control For Mobile Devices + +**Description:** + +The organization: +
    +
  1. Establishes usage restrictions, configuration requirements, connection requirements, and implementation guidance for organization-controlled mobile devices; and
  2. +
  3. Authorizes the connection of mobile devices to organizational information systems.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-19 (1) Use Of Writable / Portable Storage Devices + +**Description:** + +[Withdrawn: Incorporated into MP-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-19 (2) Use Of Personally Owned Portable Storage Devices + +**Description:** + +[Withdrawn: Incorporated into MP-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-19 (3) Use Of Portable Storage Devices With No Identifiable Owner + +**Description:** + +[Withdrawn: Incorporated into MP-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-19 (4) Restrictions For Classified Information + +**Description:** + +The organization: +
    +
  1. Prohibits the use of unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information unless specifically permitted by the authorizing official; and
  2. +
  3. Enforces the following restrictions on individuals permitted by the authorizing official to use unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information:
  4. + +
      +
    1. Connection of unclassified mobile devices to classified information systems is prohibited;
    2. +
    3. Connection of unclassified mobile devices to unclassified information systems requires approval from the authorizing official;
    4. +
    5. Use of internal or external modems or wireless interfaces within the unclassified mobile devices is prohibited; and
    6. +
    7. Unclassified mobile devices and the information stored on those devices are subject to random reviews and inspections by [Assignment: organization-defined security officials], and if classified information is found, the incident handling policy is followed.
    8. +
    +
  5. Restricts the connection of classified mobile devices to classified information systems in accordance with [Assignment: organization-defined security policies].
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-19 (5) Full Device / Container-Based Encryption + +**Description:** + +The organization employs [Selection: full-device encryption; container encryption] to protect the confidentiality and integrity of information on [Assignment: organization-defined mobile devices]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-20 Use Of External Information Systems + +**Description:** + +The organization establishes terms and conditions, consistent with any trust relationships established with other organizations owning, operating, and/or maintaining external information systems, allowing authorized individuals to: +
    +
  1. Access the information system from external information systems; and
  2. +
  3. Process, store, or transmit organization-controlled information using external information systems.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-20 (1) Limits On Authorized Use + +**Description:** + +The organization permits authorized individuals to use an external information system to access the information system or to process, store, or transmit organization-controlled information only when the organization: +
    +
  1. Verifies the implementation of required security controls on the external system as specified in the organization�s information security policy and security plan; or
  2. +
  3. Retains approved information system connection or processing agreements with the organizational entity hosting the external information system.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-20 (2) Portable Storage Devices + +**Description:** + +The organization [Selection: restricts; prohibits] the use of organization-controlled portable storage devices by authorized individuals on external information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-20 (3) Non-Organizationally Owned Systems / Components / Devices + +**Description:** + +The organization [Selection: restricts; prohibits] the use of non-organizationally owned information systems, system components, or devices to process, store, or transmit organizational information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-20 (4) Network Accessible Storage Devices + +**Description:** + +The organization prohibits the use of [Assignment: organization-defined network accessible storage devices] in external information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-21 Information Sharing + +**Description:** + +The organization: +
    +
  1. Facilitates information sharing by enabling authorized users to determine whether access authorizations assigned to the sharing partner match the access restrictions on the information for [Assignment: organization-defined information sharing circumstances where user discretion is required]; and
  2. +
  3. Employs [Assignment: organization-defined automated mechanisms or manual processes] to assist users in making information sharing/collaboration decisions.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-21 (1) Automated Decision Support + +**Description:** + +The information system enforces information-sharing decisions by authorized users based on access authorizations of sharing partners and access restrictions on information to be shared. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-21 (2) Information Search And Retrieval + +**Description:** + +The information system implements information search and retrieval services that enforce [Assignment: organization-defined information sharing restrictions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-22 Publicly Accessible Content + +**Description:** + +The organization: +
    +
  1. Designates individuals authorized to post information onto a publicly accessible information system;
  2. +
  3. Trains authorized individuals to ensure that publicly accessible information does not contain nonpublic information;
  4. +
  5. Reviews the proposed content of information prior to posting onto the publicly accessible information system to ensure that nonpublic information is not included; and
  6. +
  7. Reviews the content on the publicly accessible information system for nonpublic information [Assignment: organization-defined frequency] and removes such information, if discovered.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-23 Data Mining Protection + +**Description:** + +The organization employs [Assignment: organization-defined data mining prevention and detection techniques] for [Assignment: organization-defined data storage objects] to adequately detect and protect against data mining. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-24 Access Control Decisions + +**Description:** + +The organization establishes procedures to ensure [Assignment: organization-defined access control decisions] are applied to each access request prior to access enforcement. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-24 (1) Transmit Access Authorization Information + +**Description:** + +The information system transmits [Assignment: organization-defined access authorization information] using [Assignment: organization-defined security safeguards] to [Assignment: organization-defined information systems] that enforce access control decisions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-24 (2) No User Or Process Identity + +**Description:** + +The information system enforces access control decisions based on [Assignment: organization-defined security attributes] that do not include the identity of the user or process acting on behalf of the user. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AC-25 Reference Monitor + +**Description:** + +The information system implements a reference monitor for [Assignment: organization-defined access control policies] that is tamperproof, always invoked, and small enough to be subject to analysis and testing, the completeness of which can be assured. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/AT.md b/docs/compliance/reference/800-53/AT.md new file mode 100644 index 0000000..e777ef2 --- /dev/null +++ b/docs/compliance/reference/800-53/AT.md @@ -0,0 +1,146 @@ +--- +title: "Awareness And Training" +description: "Awareness And Training reference" +keywords: "standards, compliance, security, 800-53, Awareness And Training" +--- + +## AT-1 Security Awareness And Training Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A security awareness and training policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the security awareness and training policy and associated security awareness and training controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Security awareness and training policy [Assignment: organization-defined frequency]; and
    2. +
    3. Security awareness and training procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-2 Security Awareness Training + +**Description:** + +The organization provides basic security awareness training to information system users (including managers, senior executives, and contractors): +
    +
  1. As part of initial training for new users;
  2. +
  3. When required by information system changes; and
  4. +
  5. [Assignment: organization-defined frequency] thereafter.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-2 (1) Practical Exercises + +**Description:** + +The organization includes practical exercises in security awareness training that simulate actual cyber attacks. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-2 (2) Insider Threat + +**Description:** + +The organization includes security awareness training on recognizing and reporting potential indicators of insider threat. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-3 Role-Based Security Training + +**Description:** + +The organization provides role-based security training to personnel with assigned security roles and responsibilities: +
    +
  1. Before authorizing access to the information system or performing assigned duties;
  2. +
  3. When required by information system changes; and
  4. +
  5. [Assignment: organization-defined frequency] thereafter.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-3 (1) Environmental Controls + +**Description:** + +The organization provides [Assignment: organization-defined personnel or roles] with initial and [Assignment: organization-defined frequency] training in the employment and operation of environmental controls. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-3 (2) Physical Security Controls + +**Description:** + +The organization provides [Assignment: organization-defined personnel or roles] with initial and [Assignment: organization-defined frequency] training in the employment and operation of physical security controls. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-3 (3) Practical Exercises + +**Description:** + +The organization includes practical exercises in security training that reinforce training objectives. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-3 (4) Suspicious Communications And Anomalous System Behavior + +**Description:** + +The organization provides training to its personnel on [Assignment: organization-defined indicators of malicious code] to recognize suspicious communications and anomalous behavior in organizational information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AT-4 Security Training Records + +**Description:** + +The organization: +
    +
  1. Documents and monitors individual information system security training activities including basic security awareness training and specific information system security training; and
  2. +
  3. Retains individual training records for [Assignment: organization-defined time period].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/AU.md b/docs/compliance/reference/800-53/AU.md new file mode 100644 index 0000000..df04b2c --- /dev/null +++ b/docs/compliance/reference/800-53/AU.md @@ -0,0 +1,1247 @@ +--- +title: "Audit And Accountability" +description: "Audit And Accountability reference" +keywords: "standards, compliance, security, 800-53, Audit And Accountability" +--- + +## AU-1 Audit And Accountability Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. An audit and accountability policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the audit and accountability policy and associated audit and accountability controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Audit and accountability policy [Assignment: organization-defined frequency]; and
    2. +
    3. Audit and accountability procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-2 Audit Events + +**Description:** + +The organization: +
    +
  1. Determines that the information system is capable of auditing the following events: [Assignment: organization-defined auditable events];
  2. +
  3. Coordinates the security audit function with other organizational entities requiring audit-related information to enhance mutual support and to help guide the selection of auditable events;
  4. +
  5. Provides a rationale for why the auditable events are deemed to be adequate to support after-the-fact investigations of security incidents; and
  6. +
  7. Determines that the following events are to be audited within the information system: [Assignment: organization-defined audited events (the subset of the auditable events defined in AU-2 a.) along with the frequency of (or situation requiring) auditing for each identified event].
  8. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-2 (1) Compilation Of Audit Records From Multiple Sources + +**Description:** + +[Withdrawn: Incorporated into AU-12]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-2 (2) Selection Of Audit Events By Component + +**Description:** + +[Withdrawn: Incorporated into AU-12]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-2 (3) Reviews And Updates + +**Description:** + +The organization reviews and updates the audited events [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-2 (4) Privileged Functions + +**Description:** + +[Withdrawn: Incorporated into AC-6 (9)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-3 Content Of Audit Records + +**Description:** + +The information system generates audit records containing information that establishes what type of event occurred, when the event occurred, where the event occurred, the source of the event, the outcome of the event, and the identity of any individuals or subjects associated with the event. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## AU-3 (1) Additional Audit Information + +**Description:** + +The information system generates audit records containing the following additional information: [Assignment: organization-defined additional, more detailed information]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-3 (2) Centralized Management Of Planned Audit Record Content + +**Description:** + +The information system provides centralized management and configuration of the content to be captured in audit records generated by [Assignment: organization-defined information system components]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-4 Audit Storage Capacity + +**Description:** + +The organization allocates audit record storage capacity in accordance with [Assignment: organization-defined audit record storage requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-4 (1) Transfer To Alternate Storage + +**Description:** + +The information system off-loads audit records [Assignment: organization-defined frequency] onto a different system or media than the system being audited. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-5 Response To Audit Processing Failures + +**Description:** + +The information system: +
    +
  1. Alerts [Assignment: organization-defined personnel or roles] in the event of an audit processing failure; and
  2. +
  3. Takes the following additional actions: [Assignment: organization-defined actions to be taken (e.g., shut down information system, overwrite oldest audit records, stop generating audit records)].
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-5 (1) Audit Storage Capacity + +**Description:** + +The information system provides a warning to [Assignment: organization-defined personnel, roles, and/or locations] within [Assignment: organization-defined time period] when allocated audit record storage volume reaches [Assignment: organization-defined percentage] of repository maximum audit record storage capacity. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-5 (2) Real-Time Alerts + +**Description:** + +The information system provides an alert in [Assignment: organization-defined real-time period] to [Assignment: organization-defined personnel, roles, and/or locations] when the following audit failure events occur: [Assignment: organization-defined audit failure events requiring real-time alerts]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-5 (3) Configurable Traffic Volume Thresholds + +**Description:** + +The information system enforces configurable network communications traffic volume thresholds reflecting limits on auditing capacity and [Selection: rejects; delays] network traffic above those thresholds. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-5 (4) Shutdown On Failure + +**Description:** + +The information system invokes a [Selection: full system shutdown; partial system shutdown; degraded operational mode with limited mission/business functionality available] in the event of [Assignment: organization-defined audit failures], unless an alternate audit capability exists. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 Audit Review, Analysis, And Reporting + +**Description:** + +The organization: +
    +
  1. Reviews and analyzes information system audit records [Assignment: organization-defined frequency] for indications of [Assignment: organization-defined inappropriate or unusual activity]; and
  2. +
  3. Reports findings to [Assignment: organization-defined personnel or roles].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (1) Process Integration + +**Description:** + +The organization employs automated mechanisms to integrate audit review, analysis, and reporting processes to support organizational processes for investigation and response to suspicious activities. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (2) Automated Security Alerts + +**Description:** + +[Withdrawn: Incorporated into SI-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (3) Correlate Audit Repositories + +**Description:** + +The organization analyzes and correlates audit records across different repositories to gain organization-wide situational awareness. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (4) Central Review And Analysis + +**Description:** + +The information system provides the capability to centrally review and analyze audit records from multiple components within the system. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-6 (5) Integration / Scanning And Monitoring Capabilities + +**Description:** + +The organization integrates analysis of audit records with analysis of [Selection (one or more): vulnerability scanning information; performance data; information system monitoring information; [Assignment: organization-defined data/information collected from other sources]] to further enhance the ability to identify inappropriate or unusual activity. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (6) Correlation With Physical Monitoring + +**Description:** + +The organization correlates information from audit records with information obtained from monitoring physical access to further enhance the ability to identify suspicious, inappropriate, unusual, or malevolent activity. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (7) Permitted Actions + +**Description:** + +The organization specifies the permitted actions for each [Selection (one or more): information system process; role; user] associated with the review, analysis, and reporting of audit information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (8) Full Text Analysis Of Privileged Commands + +**Description:** + +The organization performs a full text analysis of audited privileged commands in a physically distinct component or subsystem of the information system, or other information system that is dedicated to that analysis. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (9) Correlation With Information From Nontechnical Sources + +**Description:** + +The organization correlates information from nontechnical sources with audit information to enhance organization-wide situational awareness. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-6 (10) Audit Level Adjustment + +**Description:** + +The organization adjusts the level of audit review, analysis, and reporting within the information system when there is a change in risk based on law enforcement information, intelligence information, or other credible sources of information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-7 Audit Reduction And Report Generation + +**Description:** + +The information system provides an audit reduction and report generation capability that: +
    +
  1. Supports on-demand audit review, analysis, and reporting requirements and after-the-fact investigations of security incidents; and
  2. +
  3. Does not alter the original content or time ordering of audit records.
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-7 (1) Automatic Processing + +**Description:** + +The information system provides the capability to process audit records for events of interest based on [Assignment: organization-defined audit fields within audit records]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-7 (2) Automatic Sort And Search + +**Description:** + +The information system provides the capability to sort and search audit records for events of interest based on the content of [Assignment: organization-defined audit fields within audit records]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-8 Time Stamps + +**Description:** + +The information system: +
    +
  1. Uses internal system clocks to generate time stamps for audit records; and
  2. +
  3. Records time stamps for audit records that can be mapped to Coordinated Universal Time (UTC) or Greenwich Mean Time (GMT) and meets [Assignment: organization-defined granularity of time measurement].
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
configured by customer
Docker Enterprise Edition Enginecomplete
configured by customer
Universal Control Plane (UCP)complete
configured by customer
+ +## AU-8 (1) Synchronization With Authoritative Time Source + +**Description:** + +The information system: +
    +
  1. Compares the internal information system clocks [Assignment: organization-defined frequency] with [Assignment: organization-defined authoritative time source]; and
  2. +
  3. Synchronizes the internal system clocks to the authoritative time source when the time difference is greater than [Assignment: organization-defined time period].
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-8 (2) Secondary Authoritative Time Source + +**Description:** + +The information system identifies a secondary authoritative time source that is located in a different geographic region than the primary authoritative time source. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-9 Protection Of Audit Information + +**Description:** + +The information system protects audit information and audit tools from unauthorized access, modification, and deletion. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-9 (1) Hardware Write-Once Media + +**Description:** + +The information system writes audit trails to hardware-enforced, write-once media. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-9 (2) Audit Backup On Separate Physical Systems / Components + +**Description:** + +The information system backs up audit records [Assignment: organization-defined frequency] onto a physically different system or system component than the system or component being audited. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-9 (3) Cryptographic Protection + +**Description:** + +The information system implements cryptographic mechanisms to protect the integrity of audit information and audit tools. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## AU-9 (4) Access By Subset Of Privileged Users + +**Description:** + +The organization authorizes access to management of audit functionality to only [Assignment: organization-defined subset of privileged users]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-9 (5) Dual Authorization + +**Description:** + +The organization enforces dual authorization for [Selection (one or more): movement; deletion] of [Assignment: organization-defined audit information]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-9 (6) Read Only Access + +**Description:** + +The organization authorizes read-only access to audit information to [Assignment: organization-defined subset of privileged users]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-10 Non-Repudiation + +**Description:** + +The information system protects against an individual (or process acting on behalf of an individual) falsely denying having performed [Assignment: organization-defined actions to be covered by non-repudiation]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## AU-10 (1) Association Of Identities + +**Description:** + +The information system: +
    +
  1. Binds the identity of the information producer with the information to [Assignment: organization-defined strength of binding]; and
  2. +
  3. Provides the means for authorized individuals to determine the identity of the producer of the information.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-10 (2) Validate Binding Of Information Producer Identity + +**Description:** + +The information system: +
    +
  1. Validates the binding of the information producer identity to the information at [Assignment: organization-defined frequency]; and
  2. +
  3. Performs [Assignment: organization-defined actions] in the event of a validation error.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-10 (3) Chain Of Custody + +**Description:** + +The information system maintains reviewer/releaser identity and credentials within the established chain of custody for all information reviewed or released. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-10 (4) Validate Binding Of Information Reviewer Identity + +**Description:** + +The information system: +
    +
  1. Validates the binding of the information reviewer identity to the information at the transfer or release points prior to release/transfer between [Assignment: organization-defined security domains]; and
  2. +
  3. Performs [Assignment: organization-defined actions] in the event of a validation error.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-10 (5) Digital Signatures + +**Description:** + +[Withdrawn: Incorporated into SI-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-11 Audit Record Retention + +**Description:** + +The organization retains audit records for [Assignment: organization-defined time period consistent with records retention policy] to provide support for after-the-fact investigations of security incidents and to meet regulatory and organizational information retention requirements. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-11 (1) Long-Term Retrieval Capability + +**Description:** + +The organization employs [Assignment: organization-defined measures] to ensure that long-term audit records generated by the information system can be retrieved. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-12 Audit Generation + +**Description:** + +The information system: +
    +
  1. Provides audit record generation capability for the auditable events defined in AU-2 a. at [Assignment: organization-defined information system components];
  2. +
  3. Allows [Assignment: organization-defined personnel or roles] to select which auditable events are to be audited by specific components of the information system; and
  4. +
  5. Generates audit records for the events defined in AU-2 d. with the content defined in AU-3.
  6. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-12 (1) System-Wide / Time-Correlated Audit Trail + +**Description:** + +The information system compiles audit records from [Assignment: organization-defined information system components] into a system-wide (logical or physical) audit trail that is time-correlated to within [Assignment: organization-defined level of tolerance for the relationship between time stamps of individual records in the audit trail]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-12 (2) Standardized Formats + +**Description:** + +The information system produces a system-wide (logical or physical) audit trail composed of audit records in a standardized format. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-12 (3) Changes By Authorized Individuals + +**Description:** + +The information system provides the capability for [Assignment: organization-defined individuals or roles] to change the auditing to be performed on [Assignment: organization-defined information system components] based on [Assignment: organization-defined selectable event criteria] within [Assignment: organization-defined time thresholds]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## AU-13 Monitoring For Information Disclosure + +**Description:** + +The organization monitors [Assignment: organization-defined open source information and/or information sites] [Assignment: organization-defined frequency] for evidence of unauthorized disclosure of organizational information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-13 (1) Use Of Automated Tools + +**Description:** + +The organization employs automated mechanisms to determine if organizational information has been disclosed in an unauthorized manner. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-13 (2) Review Of Monitored Sites + +**Description:** + +The organization reviews the open source information sites being monitored [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-14 Session Audit + +**Description:** + +The information system provides the capability for authorized users to select a user session to capture/record or view/hear. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-14 (1) System Start-Up + +**Description:** + +The information system initiates session audits at system start-up. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-14 (2) Capture/Record And Log Content + +**Description:** + +The information system provides the capability for authorized users to capture/record and log content related to a user session. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-14 (3) Remote Viewing / Listening + +**Description:** + +The information system provides the capability for authorized users to remotely view/hear all content related to an established user session in real time. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-15 Alternate Audit Capability + +**Description:** + +The organization provides an alternate audit capability in the event of a failure in primary audit capability that provides [Assignment: organization-defined alternate audit functionality]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-16 Cross-Organizational Auditing + +**Description:** + +The organization employs [Assignment: organization-defined methods] for coordinating [Assignment: organization-defined audit information] among external organizations when audit information is transmitted across organizational boundaries. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-16 (1) Identity Preservation + +**Description:** + +The organization requires that the identity of individuals be preserved in cross-organizational audit trails. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## AU-16 (2) Sharing Of Audit Information + +**Description:** + +The organization provides cross-organizational audit information to [Assignment: organization-defined organizations] based on [Assignment: organization-defined cross-organizational sharing agreements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/CA.md b/docs/compliance/reference/800-53/CA.md new file mode 100644 index 0000000..fa11183 --- /dev/null +++ b/docs/compliance/reference/800-53/CA.md @@ -0,0 +1,334 @@ +--- +title: "Security Assessment And Authorization" +description: "Security Assessment And Authorization reference" +keywords: "standards, compliance, security, 800-53, Security Assessment And Authorization" +--- + +## CA-1 Security Assessment And Authorization Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A security assessment and authorization policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the security assessment and authorization policy and associated security assessment and authorization controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Security assessment and authorization policy [Assignment: organization-defined frequency]; and
    2. +
    3. Security assessment and authorization procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-2 Security Assessments + +**Description:** + +The organization: +
    +
  1. Develops a security assessment plan that describes the scope of the assessment including:
  2. + +
      +
    1. Security controls and control enhancements under assessment;
    2. +
    3. Assessment procedures to be used to determine security control effectiveness; and
    4. +
    5. Assessment environment, assessment team, and assessment roles and responsibilities;
    6. +
    +
  3. Assesses the security controls in the information system and its environment of operation [Assignment: organization-defined frequency] to determine the extent to which the controls are implemented correctly, operating as intended, and producing the desired outcome with respect to meeting established security requirements;
  4. +
  5. Produces a security assessment report that documents the results of the assessment; and
  6. +
  7. Provides the results of the security control assessment to [Assignment: organization-defined individuals or roles].
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-2 (1) Independent Assessors + +**Description:** + +The organization employs assessors or assessment teams with [Assignment: organization-defined level of independence] to conduct security control assessments. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-2 (2) Specialized Assessments + +**Description:** + +The organization includes as part of security control assessments, [Assignment: organization-defined frequency], [Selection: announced; unannounced], [Selection (one or more): in-depth monitoring; vulnerability scanning; malicious user testing; insider threat assessment; performance/load testing; [Assignment: organization-defined other forms of security assessment]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-2 (3) External Organizations + +**Description:** + +The organization accepts the results of an assessment of [Assignment: organization-defined information system] performed by [Assignment: organization-defined external organization] when the assessment meets [Assignment: organization-defined requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-3 System Interconnections + +**Description:** + +The organization: +
    +
  1. Authorizes connections from the information system to other information systems through the use of Interconnection Security Agreements;
  2. +
  3. Documents, for each interconnection, the interface characteristics, security requirements, and the nature of the information communicated; and
  4. +
  5. Reviews and updates Interconnection Security Agreements [Assignment: organization-defined frequency].
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-3 (1) Unclassified National Security System Connections + +**Description:** + +The organization prohibits the direct connection of an [Assignment: organization-defined unclassified, national security system] to an external network without the use of [Assignment: organization-defined boundary protection device]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-3 (2) Classified National Security System Connections + +**Description:** + +The organization prohibits the direct connection of a classified, national security system to an external network without the use of [Assignment: organization-defined boundary protection device]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-3 (3) Unclassified Non-National Security System Connections + +**Description:** + +The organization prohibits the direct connection of an [Assignment: organization-defined unclassified, non-national security system] to an external network without the use of [Assignment; organization-defined boundary protection device]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-3 (4) Connections To Public Networks + +**Description:** + +The organization prohibits the direct connection of an [Assignment: organization-defined information system] to a public network. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-3 (5) Restrictions On External System Connections + +**Description:** + +The organization employs [Selection: allow-all, deny-by-exception; deny-all, permit-by-exception] policy for allowing [Assignment: organization-defined information systems] to connect to external information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-5 Plan Of Action And Milestones + +**Description:** + +The organization: +
    +
  1. Develops a plan of action and milestones for the information system to document the organization�s planned remedial actions to correct weaknesses or deficiencies noted during the assessment of the security controls and to reduce or eliminate known vulnerabilities in the system; and
  2. +
  3. Updates existing plan of action and milestones [Assignment: organization-defined frequency] based on the findings from security controls assessments, security impact analyses, and continuous monitoring activities.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-5 (1) Automation Support For Accuracy / Currency + +**Description:** + +The organization employs automated mechanisms to help ensure that the plan of action and milestones for the information system is accurate, up to date, and readily available. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-6 Security Authorization + +**Description:** + +The organization: +
    +
  1. Assigns a senior-level executive or manager as the authorizing official for the information system;
  2. +
  3. Ensures that the authorizing official authorizes the information system for processing before commencing operations; and
  4. +
  5. Updates the security authorization [Assignment: organization-defined frequency].
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-7 Continuous Monitoring + +**Description:** + +The organization develops a continuous monitoring strategy and implements a continuous monitoring program that includes: +
    +
  1. Establishment of [Assignment: organization-defined metrics] to be monitored;
  2. +
  3. Establishment of [Assignment: organization-defined frequencies] for monitoring and [Assignment: organization-defined frequencies] for assessments supporting such monitoring;
  4. +
  5. Ongoing security control assessments in accordance with the organizational continuous monitoring strategy;
  6. +
  7. Ongoing security status monitoring of organization-defined metrics in accordance with the organizational continuous monitoring strategy;
  8. +
  9. Correlation and analysis of security-related information generated by assessments and monitoring;
  10. +
  11. Response actions to address results of the analysis of security-related information; and
  12. +
  13. Reporting the security status of organization and the information system to [Assignment: organization-defined personnel or roles] [Assignment: organization-defined frequency].
  14. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CA-7 (1) Independent Assessment + +**Description:** + +The organization employs assessors or assessment teams with [Assignment: organization-defined level of independence] to monitor the security controls in the information system on an ongoing basis. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-7 (2) Types Of Assessments + +**Description:** + +[Withdrawn: Incorporated into CA-2]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-7 (3) Trend Analyses + +**Description:** + +The organization employs trend analyses to determine if security control implementations, the frequency of continuous monitoring activities, and/or the types of activities used in the continuous monitoring process need to be modified based on empirical data. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-8 Penetration Testing + +**Description:** + +The organization conducts penetration testing [Assignment: organization-defined frequency] on [Assignment: organization-defined information systems or system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-8 (1) Independent Penetration Agent Or Team + +**Description:** + +The organization employs an independent penetration agent or penetration team to perform penetration testing on the information system or system components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-8 (2) Red Team Exercises + +**Description:** + +The organization employs [Assignment: organization-defined red team exercises] to simulate attempts by adversaries to compromise organizational information systems in accordance with [Assignment: organization-defined rules of engagement]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-9 Internal System Connections + +**Description:** + +The organization: +
    +
  1. Authorizes internal connections of [Assignment: organization-defined information system components or classes of components] to the information system; and
  2. +
  3. Documents, for each internal connection, the interface characteristics, security requirements, and the nature of the information communicated.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CA-9 (1) Security Compliance Checks + +**Description:** + +The information system performs security compliance checks on constituent system components prior to the establishment of the internal connection. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/CM.md b/docs/compliance/reference/800-53/CM.md new file mode 100644 index 0000000..61ed27a --- /dev/null +++ b/docs/compliance/reference/800-53/CM.md @@ -0,0 +1,1014 @@ +--- +title: "Configuration Management" +description: "Configuration Management reference" +keywords: "standards, compliance, security, 800-53, Configuration Management" +--- + +## CM-1 Configuration Management Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A configuration management policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the configuration management policy and associated configuration management controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Configuration management policy [Assignment: organization-defined frequency]; and
    2. +
    3. Configuration management procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-2 Baseline Configuration + +**Description:** + +The organization develops, documents, and maintains under configuration control, a current baseline configuration of the information system. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-2 (1) Reviews And Updates + +**Description:** + +The organization reviews and updates the baseline configuration of the information system: +
    +
  1. [Assignment: organization-defined frequency];
  2. +
  3. When required due to [Assignment organization-defined circumstances]; and
  4. +
  5. As an integral part of information system component installations and upgrades.
  6. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-2 (2) Automation Support For Accuracy / Currency + +**Description:** + +The organization employs automated mechanisms to maintain an up-to-date, complete, accurate, and readily available baseline configuration of the information system. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-2 (3) Retention Of Previous Configurations + +**Description:** + +The organization retains [Assignment: organization-defined previous versions of baseline configurations of the information system] to support rollback. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-2 (4) Unauthorized Software + +**Description:** + +[Withdrawn: Incorporated into CM-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-2 (5) Authorized Software + +**Description:** + +[Withdrawn: Incorporated into CM-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-2 (6) Development And Test Environments + +**Description:** + +The organization maintains a baseline configuration for information system development and test environments that is managed separately from the operational baseline configuration. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-2 (7) Configure Systems, Components, Or Devices For High-Risk Areas + +**Description:** + +The organization: +
    +
  1. Issues [Assignment: organization-defined information systems, system components, or devices] with [Assignment: organization-defined configurations] to individuals traveling to locations that the organization deems to be of significant risk; and
  2. +
  3. Applies [Assignment: organization-defined security safeguards] to the devices when the individuals return.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-3 Configuration Change Control + +**Description:** + +The organization: +
    +
  1. Determines the types of changes to the information system that are configuration-controlled;
  2. +
  3. Reviews proposed configuration-controlled changes to the information system and approves or disapproves such changes with explicit consideration for security impact analyses;
  4. +
  5. Documents configuration change decisions associated with the information system;
  6. +
  7. Implements approved configuration-controlled changes to the information system;
  8. +
  9. Retains records of configuration-controlled changes to the information system for [Assignment: organization-defined time period];
  10. +
  11. Audits and reviews activities associated with configuration-controlled changes to the information system; and
  12. +
  13. Coordinates and provides oversight for configuration change control activities through [Assignment: organization-defined configuration change control element (e.g., committee, board)] that convenes [Selection (one or more): [Assignment: organization-defined frequency]; [Assignment: organization-defined configuration change conditions]].
  14. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-3 (1) Automated Document / Notification / Prohibition Of Changes + +**Description:** + +The organization employs automated mechanisms to: +
    +
  1. Document proposed changes to the information system;
  2. +
  3. Notify [Assignment: organized-defined approval authorities] of proposed changes to the information system and request change approval;
  4. +
  5. Highlight proposed changes to the information system that have not been approved or disapproved by [Assignment: organization-defined time period];
  6. +
  7. Prohibit changes to the information system until designated approvals are received;
  8. +
  9. Document all changes to the information system; and
  10. +
  11. Notify [Assignment: organization-defined personnel] when approved changes to the information system are completed.
  12. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-3 (2) Test / Validate / Document Changes + +**Description:** + +The organization tests, validates, and documents changes to the information system before implementing the changes on the operational system. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-3 (3) Automated Change Implementation + +**Description:** + +The organization employs automated mechanisms to implement changes to the current information system baseline and deploys the updated baseline across the installed base. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-3 (4) Security Representative + +**Description:** + +The organization requires an information security representative to be a member of the [Assignment: organization-defined configuration change control element]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-3 (5) Automated Security Response + +**Description:** + +The information system implements [Assignment: organization-defined security responses] automatically if baseline configurations are changed in an unauthorized manner. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-3 (6) Cryptography Management + +**Description:** + +The organization ensures that cryptographic mechanisms used to provide [Assignment: organization-defined security safeguards] are under configuration management. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-4 Security Impact Analysis + +**Description:** + +The organization analyzes changes to the information system to determine potential security impacts prior to change implementation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-4 (1) Separate Test Environments + +**Description:** + +The organization analyzes changes to the information system in a separate test environment before implementation in an operational environment, looking for security impacts due to flaws, weaknesses, incompatibility, or intentional malice. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-4 (2) Verification Of Security Functions + +**Description:** + +The organization, after the information system is changed, checks the security functions to verify that the functions are implemented correctly, operating as intended, and producing the desired outcome with regard to meeting the security requirements for the system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-5 Access Restrictions For Change + +**Description:** + +The organization defines, documents, approves, and enforces physical and logical access restrictions associated with changes to the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-5 (1) Automated Access Enforcement / Auditing + +**Description:** + +The information system enforces access restrictions and supports auditing of the enforcement actions. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## CM-5 (2) Review System Changes + +**Description:** + +The organization reviews information system changes [Assignment: organization-defined frequency] and [Assignment: organization-defined circumstances] to determine whether unauthorized changes have occurred. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-5 (3) Signed Components + +**Description:** + +The information system prevents the installation of [Assignment: organization-defined software and firmware components] without verification that the component has been digitally signed using a certificate that is recognized and approved by the organization. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## CM-5 (4) Dual Authorization + +**Description:** + +The organization enforces dual authorization for implementing changes to [Assignment: organization-defined information system components and system-level information]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-5 (5) Limit Production / Operational Privileges + +**Description:** + +The organization: +
    +
  1. Limits privileges to change information system components and system-related information within a production or operational environment; and
  2. +
  3. Reviews and reevaluates privileges [Assignment: organization-defined frequency].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-5 (6) Limit Library Privileges + +**Description:** + +The organization limits privileges to change software resident within software libraries. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-5 (7) Automatic Implementation Of Security Safeguards + +**Description:** + +[Withdrawn: Incorporated into SI-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-6 Configuration Settings + +**Description:** + +The organization: +
    +
  1. Establishes and documents configuration settings for information technology products employed within the information system using [Assignment: organization-defined security configuration checklists] that reflect the most restrictive mode consistent with operational requirements;
  2. +
  3. Implements the configuration settings;
  4. +
  5. Identifies, documents, and approves any deviations from established configuration settings for [Assignment: organization-defined information system components] based on [Assignment: organization-defined operational requirements]; and
  6. +
  7. Monitors and controls changes to the configuration settings in accordance with organizational policies and procedures.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-6 (1) Automated Central Management / Application / Verification + +**Description:** + +The organization employs automated mechanisms to centrally manage, apply, and verify configuration settings for [Assignment: organization-defined information system components]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## CM-6 (2) Respond To Unauthorized Changes + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] to respond to unauthorized changes to [Assignment: organization-defined configuration settings]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-6 (3) Unauthorized Change Detection + +**Description:** + +[Withdrawn: Incorporated into SI-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-6 (4) Conformance Demonstration + +**Description:** + +[Withdrawn: Incorporated into CM-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-7 Least Functionality + +**Description:** + +The organization: +
    +
  1. Configures the information system to provide only essential capabilities; and
  2. +
  3. Prohibits or restricts the use of the following functions, ports, protocols, and/or services: [Assignment: organization-defined prohibited or restricted functions, ports, protocols, and/or services].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-7 (1) Periodic Review + +**Description:** + +The organization: +
    +
  1. Reviews the information system [Assignment: organization-defined frequency] to identify unnecessary and/or nonsecure functions, ports, protocols, and services; and
  2. +
  3. Disables [Assignment: organization-defined functions, ports, protocols, and services within the information system deemed to be unnecessary and/or nonsecure].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-7 (2) Prevent Program Execution + +**Description:** + +The information system prevents program execution in accordance with [Selection (one or more): [Assignment: organization-defined policies regarding software program usage and restrictions]; rules authorizing the terms and conditions of software program usage]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## CM-7 (3) Registration Compliance + +**Description:** + +The organization ensures compliance with [Assignment: organization-defined registration requirements for functions, ports, protocols, and services]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-7 (4) Unauthorized Software / Blacklisting + +**Description:** + +The organization: +
    +
  1. Identifies [Assignment: organization-defined software programs not authorized to execute on the information system];
  2. +
  3. Employs an allow-all, deny-by-exception policy to prohibit the execution of unauthorized software programs on the information system; and
  4. +
  5. Reviews and updates the list of unauthorized software programs [Assignment: organization-defined frequency].
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-7 (5) Authorized Software / Whitelisting + +**Description:** + +The organization: +
    +
  1. Identifies [Assignment: organization-defined software programs authorized to execute on the information system];
  2. +
  3. Employs a deny-all, permit-by-exception policy to allow the execution of authorized software programs on the information system; and
  4. +
  5. Reviews and updates the list of authorized software programs [Assignment: organization-defined frequency].
  6. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## CM-8 Information System Component Inventory + +**Description:** + +The organization: +
    +
  1. Develops and documents an inventory of information system components that:
  2. + +
      +
    1. Accurately reflects the current information system;
    2. +
    3. Includes all components within the authorization boundary of the information system;
    4. +
    5. Is at the level of granularity deemed necessary for tracking and reporting; and
    6. +
    7. Includes [Assignment: organization-defined information deemed necessary to achieve effective information system component accountability]; and
    8. +
    +
  3. Reviews and updates the information system component inventory [Assignment: organization-defined frequency].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (1) Updates During Installations / Removals + +**Description:** + +The organization updates the inventory of information system components as an integral part of component installations, removals, and information system updates. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (2) Automated Maintenance + +**Description:** + +The organization employs automated mechanisms to help maintain an up-to-date, complete, accurate, and readily available inventory of information system components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (3) Automated Unauthorized Component Detection + +**Description:** + +The organization: +
    +
  1. Employs automated mechanisms [Assignment: organization-defined frequency] to detect the presence of unauthorized hardware, software, and firmware components within the information system; and
  2. +
  3. Takes the following actions when unauthorized components are detected: [Selection (one or more): disables network access by such components; isolates the components; notifies [Assignment: organization-defined personnel or roles]].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (4) Accountability Information + +**Description:** + +The organization includes in the information system component inventory information, a means for identifying by [Selection (one or more): name; position; role], individuals responsible/accountable for administering those components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (5) No Duplicate Accounting Of Components + +**Description:** + +The organization verifies that all components within the authorization boundary of the information system are not duplicated in other information system component inventories. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (6) Assessed Configurations / Approved Deviations + +**Description:** + +The organization includes assessed component configurations and any approved deviations to current deployed configurations in the information system component inventory. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (7) Centralized Repository + +**Description:** + +The organization provides a centralized repository for the inventory of information system components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (8) Automated Location Tracking + +**Description:** + +The organization employs automated mechanisms to support tracking of information system components by geographic location. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-8 (9) Assignment Of Components To Systems + +**Description:** + +The organization: +
    +
  1. Assigns [Assignment: organization-defined acquired information system components] to an information system; and
  2. +
  3. Receives an acknowledgement from the information system owner of this assignment.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-9 Configuration Management Plan + +**Description:** + +The organization develops, documents, and implements a configuration management plan for the information system that: +
    +
  1. Addresses roles, responsibilities, and configuration management processes and procedures;
  2. +
  3. Establishes a process for identifying configuration items throughout the system development life cycle and for managing the configuration of the configuration items;
  4. +
  5. Defines the configuration items for the information system and places the configuration items under configuration management; and
  6. +
  7. Protects the configuration management plan from unauthorized disclosure and modification.
  8. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## CM-9 (1) Assignment Of Responsibility + +**Description:** + +The organization assigns responsibility for developing the configuration management process to organizational personnel that are not directly involved in information system development. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-10 Software Usage Restrictions + +**Description:** + +The organization: +
    +
  1. Uses software and associated documentation in accordance with contract agreements and copyright laws;
  2. +
  3. Tracks the use of software and associated documentation protected by quantity licenses to control copying and distribution; and
  4. +
  5. Controls and documents the use of peer-to-peer file sharing technology to ensure that this capability is not used for the unauthorized distribution, display, performance, or reproduction of copyrighted work.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-10 (1) Open Source Software + +**Description:** + +The organization establishes the following restrictions on the use of open source software: [Assignment: organization-defined restrictions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CM-11 User-Installed Software + +**Description:** + +The organization: +
    +
  1. Establishes [Assignment: organization-defined policies] governing the installation of software by users;
  2. +
  3. Enforces software installation policies through [Assignment: organization-defined methods]; and
  4. +
  5. Monitors policy compliance at [Assignment: organization-defined frequency].
  6. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
+ +## CM-11 (1) Alerts For Unauthorized Installations + +**Description:** + +The information system alerts [Assignment: organization-defined personnel or roles] when the unauthorized installation of software is detected. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
+ +## CM-11 (2) Prohibit Installation Without Privileged Status + +**Description:** + +The information system prohibits user installation of software without explicit privileged status. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/CP.md b/docs/compliance/reference/800-53/CP.md new file mode 100644 index 0000000..215c5d8 --- /dev/null +++ b/docs/compliance/reference/800-53/CP.md @@ -0,0 +1,710 @@ +--- +title: "Contingency Planning" +description: "Contingency Planning reference" +keywords: "standards, compliance, security, 800-53, Contingency Planning" +--- + +## CP-1 Contingency Planning Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A contingency planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the contingency planning policy and associated contingency planning controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Contingency planning policy [Assignment: organization-defined frequency]; and
    2. +
    3. Contingency planning procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 Contingency Plan + +**Description:** + +The organization: +
    +
  1. Develops a contingency plan for the information system that:
  2. + +
      +
    1. Identifies essential missions and business functions and associated contingency requirements;
    2. +
    3. Provides recovery objectives, restoration priorities, and metrics;
    4. +
    5. Addresses contingency roles, responsibilities, assigned individuals with contact information;
    6. +
    7. Addresses maintaining essential missions and business functions despite an information system disruption, compromise, or failure;
    8. +
    9. Addresses eventual, full information system restoration without deterioration of the security safeguards originally planned and implemented; and
    10. +
    11. Is reviewed and approved by [Assignment: organization-defined personnel or roles];
    12. +
    +
  3. Distributes copies of the contingency plan to [Assignment: organization-defined key contingency personnel (identified by name and/or by role) and organizational elements];
  4. +
  5. Coordinates contingency planning activities with incident handling activities;
  6. +
  7. Reviews the contingency plan for the information system [Assignment: organization-defined frequency];
  8. +
  9. Updates the contingency plan to address changes to the organization, information system, or environment of operation and problems encountered during contingency plan implementation, execution, or testing;
  10. +
  11. Communicates contingency plan changes to [Assignment: organization-defined key contingency personnel (identified by name and/or by role) and organizational elements]; and
  12. +
  13. Protects the contingency plan from unauthorized disclosure and modification.
  14. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (1) Coordinate With Related Plans + +**Description:** + +The organization coordinates contingency plan development with organizational elements responsible for related plans. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (2) Capacity Planning + +**Description:** + +The organization conducts capacity planning so that necessary capacity for information processing, telecommunications, and environmental support exists during contingency operations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (3) Resume Essential Missions / Business Functions + +**Description:** + +The organization plans for the resumption of essential missions and business functions within [Assignment: organization-defined time period] of contingency plan activation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (4) Resume All Missions / Business Functions + +**Description:** + +The organization plans for the resumption of all missions and business functions within [Assignment: organization-defined time period] of contingency plan activation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (5) Continue Essential Missions / Business Functions + +**Description:** + +The organization plans for the continuance of essential missions and business functions with little or no loss of operational continuity and sustains that continuity until full information system restoration at primary processing and/or storage sites. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (6) Alternate Processing / Storage Site + +**Description:** + +The organization plans for the transfer of essential missions and business functions to alternate processing and/or storage sites with little or no loss of operational continuity and sustains that continuity through information system restoration to primary processing and/or storage sites. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (7) Coordinate With External Service Providers + +**Description:** + +The organization coordinates its contingency plan with the contingency plans of external service providers to ensure that contingency requirements can be satisfied. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-2 (8) Identify Critical Assets + +**Description:** + +The organization identifies critical information system assets supporting essential missions and business functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-3 Contingency Training + +**Description:** + +The organization provides contingency training to information system users consistent with assigned roles and responsibilities: +
    +
  1. Within [Assignment: organization-defined time period] of assuming a contingency role or responsibility;
  2. +
  3. When required by information system changes; and
  4. +
  5. [Assignment: organization-defined frequency] thereafter.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-3 (1) Simulated Events + +**Description:** + +The organization incorporates simulated events into contingency training to facilitate effective response by personnel in crisis situations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-3 (2) Automated Training Environments + +**Description:** + +The organization employs automated mechanisms to provide a more thorough and realistic contingency training environment. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-4 Contingency Plan Testing + +**Description:** + +The organization: +
    +
  1. Tests the contingency plan for the information system [Assignment: organization-defined frequency] using [Assignment: organization-defined tests] to determine the effectiveness of the plan and the organizational readiness to execute the plan;
  2. +
  3. Reviews the contingency plan test results; and
  4. +
  5. Initiates corrective actions, if needed.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-4 (1) Coordinate With Related Plans + +**Description:** + +The organization coordinates contingency plan testing with organizational elements responsible for related plans. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-4 (2) Alternate Processing Site + +**Description:** + +The organization tests the contingency plan at the alternate processing site: +
    +
  1. To familiarize contingency personnel with the facility and available resources; and
  2. +
  3. To evaluate the capabilities of the alternate processing site to support contingency operations.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-4 (3) Automated Testing + +**Description:** + +The organization employs automated mechanisms to more thoroughly and effectively test the contingency plan. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-4 (4) Full Recovery / Reconstitution + +**Description:** + +The organization includes a full recovery and reconstitution of the information system to a known state as part of contingency plan testing. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-6 Alternate Storage Site + +**Description:** + +The organization: +
    +
  1. Establishes an alternate storage site including necessary agreements to permit the storage and retrieval of information system backup information; and
  2. +
  3. Ensures that the alternate storage site provides information security safeguards equivalent to that of the primary site.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-6 (1) Separation From Primary Site + +**Description:** + +The organization identifies an alternate storage site that is separated from the primary storage site to reduce susceptibility to the same threats. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-6 (2) Recovery Time / Point Objectives + +**Description:** + +The organization configures the alternate storage site to facilitate recovery operations in accordance with recovery time and recovery point objectives. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-6 (3) Accessibility + +**Description:** + +The organization identifies potential accessibility problems to the alternate storage site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-7 Alternate Processing Site + +**Description:** + +The organization: +
    +
  1. Establishes an alternate processing site including necessary agreements to permit the transfer and resumption of [Assignment: organization-defined information system operations] for essential missions/business functions within [Assignment: organization-defined time period consistent with recovery time and recovery point objectives] when the primary processing capabilities are unavailable;
  2. +
  3. Ensures that equipment and supplies required to transfer and resume operations are available at the alternate processing site or contracts are in place to support delivery to the site within the organization-defined time period for transfer/resumption; and
  4. +
  5. Ensures that the alternate processing site provides information security safeguards equivalent to those of the primary site.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-7 (1) Separation From Primary Site + +**Description:** + +The organization identifies an alternate processing site that is separated from the primary processing site to reduce susceptibility to the same threats. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-7 (2) Accessibility + +**Description:** + +The organization identifies potential accessibility problems to the alternate processing site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-7 (3) Priority Of Service + +**Description:** + +The organization develops alternate processing site agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives). +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-7 (4) Preparation For Use + +**Description:** + +The organization prepares the alternate processing site so that the site is ready to be used as the operational site supporting essential missions and business functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-7 (5) Equivalent Information Security Safeguards + +**Description:** + +[Withdrawn: Incorporated into CP-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-7 (6) Inability To Return To Primary Site + +**Description:** + +The organization plans and prepares for circumstances that preclude returning to the primary processing site. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-8 Telecommunications Services + +**Description:** + +The organization establishes alternate telecommunications services including necessary agreements to permit the resumption of [Assignment: organization-defined information system operations] for essential missions and business functions within [Assignment: organization-defined time period] when the primary telecommunications capabilities are unavailable at either the primary or alternate processing or storage sites. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-8 (1) Priority Of Service Provisions + +**Description:** + +The organization: +
    +
  1. Develops primary and alternate telecommunications service agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives); and
  2. +
  3. Requests Telecommunications Service Priority for all telecommunications services used for national security emergency preparedness in the event that the primary and/or alternate telecommunications services are provided by a common carrier.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-8 (2) Single Points Of Failure + +**Description:** + +The organization obtains alternate telecommunications services to reduce the likelihood of sharing a single point of failure with primary telecommunications services. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-8 (3) Separation Of Primary / Alternate Providers + +**Description:** + +The organization obtains alternate telecommunications services from providers that are separated from primary service providers to reduce susceptibility to the same threats. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-8 (4) Provider Contingency Plan + +**Description:** + +The organization: +
    +
  1. Requires primary and alternate telecommunications service providers to have contingency plans;
  2. +
  3. Reviews provider contingency plans to ensure that the plans meet organizational contingency requirements; and
  4. +
  5. Obtains evidence of contingency testing/training by providers [Assignment: organization-defined frequency].
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-8 (5) Alternate Telecommunication Service Testing + +**Description:** + +The organization tests alternate telecommunication services [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 Information System Backup + +**Description:** + +The organization: +
    +
  1. Conducts backups of user-level information contained in the information system [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives];
  2. +
  3. Conducts backups of system-level information contained in the information system [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives];
  4. +
  5. Conducts backups of information system documentation including security-related documentation [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives]; and
  6. +
  7. Protects the confidentiality, integrity, and availability of backup information at storage locations.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 (1) Testing For Reliability / Integrity + +**Description:** + +The organization tests backup information [Assignment: organization-defined frequency] to verify media reliability and information integrity. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 (2) Test Restoration Using Sampling + +**Description:** + +The organization uses a sample of backup information in the restoration of selected information system functions as part of contingency plan testing. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 (3) Separate Storage For Critical Information + +**Description:** + +The organization stores backup copies of [Assignment: organization-defined critical information system software and other security-related information] in a separate facility or in a fire-rated container that is not collocated with the operational system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 (4) Protection From Unauthorized Modification + +**Description:** + +[Withdrawn: Incorporated into CP-9]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 (5) Transfer To Alternate Storage Site + +**Description:** + +The organization transfers information system backup information to the alternate storage site [Assignment: organization-defined time period and transfer rate consistent with the recovery time and recovery point objectives]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 (6) Redundant Secondary System + +**Description:** + +The organization accomplishes information system backup by maintaining a redundant secondary system that is not collocated with the primary system and that can be activated without loss of information or disruption to operations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-9 (7) Dual Authorization + +**Description:** + +The organization enforces dual authorization for the deletion or destruction of [Assignment: organization-defined backup information]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-10 Information System Recovery And Reconstitution + +**Description:** + +The organization provides for the recovery and reconstitution of the information system to a known state after a disruption, compromise, or failure. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-10 (1) Contingency Plan Testing + +**Description:** + +[Withdrawn: Incorporated into CP-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-10 (2) Transaction Recovery + +**Description:** + +The information system implements transaction recovery for systems that are transaction-based. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## CP-10 (3) Compensating Security Controls + +**Description:** + +[Withdrawn: Addressed through tailoring procedures]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-10 (4) Restore Within Time Period + +**Description:** + +The organization provides the capability to restore information system components within [Assignment: organization-defined restoration time-periods] from configuration-controlled and integrity-protected information representing a known, operational state for the components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-10 (5) Failover Capability + +**Description:** + +[Withdrawn: Incorporated into SI-13]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-10 (6) Component Protection + +**Description:** + +The organization protects backup and restoration hardware, firmware, and software. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-11 Alternate Communications Protocols + +**Description:** + +The information system provides the capability to employ [Assignment: organization-defined alternative communications protocols] in support of maintaining continuity of operations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-12 Safe Mode + +**Description:** + +The information system, when [Assignment: organization-defined conditions] are detected, enters a safe mode of operation with [Assignment: organization-defined restrictions of safe mode of operation]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## CP-13 Alternative Security Mechanisms + +**Description:** + +The organization employs [Assignment: organization-defined alternative or supplemental security mechanisms] for satisfying [Assignment: organization-defined security functions] when the primary means of implementing the security function is unavailable or compromised. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/IA.md b/docs/compliance/reference/800-53/IA.md new file mode 100644 index 0000000..0d3e516 --- /dev/null +++ b/docs/compliance/reference/800-53/IA.md @@ -0,0 +1,1008 @@ +--- +title: "Identification And Authentication" +description: "Identification And Authentication reference" +keywords: "standards, compliance, security, 800-53, Identification And Authentication" +--- + +## IA-1 Identification And Authentication Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. An identification and authentication policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the identification and authentication policy and associated identification and authentication controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Identification and authentication policy [Assignment: organization-defined frequency]; and
    2. +
    3. Identification and authentication procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 Identification And Authentication (Organizational Users) + +**Description:** + +The information system uniquely identifies and authenticates organizational users (or processes acting on behalf of organizational users). +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-2 (1) Network Access To Privileged Accounts + +**Description:** + +The information system implements multifactor authentication for network access to privileged accounts. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (2) Network Access To Non-Privileged Accounts + +**Description:** + +The information system implements multifactor authentication for network access to non-privileged accounts. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (3) Local Access To Privileged Accounts + +**Description:** + +The information system implements multifactor authentication for local access to privileged accounts. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (4) Local Access To Non-Privileged Accounts + +**Description:** + +The information system implements multifactor authentication for local access to non-privileged accounts. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (5) Group Authentication + +**Description:** + +The organization requires individuals to be authenticated with an individual authenticator when a group authenticator is employed. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-2 (6) Network Access To Privileged Accounts - Separate Device + +**Description:** + +The information system implements multifactor authentication for network access to privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (7) Network Access To Non-Privileged Accounts - Separate Device + +**Description:** + +The information system implements multifactor authentication for network access to non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (8) Network Access To Privileged Accounts - Replay Resistant + +**Description:** + +The information system implements replay-resistant authentication mechanisms for network access to privileged accounts. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-2 (9) Network Access To Non-Privileged Accounts - Replay Resistant + +**Description:** + +The information system implements replay-resistant authentication mechanisms for network access to non-privileged accounts. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-2 (10) Single Sign-On + +**Description:** + +The information system provides a single sign-on capability for [Assignment: organization-defined information system accounts and services]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (11) Remote Access - Separate Device + +**Description:** + +The information system implements multifactor authentication for remote access to privileged and non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (12) Acceptance Of Piv Credentials + +**Description:** + +The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-2 (13) Out-Of-Band Authentication + +**Description:** + +The information system implements [Assignment: organization-defined out-of-band authentication] under [Assignment: organization-defined conditions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-3 Device Identification And Authentication + +**Description:** + +The information system uniquely identifies and authenticates [Assignment: organization-defined specific and/or types of devices] before establishing a [Selection (one or more): local; remote; network] connection. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## IA-3 (1) Cryptographic Bidirectional Authentication + +**Description:** + +The information system authenticates [Assignment: organization-defined specific devices and/or types of devices] before establishing [Selection (one or more): local; remote; network] connection using bidirectional authentication that is cryptographically based. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-3 (2) Cryptographic Bidirectional Network Authentication + +**Description:** + +[Withdrawn: Incorporated into IA-3 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-3 (3) Dynamic Address Allocation + +**Description:** + +The organization: +
    +
  1. Standardizes dynamic address allocation lease information and the lease duration assigned to devices in accordance with [Assignment: organization-defined lease information and lease duration]; and
  2. +
  3. Audits lease information when assigned to a device.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-3 (4) Device Attestation + +**Description:** + +The organization ensures that device identification and authentication based on attestation is handled by [Assignment: organization-defined configuration management process]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-4 Identifier Management + +**Description:** + +The organization manages information system identifiers by: +
    +
  1. Receiving authorization from [Assignment: organization-defined personnel or roles] to assign an individual, group, role, or device identifier;
  2. +
  3. Selecting an identifier that identifies an individual, group, role, or device;
  4. +
  5. Assigning the identifier to the intended individual, group, role, or device;
  6. +
  7. Preventing reuse of identifiers for [Assignment: organization-defined time period]; and
  8. +
  9. Disabling the identifier after [Assignment: organization-defined time period of inactivity].
  10. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-4 (1) Prohibit Account Identifiers As Public Identifiers + +**Description:** + +The organization prohibits the use of information system account identifiers that are the same as public identifiers for individual electronic mail accounts. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-4 (2) Supervisor Authorization + +**Description:** + +The organization requires that the registration process to receive an individual identifier includes supervisor authorization. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-4 (3) Multiple Forms Of Certification + +**Description:** + +The organization requires multiple forms of certification of individual identification be presented to the registration authority. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-4 (4) Identify User Status + +**Description:** + +The organization manages individual identifiers by uniquely identifying each individual as [Assignment: organization-defined characteristic identifying individual status]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-4 (5) Dynamic Management + +**Description:** + +The information system dynamically manages identifiers. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-4 (6) Cross-Organization Management + +**Description:** + +The organization coordinates with [Assignment: organization-defined external organizations] for cross-organization management of identifiers. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-4 (7) In-Person Registration + +**Description:** + +The organization requires that the registration process to receive an individual identifier be conducted in person before a designated registration authority. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 Authenticator Management + +**Description:** + +The organization manages information system authenticators by: +
    +
  1. Verifying, as part of the initial authenticator distribution, the identity of the individual, group, role, or device receiving the authenticator;
  2. +
  3. Establishing initial authenticator content for authenticators defined by the organization;
  4. +
  5. Ensuring that authenticators have sufficient strength of mechanism for their intended use;
  6. +
  7. Establishing and implementing administrative procedures for initial authenticator distribution, for lost/compromised or damaged authenticators, and for revoking authenticators;
  8. +
  9. Changing default content of authenticators prior to information system installation;
  10. +
  11. Establishing minimum and maximum lifetime restrictions and reuse conditions for authenticators;
  12. +
  13. Changing/refreshing authenticators [Assignment: organization-defined time period by authenticator type];
  14. +
  15. Protecting authenticator content from unauthorized disclosure and modification;
  16. +
  17. Requiring individuals to take, and having devices implement, specific security safeguards to protect authenticators; and
  18. +
  19. Changing authenticators for group/role accounts when membership to those accounts changes.
  20. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-5 (1) Password-Based Authentication + +**Description:** + +The information system, for password-based authentication: +
    +
  1. Enforces minimum password complexity of [Assignment: organization-defined requirements for case sensitivity, number of characters, mix of upper-case letters, lower-case letters, numbers, and special characters, including minimum requirements for each type];
  2. +
  3. Enforces at least the following number of changed characters when new passwords are created: [Assignment: organization-defined number];
  4. +
  5. Stores and transmits only cryptographically-protected passwords;
  6. +
  7. Enforces password minimum and maximum lifetime restrictions of [Assignment: organization-defined numbers for lifetime minimum, lifetime maximum];
  8. +
  9. Prohibits password reuse for [Assignment: organization-defined number] generations; and
  10. +
  11. Allows the use of a temporary password for system logons with an immediate change to a permanent password.
  12. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-5 (2) Pki-Based Authentication + +**Description:** + +The information system, for PKI-based authentication: +
    +
  1. Validates certifications by constructing and verifying a certification path to an accepted trust anchor including checking certificate status information;
  2. +
  3. Enforces authorized access to the corresponding private key;
  4. +
  5. Maps the authenticated identity to the account of the individual or group; and
  6. +
  7. Implements a local cache of revocation data to support path discovery and validation in case of inability to access revocation information via the network.
  8. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-5 (3) In-Person Or Trusted Third-Party Registration + +**Description:** + +The organization requires that the registration process to receive [Assignment: organization-defined types of and/or specific authenticators] be conducted [Selection: in person; by a trusted third party] before [Assignment: organization-defined registration authority] with authorization by [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (4) Automated Support For Password Strength Determination + +**Description:** + +The organization employs automated tools to determine if password authenticators are sufficiently strong to satisfy [Assignment: organization-defined requirements]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-5 (5) Change Authenticators Prior To Delivery + +**Description:** + +The organization requires developers/installers of information system components to provide unique authenticators or change default authenticators prior to delivery/installation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (6) Protection Of Authenticators + +**Description:** + +The organization protects authenticators commensurate with the security category of the information to which use of the authenticator permits access. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-5 (7) No Embedded Unencrypted Static Authenticators + +**Description:** + +The organization ensures that unencrypted static authenticators are not embedded in applications or access scripts or stored on function keys. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (8) Multiple Information System Accounts + +**Description:** + +The organization implements [Assignment: organization-defined security safeguards] to manage the risk of compromise due to individuals having accounts on multiple information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (9) Cross-Organization Credential Management + +**Description:** + +The organization coordinates with [Assignment: organization-defined external organizations] for cross-organization management of credentials. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (10) Dynamic Credential Association + +**Description:** + +The information system dynamically provisions identities. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (11) Hardware Token-Based Authentication + +**Description:** + +The information system, for hardware token-based authentication, employs mechanisms that satisfy [Assignment: organization-defined token quality requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (12) Biometric-Based Authentication + +**Description:** + +The information system, for biometric-based authentication, employs mechanisms that satisfy [Assignment: organization-defined biometric quality requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (13) Expiration Of Cached Authenticators + +**Description:** + +The information system prohibits the use of cached authenticators after [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (14) Managing Content Of Pki Trust Stores + +**Description:** + +The organization, for PKI-based authentication, employs a deliberate organization-wide methodology for managing the content of PKI trust stores installed across all platforms including networks, operating systems, browsers, and applications. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-5 (15) Ficam-Approved Products And Services + +**Description:** + +The organization uses only FICAM-approved path discovery and validation products and services. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-6 Authenticator Feedback + +**Description:** + +The information system obscures feedback of authentication information during the authentication process to protect the information from possible exploitation/use by unauthorized individuals. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## IA-7 Cryptographic Module Authentication + +**Description:** + +The information system implements mechanisms for authentication to a cryptographic module that meet the requirements of applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance for such authentication. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## IA-8 Identification And Authentication (Non-Organizational Users) + +**Description:** + +The information system uniquely identifies and authenticates non-organizational users (or processes acting on behalf of non-organizational users). +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## IA-8 (1) Acceptance Of Piv Credentials From Other Agencies + +**Description:** + +The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials from other federal agencies. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-8 (2) Acceptance Of Third-Party Credentials + +**Description:** + +The information system accepts only FICAM-approved third-party credentials. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-8 (3) Use Of Ficam-Approved Products + +**Description:** + +The organization employs only FICAM-approved information system components in [Assignment: organization-defined information systems] to accept third-party credentials. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-8 (4) Use Of Ficam-Issued Profiles + +**Description:** + +The information system conforms to FICAM-issued profiles. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## IA-8 (5) Acceptance Of Piv-I Credentials + +**Description:** + +The information system accepts and electronically verifies Personal Identity Verification-I (PIV-I) credentials. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-9 Service Identification And Authentication + +**Description:** + +The organization identifies and authenticates [Assignment: organization-defined information system services] using [Assignment: organization-defined security safeguards]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-9 (1) Information Exchange + +**Description:** + +The organization ensures that service providers receive, validate, and transmit identification and authentication information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-9 (2) Transmission Of Decisions + +**Description:** + +The organization ensures that identification and authentication decisions are transmitted between [Assignment: organization-defined services] consistent with organizational policies. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-10 Adaptive Identification And Authentication + +**Description:** + +The organization requires that individuals accessing the information system employ [Assignment: organization-defined supplemental authentication techniques or mechanisms] under specific [Assignment: organization-defined circumstances or situations]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IA-11 Re-Authentication + +**Description:** + +The organization requires users and devices to re-authenticate when [Assignment: organization-defined circumstances or situations requiring re-authentication]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/IR.md b/docs/compliance/reference/800-53/IR.md new file mode 100644 index 0000000..e826a60 --- /dev/null +++ b/docs/compliance/reference/800-53/IR.md @@ -0,0 +1,459 @@ +--- +title: "Incident Response" +description: "Incident Response reference" +keywords: "standards, compliance, security, 800-53, Incident Response" +--- + +## IR-1 Incident Response Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. An incident response policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the incident response policy and associated incident response controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Incident response policy [Assignment: organization-defined frequency]; and
    2. +
    3. Incident response procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-2 Incident Response Training + +**Description:** + +The organization provides incident response training to information system users consistent with assigned roles and responsibilities: +
    +
  1. Within [Assignment: organization-defined time period] of assuming an incident response role or responsibility;
  2. +
  3. When required by information system changes; and
  4. +
  5. [Assignment: organization-defined frequency] thereafter.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-2 (1) Simulated Events + +**Description:** + +The organization incorporates simulated events into incident response training to facilitate effective response by personnel in crisis situations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-2 (2) Automated Training Environments + +**Description:** + +The organization employs automated mechanisms to provide a more thorough and realistic incident response training environment. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-3 Incident Response Testing + +**Description:** + +The organization tests the incident response capability for the information system [Assignment: organization-defined frequency] using [Assignment: organization-defined tests] to determine the incident response effectiveness and documents the results. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-3 (1) Automated Testing + +**Description:** + +The organization employs automated mechanisms to more thoroughly and effectively test the incident response capability. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-3 (2) Coordination With Related Plans + +**Description:** + +The organization coordinates incident response testing with organizational elements responsible for related plans. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 Incident Handling + +**Description:** + +The organization: +
    +
  1. Implements an incident handling capability for security incidents that includes preparation, detection and analysis, containment, eradication, and recovery;
  2. +
  3. Coordinates incident handling activities with contingency planning activities; and
  4. +
  5. Incorporates lessons learned from ongoing incident handling activities into incident response procedures, training, and testing, and implements the resulting changes accordingly.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (1) Automated Incident Handling Processes + +**Description:** + +The organization employs automated mechanisms to support the incident handling process. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (2) Dynamic Reconfiguration + +**Description:** + +The organization includes dynamic reconfiguration of [Assignment: organization-defined information system components] as part of the incident response capability. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (3) Continuity Of Operations + +**Description:** + +The organization identifies [Assignment: organization-defined classes of incidents] and [Assignment: organization-defined actions to take in response to classes of incidents] to ensure continuation of organizational missions and business functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (4) Information Correlation + +**Description:** + +The organization correlates incident information and individual incident responses to achieve an organization-wide perspective on incident awareness and response. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (5) Automatic Disabling Of Information System + +**Description:** + +The organization implements a configurable capability to automatically disable the information system if [Assignment: organization-defined security violations] are detected. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (6) Insider Threats - Specific Capabilities + +**Description:** + +The organization implements incident handling capability for insider threats. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (7) Insider Threats - Intra-Organization Coordination + +**Description:** + +The organization coordinates incident handling capability for insider threats across [Assignment: organization-defined components or elements of the organization]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (8) Correlation With External Organizations + +**Description:** + +The organization coordinates with [Assignment: organization-defined external organizations] to correlate and share [Assignment: organization-defined incident information] to achieve a cross-organization perspective on incident awareness and more effective incident responses. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (9) Dynamic Response Capability + +**Description:** + +The organization employs [Assignment: organization-defined dynamic response capabilities] to effectively respond to security incidents. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-4 (10) Supply Chain Coordination + +**Description:** + +The organization coordinates incident handling activities involving supply chain events with other organizations involved in the supply chain. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-5 Incident Monitoring + +**Description:** + +The organization tracks and documents information system security incidents. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-5 (1) Automated Tracking / Data Collection / Analysis + +**Description:** + +The organization employs automated mechanisms to assist in the tracking of security incidents and in the collection and analysis of incident information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-6 Incident Reporting + +**Description:** + +The organization: +
    +
  1. Requires personnel to report suspected security incidents to the organizational incident response capability within [Assignment: organization-defined time period]; and
  2. +
  3. Reports security incident information to [Assignment: organization-defined authorities].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-6 (1) Automated Reporting + +**Description:** + +The organization employs automated mechanisms to assist in the reporting of security incidents. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-6 (2) Vulnerabilities Related To Incidents + +**Description:** + +The organization reports information system vulnerabilities associated with reported security incidents to [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-6 (3) Coordination With Supply Chain + +**Description:** + +The organization provides security incident information to other organizations involved in the supply chain for information systems or information system components related to the incident. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-7 Incident Response Assistance + +**Description:** + +The organization provides an incident response support resource, integral to the organizational incident response capability that offers advice and assistance to users of the information system for the handling and reporting of security incidents. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-7 (1) Automation Support For Availability Of Information / Support + +**Description:** + +The organization employs automated mechanisms to increase the availability of incident response-related information and support. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-7 (2) Coordination With External Providers + +**Description:** + +The organization: +
    +
  1. Establishes a direct, cooperative relationship between its incident response capability and external providers of information system protection capability; and
  2. +
  3. Identifies organizational incident response team members to the external providers.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-8 Incident Response Plan + +**Description:** + +The organization: +
    +
  1. Develops an incident response plan that:
  2. + +
      +
    1. Provides the organization with a roadmap for implementing its incident response capability;
    2. +
    3. Describes the structure and organization of the incident response capability;
    4. +
    5. Provides a high-level approach for how the incident response capability fits into the overall organization;
    6. +
    7. Meets the unique requirements of the organization, which relate to mission, size, structure, and functions;
    8. +
    9. Defines reportable incidents;
    10. +
    11. Provides metrics for measuring the incident response capability within the organization;
    12. +
    13. Defines the resources and management support needed to effectively maintain and mature an incident response capability; and
    14. +
    15. Is reviewed and approved by [Assignment: organization-defined personnel or roles];
    16. +
    +
  3. Distributes copies of the incident response plan to [Assignment: organization-defined incident response personnel (identified by name and/or by role) and organizational elements];
  4. +
  5. Reviews the incident response plan [Assignment: organization-defined frequency];
  6. +
  7. Updates the incident response plan to address system/organizational changes or problems encountered during plan implementation, execution, or testing;
  8. +
  9. Communicates incident response plan changes to [Assignment: organization-defined incident response personnel (identified by name and/or by role) and organizational elements]; and
  10. +
  11. Protects the incident response plan from unauthorized disclosure and modification.
  12. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-9 Information Spillage Response + +**Description:** + +The organization responds to information spills by: +
    +
  1. Identifying the specific information involved in the information system contamination;
  2. +
  3. Alerting [Assignment: organization-defined personnel or roles] of the information spill using a method of communication not associated with the spill;
  4. +
  5. Isolating the contaminated information system or system component;
  6. +
  7. Eradicating the information from the contaminated information system or component;
  8. +
  9. Identifying other information systems or system components that may have been subsequently contaminated; and
  10. +
  11. Performing other [Assignment: organization-defined actions].
  12. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-9 (1) Responsible Personnel + +**Description:** + +The organization assigns [Assignment: organization-defined personnel or roles] with responsibility for responding to information spills. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-9 (2) Training + +**Description:** + +The organization provides information spillage response training [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-9 (3) Post-Spill Operations + +**Description:** + +The organization implements [Assignment: organization-defined procedures] to ensure that organizational personnel impacted by information spills can continue to carry out assigned tasks while contaminated systems are undergoing corrective actions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-9 (4) Exposure To Unauthorized Personnel + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] for personnel exposed to information not within assigned access authorizations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## IR-10 Integrated Information Security Analysis Team + +**Description:** + +The organization establishes an integrated team of forensic/malicious code analysts, tool developers, and real-time operations personnel. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/MA.md b/docs/compliance/reference/800-53/MA.md new file mode 100644 index 0000000..51a68b1 --- /dev/null +++ b/docs/compliance/reference/800-53/MA.md @@ -0,0 +1,384 @@ +--- +title: "Maintenance" +description: "Maintenance reference" +keywords: "standards, compliance, security, 800-53, Maintenance" +--- + +## MA-1 System Maintenance Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A system maintenance policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the system maintenance policy and associated system maintenance controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. System maintenance policy [Assignment: organization-defined frequency]; and
    2. +
    3. System maintenance procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-2 Controlled Maintenance + +**Description:** + +The organization: +
    +
  1. Schedules, performs, documents, and reviews records of maintenance and repairs on information system components in accordance with manufacturer or vendor specifications and/or organizational requirements;
  2. +
  3. Approves and monitors all maintenance activities, whether performed on site or remotely and whether the equipment is serviced on site or removed to another location;
  4. +
  5. Requires that [Assignment: organization-defined personnel or roles] explicitly approve the removal of the information system or system components from organizational facilities for off-site maintenance or repairs;
  6. +
  7. Sanitizes equipment to remove all information from associated media prior to removal from organizational facilities for off-site maintenance or repairs;
  8. +
  9. Checks all potentially impacted security controls to verify that the controls are still functioning properly following maintenance or repair actions; and
  10. +
  11. Includes [Assignment: organization-defined maintenance-related information] in organizational maintenance records.
  12. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-2 (1) Record Content + +**Description:** + +[Withdrawn: Incorporated into MA-2]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-2 (2) Automated Maintenance Activities + +**Description:** + +The organization: +
    +
  1. Employs automated mechanisms to schedule, conduct, and document maintenance and repairs; and
  2. +
  3. Produces up-to date, accurate, and complete records of all maintenance and repair actions requested, scheduled, in process, and completed.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-3 Maintenance Tools + +**Description:** + +The organization approves, controls, and monitors information system maintenance tools. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-3 (1) Inspect Tools + +**Description:** + +The organization inspects the maintenance tools carried into a facility by maintenance personnel for improper or unauthorized modifications. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-3 (2) Inspect Media + +**Description:** + +The organization checks media containing diagnostic and test programs for malicious code before the media are used in the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-3 (3) Prevent Unauthorized Removal + +**Description:** + +The organization prevents the unauthorized removal of maintenance equipment containing organizational information by: +
    +
  1. Verifying that there is no organizational information contained on the equipment;
  2. +
  3. Sanitizing or destroying the equipment;
  4. +
  5. Retaining the equipment within the facility; or
  6. +
  7. Obtaining an exemption from [Assignment: organization-defined personnel or roles] explicitly authorizing removal of the equipment from the facility.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-3 (4) Restricted Tool Use + +**Description:** + +The information system restricts the use of maintenance tools to authorized personnel only. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 Nonlocal Maintenance + +**Description:** + +The organization: +
    +
  1. Approves and monitors nonlocal maintenance and diagnostic activities;
  2. +
  3. Allows the use of nonlocal maintenance and diagnostic tools only as consistent with organizational policy and documented in the security plan for the information system;
  4. +
  5. Employs strong authenticators in the establishment of nonlocal maintenance and diagnostic sessions;
  6. +
  7. Maintains records for nonlocal maintenance and diagnostic activities; and
  8. +
  9. Terminates session and network connections when nonlocal maintenance is completed.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 (1) Auditing And Review + +**Description:** + +The organization: +
    +
  1. Audits nonlocal maintenance and diagnostic sessions [Assignment: organization-defined audit events]; and
  2. +
  3. Reviews the records of the maintenance and diagnostic sessions.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 (2) Document Nonlocal Maintenance + +**Description:** + +The organization documents in the security plan for the information system, the policies and procedures for the establishment and use of nonlocal maintenance and diagnostic connections. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 (3) Comparable Security / Sanitization + +**Description:** + +The organization: +
    +
  1. Requires that nonlocal maintenance and diagnostic services be performed from an information system that implements a security capability comparable to the capability implemented on the system being serviced; or
  2. +
  3. Removes the component to be serviced from the information system prior to nonlocal maintenance or diagnostic services, sanitizes the component (with regard to organizational information) before removal from organizational facilities, and after the service is performed, inspects and sanitizes the component (with regard to potentially malicious software) before reconnecting the component to the information system.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 (4) Authentication / Separation Of Maintenance Sessions + +**Description:** + +The organization protects nonlocal maintenance sessions by: +
    +
  1. Employing [Assignment: organization-defined authenticators that are replay resistant]; and
  2. +
  3. Separating the maintenance sessions from other network sessions with the information system by either:
  4. + +
      +
    1. Physically separated communications paths; or
    2. +
    3. Logically separated communications paths based upon encryption.
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 (5) Approvals And Notifications + +**Description:** + +The organization: +
    +
  1. Requires the approval of each nonlocal maintenance session by [Assignment: organization-defined personnel or roles]; and
  2. +
  3. Notifies [Assignment: organization-defined personnel or roles] of the date and time of planned nonlocal maintenance.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 (6) Cryptographic Protection + +**Description:** + +The information system implements cryptographic mechanisms to protect the integrity and confidentiality of nonlocal maintenance and diagnostic communications. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-4 (7) Remote Disconnect Verification + +**Description:** + +The information system implements remote disconnect verification at the termination of nonlocal maintenance and diagnostic sessions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-5 Maintenance Personnel + +**Description:** + +The organization: +
    +
  1. Establishes a process for maintenance personnel authorization and maintains a list of authorized maintenance organizations or personnel;
  2. +
  3. Ensures that non-escorted personnel performing maintenance on the information system have required access authorizations; and
  4. +
  5. Designates organizational personnel with required access authorizations and technical competence to supervise the maintenance activities of personnel who do not possess the required access authorizations.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-5 (1) Individuals Without Appropriate Access + +**Description:** + +The organization: +
    +
  1. Implements procedures for the use of maintenance personnel that lack appropriate security clearances or are not U.S. citizens, that include the following requirements:
  2. + +
      +
    1. Maintenance personnel who do not have needed access authorizations, clearances, or formal access approvals are escorted and supervised during the performance of maintenance and diagnostic activities on the information system by approved organizational personnel who are fully cleared, have appropriate access authorizations, and are technically qualified;
    2. +
    3. Prior to initiating maintenance or diagnostic activities by personnel who do not have needed access authorizations, clearances or formal access approvals, all volatile information storage components within the information system are sanitized and all nonvolatile storage media are removed or physically disconnected from the system and secured; and
    4. +
    +
  3. Develops and implements alternate security safeguards in the event an information system component cannot be sanitized, removed, or disconnected from the system.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-5 (2) Security Clearances For Classified Systems + +**Description:** + +The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information possess security clearances and formal access approvals for at least the highest classification level and for all compartments of information on the system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-5 (3) Citizenship Requirements For Classified Systems + +**Description:** + +The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information are U.S. citizens. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-5 (4) Foreign Nationals + +**Description:** + +The organization ensures that: +
    +
  1. Cleared foreign nationals (i.e., foreign nationals with appropriate security clearances), are used to conduct maintenance and diagnostic activities on classified information systems only when the systems are jointly owned and operated by the United States and foreign allied governments, or owned and operated solely by foreign allied governments; and
  2. +
  3. Approvals, consents, and detailed operational conditions regarding the use of foreign nationals to conduct maintenance and diagnostic activities on classified information systems are fully documented within Memoranda of Agreements.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-5 (5) Nonsystem-Related Maintenance + +**Description:** + +The organization ensures that non-escorted personnel performing maintenance activities not directly associated with the information system but in the physical proximity of the system, have required access authorizations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-6 Timely Maintenance + +**Description:** + +The organization obtains maintenance support and/or spare parts for [Assignment: organization-defined information system components] within [Assignment: organization-defined time period] of failure. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-6 (1) Preventive Maintenance + +**Description:** + +The organization performs preventive maintenance on [Assignment: organization-defined information system components] at [Assignment: organization-defined time intervals]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-6 (2) Predictive Maintenance + +**Description:** + +The organization performs predictive maintenance on [Assignment: organization-defined information system components] at [Assignment: organization-defined time intervals]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MA-6 (3) Automated Support For Predictive Maintenance + +**Description:** + +The organization employs automated mechanisms to transfer predictive maintenance data to a computerized maintenance management system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/MP.md b/docs/compliance/reference/800-53/MP.md new file mode 100644 index 0000000..548a132 --- /dev/null +++ b/docs/compliance/reference/800-53/MP.md @@ -0,0 +1,392 @@ +--- +title: "Media Protection" +description: "Media Protection reference" +keywords: "standards, compliance, security, 800-53, Media Protection" +--- + +## MP-1 Media Protection Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A media protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the media protection policy and associated media protection controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Media protection policy [Assignment: organization-defined frequency]; and
    2. +
    3. Media protection procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-2 Media Access + +**Description:** + +The organization restricts access to [Assignment: organization-defined types of digital and/or non-digital media] to [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-2 (1) Automated Restricted Access + +**Description:** + +[Withdrawn: Incorporated into MP-4 (2)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-2 (2) Cryptographic Protection + +**Description:** + +[Withdrawn: Incorporated into SC-28 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-3 Media Marking + +**Description:** + +The organization: +
    +
  1. Marks information system media indicating the distribution limitations, handling caveats, and applicable security markings (if any) of the information; and
  2. +
  3. Exempts [Assignment: organization-defined types of information system media] from marking as long as the media remain within [Assignment: organization-defined controlled areas].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-4 Media Storage + +**Description:** + +The organization: +
    +
  1. Physically controls and securely stores [Assignment: organization-defined types of digital and/or non-digital media] within [Assignment: organization-defined controlled areas]; and
  2. +
  3. Protects information system media until the media are destroyed or sanitized using approved equipment, techniques, and procedures.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-4 (1) Cryptographic Protection + +**Description:** + +[Withdrawn: Incorporated into SC-28 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-4 (2) Automated Restricted Access + +**Description:** + +The organization employs automated mechanisms to restrict access to media storage areas and to audit access attempts and access granted. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-5 Media Transport + +**Description:** + +The organization: +
    +
  1. Protects and controls [Assignment: organization-defined types of information system media] during transport outside of controlled areas using [Assignment: organization-defined security safeguards];
  2. +
  3. Maintains accountability for information system media during transport outside of controlled areas;
  4. +
  5. Documents activities associated with the transport of information system media; and
  6. +
  7. Restricts the activities associated with the transport of information system media to authorized personnel.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-5 (1) Protection Outside Of Controlled Areas + +**Description:** + +[Withdrawn: Incorporated into MP-5]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-5 (2) Documentation Of Activities + +**Description:** + +[Withdrawn: Incorporated into MP-5]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-5 (3) Custodians + +**Description:** + +The organization employs an identified custodian during transport of information system media outside of controlled areas. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-5 (4) Cryptographic Protection + +**Description:** + +The information system implements cryptographic mechanisms to protect the confidentiality and integrity of information stored on digital media during transport outside of controlled areas. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 Media Sanitization + +**Description:** + +The organization: +
    +
  1. Sanitizes [Assignment: organization-defined information system media] prior to disposal, release out of organizational control, or release for reuse using [Assignment: organization-defined sanitization techniques and procedures] in accordance with applicable federal and organizational standards and policies; and
  2. +
  3. Employs sanitization mechanisms with the strength and integrity commensurate with the security category or classification of the information.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (1) Review / Approve / Track / Document / Verify + +**Description:** + +The organization reviews, approves, tracks, documents, and verifies media sanitization and disposal actions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (2) Equipment Testing + +**Description:** + +The organization tests sanitization equipment and procedures [Assignment: organization-defined frequency] to verify that the intended sanitization is being achieved. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (3) Nondestructive Techniques + +**Description:** + +The organization applies nondestructive sanitization techniques to portable storage devices prior to connecting such devices to the information system under the following circumstances: [Assignment: organization-defined circumstances requiring sanitization of portable storage devices]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (4) Controlled Unclassified Information + +**Description:** + +[Withdrawn: Incorporated into MP-6]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (5) Classified Information + +**Description:** + +[Withdrawn: Incorporated into MP-6]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (6) Media Destruction + +**Description:** + +[Withdrawn: Incorporated into MP-6]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (7) Dual Authorization + +**Description:** + +The organization enforces dual authorization for the sanitization of [Assignment: organization-defined information system media]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-6 (8) Remote Purging / Wiping Of Information + +**Description:** + +The organization provides the capability to purge/wipe information from [Assignment: organization-defined information systems, system components, or devices] either remotely or under the following conditions: [Assignment: organization-defined conditions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-7 Media Use + +**Description:** + +The organization [Selection: restricts; prohibits] the use of [Assignment: organization-defined types of information system media] on [Assignment: organization-defined information systems or system components] using [Assignment: organization-defined security safeguards]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-7 (1) Prohibit Use Without Owner + +**Description:** + +The organization prohibits the use of portable storage devices in organizational information systems when such devices have no identifiable owner. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-7 (2) Prohibit Use Of Sanitization-Resistant Media + +**Description:** + +The organization prohibits the use of sanitization-resistant media in organizational information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-8 Media Downgrading + +**Description:** + +The organization: +
    +
  1. Establishes [Assignment: organization-defined information system media downgrading process] that includes employing downgrading mechanisms with [Assignment: organization-defined strength and integrity];
  2. +
  3. Ensures that the information system media downgrading process is commensurate with the security category and/or classification level of the information to be removed and the access authorizations of the potential recipients of the downgraded information;
  4. +
  5. Identifies [Assignment: organization-defined information system media requiring downgrading]; and
  6. +
  7. Downgrades the identified information system media using the established process.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-8 (1) Documentation Of Process + +**Description:** + +The organization documents information system media downgrading actions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-8 (2) Equipment Testing + +**Description:** + +The organization employs [Assignment: organization-defined tests] of downgrading equipment and procedures to verify correct performance [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-8 (3) Controlled Unclassified Information + +**Description:** + +The organization downgrades information system media containing [Assignment: organization-defined Controlled Unclassified Information (CUI)] prior to public release in accordance with applicable federal and organizational standards and policies. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## MP-8 (4) Classified Information + +**Description:** + +The organization downgrades information system media containing classified information prior to release to individuals without required access authorizations in accordance with NSA standards and policies. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/PE.md b/docs/compliance/reference/800-53/PE.md new file mode 100644 index 0000000..f8f57ac --- /dev/null +++ b/docs/compliance/reference/800-53/PE.md @@ -0,0 +1,680 @@ +--- +title: "Physical And Environmental Protection" +description: "Physical And Environmental Protection reference" +keywords: "standards, compliance, security, 800-53, Physical And Environmental Protection" +--- + +## PE-1 Physical And Environmental Protection Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A physical and environmental protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the physical and environmental protection policy and associated physical and environmental protection controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Physical and environmental protection policy [Assignment: organization-defined frequency]; and
    2. +
    3. Physical and environmental protection procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-2 Physical Access Authorizations + +**Description:** + +The organization: +
    +
  1. Develops, approves, and maintains a list of individuals with authorized access to the facility where the information system resides;
  2. +
  3. Issues authorization credentials for facility access;
  4. +
  5. Reviews the access list detailing authorized facility access by individuals [Assignment: organization-defined frequency]; and
  6. +
  7. Removes individuals from the facility access list when access is no longer required.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-2 (1) Access By Position / Role + +**Description:** + +The organization authorizes physical access to the facility where the information system resides based on position or role. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-2 (2) Two Forms Of Identification + +**Description:** + +The organization requires two forms of identification from [Assignment: organization-defined list of acceptable forms of identification] for visitor access to the facility where the information system resides. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-2 (3) Restrict Unescorted Access + +**Description:** + +The organization restricts unescorted access to the facility where the information system resides to personnel with [Selection (one or more): security clearances for all information contained within the system; formal access authorizations for all information contained within the system; need for access to all information contained within the system; [Assignment: organization-defined credentials]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-3 Physical Access Control + +**Description:** + +The organization: +
    +
  1. Enforces physical access authorizations at [Assignment: organization-defined entry/exit points to the facility where the information system resides] by;
  2. + +
      +
    1. Verifying individual access authorizations before granting access to the facility; and
    2. +
    3. Controlling ingress/egress to the facility using [Selection (one or more): [Assignment: organization-defined physical access control systems/devices]; guards];
    4. +
    +
  3. Maintains physical access audit logs for [Assignment: organization-defined entry/exit points];
  4. +
  5. Provides [Assignment: organization-defined security safeguards] to control access to areas within the facility officially designated as publicly accessible;
  6. +
  7. Escorts visitors and monitors visitor activity [Assignment: organization-defined circumstances requiring visitor escorts and monitoring];
  8. +
  9. Secures keys, combinations, and other physical access devices;
  10. +
  11. Inventories [Assignment: organization-defined physical access devices] every [Assignment: organization-defined frequency]; and
  12. +
  13. Changes combinations and keys [Assignment: organization-defined frequency] and/or when keys are lost, combinations are compromised, or individuals are transferred or terminated.
  14. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-3 (1) Information System Access + +**Description:** + +The organization enforces physical access authorizations to the information system in addition to the physical access controls for the facility at [Assignment: organization-defined physical spaces containing one or more components of the information system]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-3 (2) Facility / Information System Boundaries + +**Description:** + +The organization performs security checks [Assignment: organization-defined frequency] at the physical boundary of the facility or information system for unauthorized exfiltration of information or removal of information system components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-3 (3) Continuous Guards / Alarms / Monitoring + +**Description:** + +The organization employs guards and/or alarms to monitor every physical access point to the facility where the information system resides 24 hours per day, 7 days per week. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-3 (4) Lockable Casings + +**Description:** + +The organization uses lockable physical casings to protect [Assignment: organization-defined information system components] from unauthorized physical access. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-3 (5) Tamper Protection + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] to [Selection (one or more): detect; prevent] physical tampering or alteration of [Assignment: organization-defined hardware components] within the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-3 (6) Facility Penetration Testing + +**Description:** + +The organization employs a penetration testing process that includes [Assignment: organization-defined frequency], unannounced attempts to bypass or circumvent security controls associated with physical access points to the facility. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-4 Access Control For Transmission Medium + +**Description:** + +The organization controls physical access to [Assignment: organization-defined information system distribution and transmission lines] within organizational facilities using [Assignment: organization-defined security safeguards]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-5 Access Control For Output Devices + +**Description:** + +The organization controls physical access to information system output devices to prevent unauthorized individuals from obtaining the output. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-5 (1) Access To Output By Authorized Individuals + +**Description:** + +The organization: +
    +
  1. Controls physical access to output from [Assignment: organization-defined output devices]; and
  2. +
  3. Ensures that only authorized individuals receive output from the device.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-5 (2) Access To Output By Individual Identity + +**Description:** + +The information system: +
    +
  1. Controls physical access to output from [Assignment: organization-defined output devices]; and
  2. +
  3. Links individual identity to receipt of the output from the device.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-5 (3) Marking Output Devices + +**Description:** + +The organization marks [Assignment: organization-defined information system output devices] indicating the appropriate security marking of the information permitted to be output from the device. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-6 Monitoring Physical Access + +**Description:** + +The organization: +
    +
  1. Monitors physical access to the facility where the information system resides to detect and respond to physical security incidents;
  2. +
  3. Reviews physical access logs [Assignment: organization-defined frequency] and upon occurrence of [Assignment: organization-defined events or potential indications of events]; and
  4. +
  5. Coordinates results of reviews and investigations with the organizational incident response capability.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-6 (1) Intrusion Alarms / Surveillance Equipment + +**Description:** + +The organization monitors physical intrusion alarms and surveillance equipment. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-6 (2) Automated Intrusion Recognition / Responses + +**Description:** + +The organization employs automated mechanisms to recognize [Assignment: organization-defined classes/types of intrusions] and initiate [Assignment: organization-defined response actions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-6 (3) Video Surveillance + +**Description:** + +The organization employs video surveillance of [Assignment: organization-defined operational areas] and retains video recordings for [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-6 (4) Monitoring Physical Access To Information Systems + +**Description:** + +The organization monitors physical access to the information system in addition to the physical access monitoring of the facility as [Assignment: organization-defined physical spaces containing one or more components of the information system]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-8 Visitor Access Records + +**Description:** + +The organization: +
    +
  1. Maintains visitor access records to the facility where the information system resides for [Assignment: organization-defined time period]; and
  2. +
  3. Reviews visitor access records [Assignment: organization-defined frequency].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-8 (1) Automated Records Maintenance / Review + +**Description:** + +The organization employs automated mechanisms to facilitate the maintenance and review of visitor access records. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-8 (2) Physical Access Records + +**Description:** + +[Withdrawn: Incorporated into PE-2]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-9 Power Equipment And Cabling + +**Description:** + +The organization protects power equipment and power cabling for the information system from damage and destruction. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-9 (1) Redundant Cabling + +**Description:** + +The organization employs redundant power cabling paths that are physically separated by [Assignment: organization-defined distance]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-9 (2) Automatic Voltage Controls + +**Description:** + +The organization employs automatic voltage controls for [Assignment: organization-defined critical information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-10 Emergency Shutoff + +**Description:** + +The organization: +
    +
  1. Provides the capability of shutting off power to the information system or individual system components in emergency situations;
  2. +
  3. Places emergency shutoff switches or devices in [Assignment: organization-defined location by information system or system component] to facilitate safe and easy access for personnel; and
  4. +
  5. Protects emergency power shutoff capability from unauthorized activation.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-10 (1) Accidental / Unauthorized Activation + +**Description:** + +[Withdrawn: Incorporated into PE-10]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-11 Emergency Power + +**Description:** + +The organization provides a short-term uninterruptible power supply to facilitate [Selection (one or more): an orderly shutdown of the information system; transition of the information system to long-term alternate power] in the event of a primary power source loss. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-11 (1) Long-Term Alternate Power Supply - Minimal Operational Capability + +**Description:** + +The organization provides a long-term alternate power supply for the information system that is capable of maintaining minimally required operational capability in the event of an extended loss of the primary power source. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-11 (2) Long-Term Alternate Power Supply - Self-Contained + +**Description:** + +The organization provides a long-term alternate power supply for the information system that is: +
    +
  1. Self-contained;
  2. +
  3. Not reliant on external power generation; and
  4. +
  5. Capable of maintaining [Selection: minimally required operational capability; full operational capability] in the event of an extended loss of the primary power source.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-12 Emergency Lighting + +**Description:** + +The organization employs and maintains automatic emergency lighting for the information system that activates in the event of a power outage or disruption and that covers emergency exits and evacuation routes within the facility. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-12 (1) Essential Missions / Business Functions + +**Description:** + +The organization provides emergency lighting for all areas within the facility supporting essential missions and business functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-13 Fire Protection + +**Description:** + +The organization employs and maintains fire suppression and detection devices/systems for the information system that are supported by an independent energy source. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-13 (1) Detection Devices / Systems + +**Description:** + +The organization employs fire detection devices/systems for the information system that activate automatically and notify [Assignment: organization-defined personnel or roles] and [Assignment: organization-defined emergency responders] in the event of a fire. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-13 (2) Suppression Devices / Systems + +**Description:** + +The organization employs fire suppression devices/systems for the information system that provide automatic notification of any activation to Assignment: organization-defined personnel or roles] and [Assignment: organization-defined emergency responders]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-13 (3) Automatic Fire Suppression + +**Description:** + +The organization employs an automatic fire suppression capability for the information system when the facility is not staffed on a continuous basis. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-13 (4) Inspections + +**Description:** + +The organization ensures that the facility undergoes [Assignment: organization-defined frequency] inspections by authorized and qualified inspectors and resolves identified deficiencies within [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-14 Temperature And Humidity Controls + +**Description:** + +The organization: +
    +
  1. Maintains temperature and humidity levels within the facility where the information system resides at [Assignment: organization-defined acceptable levels]; and
  2. +
  3. Monitors temperature and humidity levels [Assignment: organization-defined frequency].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-14 (1) Automatic Controls + +**Description:** + +The organization employs automatic temperature and humidity controls in the facility to prevent fluctuations potentially harmful to the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-14 (2) Monitoring With Alarms / Notifications + +**Description:** + +The organization employs temperature and humidity monitoring that provides an alarm or notification of changes potentially harmful to personnel or equipment. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-15 Water Damage Protection + +**Description:** + +The organization protects the information system from damage resulting from water leakage by providing master shutoff or isolation valves that are accessible, working properly, and known to key personnel. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-15 (1) Automation Support + +**Description:** + +The organization employs automated mechanisms to detect the presence of water in the vicinity of the information system and alerts [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-16 Delivery And Removal + +**Description:** + +The organization authorizes, monitors, and controls [Assignment: organization-defined types of information system components] entering and exiting the facility and maintains records of those items. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-17 Alternate Work Site + +**Description:** + +The organization: +
    +
  1. Employs [Assignment: organization-defined security controls] at alternate work sites;
  2. +
  3. Assesses as feasible, the effectiveness of security controls at alternate work sites; and
  4. +
  5. Provides a means for employees to communicate with information security personnel in case of security incidents or problems.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-18 Location Of Information System Components + +**Description:** + +The organization positions information system components within the facility to minimize potential damage from [Assignment: organization-defined physical and environmental hazards] and to minimize the opportunity for unauthorized access. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-18 (1) Facility Site + +**Description:** + +The organization plans the location or site of the facility where the information system resides with regard to physical and environmental hazards and for existing facilities, considers the physical and environmental hazards in its risk mitigation strategy. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-19 Information Leakage + +**Description:** + +The organization protects the information system from information leakage due to electromagnetic signals emanations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-19 (1) National Emissions / Tempest Policies And Procedures + +**Description:** + +The organization ensures that information system components, associated data communications, and networks are protected in accordance with national emissions and TEMPEST policies and procedures based on the security category or classification of the information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PE-20 Asset Monitoring And Tracking + +**Description:** + +The organization: +
    +
  1. Employs [Assignment: organization-defined asset location technologies] to track and monitor the location and movement of [Assignment: organization-defined assets] within [Assignment: organization-defined controlled areas]; and
  2. +
  3. Ensures that asset location technologies are employed in accordance with applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/PL.md b/docs/compliance/reference/800-53/PL.md new file mode 100644 index 0000000..81ebf2e --- /dev/null +++ b/docs/compliance/reference/800-53/PL.md @@ -0,0 +1,196 @@ +--- +title: "Planning" +description: "Planning reference" +keywords: "standards, compliance, security, 800-53, Planning" +--- + +## PL-1 Security Planning Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A security planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the security planning policy and associated security planning controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Security planning policy [Assignment: organization-defined frequency]; and
    2. +
    3. Security planning procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-2 System Security Plan + +**Description:** + +The organization: +
    +
  1. Develops a security plan for the information system that:
  2. + +
      +
    1. Is consistent with the organization�s enterprise architecture;
    2. +
    3. Explicitly defines the authorization boundary for the system;
    4. +
    5. Describes the operational context of the information system in terms of missions and business processes;
    6. +
    7. Provides the security categorization of the information system including supporting rationale;
    8. +
    9. Describes the operational environment for the information system and relationships with or connections to other information systems;
    10. +
    11. Provides an overview of the security requirements for the system;
    12. +
    13. Identifies any relevant overlays, if applicable;
    14. +
    15. Describes the security controls in place or planned for meeting those requirements including a rationale for the tailoring decisions; and
    16. +
    17. Is reviewed and approved by the authorizing official or designated representative prior to plan implementation;
    18. +
    +
  3. Distributes copies of the security plan and communicates subsequent changes to the plan to [Assignment: organization-defined personnel or roles];
  4. +
  5. Reviews the security plan for the information system [Assignment: organization-defined frequency];
  6. +
  7. Updates the plan to address changes to the information system/environment of operation or problems identified during plan implementation or security control assessments; and
  8. +
  9. Protects the security plan from unauthorized disclosure and modification.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-2 (1) Concept Of Operations + +**Description:** + +[Withdrawn: Incorporated into PL-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-2 (2) Functional Architecture + +**Description:** + +[Withdrawn: Incorporated into PL-8]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-2 (3) Plan / Coordinate With Other Organizational Entities + +**Description:** + +The organization plans and coordinates security-related activities affecting the information system with [Assignment: organization-defined individuals or groups] before conducting such activities in order to reduce the impact on other organizational entities. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-4 Rules Of Behavior + +**Description:** + +The organization: +
    +
  1. Establishes and makes readily available to individuals requiring access to the information system, the rules that describe their responsibilities and expected behavior with regard to information and information system usage;
  2. +
  3. Receives a signed acknowledgment from such individuals, indicating that they have read, understand, and agree to abide by the rules of behavior, before authorizing access to information and the information system;
  4. +
  5. Reviews and updates the rules of behavior [Assignment: organization-defined frequency]; and
  6. +
  7. Requires individuals who have signed a previous version of the rules of behavior to read and re-sign when the rules of behavior are revised/updated.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-4 (1) Social Media And Networking Restrictions + +**Description:** + +The organization includes in the rules of behavior, explicit restrictions on the use of social media/networking sites and posting organizational information on public websites. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-7 Security Concept Of Operations + +**Description:** + +The organization: +
    +
  1. Develops a security Concept of Operations (CONOPS) for the information system containing at a minimum, how the organization intends to operate the system from the perspective of information security; and
  2. +
  3. Reviews and updates the CONOPS [Assignment: organization-defined frequency].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-8 Information Security Architecture + +**Description:** + +The organization: +
    +
  1. Develops an information security architecture for the information system that:
  2. + +
      +
    1. Describes the overall philosophy, requirements, and approach to be taken with regard to protecting the confidentiality, integrity, and availability of organizational information;
    2. +
    3. Describes how the information security architecture is integrated into and supports the enterprise architecture; and
    4. +
    5. Describes any information security assumptions about, and dependencies on, external services;
    6. +
    +
  3. Reviews and updates the information security architecture [Assignment: organization-defined frequency] to reflect updates in the enterprise architecture; and
  4. +
  5. Ensures that planned information security architecture changes are reflected in the security plan, the security Concept of Operations (CONOPS), and organizational procurements/acquisitions.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-8 (1) Defense-In-Depth + +**Description:** + +The organization designs its security architecture using a defense-in-depth approach that: +
    +
  1. Allocates [Assignment: organization-defined security safeguards] to [Assignment: organization-defined locations and architectural layers]; and
  2. +
  3. Ensures that the allocated security safeguards operate in a coordinated and mutually reinforcing manner.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-8 (2) Supplier Diversity + +**Description:** + +The organization requires that [Assignment: organization-defined security safeguards] allocated to [Assignment: organization-defined locations and architectural layers] are obtained from different suppliers. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PL-9 Central Management + +**Description:** + +The organization centrally manages [Assignment: organization-defined security controls and related processes]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/PM.md b/docs/compliance/reference/800-53/PM.md new file mode 100644 index 0000000..aad81ee --- /dev/null +++ b/docs/compliance/reference/800-53/PM.md @@ -0,0 +1,238 @@ +--- +title: "Program Management" +description: "Program Management reference" +keywords: "standards, compliance, security, 800-53, Program Management" +--- + +## PM-1 Information Security Program Plan + +**Description:** + +The organization: +
    +
  1. Develops and disseminates an organization-wide information security program plan that:
  2. + +
      +
    1. Provides an overview of the requirements for the security program and a description of the security program management controls and common controls in place or planned for meeting those requirements;
    2. +
    3. Includes the identification and assignment of roles, responsibilities, management commitment, coordination among organizational entities, and compliance;
    4. +
    5. Reflects coordination among organizational entities responsible for the different aspects of information security (i.e., technical, physical, personnel, cyber-physical); and
    6. +
    7. Is approved by a senior official with responsibility and accountability for the risk being incurred to organizational operations (including mission, functions, image, and reputation), organizational assets, individuals, other organizations, and the Nation;
    8. +
    +
  3. Reviews the organization-wide information security program plan [Assignment: organization-defined frequency];
  4. +
  5. Updates the plan to address organizational changes and problems identified during plan implementation or security control assessments; and
  6. +
  7. Protects the information security program plan from unauthorized disclosure and modification.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-2 Senior Information Security Officer + +**Description:** + +The organization appoints a senior information security officer with the mission and resources to coordinate, develop, implement, and maintain an organization-wide information security program. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-3 Information Security Resources + +**Description:** + +The organization: +
    +
  1. Ensures that all capital planning and investment requests include the resources needed to implement the information security program and documents all exceptions to this requirement;
  2. +
  3. Employs a business case/Exhibit 300/Exhibit 53 to record the resources required; and
  4. +
  5. Ensures that information security resources are available for expenditure as planned.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-4 Plan Of Action And Milestones Process + +**Description:** + +The organization: +
    +
  1. Implements a process for ensuring that plans of action and milestones for the security program and associated organizational information systems:
  2. + +
      +
    1. Are developed and maintained;
    2. +
    3. Document the remedial information security actions to adequately respond to risk to organizational operations and assets, individuals, other organizations, and the Nation; and
    4. +
    5. Are reported in accordance with OMB FISMA reporting requirements.
    6. +
    +
  3. Reviews plans of action and milestones for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-5 Information System Inventory + +**Description:** + +The organization develops and maintains an inventory of its information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-6 Information Security Measures Of Performance + +**Description:** + +The organization develops, monitors, and reports on the results of information security measures of performance. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-7 Enterprise Architecture + +**Description:** + +The organization develops an enterprise architecture with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-8 Critical Infrastructure Plan + +**Description:** + +The organization addresses information security issues in the development, documentation, and updating of a critical infrastructure and key resources protection plan. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-9 Risk Management Strategy + +**Description:** + +The organization: +
    +
  1. Develops a comprehensive strategy to manage risk to organizational operations and assets, individuals, other organizations, and the Nation associated with the operation and use of information systems;
  2. +
  3. Implements the risk management strategy consistently across the organization; and
  4. +
  5. Reviews and updates the risk management strategy [Assignment: organization-defined frequency] or as required, to address organizational changes.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-10 Security Authorization Process + +**Description:** + +The organization: +
    +
  1. Manages (i.e., documents, tracks, and reports) the security state of organizational information systems and the environments in which those systems operate through security authorization processes;
  2. +
  3. Designates individuals to fulfill specific roles and responsibilities within the organizational risk management process; and
  4. +
  5. Fully integrates the security authorization processes into an organization-wide risk management program.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-11 Mission/Business Process Definition + +**Description:** + +The organization: +
    +
  1. Defines mission/business processes with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation; and
  2. +
  3. Determines information protection needs arising from the defined mission/business processes and revises the processes as necessary, until achievable protection needs are obtained.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-12 Insider Threat Program + +**Description:** + +The organization implements an insider threat program that includes a cross-discipline insider threat incident handling team. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-13 Information Security Workforce + +**Description:** + +The organization establishes an information security workforce development and improvement program. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-14 Testing, Training, And Monitoring + +**Description:** + +The organization: +
    +
  1. Implements a process for ensuring that organizational plans for conducting security testing, training, and monitoring activities associated with organizational information systems:
  2. + +
      +
    1. Are developed and maintained; and
    2. +
    3. Continue to be executed in a timely manner;
    4. +
    +
  3. Reviews testing, training, and monitoring plans for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-15 Contacts With Security Groups And Associations + +**Description:** + +The organization establishes and institutionalizes contact with selected groups and associations within the security community: +
    +
  1. To facilitate ongoing security education and training for organizational personnel;
  2. +
  3. To maintain currency with recommended security practices, techniques, and technologies; and
  4. +
  5. To share current security-related information including threats, vulnerabilities, and incidents.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PM-16 Threat Awareness Program + +**Description:** + +The organization implements a threat awareness program that includes a cross-organization information-sharing capability. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/PS.md b/docs/compliance/reference/800-53/PS.md new file mode 100644 index 0000000..c46af18 --- /dev/null +++ b/docs/compliance/reference/800-53/PS.md @@ -0,0 +1,249 @@ +--- +title: "Personnel Security" +description: "Personnel Security reference" +keywords: "standards, compliance, security, 800-53, Personnel Security" +--- + +## PS-1 Personnel Security Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A personnel security policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the personnel security policy and associated personnel security controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Personnel security policy [Assignment: organization-defined frequency]; and
    2. +
    3. Personnel security procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-2 Position Risk Designation + +**Description:** + +The organization: +
    +
  1. Assigns a risk designation to all organizational positions;
  2. +
  3. Establishes screening criteria for individuals filling those positions; and
  4. +
  5. Reviews and updates position risk designations [Assignment: organization-defined frequency].
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-3 Personnel Screening + +**Description:** + +The organization: +
    +
  1. Screens individuals prior to authorizing access to the information system; and
  2. +
  3. Rescreens individuals according to [Assignment: organization-defined conditions requiring rescreening and, where rescreening is so indicated, the frequency of such rescreening].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-3 (1) Classified Information + +**Description:** + +The organization ensures that individuals accessing an information system processing, storing, or transmitting classified information are cleared and indoctrinated to the highest classification level of the information to which they have access on the system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-3 (2) Formal Indoctrination + +**Description:** + +The organization ensures that individuals accessing an information system processing, storing, or transmitting types of classified information which require formal indoctrination, are formally indoctrinated for all of the relevant types of information to which they have access on the system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-3 (3) Information With Special Protection Measures + +**Description:** + +The organization ensures that individuals accessing an information system processing, storing, or transmitting information requiring special protection: +
    +
  1. Have valid access authorizations that are demonstrated by assigned official government duties; and
  2. +
  3. Satisfy [Assignment: organization-defined additional personnel screening criteria].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-4 Personnel Termination + +**Description:** + +The organization, upon termination of individual employment: +
    +
  1. Disables information system access within [Assignment: organization-defined time period];
  2. +
  3. Terminates/revokes any authenticators/credentials associated with the individual;
  4. +
  5. Conducts exit interviews that include a discussion of [Assignment: organization-defined information security topics];
  6. +
  7. Retrieves all security-related organizational information system-related property;
  8. +
  9. Retains access to organizational information and information systems formerly controlled by terminated individual; and
  10. +
  11. Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period].
  12. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-4 (1) Post-Employment Requirements + +**Description:** + +The organization: +
    +
  1. Notifies terminated individuals of applicable, legally binding post-employment requirements for the protection of organizational information; and
  2. +
  3. Requires terminated individuals to sign an acknowledgment of post-employment requirements as part of the organizational termination process.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-4 (2) Automated Notification + +**Description:** + +The organization employs automated mechanisms to notify [Assignment: organization-defined personnel or roles] upon termination of an individual. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-5 Personnel Transfer + +**Description:** + +The organization: +
    +
  1. Reviews and confirms ongoing operational need for current logical and physical access authorizations to information systems/facilities when individuals are reassigned or transferred to other positions within the organization;
  2. +
  3. Initiates [Assignment: organization-defined transfer or reassignment actions] within [Assignment: organization-defined time period following the formal transfer action];
  4. +
  5. Modifies access authorization as needed to correspond with any changes in operational need due to reassignment or transfer; and
  6. +
  7. Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period].
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-6 Access Agreements + +**Description:** + +The organization: +
    +
  1. Develops and documents access agreements for organizational information systems;
  2. +
  3. Reviews and updates the access agreements [Assignment: organization-defined frequency]; and
  4. +
  5. Ensures that individuals requiring access to organizational information and information systems:
  6. + +
      +
    1. Sign appropriate access agreements prior to being granted access; and
    2. +
    3. Re-sign access agreements to maintain access to organizational information systems when access agreements have been updated or [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-6 (1) Information Requiring Special Protection + +**Description:** + +[Withdrawn: Incorporated into PS-3]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-6 (2) Classified Information Requiring Special Protection + +**Description:** + +The organization ensures that access to classified information requiring special protection is granted only to individuals who: +
    +
  1. Have a valid access authorization that is demonstrated by assigned official government duties;
  2. +
  3. Satisfy associated personnel security criteria; and
  4. +
  5. Have read, understood, and signed a nondisclosure agreement.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-6 (3) Post-Employment Requirements + +**Description:** + +The organization: +
    +
  1. Notifies individuals of applicable, legally binding post-employment requirements for protection of organizational information; and
  2. +
  3. Requires individuals to sign an acknowledgment of these requirements, if applicable, as part of granting initial access to covered information.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-7 Third-Party Personnel Security + +**Description:** + +The organization: +
    +
  1. Establishes personnel security requirements including security roles and responsibilities for third-party providers;
  2. +
  3. Requires third-party providers to comply with personnel security policies and procedures established by the organization;
  4. +
  5. Documents personnel security requirements;
  6. +
  7. Requires third-party providers to notify [Assignment: organization-defined personnel or roles] of any personnel transfers or terminations of third-party personnel who possess organizational credentials and/or badges, or who have information system privileges within [Assignment: organization-defined time period]; and
  8. +
  9. Monitors provider compliance.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## PS-8 Personnel Sanctions + +**Description:** + +The organization: +
    +
  1. Employs a formal sanctions process for individuals failing to comply with established information security policies and procedures; and
  2. +
  3. Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period] when a formal employee sanctions process is initiated, identifying the individual sanctioned and the reason for the sanction.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/RA.md b/docs/compliance/reference/800-53/RA.md new file mode 100644 index 0000000..d5bade9 --- /dev/null +++ b/docs/compliance/reference/800-53/RA.md @@ -0,0 +1,292 @@ +--- +title: "Risk Assessment" +description: "Risk Assessment reference" +keywords: "standards, compliance, security, 800-53, Risk Assessment" +--- + +## RA-1 Risk Assessment Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A risk assessment policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the risk assessment policy and associated risk assessment controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. Risk assessment policy [Assignment: organization-defined frequency]; and
    2. +
    3. Risk assessment procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-2 Security Categorization + +**Description:** + +The organization: +
    +
  1. Categorizes information and the information system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance;
  2. +
  3. Documents the security categorization results (including supporting rationale) in the security plan for the information system; and
  4. +
  5. Ensures that the authorizing official or authorizing official designated representative reviews and approves the security categorization decision.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-3 Risk Assessment + +**Description:** + +The organization: +
    +
  1. Conducts an assessment of risk, including the likelihood and magnitude of harm, from the unauthorized access, use, disclosure, disruption, modification, or destruction of the information system and the information it processes, stores, or transmits;
  2. +
  3. Documents risk assessment results in [Selection: security plan; risk assessment report; [Assignment: organization-defined document]];
  4. +
  5. Reviews risk assessment results [Assignment: organization-defined frequency];
  6. +
  7. Disseminates risk assessment results to [Assignment: organization-defined personnel or roles]; and
  8. +
  9. Updates the risk assessment [Assignment: organization-defined frequency] or whenever there are significant changes to the information system or environment of operation (including the identification of new threats and vulnerabilities), or other conditions that may impact the security state of the system.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-5 Vulnerability Scanning + +**Description:** + +The organization: +
    +
  1. Scans for vulnerabilities in the information system and hosted applications [Assignment: organization-defined frequency and/or randomly in accordance with organization-defined process] and when new vulnerabilities potentially affecting the system/applications are identified and reported;
  2. +
  3. Employs vulnerability scanning tools and techniques that facilitate interoperability among tools and automate parts of the vulnerability management process by using standards for:
  4. + +
      +
    1. Enumerating platforms, software flaws, and improper configurations;
    2. +
    3. Formatting checklists and test procedures; and
    4. +
    5. Measuring vulnerability impact;
    6. +
    +
  5. Analyzes vulnerability scan reports and results from security control assessments;
  6. +
  7. Remediates legitimate vulnerabilities [Assignment: organization-defined response times] in accordance with an organizational assessment of risk; and
  8. +
  9. Shares information obtained from the vulnerability scanning process and security control assessments with [Assignment: organization-defined personnel or roles] to help eliminate similar vulnerabilities in other information systems (i.e., systemic weaknesses or deficiencies).
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-5 (1) Update Tool Capability + +**Description:** + +The organization employs vulnerability scanning tools that include the capability to readily update the information system vulnerabilities to be scanned. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Security Scanning (DSS)complete
service provider system specific
Docker Trusted Registry (DTR)complete
service provider system specific
+ +## RA-5 (2) Update By Frequency / Prior To New Scan / When Identified + +**Description:** + +The organization updates the information system vulnerabilities scanned [Selection (one or more): [Assignment: organization-defined frequency]; prior to a new scan; when new vulnerabilities are identified and reported]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Security Scanning (DSS)complete
service provider system specific
+ +## RA-5 (3) Breadth / Depth Of Coverage + +**Description:** + +The organization employs vulnerability scanning procedures that can identify the breadth and depth of coverage (i.e., information system components scanned and vulnerabilities checked). +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Security Scanning (DSS)complete
service provider system specific
Docker Trusted Registry (DTR)complete
service provider system specific
+ +## RA-5 (4) Discoverable Information + +**Description:** + +The organization determines what information about the information system is discoverable by adversaries and subsequently takes [Assignment: organization-defined corrective actions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-5 (5) Privileged Access + +**Description:** + +The information system implements privileged access authorization to [Assignment: organization-identified information system components] for selected [Assignment: organization-defined vulnerability scanning activities]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Security Scanning (DSS)complete
service provider system specific
+ +## RA-5 (6) Automated Trend Analyses + +**Description:** + +The organization employs automated mechanisms to compare the results of vulnerability scans over time to determine trends in information system vulnerabilities. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Security Scanning (DSS)complete
service provider system specific
+ +## RA-5 (7) Automated Detection And Notification Of Unauthorized Components + +**Description:** + +[Withdrawn: Incorporated into CM-8]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-5 (8) Review Historic Audit Logs + +**Description:** + +The organization reviews historic audit logs to determine if a vulnerability identified in the information system has been previously exploited. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-5 (9) Penetration Testing And Analyses + +**Description:** + +[Withdrawn: Incorporated into CA-8]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-5 (10) Correlate Scanning Information + +**Description:** + +The organization correlates the output from vulnerability scanning tools to determine the presence of multi-vulnerability/multi-hop attack vectors. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## RA-6 Technical Surveillance Countermeasures Survey + +**Description:** + +The organization employs a technical surveillance countermeasures survey at [Assignment: organization-defined locations] [Selection (one or more): [Assignment: organization-defined frequency]; [Assignment: organization-defined events or indicators occur]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/SA.md b/docs/compliance/reference/800-53/SA.md new file mode 100644 index 0000000..955f1e4 --- /dev/null +++ b/docs/compliance/reference/800-53/SA.md @@ -0,0 +1,1292 @@ +--- +title: "System And Services Acquisition" +description: "System And Services Acquisition reference" +keywords: "standards, compliance, security, 800-53, System And Services Acquisition" +--- + +## SA-1 System And Services Acquisition Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A system and services acquisition policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the system and services acquisition policy and associated system and services acquisition controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. System and services acquisition policy [Assignment: organization-defined frequency]; and
    2. +
    3. System and services acquisition procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-2 Allocation Of Resources + +**Description:** + +The organization: +
    +
  1. Determines information security requirements for the information system or information system service in mission/business process planning;
  2. +
  3. Determines, documents, and allocates the resources required to protect the information system or information system service as part of its capital planning and investment control process; and
  4. +
  5. Establishes a discrete line item for information security in organizational programming and budgeting documentation.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-3 System Development Life Cycle + +**Description:** + +The organization: +
    +
  1. Manages the information system using [Assignment: organization-defined system development life cycle] that incorporates information security considerations;
  2. +
  3. Defines and documents information security roles and responsibilities throughout the system development life cycle;
  4. +
  5. Identifies individuals having information security roles and responsibilities; and
  6. +
  7. Integrates the organizational information security risk management process into system development life cycle activities.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 Acquisition Process + +**Description:** + +The organization includes the following requirements, descriptions, and criteria, explicitly or by reference, in the acquisition contract for the information system, system component, or information system service in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, guidelines, and organizational mission/business needs: +
    +
  1. Security functional requirements;
  2. +
  3. Security strength requirements;
  4. +
  5. Security assurance requirements;
  6. +
  7. Security-related documentation requirements;
  8. +
  9. Requirements for protecting security-related documentation;
  10. +
  11. Description of the information system development environment and environment in which the system is intended to operate; and
  12. +
  13. Acceptance criteria.
  14. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (1) Functional Properties Of Security Controls + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to provide a description of the functional properties of the security controls to be employed. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (2) Design / Implementation Information For Security Controls + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to provide design and implementation information for the security controls to be employed that includes: [Selection (one or more): security-relevant external system interfaces; high-level design; low-level design; source code or hardware schematics; [Assignment: organization-defined design/implementation information]] at [Assignment: organization-defined level of detail]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (3) Development Methods / Techniques / Practices + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to demonstrate the use of a system development life cycle that includes [Assignment: organization-defined state-of-the-practice system/security engineering methods, software development methods, testing/evaluation/validation techniques, and quality control processes]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (4) Assignment Of Components To Systems + +**Description:** + +[Withdrawn: Incorporated into CM-8 (9)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (5) System / Component / Service Configurations + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Deliver the system, component, or service with [Assignment: organization-defined security configurations] implemented; and
  2. +
  3. Use the configurations as the default for any subsequent system, component, or service reinstallation or upgrade.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (6) Use Of Information Assurance Products + +**Description:** + +The organization: +
    +
  1. Employs only government off-the-shelf (GOTS) or commercial off-the-shelf (COTS) information assurance (IA) and IA-enabled information technology products that compose an NSA-approved solution to protect classified information when the networks used to transmit the information are at a lower classification level than the information being transmitted; and
  2. +
  3. Ensures that these products have been evaluated and/or validated by NSA or in accordance with NSA-approved procedures.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (7) Niap-Approved Protection Profiles + +**Description:** + +The organization: +
    +
  1. Limits the use of commercially provided information assurance (IA) and IA-enabled information technology products to those products that have been successfully evaluated against a National Information Assurance partnership (NIAP)-approved Protection Profile for a specific technology type, if such a profile exists; and
  2. +
  3. Requires, if no NIAP-approved Protection Profile exists for a specific technology type but a commercially provided information technology product relies on cryptographic functionality to enforce its security policy, that the cryptographic module is FIPS-validated.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (8) Continuous Monitoring Plan + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to produce a plan for the continuous monitoring of security control effectiveness that contains [Assignment: organization-defined level of detail]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (9) Functions / Ports / Protocols / Services In Use + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to identify early in the system development life cycle, the functions, ports, protocols, and services intended for organizational use. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-4 (10) Use Of Approved Piv Products + +**Description:** + +The organization employs only information technology products on the FIPS 201-approved products list for Personal Identity Verification (PIV) capability implemented within organizational information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-5 Information System Documentation + +**Description:** + +The organization: +
    +
  1. Obtains administrator documentation for the information system, system component, or information system service that describes:
  2. + +
      +
    1. Secure configuration, installation, and operation of the system, component, or service;
    2. +
    3. Effective use and maintenance of security functions/mechanisms; and
    4. +
    5. Known vulnerabilities regarding configuration and use of administrative (i.e., privileged) functions;
    6. +
    +
  3. Obtains user documentation for the information system, system component, or information system service that describes:
  4. + +
      +
    1. User-accessible security functions/mechanisms and how to effectively use those security functions/mechanisms;
    2. +
    3. Methods for user interaction, which enables individuals to use the system, component, or service in a more secure manner; and
    4. +
    5. User responsibilities in maintaining the security of the system, component, or service;
    6. +
    +
  5. Documents attempts to obtain information system, system component, or information system service documentation when such documentation is either unavailable or nonexistent and takes [Assignment: organization-defined actions] in response;
  6. +
  7. Protects documentation as required, in accordance with the risk management strategy; and
  8. +
  9. Distributes documentation to [Assignment: organization-defined personnel or roles].
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-5 (1) Functional Properties Of Security Controls + +**Description:** + +[Withdrawn: Incorporated into SA-4 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-5 (2) Security-Relevant External System Interfaces + +**Description:** + +[Withdrawn: Incorporated into SA-4 (2)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-5 (3) High-Level Design + +**Description:** + +[Withdrawn: Incorporated into SA-4 (2)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-5 (4) Low-Level Design + +**Description:** + +[Withdrawn: Incorporated into SA-4 (2)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-5 (5) Source Code + +**Description:** + +[Withdrawn: Incorporated into SA-4 (2)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-8 Security Engineering Principles + +**Description:** + +The organization applies information system security engineering principles in the specification, design, development, implementation, and modification of the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-9 External Information System Services + +**Description:** + +The organization: +
    +
  1. Requires that providers of external information system services comply with organizational information security requirements and employ [Assignment: organization-defined security controls] in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance;
  2. +
  3. Defines and documents government oversight and user roles and responsibilities with regard to external information system services; and
  4. +
  5. Employs [Assignment: organization-defined processes, methods, and techniques] to monitor security control compliance by external service providers on an ongoing basis.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-9 (1) Risk Assessments / Organizational Approvals + +**Description:** + +The organization: +
    +
  1. Conducts an organizational assessment of risk prior to the acquisition or outsourcing of dedicated information security services; and
  2. +
  3. Ensures that the acquisition or outsourcing of dedicated information security services is approved by [Assignment: organization-defined personnel or roles].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-9 (2) Identification Of Functions / Ports / Protocols / Services + +**Description:** + +The organization requires providers of [Assignment: organization-defined external information system services] to identify the functions, ports, protocols, and other services required for the use of such services. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-9 (3) Establish / Maintain Trust Relationship With Providers + +**Description:** + +The organization establishes, documents, and maintains trust relationships with external service providers based on [Assignment: organization-defined security requirements, properties, factors, or conditions defining acceptable trust relationships]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-9 (4) Consistent Interests Of Consumers And Providers + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] to ensure that the interests of [Assignment: organization-defined external service providers] are consistent with and reflect organizational interests. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-9 (5) Processing, Storage, And Service Location + +**Description:** + +The organization restricts the location of [Selection (one or more): information processing; information/data; information system services] to [Assignment: organization-defined locations] based on [Assignment: organization-defined requirements or conditions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-10 Developer Configuration Management + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Perform configuration management during system, component, or service [Selection (one or more): design; development; implementation; operation];
  2. +
  3. Document, manage, and control the integrity of changes to [Assignment: organization-defined configuration items under configuration management];
  4. +
  5. Implement only organization-approved changes to the system, component, or service;
  6. +
  7. Document approved changes to the system, component, or service and the potential security impacts of such changes; and
  8. +
  9. Track security flaws and flaw resolution within the system, component, or service and report findings to [Assignment: organization-defined personnel].
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-10 (1) Software / Firmware Integrity Verification + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to enable integrity verification of software and firmware components. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## SA-10 (2) Alternative Configuration Management Processes + +**Description:** + +The organization provides an alternate configuration management process using organizational personnel in the absence of a dedicated developer configuration management team. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-10 (3) Hardware Integrity Verification + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to enable integrity verification of hardware components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-10 (4) Trusted Generation + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to employ tools for comparing newly generated versions of security-relevant hardware descriptions and software/firmware source and object code with previous versions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-10 (5) Mapping Integrity For Version Control + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to maintain the integrity of the mapping between the master build data (hardware drawings and software/firmware code) describing the current version of security-relevant hardware, software, and firmware and the on-site master copy of the data for the current version. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-10 (6) Trusted Distribution + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to execute procedures for ensuring that security-relevant hardware, software, and firmware updates distributed to the organization are exactly as specified by the master copies. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 Developer Security Testing And Evaluation + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Create and implement a security assessment plan;
  2. +
  3. Perform [Selection (one or more): unit; integration; system; regression] testing/evaluation at [Assignment: organization-defined depth and coverage];
  4. +
  5. Produce evidence of the execution of the security assessment plan and the results of the security testing/evaluation;
  6. +
  7. Implement a verifiable flaw remediation process; and
  8. +
  9. Correct flaws identified during security testing/evaluation.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (1) Static Code Analysis + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to employ static code analysis tools to identify common flaws and document the results of the analysis. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (2) Threat And Vulnerability Analyses + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to perform threat and vulnerability analyses and subsequent testing/evaluation of the as-built system, component, or service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (3) Independent Verification Of Assessment Plans / Evidence + +**Description:** + +The organization: +
    +
  1. Requires an independent agent satisfying [Assignment: organization-defined independence criteria] to verify the correct implementation of the developer security assessment plan and the evidence produced during security testing/evaluation; and
  2. +
  3. Ensures that the independent agent is either provided with sufficient information to complete the verification process or granted the authority to obtain such information.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (4) Manual Code Reviews + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to perform a manual code review of [Assignment: organization-defined specific code] using [Assignment: organization-defined processes, procedures, and/or techniques]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (5) Penetration Testing + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to perform penetration testing at [Assignment: organization-defined breadth/depth] and with [Assignment: organization-defined constraints]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (6) Attack Surface Reviews + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to perform attack surface reviews. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (7) Verify Scope Of Testing / Evaluation + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to verify that the scope of security testing/evaluation provides complete coverage of required security controls at [Assignment: organization-defined depth of testing/evaluation]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-11 (8) Dynamic Code Analysis + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to employ dynamic code analysis tools to identify common flaws and document the results of the analysis. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 Supply Chain Protection + +**Description:** + +The organization protects against supply chain threats to the information system, system component, or information system service by employing [Assignment: organization-defined security safeguards] as part of a comprehensive, defense-in-breadth information security strategy. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (1) Acquisition Strategies / Tools / Methods + +**Description:** + +The organization employs [Assignment: organization-defined tailored acquisition strategies, contract tools, and procurement methods] for the purchase of the information system, system component, or information system service from suppliers. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (2) Supplier Reviews + +**Description:** + +The organization conducts a supplier review prior to entering into a contractual agreement to acquire the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (3) Trusted Shipping And Warehousing + +**Description:** + +[Withdrawn: Incorporated into SA-12 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (4) Diversity Of Suppliers + +**Description:** + +[Withdrawn: Incorporated into SA-12 (13)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (5) Limitation Of Harm + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] to limit harm from potential adversaries identifying and targeting the organizational supply chain. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (6) Minimizing Procurement Time + +**Description:** + +[Withdrawn: Incorporated into SA-12 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (7) Assessments Prior To Selection / Acceptance / Update + +**Description:** + +The organization conducts an assessment of the information system, system component, or information system service prior to selection, acceptance, or update. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (8) Use Of All-Source Intelligence + +**Description:** + +The organization uses all-source intelligence analysis of suppliers and potential suppliers of the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (9) Operations Security + +**Description:** + +The organization employs [Assignment: organization-defined Operations Security (OPSEC) safeguards] in accordance with classification guides to protect supply chain-related information for the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (10) Validate As Genuine And Not Altered + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] to validate that the information system or system component received is genuine and has not been altered. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (11) Penetration Testing / Analysis Of Elements, Processes, And Actors + +**Description:** + +The organization employs [Selection (one or more): organizational analysis, independent third-party analysis, organizational penetration testing, independent third-party penetration testing] of [Assignment: organization-defined supply chain elements, processes, and actors] associated with the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (12) Inter-Organizational Agreements + +**Description:** + +The organization establishes inter-organizational agreements and procedures with entities involved in the supply chain for the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (13) Critical Information System Components + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] to ensure an adequate supply of [Assignment: organization-defined critical information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (14) Identity And Traceability + +**Description:** + +The organization establishes and retains unique identification of [Assignment: organization-defined supply chain elements, processes, and actors] for the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-12 (15) Processes To Address Weaknesses Or Deficiencies + +**Description:** + +The organization establishes a process to address weaknesses or deficiencies in supply chain elements identified during independent or organizational assessments of such elements. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-13 Trustworthiness + +**Description:** + +The organization: +
    +
  1. Describes the trustworthiness required in the [Assignment: organization-defined information system, information system component, or information system service] supporting its critical missions/business functions; and
  2. +
  3. Implements [Assignment: organization-defined assurance overlay] to achieve such trustworthiness.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-14 Criticality Analysis + +**Description:** + +The organization identifies critical information system components and functions by performing a criticality analysis for [Assignment: organization-defined information systems, information system components, or information system services] at [Assignment: organization-defined decision points in the system development life cycle]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-14 (1) Critical Components With No Viable Alternative Sourcing + +**Description:** + +[Withdrawn: Incorporated into SA-20]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 Development Process, Standards, And Tools + +**Description:** + +The organization: +
    +
  1. Requires the developer of the information system, system component, or information system service to follow a documented development process that:
  2. + +
      +
    1. Explicitly addresses security requirements;
    2. +
    3. Identifies the standards and tools used in the development process;
    4. +
    5. Documents the specific tool options and tool configurations used in the development process; and
    6. +
    7. Documents, manages, and ensures the integrity of changes to the process and/or tools used in development; and
    8. +
    +
  3. Reviews the development process, standards, tools, and tool options/configurations [Assignment: organization-defined frequency] to determine if the process, standards, tools, and tool options/configurations selected and employed can satisfy [Assignment: organization-defined security requirements].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (1) Quality Metrics + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Define quality metrics at the beginning of the development process; and
  2. +
  3. Provide evidence of meeting the quality metrics [Selection (one or more): [Assignment: organization-defined frequency]; [Assignment: organization-defined program review milestones]; upon delivery].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (2) Security Tracking Tools + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to select and employ a security tracking tool for use during the development process. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (3) Criticality Analysis + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to perform a criticality analysis at [Assignment: organization-defined breadth/depth] and at [Assignment: organization-defined decision points in the system development life cycle]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (4) Threat Modeling / Vulnerability Analysis + +**Description:** + +The organization requires that developers perform threat modeling and a vulnerability analysis for the information system at [Assignment: organization-defined breadth/depth] that: +
    +
  1. Uses [Assignment: organization-defined information concerning impact, environment of operations, known or assumed threats, and acceptable risk levels];
  2. +
  3. Employs [Assignment: organization-defined tools and methods]; and
  4. +
  5. Produces evidence that meets [Assignment: organization-defined acceptance criteria].
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (5) Attack Surface Reduction + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to reduce attack surfaces to [Assignment: organization-defined thresholds]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (6) Continuous Improvement + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to implement an explicit process to continuously improve the development process. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (7) Automated Vulnerability Analysis + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Perform an automated vulnerability analysis using [Assignment: organization-defined tools];
  2. +
  3. Determine the exploitation potential for discovered vulnerabilities;
  4. +
  5. Determine potential risk mitigations for delivered vulnerabilities; and
  6. +
  7. Deliver the outputs of the tools and results of the analysis to [Assignment: organization-defined personnel or roles].
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (8) Reuse Of Threat / Vulnerability Information + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to use threat modeling and vulnerability analyses from similar systems, components, or services to inform the current development process. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (9) Use Of Live Data + +**Description:** + +The organization approves, documents, and controls the use of live data in development and test environments for the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (10) Incident Response Plan + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to provide an incident response plan. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-15 (11) Archive Information System / Component + +**Description:** + +The organization requires the developer of the information system or system component to archive the system or component to be released or delivered together with the corresponding evidence supporting the final security review. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-16 Developer-Provided Training + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to provide [Assignment: organization-defined training] on the correct use and operation of the implemented security functions, controls, and/or mechanisms. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 Developer Security Architecture And Design + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to produce a design specification and security architecture that: +
    +
  1. Is consistent with and supportive of the organization�s security architecture which is established within and is an integrated part of the organization�s enterprise architecture;
  2. +
  3. Accurately and completely describes the required security functionality, and the allocation of security controls among physical and logical components; and
  4. +
  5. Expresses how individual security functions, mechanisms, and services work together to provide required security capabilities and a unified approach to protection.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 (1) Formal Policy Model + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Produce, as an integral part of the development process, a formal policy model describing the [Assignment: organization-defined elements of organizational security policy] to be enforced; and
  2. +
  3. Prove that the formal policy model is internally consistent and sufficient to enforce the defined elements of the organizational security policy when implemented.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 (2) Security-Relevant Components + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Define security-relevant hardware, software, and firmware; and
  2. +
  3. Provide a rationale that the definition for security-relevant hardware, software, and firmware is complete.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 (3) Formal Correspondence + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Produce, as an integral part of the development process, a formal top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of exceptions, error messages, and effects;
  2. +
  3. Show via proof to the extent feasible with additional informal demonstration as necessary, that the formal top-level specification is consistent with the formal policy model;
  4. +
  5. Show via informal demonstration, that the formal top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware;
  6. +
  7. Show that the formal top-level specification is an accurate description of the implemented security-relevant hardware, software, and firmware; and
  8. +
  9. Describe the security-relevant hardware, software, and firmware mechanisms not addressed in the formal top-level specification but strictly internal to the security-relevant hardware, software, and firmware.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 (4) Informal Correspondence + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Produce, as an integral part of the development process, an informal descriptive top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of exceptions, error messages, and effects;
  2. +
  3. Show via [Selection: informal demonstration, convincing argument with formal methods as feasible] that the descriptive top-level specification is consistent with the formal policy model;
  4. +
  5. Show via informal demonstration, that the descriptive top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware;
  6. +
  7. Show that the descriptive top-level specification is an accurate description of the interfaces to security-relevant hardware, software, and firmware; and
  8. +
  9. Describe the security-relevant hardware, software, and firmware mechanisms not addressed in the descriptive top-level specification but strictly internal to the security-relevant hardware, software, and firmware.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 (5) Conceptually Simple Design + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to: +
    +
  1. Design and structure the security-relevant hardware, software, and firmware to use a complete, conceptually simple protection mechanism with precisely defined semantics; and
  2. +
  3. Internally structure the security-relevant hardware, software, and firmware with specific regard for this mechanism.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 (6) Structure For Testing + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate testing. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-17 (7) Structure For Least Privilege + +**Description:** + +The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate controlling access with least privilege. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-18 Tamper Resistance And Detection + +**Description:** + +The organization implements a tamper protection program for the information system, system component, or information system service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-18 (1) Multiple Phases Of Sdlc + +**Description:** + +The organization employs anti-tamper technologies and techniques during multiple phases in the system development life cycle including design, development, integration, operations, and maintenance. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-18 (2) Inspection Of Information Systems, Components, Or Devices + +**Description:** + +The organization inspects [Assignment: organization-defined information systems, system components, or devices] [Selection (one or more): at random; at [Assignment: organization-defined frequency], upon [Assignment: organization-defined indications of need for inspection]] to detect tampering. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-19 Component Authenticity + +**Description:** + +The organization: +
    +
  1. Develops and implements anti-counterfeit policy and procedures that include the means to detect and prevent counterfeit components from entering the information system; and
  2. +
  3. Reports counterfeit information system components to [Selection (one or more): source of counterfeit component; [Assignment: organization-defined external reporting organizations]; [Assignment: organization-defined personnel or roles]].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-19 (1) Anti-Counterfeit Training + +**Description:** + +The organization trains [Assignment: organization-defined personnel or roles] to detect counterfeit information system components (including hardware, software, and firmware). +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-19 (2) Configuration Control For Component Service / Repair + +**Description:** + +The organization maintains configuration control over [Assignment: organization-defined information system components] awaiting service/repair and serviced/repaired components awaiting return to service. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-19 (3) Component Disposal + +**Description:** + +The organization disposes of information system components using [Assignment: organization-defined techniques and methods]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-19 (4) Anti-Counterfeit Scanning + +**Description:** + +The organization scans for counterfeit information system components [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-20 Customized Development Of Critical Components + +**Description:** + +The organization re-implements or custom develops [Assignment: organization-defined critical information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-21 Developer Screening + +**Description:** + +The organization requires that the developer of [Assignment: organization-defined information system, system component, or information system service]: +
    +
  1. Have appropriate access authorizations as determined by assigned [Assignment: organization-defined official government duties]; and
  2. +
  3. Satisfy [Assignment: organization-defined additional personnel screening criteria].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-21 (1) Validation Of Screening + +**Description:** + +The organization requires the developer of the information system, system component, or information system service take [Assignment: organization-defined actions] to ensure that the required access authorizations and screening criteria are satisfied. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-22 Unsupported System Components + +**Description:** + +The organization: +
    +
  1. Replaces information system components when support for the components is no longer available from the developer, vendor, or manufacturer; and
  2. +
  3. Provides justification and documents approval for the continued use of unsupported system components required to satisfy mission/business needs.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SA-22 (1) Alternative Sources For Continued Support + +**Description:** + +The organization provides [Selection (one or more): in-house support; [Assignment: organization-defined support from external providers]] for unsupported information system components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/SC.md b/docs/compliance/reference/800-53/SC.md new file mode 100644 index 0000000..2d4fc2b --- /dev/null +++ b/docs/compliance/reference/800-53/SC.md @@ -0,0 +1,1774 @@ +--- +title: "System And Communications Protection" +description: "System And Communications Protection reference" +keywords: "standards, compliance, security, 800-53, System And Communications Protection" +--- + +## SC-1 System And Communications Protection Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A system and communications protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the system and communications protection policy and associated system and communications protection controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. System and communications protection policy [Assignment: organization-defined frequency]; and
    2. +
    3. System and communications protection procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-2 Application Partitioning + +**Description:** + +The information system separates user functionality (including user interface services) from information system management functionality. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## SC-2 (1) Interfaces For Non-Privileged Users + +**Description:** + +The information system prevents the presentation of information system management-related functionality at an interface for non-privileged users. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-3 Security Function Isolation + +**Description:** + +The information system isolates security functions from nonsecurity functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-3 (1) Hardware Separation + +**Description:** + +The information system utilizes underlying hardware separation mechanisms to implement security function isolation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-3 (2) Access / Flow Control Functions + +**Description:** + +The information system isolates security functions enforcing access and information flow control from nonsecurity functions and from other security functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-3 (3) Minimize Nonsecurity Functionality + +**Description:** + +The organization minimizes the number of nonsecurity functions included within the isolation boundary containing security functions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-3 (4) Module Coupling And Cohesiveness + +**Description:** + +The organization implements security functions as largely independent modules that maximize internal cohesiveness within modules and minimize coupling between modules. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-3 (5) Layered Structures + +**Description:** + +The organization implements security functions as a layered structure minimizing interactions between layers of the design and avoiding any dependence by lower layers on the functionality or correctness of higher layers. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-4 Information In Shared Resources + +**Description:** + +The information system prevents unauthorized and unintended information transfer via shared system resources. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-4 (1) Security Levels + +**Description:** + +[Withdrawn: Incorporated into SC-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-4 (2) Periods Processing + +**Description:** + +The information system prevents unauthorized information transfer via shared resources in accordance with [Assignment: organization-defined procedures] when system processing explicitly switches between different information classification levels or security categories. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-5 Denial Of Service Protection + +**Description:** + +The information system protects against or limits the effects of the following types of denial of service attacks: [Assignment: organization-defined types of denial of service attacks or references to sources for such information] by employing [Assignment: organization-defined security safeguards]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-5 (1) Restrict Internal Users + +**Description:** + +The information system restricts the ability of individuals to launch [Assignment: organization-defined denial of service attacks] against other information systems. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-5 (2) Excess Capacity / Bandwidth / Redundancy + +**Description:** + +The information system manages excess capacity, bandwidth, or other redundancy to limit the effects of information flooding denial of service attacks. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-5 (3) Detection / Monitoring + +**Description:** + +The organization: +
    +
  1. Employs [Assignment: organization-defined monitoring tools] to detect indicators of denial of service attacks against the information system; and
  2. +
  3. Monitors [Assignment: organization-defined information system resources] to determine if sufficient resources exist to prevent effective denial of service attacks.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-6 Resource Availability + +**Description:** + +The information system protects the availability of resources by allocating [Assignment: organization-defined resources] by [Selection (one or more); priority; quota; [Assignment: organization-defined security safeguards]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 Boundary Protection + +**Description:** + +The information system: +
    +
  1. Monitors and controls communications at the external boundary of the system and at key internal boundaries within the system;
  2. +
  3. Implements subnetworks for publicly accessible system components that are [Selection: physically; logically] separated from internal organizational networks; and
  4. +
  5. Connects to external networks or information systems only through managed interfaces consisting of boundary protection devices arranged in accordance with an organizational security architecture.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (1) Physically Separated Subnetworks + +**Description:** + +[Withdrawn: Incorporated into SC-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (2) Public Access + +**Description:** + +[Withdrawn: Incorporated into SC-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (3) Access Points + +**Description:** + +The organization limits the number of external network connections to the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (4) External Telecommunications Services + +**Description:** + +The organization: +
    +
  1. Implements a managed interface for each external telecommunication service;
  2. +
  3. Establishes a traffic flow policy for each managed interface;
  4. +
  5. Protects the confidentiality and integrity of the information being transmitted across each interface;
  6. +
  7. Documents each exception to the traffic flow policy with a supporting mission/business need and duration of that need; and
  8. +
  9. Reviews exceptions to the traffic flow policy [Assignment: organization-defined frequency] and removes exceptions that are no longer supported by an explicit mission/business need.
  10. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (5) Deny By Default / Allow By Exception + +**Description:** + +The information system at managed interfaces denies network communications traffic by default and allows network communications traffic by exception (i.e., deny all, permit by exception). +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (6) Response To Recognized Failures + +**Description:** + +[Withdrawn: Incorporated into SC-7 (18)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (7) Prevent Split Tunneling For Remote Devices + +**Description:** + +The information system, in conjunction with a remote device, prevents the device from simultaneously establishing non-remote connections with the system and communicating via some other connection to resources in external networks. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (8) Route Traffic To Authenticated Proxy Servers + +**Description:** + +The information system routes [Assignment: organization-defined internal communications traffic] to [Assignment: organization-defined external networks] through authenticated proxy servers at managed interfaces. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (9) Restrict Threatening Outgoing Communications Traffic + +**Description:** + +The information system: +
    +
  1. Detects and denies outgoing communications traffic posing a threat to external information systems; and
  2. +
  3. Audits the identity of internal users associated with denied communications.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (10) Prevent Unauthorized Exfiltration + +**Description:** + +The organization prevents the unauthorized exfiltration of information across managed interfaces. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (11) Restrict Incoming Communications Traffic + +**Description:** + +The information system only allows incoming communications from [Assignment: organization-defined authorized sources] to be routed to [Assignment: organization-defined authorized destinations]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (12) Host-Based Protection + +**Description:** + +The organization implements [Assignment: organization-defined host-based boundary protection mechanisms] at [Assignment: organization-defined information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (13) Isolation Of Security Tools / Mechanisms / Support Components + +**Description:** + +The organization isolates [Assignment: organization-defined information security tools, mechanisms, and support components] from other internal information system components by implementing physically separate subnetworks with managed interfaces to other components of the system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (14) Protects Against Unauthorized Physical Connections + +**Description:** + +The organization protects against unauthorized physical connections at [Assignment: organization-defined managed interfaces]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (15) Route Privileged Network Accesses + +**Description:** + +The information system routes all networked, privileged accesses through a dedicated, managed interface for purposes of access control and auditing. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (16) Prevent Discovery Of Components / Devices + +**Description:** + +The information system prevents discovery of specific system components composing a managed interface. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (17) Automated Enforcement Of Protocol Formats + +**Description:** + +The information system enforces adherence to protocol formats. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (18) Fail Secure + +**Description:** + +The information system fails securely in the event of an operational failure of a boundary protection device. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (19) Blocks Communication From Non-Organizationally Configured Hosts + +**Description:** + +The information system blocks both inbound and outbound communications traffic between [Assignment: organization-defined communication clients] that are independently configured by end users and external service providers. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (20) Dynamic Isolation / Segregation + +**Description:** + +The information system provides the capability to dynamically isolate/segregate [Assignment: organization-defined information system components] from other components of the system. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## SC-7 (21) Isolation Of Information System Components + +**Description:** + +The organization employs boundary protection mechanisms to separate [Assignment: organization-defined information system components] supporting [Assignment: organization-defined missions and/or business functions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (22) Separate Subnets For Connecting To Different Security Domains + +**Description:** + +The information system implements separate network addresses (i.e., different subnets) to connect to systems in different security domains. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-7 (23) Disable Sender Feedback On Protocol Validation Failure + +**Description:** + +The information system disables feedback to senders on protocol format validation failure. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-8 Transmission Confidentiality And Integrity + +**Description:** + +The information system protects the [Selection (one or more): confidentiality; integrity] of transmitted information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-8 (1) Cryptographic Or Alternate Physical Protection + +**Description:** + +The information system implements cryptographic mechanisms to [Selection (one or more): prevent unauthorized disclosure of information; detect changes to information] during transmission unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-8 (2) Pre / Post Transmission Handling + +**Description:** + +The information system maintains the [Selection (one or more): confidentiality; integrity] of information during preparation for transmission and during reception. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-8 (3) Cryptographic Protection For Message Externals + +**Description:** + +The information system implements cryptographic mechanisms to protect message externals unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-8 (4) Conceal / Randomize Communications + +**Description:** + +The information system implements cryptographic mechanisms to conceal or randomize communication patterns unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-10 Network Disconnect + +**Description:** + +The information system terminates the network connection associated with a communications session at the end of the session or after [Assignment: organization-defined time period] of inactivity. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-11 Trusted Path + +**Description:** + +The information system establishes a trusted communications path between the user and the following security functions of the system: [Assignment: organization-defined security functions to include at a minimum, information system authentication and re-authentication]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-11 (1) Logical Isolation + +**Description:** + +The information system provides a trusted communications path that is logically isolated and distinguishable from other paths. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-12 Cryptographic Key Establishment And Management + +**Description:** + +The organization establishes and manages cryptographic keys for required cryptography employed within the information system in accordance with [Assignment: organization-defined requirements for key generation, distribution, storage, access, and destruction]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-12 (1) Availability + +**Description:** + +The organization maintains availability of information in the event of the loss of cryptographic keys by users. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-12 (2) Symmetric Keys + +**Description:** + +The organization produces, controls, and distributes symmetric cryptographic keys using [Selection: NIST FIPS-compliant; NSA-approved] key management technology and processes. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## SC-12 (3) Asymmetric Keys + +**Description:** + +The organization produces, controls, and distributes asymmetric cryptographic keys using [Selection: NSA-approved key management technology and processes; approved PKI Class 3 certificates or prepositioned keying material; approved PKI Class 3 or Class 4 certificates and hardware security tokens that protect the user�s private key]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-12 (4) Pki Certificates + +**Description:** + +[Withdrawn: Incorporated into SC-12]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-12 (5) Pki Certificates / Hardware Tokens + +**Description:** + +[Withdrawn: Incorporated into SC-12]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-13 Cryptographic Protection + +**Description:** + +The information system implements [Assignment: organization-defined cryptographic uses and type of cryptography required for each use] in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## SC-13 (1) Fips-Validated Cryptography + +**Description:** + +[Withdrawn: Incorporated into SC-13]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-13 (2) Nsa-Approved Cryptography + +**Description:** + +[Withdrawn: Incorporated into SC-13]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-13 (3) Individuals Without Formal Access Approvals + +**Description:** + +[Withdrawn: Incorporated into SC-13]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-13 (4) Digital Signatures + +**Description:** + +[Withdrawn: Incorporated into SC-13]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-15 Collaborative Computing Devices + +**Description:** + +The information system: +
    +
  1. Prohibits remote activation of collaborative computing devices with the following exceptions: [Assignment: organization-defined exceptions where remote activation is to be allowed]; and
  2. +
  3. Provides an explicit indication of use to users physically present at the devices.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-15 (1) Physical Disconnect + +**Description:** + +The information system provides physical disconnect of collaborative computing devices in a manner that supports ease of use. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-15 (2) Blocking Inbound / Outbound Communications Traffic + +**Description:** + +[Withdrawn: Incorporated into SC-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-15 (3) Disabling / Removal In Secure Work Areas + +**Description:** + +The organization disables or removes collaborative computing devices from [Assignment: organization-defined information systems or information system components] in [Assignment: organization-defined secure work areas]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-15 (4) Explicitly Indicate Current Participants + +**Description:** + +The information system provides an explicit indication of current participants in [Assignment: organization-defined online meetings and teleconferences]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-16 Transmission Of Security Attributes + +**Description:** + +The information system associates [Assignment: organization-defined security attributes] with information exchanged between information systems and between system components. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-16 (1) Integrity Validation + +**Description:** + +The information system validates the integrity of transmitted security attributes. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-17 Public Key Infrastructure Certificates + +**Description:** + +The organization issues public key certificates under an [Assignment: organization-defined certificate policy] or obtains public key certificates from an approved service provider. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-18 Mobile Code + +**Description:** + +The organization: +
    +
  1. Defines acceptable and unacceptable mobile code and mobile code technologies;
  2. +
  3. Establishes usage restrictions and implementation guidance for acceptable mobile code and mobile code technologies; and
  4. +
  5. Authorizes, monitors, and controls the use of mobile code within the information system.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-18 (1) Identify Unacceptable Code / Take Corrective Actions + +**Description:** + +The information system identifies [Assignment: organization-defined unacceptable mobile code] and takes [Assignment: organization-defined corrective actions]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-18 (2) Acquisition / Development / Use + +**Description:** + +The organization ensures that the acquisition, development, and use of mobile code to be deployed in the information system meets [Assignment: organization-defined mobile code requirements]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-18 (3) Prevent Downloading / Execution + +**Description:** + +The information system prevents the download and execution of [Assignment: organization-defined unacceptable mobile code]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-18 (4) Prevent Automatic Execution + +**Description:** + +The information system prevents the automatic execution of mobile code in [Assignment: organization-defined software applications] and enforces [Assignment: organization-defined actions] prior to executing the code. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-18 (5) Allow Execution Only In Confined Environments + +**Description:** + +The organization allows execution of permitted mobile code only in confined virtual machine environments. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-19 Voice Over Internet Protocol + +**Description:** + +The organization: +
    +
  1. Establishes usage restrictions and implementation guidance for Voice over Internet Protocol (VoIP) technologies based on the potential to cause damage to the information system if used maliciously; and
  2. +
  3. Authorizes, monitors, and controls the use of VoIP within the information system.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-20 Secure Name / Address Resolution Service (Authoritative Source) + +**Description:** + +The information system: +
    +
  1. Provides additional data origin authentication and integrity verification artifacts along with the authoritative name resolution data the system returns in response to external name/address resolution queries; and
  2. +
  3. Provides the means to indicate the security status of child zones and (if the child supports secure resolution services) to enable verification of a chain of trust among parent and child domains, when operating as part of a distributed, hierarchical namespace.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-20 (1) Child Subspaces + +**Description:** + +[Withdrawn: Incorporated into SC-20]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-20 (2) Data Origin / Integrity + +**Description:** + +The information system provides data origin and integrity protection artifacts for internal name/address resolution queries. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-21 Secure Name / Address Resolution Service (Recursive Or Caching Resolver) + +**Description:** + +The information system requests and performs data origin authentication and data integrity verification on the name/address resolution responses the system receives from authoritative sources. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-21 (1) Data Origin / Integrity + +**Description:** + +[Withdrawn: Incorporated into SC-21]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-22 Architecture And Provisioning For Name / Address Resolution Service + +**Description:** + +The information systems that collectively provide name/address resolution service for an organization are fault-tolerant and implement internal/external role separation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-23 Session Authenticity + +**Description:** + +The information system protects the authenticity of communications sessions. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## SC-23 (1) Invalidate Session Identifiers At Logout + +**Description:** + +The information system invalidates session identifiers upon user logout or other session termination. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Authentication and Authorization Service (eNZi)complete
service provider system specific
+ +## SC-23 (2) User-Initiated Logouts / Message Displays + +**Description:** + +[Withdrawn: Incorporated into AC-12 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-23 (3) Unique Session Identifiers With Randomization + +**Description:** + +The information system generates a unique session identifier for each session with [Assignment: organization-defined randomness requirements] and recognizes only session identifiers that are system-generated. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-23 (4) Unique Session Identifiers With Randomization + +**Description:** + +[Withdrawn: Incorporated into SC-23 (3)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-23 (5) Allowed Certificate Authorities + +**Description:** + +The information system only allows the use of [Assignment: organization-defined certificate authorities] for verification of the establishment of protected sessions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-24 Fail In Known State + +**Description:** + +The information system fails to a [Assignment: organization-defined known-state] for [Assignment: organization-defined types of failures] preserving [Assignment: organization-defined system state information] in failure. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-25 Thin Nodes + +**Description:** + +The organization employs [Assignment: organization-defined information system components] with minimal functionality and information storage. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-26 Honeypots + +**Description:** + +The information system includes components specifically designed to be the target of malicious attacks for the purpose of detecting, deflecting, and analyzing such attacks. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-26 (1) Detection Of Malicious Code + +**Description:** + +[Withdrawn: Incorporated into SC-35]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-27 Platform-Independent Applications + +**Description:** + +The information system includes: [Assignment: organization-defined platform-independent applications]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-28 Protection Of Information At Rest + +**Description:** + +The information system protects the [Selection (one or more): confidentiality; integrity] of [Assignment: organization-defined information at rest]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## SC-28 (1) Cryptographic Protection + +**Description:** + +The information system implements cryptographic mechanisms to prevent unauthorized disclosure and modification of [Assignment: organization-defined information] on [Assignment: organization-defined information system components]. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## SC-28 (2) Off-Line Storage + +**Description:** + +The organization removes from online storage and stores off-line in a secure location [Assignment: organization-defined information]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-29 Heterogeneity + +**Description:** + +The organization employs a diverse set of information technologies for [Assignment: organization-defined information system components] in the implementation of the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-29 (1) Virtualization Techniques + +**Description:** + +The organization employs virtualization techniques to support the deployment of a diversity of operating systems and applications that are changed [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-30 Concealment And Misdirection + +**Description:** + +The organization employs [Assignment: organization-defined concealment and misdirection techniques] for [Assignment: organization-defined information systems] at [Assignment: organization-defined time periods] to confuse and mislead adversaries. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-30 (1) Virtualization Techniques + +**Description:** + +[Withdrawn: Incorporated into SC-29 (1)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-30 (2) Randomness + +**Description:** + +The organization employs [Assignment: organization-defined techniques] to introduce randomness into organizational operations and assets. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-30 (3) Change Processing / Storage Locations + +**Description:** + +The organization changes the location of [Assignment: organization-defined processing and/or storage] [Selection: [Assignment: organization-defined time frequency]; at random time intervals]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-30 (4) Misleading Information + +**Description:** + +The organization employs realistic, but misleading information in [Assignment: organization-defined information system components] with regard to its security state or posture. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-30 (5) Concealment Of System Components + +**Description:** + +The organization employs [Assignment: organization-defined techniques] to hide or conceal [Assignment: organization-defined information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-31 Covert Channel Analysis + +**Description:** + +The organization: +
    +
  1. Performs a covert channel analysis to identify those aspects of communications within the information system that are potential avenues for covert [Selection (one or more): storage; timing] channels; and
  2. +
  3. Estimates the maximum bandwidth of those channels.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-31 (1) Test Covert Channels For Exploitability + +**Description:** + +The organization tests a subset of the identified covert channels to determine which channels are exploitable. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-31 (2) Maximum Bandwidth + +**Description:** + +The organization reduces the maximum bandwidth for identified covert [Selection (one or more); storage; timing] channels to [Assignment: organization-defined values]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-31 (3) Measure Bandwidth In Operational Environments + +**Description:** + +The organization measures the bandwidth of [Assignment: organization-defined subset of identified covert channels] in the operational environment of the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-32 Information System Partitioning + +**Description:** + +The organization partitions the information system into [Assignment: organization-defined information system components] residing in separate physical domains or environments based on [Assignment: organization-defined circumstances for physical separation of components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-34 Non-Modifiable Executable Programs + +**Description:** + +The information system at [Assignment: organization-defined information system components]: +
    +
  1. Loads and executes the operating environment from hardware-enforced, read-only media; and
  2. +
  3. Loads and executes [Assignment: organization-defined applications] from hardware-enforced, read-only media.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-34 (1) No Writable Storage + +**Description:** + +The organization employs [Assignment: organization-defined information system components] with no writeable storage that is persistent across component restart or power on/off. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-34 (2) Integrity Protection / Read-Only Media + +**Description:** + +The organization protects the integrity of information prior to storage on read-only media and controls the media after such information has been recorded onto the media. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-34 (3) Hardware-Based Protection + +**Description:** + +The organization: +
    +
  1. Employs hardware-based, write-protect for [Assignment: organization-defined information system firmware components]; and
  2. +
  3. Implements specific procedures for [Assignment: organization-defined authorized individuals] to manually disable hardware write-protect for firmware modifications and re-enable the write-protect prior to returning to operational mode.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-35 Honeyclients + +**Description:** + +The information system includes components that proactively seek to identify malicious websites and/or web-based malicious code. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-36 Distributed Processing And Storage + +**Description:** + +The organization distributes [Assignment: organization-defined processing and storage] across multiple physical locations. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-36 (1) Polling Techniques + +**Description:** + +The organization employs polling techniques to identify potential faults, errors, or compromises to [Assignment: organization-defined distributed processing and storage components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-37 Out-Of-Band Channels + +**Description:** + +The organization employs [Assignment: organization-defined out-of-band channels] for the physical delivery or electronic transmission of [Assignment: organization-defined information, information system components, or devices] to [Assignment: organization-defined individuals or information systems]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-37 (1) Ensure Delivery / Transmission + +**Description:** + +The organization employs [Assignment: organization-defined security safeguards] to ensure that only [Assignment: organization-defined individuals or information systems] receive the [Assignment: organization-defined information, information system components, or devices]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-38 Operations Security + +**Description:** + +The organization employs [Assignment: organization-defined operations security safeguards] to protect key organizational information throughout the system development life cycle. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-39 Process Isolation + +**Description:** + +The information system maintains a separate execution domain for each executing process. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-39 (1) Hardware Separation + +**Description:** + +The information system implements underlying hardware separation mechanisms to facilitate process separation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-39 (2) Thread Isolation + +**Description:** + +The information system maintains a separate execution domain for each thread in [Assignment: organization-defined multi-threaded processing]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-40 Wireless Link Protection + +**Description:** + +The information system protects external and internal [Assignment: organization-defined wireless links] from [Assignment: organization-defined types of signal parameter attacks or references to sources for such attacks]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-40 (1) Electromagnetic Interference + +**Description:** + +The information system implements cryptographic mechanisms that achieve [Assignment: organization-defined level of protection] against the effects of intentional electromagnetic interference. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-40 (2) Reduce Detection Potential + +**Description:** + +The information system implements cryptographic mechanisms to reduce the detection potential of wireless links to [Assignment: organization-defined level of reduction]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-40 (3) Imitative Or Manipulative Communications Deception + +**Description:** + +The information system implements cryptographic mechanisms to identify and reject wireless transmissions that are deliberate attempts to achieve imitative or manipulative communications deception based on signal parameters. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-40 (4) Signal Parameter Identification + +**Description:** + +The information system implements cryptographic mechanisms to prevent the identification of [Assignment: organization-defined wireless transmitters] by using the transmitter signal parameters. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-41 Port And I/O Device Access + +**Description:** + +The organization physically disables or removes [Assignment: organization-defined connection ports or input/output devices] on [Assignment: organization-defined information systems or information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-42 Sensor Capability And Data + +**Description:** + +The information system: +
    +
  1. Prohibits the remote activation of environmental sensing capabilities with the following exceptions: [Assignment: organization-defined exceptions where remote activation of sensors is allowed]; and
  2. +
  3. Provides an explicit indication of sensor use to [Assignment: organization-defined class of users].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-42 (1) Reporting To Authorized Individuals Or Roles + +**Description:** + +The organization ensures that the information system is configured so that data or information collected by the [Assignment: organization-defined sensors] is only reported to authorized individuals or roles. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-42 (2) Authorized Use + +**Description:** + +The organization employs the following measures: [Assignment: organization-defined measures], so that data or information collected by [Assignment: organization-defined sensors] is only used for authorized purposes. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-42 (3) Prohibit Use Of Devices + +**Description:** + +The organization prohibits the use of devices possessing [Assignment: organization-defined environmental sensing capabilities] in [Assignment: organization-defined facilities, areas, or systems]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-43 Usage Restrictions + +**Description:** + +The organization: +
    +
  1. Establishes usage restrictions and implementation guidance for [Assignment: organization-defined information system components] based on the potential to cause damage to the information system if used maliciously; and
  2. +
  3. Authorizes, monitors, and controls the use of such components within the information system.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SC-44 Detonation Chambers + +**Description:** + +The organization employs a detonation chamber capability within [Assignment: organization-defined information system, system component, or location]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization diff --git a/docs/compliance/reference/800-53/SI.md b/docs/compliance/reference/800-53/SI.md new file mode 100644 index 0000000..1ec7f3a --- /dev/null +++ b/docs/compliance/reference/800-53/SI.md @@ -0,0 +1,1207 @@ +--- +title: "System And Information Integrity" +description: "System And Information Integrity reference" +keywords: "standards, compliance, security, 800-53, System And Information Integrity" +--- + +## SI-1 System And Information Integrity Policy And Procedures + +**Description:** + +The organization: +
    +
  1. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
  2. + +
      +
    1. A system and information integrity policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    2. +
    3. Procedures to facilitate the implementation of the system and information integrity policy and associated system and information integrity controls; and
    4. +
    +
  3. Reviews and updates the current:
  4. + +
      +
    1. System and information integrity policy [Assignment: organization-defined frequency]; and
    2. +
    3. System and information integrity procedures [Assignment: organization-defined frequency].
    4. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-2 Flaw Remediation + +**Description:** + +The organization: +
    +
  1. Identifies, reports, and corrects information system flaws;
  2. +
  3. Tests software and firmware updates related to flaw remediation for effectiveness and potential side effects before installation;
  4. +
  5. Installs security-relevant software and firmware updates within [Assignment: organization-defined time period] of the release of the updates; and
  6. +
  7. Incorporates flaw remediation into the organizational configuration management process.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-2 (1) Central Management + +**Description:** + +The organization centrally manages the flaw remediation process. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-2 (2) Automated Flaw Remediation Status + +**Description:** + +The organization employs automated mechanisms [Assignment: organization-defined frequency] to determine the state of information system components with regard to flaw remediation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-2 (3) Time To Remediate Flaws / Benchmarks For Corrective Actions + +**Description:** + +The organization: +
    +
  1. Measures the time between flaw identification and flaw remediation; and
  2. +
  3. Establishes [Assignment: organization-defined benchmarks] for taking corrective actions.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-2 (4) Automated Patch Management Tools + +**Description:** + +[Withdrawn: Incorporated into SI-2]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-2 (5) Automatic Software / Firmware Updates + +**Description:** + +The organization installs [Assignment: organization-defined security-relevant software and firmware updates] automatically to [Assignment: organization-defined information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-2 (6) Removal Of Previous Versions Of Software / Firmware + +**Description:** + +The organization removes [Assignment: organization-defined software and firmware components] after updated versions have been installed. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 Malicious Code Protection + +**Description:** + +The organization: +
    +
  1. Employs malicious code protection mechanisms at information system entry and exit points to detect and eradicate malicious code;
  2. +
  3. Updates malicious code protection mechanisms whenever new releases are available in accordance with organizational configuration management policy and procedures;
  4. +
  5. Configures malicious code protection mechanisms to:
  6. + +
      +
    1. Perform periodic scans of the information system [Assignment: organization-defined frequency] and real-time scans of files from external sources at [Selection (one or more); endpoint; network entry/exit points] as the files are downloaded, opened, or executed in accordance with organizational security policy; and
    2. +
    3. [Selection (one or more): block malicious code; quarantine malicious code; send alert to administrator; [Assignment: organization-defined action]] in response to malicious code detection; and
    4. +
    +
  7. Addresses the receipt of false positives during malicious code detection and eradication and the resulting potential impact on the availability of the information system.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (1) Central Management + +**Description:** + +The organization centrally manages malicious code protection mechanisms. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (2) Automatic Updates + +**Description:** + +The information system automatically updates malicious code protection mechanisms. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
service provider system specific
+ +## SI-3 (3) Non-Privileged Users + +**Description:** + +[Withdrawn: Incorporated into AC-6 (10)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (4) Updates Only By Privileged Users + +**Description:** + +The information system updates malicious code protection mechanisms only when directed by a privileged user. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (5) Portable Storage Devices + +**Description:** + +[Withdrawn: Incorporated into MP-7]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (6) Testing / Verification + +**Description:** + +The organization: +
    +
  1. Tests malicious code protection mechanisms [Assignment: organization-defined frequency] by introducing a known benign, non-spreading test case into the information system; and
  2. +
  3. Verifies that both detection of the test case and associated incident reporting occur.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (7) Nonsignature-Based Detection + +**Description:** + +The information system implements nonsignature-based malicious code detection mechanisms. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (8) Detect Unauthorized Commands + +**Description:** + +The information system detects [Assignment: organization-defined unauthorized operating system commands] through the kernel application programming interface at [Assignment: organization-defined information system hardware components] and [Selection (one or more): issues a warning; audits the command execution; prevents the execution of the command]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (9) Authenticate Remote Commands + +**Description:** + +The information system implements [Assignment: organization-defined security safeguards] to authenticate [Assignment: organization-defined remote commands]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-3 (10) Malicious Code Analysis + +**Description:** + +The organization: +
    +
  1. Employs [Assignment: organization-defined tools and techniques] to analyze the characteristics and behavior of malicious code; and
  2. +
  3. Incorporates the results from malicious code analysis into organizational incident response and flaw remediation processes.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 Information System Monitoring + +**Description:** + +The organization: +
    +
  1. Monitors the information system to detect:
  2. + +
      +
    1. Attacks and indicators of potential attacks in accordance with [Assignment: organization-defined monitoring objectives]; and
    2. +
    3. Unauthorized local, network, and remote connections;
    4. +
    +
  3. Identifies unauthorized use of the information system through [Assignment: organization-defined techniques and methods];
  4. +
  5. Deploys monitoring devices:
  6. + +
      +
    1. Strategically within the information system to collect organization-determined essential information; and
    2. +
    3. At ad hoc locations within the system to track specific types of transactions of interest to the organization;
    4. +
    +
  7. Protects information obtained from intrusion-monitoring tools from unauthorized access, modification, and deletion;
  8. +
  9. Heightens the level of information system monitoring activity whenever there is an indication of increased risk to organizational operations and assets, individuals, other organizations, or the Nation based on law enforcement information, intelligence information, or other credible sources of information;
  10. +
  11. Obtains legal opinion with regard to information system monitoring activities in accordance with applicable federal laws, Executive Orders, directives, policies, or regulations; and
  12. +
  13. Provides [Assignment: organization-defined information system monitoring information] to [Assignment: organization-defined personnel or roles] [Selection (one or more): as needed; [Assignment: organization-defined frequency]].
  14. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (1) System-Wide Intrusion Detection System + +**Description:** + +The organization connects and configures individual intrusion detection tools into an information system-wide intrusion detection system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (2) Automated Tools For Real-Time Analysis + +**Description:** + +The organization employs automated tools to support near real-time analysis of events. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (3) Automated Tool Integration + +**Description:** + +The organization employs automated tools to integrate intrusion detection tools into access control and flow control mechanisms for rapid response to attacks by enabling reconfiguration of these mechanisms in support of attack isolation and elimination. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (4) Inbound And Outbound Communications Traffic + +**Description:** + +The information system monitors inbound and outbound communications traffic [Assignment: organization-defined frequency] for unusual or unauthorized activities or conditions. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (5) System-Generated Alerts + +**Description:** + +The information system alerts [Assignment: organization-defined personnel or roles] when the following indications of compromise or potential compromise occur: [Assignment: organization-defined compromise indicators]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (6) Restrict Non-Privileged Users + +**Description:** + +[Withdrawn: Incorporated into AC-6 (10)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (7) Automated Response To Suspicious Events + +**Description:** + +The information system notifies [Assignment: organization-defined incident response personnel (identified by name and/or by role)] of detected suspicious events and takes [Assignment: organization-defined least-disruptive actions to terminate suspicious events]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (8) Protection Of Monitoring Information + +**Description:** + +[Withdrawn: Incorporated into SI-4]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (9) Testing Of Monitoring Tools + +**Description:** + +The organization tests intrusion-monitoring tools [Assignment: organization-defined frequency]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (10) Visibility Of Encrypted Communications + +**Description:** + +The organization makes provisions so that [Assignment: organization-defined encrypted communications traffic] is visible to [Assignment: organization-defined information system monitoring tools]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (11) Analyze Communications Traffic Anomalies + +**Description:** + +The organization analyzes outbound communications traffic at the external boundary of the information system and selected [Assignment: organization-defined interior points within the system (e.g., subnetworks, subsystems)] to discover anomalies. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (12) Automated Alerts + +**Description:** + +The organization employs automated mechanisms to alert security personnel of the following inappropriate or unusual activities with security implications: [Assignment: organization-defined activities that trigger alerts]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (13) Analyze Traffic / Event Patterns + +**Description:** + +The organization: +
    +
  1. Analyzes communications traffic/event patterns for the information system;
  2. +
  3. Develops profiles representing common traffic patterns and/or events; and
  4. +
  5. Uses the traffic/event profiles in tuning system-monitoring devices to reduce the number of false positives and the number of false negatives.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (14) Wireless Intrusion Detection + +**Description:** + +The organization employs a wireless intrusion detection system to identify rogue wireless devices and to detect attack attempts and potential compromises/breaches to the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (15) Wireless To Wireline Communications + +**Description:** + +The organization employs an intrusion detection system to monitor wireless communications traffic as the traffic passes from wireless to wireline networks. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (16) Correlate Monitoring Information + +**Description:** + +The organization correlates information from monitoring tools employed throughout the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (17) Integrated Situational Awareness + +**Description:** + +The organization correlates information from monitoring physical, cyber, and supply chain activities to achieve integrated, organization-wide situational awareness. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (18) Analyze Traffic / Covert Exfiltration + +**Description:** + +The organization analyzes outbound communications traffic at the external boundary of the information system (i.e., system perimeter) and at [Assignment: organization-defined interior points within the system (e.g., subsystems, subnetworks)] to detect covert exfiltration of information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (19) Individuals Posing Greater Risk + +**Description:** + +The organization implements [Assignment: organization-defined additional monitoring] of individuals who have been identified by [Assignment: organization-defined sources] as posing an increased level of risk. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (20) Privileged Users + +**Description:** + +The organization implements [Assignment: organization-defined additional monitoring] of privileged users. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (21) Probationary Periods + +**Description:** + +The organization implements [Assignment: organization-defined additional monitoring] of individuals during [Assignment: organization-defined probationary period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (22) Unauthorized Network Services + +**Description:** + +The information system detects network services that have not been authorized or approved by [Assignment: organization-defined authorization or approval processes] and [Selection (one or more): audits; alerts [Assignment: organization-defined personnel or roles]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (23) Host-Based Devices + +**Description:** + +The organization implements [Assignment: organization-defined host-based monitoring mechanisms] at [Assignment: organization-defined information system components]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-4 (24) Indicators Of Compromise + +**Description:** + +The information system discovers, collects, distributes, and uses indicators of compromise. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-5 Security Alerts, Advisories, And Directives + +**Description:** + +The organization: +
    +
  1. Receives information system security alerts, advisories, and directives from [Assignment: organization-defined external organizations] on an ongoing basis;
  2. +
  3. Generates internal security alerts, advisories, and directives as deemed necessary;
  4. +
  5. Disseminates security alerts, advisories, and directives to: [Selection (one or more): [Assignment: organization-defined personnel or roles]; [Assignment: organization-defined elements within the organization]; [Assignment: organization-defined external organizations]]; and
  6. +
  7. Implements security directives in accordance with established time frames, or notifies the issuing organization of the degree of noncompliance.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-5 (1) Automated Alerts And Advisories + +**Description:** + +The organization employs automated mechanisms to make security alert and advisory information available throughout the organization. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-6 Security Function Verification + +**Description:** + +The information system: +
    +
  1. Verifies the correct operation of [Assignment: organization-defined security functions];
  2. +
  3. Performs this verification [Selection (one or more): [Assignment: organization-defined system transitional states]; upon command by user with appropriate privilege; [Assignment: organization-defined frequency]];
  4. +
  5. Notifies [Assignment: organization-defined personnel or roles] of failed security verification tests; and
  6. +
  7. [Selection (one or more): shuts the information system down; restarts the information system; [Assignment: organization-defined alternative action(s)]] when anomalies are discovered.
  8. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-6 (1) Notification Of Failed Security Tests + +**Description:** + +[Withdrawn: Incorporated into SI-6]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-6 (2) Automation Support For Distributed Testing + +**Description:** + +The information system implements automated mechanisms to support the management of distributed security testing. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-6 (3) Report Verification Results + +**Description:** + +The organization reports the results of security function verification to [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 Software, Firmware, And Information Integrity + +**Description:** + +The organization employs integrity verification tools to detect unauthorized changes to [Assignment: organization-defined software, firmware, and information]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (1) Integrity Checks + +**Description:** + +The information system performs an integrity check of [Assignment: organization-defined software, firmware, and information] [Selection (one or more): at startup; at [Assignment: organization-defined transitional states or security-relevant events]; [Assignment: organization-defined frequency]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (2) Automated Notifications Of Integrity Violations + +**Description:** + +The organization employs automated tools that provide notification to [Assignment: organization-defined personnel or roles] upon discovering discrepancies during integrity verification. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (3) Centrally-Managed Integrity Tools + +**Description:** + +The organization employs centrally managed integrity verification tools. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (4) Tamper-Evident Packaging + +**Description:** + +[Withdrawn: Incorporated into SA-12]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (5) Automated Response To Integrity Violations + +**Description:** + +The information system automatically [Selection (one or more): shuts the information system down; restarts the information system; implements [Assignment: organization-defined security safeguards]] when integrity violations are discovered. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (6) Cryptographic Protection + +**Description:** + +The information system implements cryptographic mechanisms to detect unauthorized changes to software, firmware, and information. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (7) Integration Of Detection And Response + +**Description:** + +The organization incorporates the detection of unauthorized [Assignment: organization-defined security-relevant changes to the information system] into the organizational incident response capability. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (8) Auditing Capability For Significant Events + +**Description:** + +The information system, upon detection of a potential integrity violation, provides the capability to audit the event and initiates the following actions: [Selection (one or more): generates an audit record; alerts current user; alerts [Assignment: organization-defined personnel or roles]; [Assignment: organization-defined other actions]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (9) Verify Boot Process + +**Description:** + +The information system verifies the integrity of the boot process of [Assignment: organization-defined devices]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (10) Protection Of Boot Firmware + +**Description:** + +The information system implements [Assignment: organization-defined security safeguards] to protect the integrity of boot firmware in [Assignment: organization-defined devices]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (11) Confined Environments With Limited Privileges + +**Description:** + +The organization requires that [Assignment: organization-defined user-installed software] execute in a confined physical or virtual machine environment with limited privileges. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (12) Integrity Verification + +**Description:** + +The organization requires that the integrity of [Assignment: organization-defined user-installed software] be verified prior to execution. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (13) Code Execution In Protected Environments + +**Description:** + +The organization allows execution of binary or machine-executable code obtained from sources with limited or no warranty and without the provision of source code only in confined physical or virtual machine environments and with the explicit approval of [Assignment: organization-defined personnel or roles]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (14) Binary Or Machine Executable Code + +**Description:** + +The organization: +
    +
  1. Prohibits the use of binary or machine-executable code from sources with limited or no warranty and without the provision of source code; and
  2. +
  3. Provides exceptions to the source code requirement only for compelling mission/operational requirements and with the approval of the authorizing official.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (15) Code Authentication + +**Description:** + +The information system implements cryptographic mechanisms to authenticate [Assignment: organization-defined software or firmware components] prior to installation. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-7 (16) Time Limit On Process Execution W/O Supervision + +**Description:** + +The organization does not allow processes to execute without supervision for more than [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-8 Spam Protection + +**Description:** + +The organization: +
    +
  1. Employs spam protection mechanisms at information system entry and exit points to detect and take action on unsolicited messages; and
  2. +
  3. Updates spam protection mechanisms when new releases are available in accordance with organizational configuration management policy and procedures.
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-8 (1) Central Management + +**Description:** + +The organization centrally manages spam protection mechanisms. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-8 (2) Automatic Updates + +**Description:** + +The information system automatically updates spam protection mechanisms. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-8 (3) Continuous Learning Capability + +**Description:** + +The information system implements spam protection mechanisms with a learning capability to more effectively identify legitimate communications traffic. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-10 Information Input Validation + +**Description:** + +The information system checks the validity of [Assignment: organization-defined information inputs]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-10 (1) Manual Override Capability + +**Description:** + +The information system: +
    +
  1. Provides a manual override capability for input validation of [Assignment: organization-defined inputs];
  2. +
  3. Restricts the use of the manual override capability to only [Assignment: organization-defined authorized individuals]; and
  4. +
  5. Audits the use of the manual override capability.
  6. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-10 (2) Review / Resolution Of Errors + +**Description:** + +The organization ensures that input validation errors are reviewed and resolved within [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-10 (3) Predictable Behavior + +**Description:** + +The information system behaves in a predictable and documented manner that reflects organizational and system objectives when invalid inputs are received. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-10 (4) Review / Timing Interactions + +**Description:** + +The organization accounts for timing interactions among information system components in determining appropriate responses for invalid inputs. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-10 (5) Restrict Inputs To Trusted Sources And Approved Formats + +**Description:** + +The organization restricts the use of information inputs to [Assignment: organization-defined trusted sources] and/or [Assignment: organization-defined formats]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-11 Error Handling + +**Description:** + +The information system: +
    +
  1. Generates error messages that provide information necessary for corrective actions without revealing information that could be exploited by adversaries; and
  2. +
  3. Reveals error messages only to [Assignment: organization-defined personnel or roles].
  4. +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Trusted Registry (DTR)complete
service provider system specific
Docker Enterprise Edition Enginecomplete
service provider system specific
Universal Control Plane (UCP)complete
service provider system specific
+ +## SI-12 Information Handling And Retention + +**Description:** + +The organization handles and retains information within the information system and information output from the system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and operational requirements. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-13 Predictable Failure Prevention + +**Description:** + +The organization: +
    +
  1. Determines mean time to failure (MTTF) for [Assignment: organization-defined information system components] in specific environments of operation; and
  2. +
  3. Provides substitute information system components and a means to exchange active and standby components at [Assignment: organization-defined MTTF substitution criteria].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-13 (1) Transferring Component Responsibilities + +**Description:** + +The organization takes information system components out of service by transferring component responsibilities to substitute components no later than [Assignment: organization-defined fraction or percentage] of mean time to failure. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-13 (2) Time Limit On Process Execution Without Supervision + +**Description:** + +[Withdrawn: Incorporated into SI-7 (16)]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-13 (3) Manual Transfer Between Components + +**Description:** + +The organization manually initiates transfers between active and standby information system components [Assignment: organization-defined frequency] if the mean time to failure exceeds [Assignment: organization-defined time period]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-13 (4) Standby Component Installation / Notification + +**Description:** + +The organization, if information system component failures are detected: +
    +
  1. Ensures that the standby components are successfully and transparently installed within [Assignment: organization-defined time period]; and
  2. +
  3. [Selection (one or more): activates [Assignment: organization-defined alarm]; automatically shuts down the information system].
  4. +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-13 (5) Failover Capability + +**Description:** + +The organization provides [Selection: real-time; near real-time] [Assignment: organization-defined failover capability] for the information system. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-14 Non-Persistence + +**Description:** + +The organization implements non-persistent [Assignment: organization-defined information system components and services] that are initiated in a known state and terminated [Selection (one or more): upon end of session of use; periodically at [Assignment: organization-defined frequency]]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-14 (1) Refresh From Trusted Sources + +**Description:** + +The organization ensures that software and data employed during information system component and service refreshes are obtained from [Assignment: organization-defined trusted sources]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-15 Information Output Filtering + +**Description:** + +The information system validates information output from [Assignment: organization-defined software programs and/or applications] to ensure that the information is consistent with the expected content. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization +## SI-16 Memory Protection + +**Description:** + +The information system implements [Assignment: organization-defined security safeguards] to protect its memory from unauthorized code execution. +
    +
+ +**Control Information:** + +**Responsible role(s)** - Docker system + + + + + + + + + + + + +
ComponentImplementation Status(es)Control Origin(s)
Docker Enterprise Edition Enginecomplete
configured by customer
+ +## SI-17 Fail-Safe Procedures + +**Description:** + +The information system implements [Assignment: organization-defined fail-safe procedures] when [Assignment: organization-defined failure conditions occur]. +
    +
+ +**Control Information:** + + +**Responsible role(s)** - Organization From ec138d3b9e6033c89628395e8e035b2df8b75c78 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 17:13:13 -0400 Subject: [PATCH 03/13] doc generator src --- docs/generator/.dockerignore | 1 + docs/generator/Dockerfile | 8 + docs/generator/Gopkg.lock | 63 + docs/generator/Gopkg.toml | 26 + docs/generator/data/800-53-controls.xml | 16323 ++++++++++++++++ docs/generator/generator.go | 211 + docs/generator/tmpl/80053.test.tmpl | 64 + docs/generator/tmpl/80053.tmpl | 192 + docs/generator/tmpl/nist80053.html | 197 + docs/generator/types.go | 64 + .../github.com/blang/semver/.gx/lastpubver | 1 + .../vendor/github.com/blang/semver/LICENSE | 22 + .../vendor/github.com/blang/semver/README.md | 191 + .../github.com/blang/semver/examples/main.go | 83 + .../vendor/github.com/blang/semver/json.go | 23 + .../github.com/blang/semver/json_test.go | 49 + .../github.com/blang/semver/package.json | 17 + .../vendor/github.com/blang/semver/range.go | 416 + .../github.com/blang/semver/range_test.go | 581 + .../vendor/github.com/blang/semver/semver.go | 418 + .../github.com/blang/semver/semver_test.go | 458 + .../vendor/github.com/blang/semver/sort.go | 28 + .../github.com/blang/semver/sort_test.go | 30 + .../vendor/github.com/blang/semver/sql.go | 30 + .../github.com/blang/semver/sql_test.go | 38 + .../github.com/go-forks/fsnotify/.gitignore | 5 + .../github.com/go-forks/fsnotify/AUTHORS | 28 + .../github.com/go-forks/fsnotify/CHANGELOG.md | 160 + .../go-forks/fsnotify/CONTRIBUTING.md | 53 + .../github.com/go-forks/fsnotify/LICENSE | 28 + .../github.com/go-forks/fsnotify/README.md | 101 + .../go-forks/fsnotify/example_test.go | 34 + .../github.com/go-forks/fsnotify/fsnotify.go | 114 + .../go-forks/fsnotify/fsnotify_bsd.go | 500 + .../go-forks/fsnotify/fsnotify_linux.go | 304 + .../go-forks/fsnotify/fsnotify_open_bsd.go | 11 + .../go-forks/fsnotify/fsnotify_open_darwin.go | 11 + .../fsnotify/fsnotify_symlink_test.go | 74 + .../go-forks/fsnotify/fsnotify_test.go | 1010 + .../go-forks/fsnotify/fsnotify_windows.go | 598 + .../vendor/github.com/go-utils/ufs/README.md | 286 + .../vendor/github.com/go-utils/ufs/_gob.gtxt | 42 + .../vendor/github.com/go-utils/ufs/doc.go | 2 + .../vendor/github.com/go-utils/ufs/fs.go | 376 + .../vendor/github.com/go-utils/ufs/walker.go | 104 + .../go-utils/ufs/watcher-default.go | 133 + .../go-utils/ufs/watcher-sandboxed.go | 37 + .../metaleap/go-util-misc/README.md | 205 + .../github.com/metaleap/go-util-misc/doc.go | 2 + .../github.com/metaleap/go-util-misc/util.go | 421 + .../metaleap/go-util-slice/-gen-sort.gt | 36 + .../github.com/metaleap/go-util-slice/-gen.gt | 156 + .../metaleap/go-util-slice/README.md | 459 + .../metaleap/go-util-slice/bool.gt.go | 158 + .../github.com/metaleap/go-util-slice/doc.go | 2 + .../metaleap/go-util-slice/f64.gt.go | 158 + .../metaleap/go-util-slice/int.gt.go | 158 + .../metaleap/go-util-slice/str.gt.go | 199 + .../github.com/metaleap/go-util-str/README.md | 393 + .../github.com/metaleap/go-util-str/buf.go | 26 + .../github.com/metaleap/go-util-str/doc.go | 2 + .../metaleap/go-util-str/matcher.go | 127 + .../github.com/metaleap/go-util-str/str.go | 524 + .../compliance-masonry/.codeclimate.yml | 18 + .../compliance-masonry/.dockerignore | 12 + .../opencontrol/compliance-masonry/.gitignore | 5 + .../opencontrol/compliance-masonry/.goxc.json | 18 + .../compliance-masonry/CONTRIBUTING.md | 21 + .../opencontrol/compliance-masonry/Dockerfile | 6 + .../opencontrol/compliance-masonry/Gopkg.lock | 129 + .../opencontrol/compliance-masonry/Gopkg.toml | 62 + .../opencontrol/compliance-masonry/LICENSE.md | 31 + .../opencontrol/compliance-masonry/README.md | 14 + .../compliance-masonry/appveyor.yml | 24 + .../opencontrol/compliance-masonry/circle.yml | 36 + .../compliance-masonry/circleci/README.md | 4 + .../compliance-masonry/circleci/coverage.sh | 23 + .../commands/diff/diff_suite_test.go | 13 + .../commands/diff/inventory.go | 97 + .../commands/diff/inventory_test.go | 62 + .../compliance-masonry/commands/docs/docs.go | 25 + .../commands/docs/docs_suite_test.go | 13 + .../commands/docs/docs_test.go | 82 + .../commands/docs/gitbook/gitbook.go | 76 + .../docs/gitbook/gitbookCertification.go | 138 + .../docs/gitbook/gitbookCertification_test.go | 86 + .../docs/gitbook/gitbookComponents.go | 44 + .../docs/gitbook/gitbookComponents_test.go | 44 + .../commands/docs/gitbook/gitbookSummaries.go | 135 + .../docs/gitbook/gitbookSummaries_test.go | 107 + .../commands/docs/gitbook/gitbook_test.go | 104 + .../compliance-masonry/commands/get/get.go | 28 + .../commands/get/resources/downloader.go | 29 + .../commands/get/resources/downloader_test.go | 34 + .../commands/get/resources/getter.go | 209 + .../commands/get/resources/getter_test.go | 186 + .../get/resources/mocks/Downloader.go | 24 + .../commands/get/resources/mocks/Getter.go | 40 + .../get/resources/resources_suite_test.go | 13 + .../compliance_masonry_go_suite_test.go | 13 + .../opencontrol/compliance-masonry/diff.go | 48 + .../compliance-masonry/diff_test.go | 42 + .../compliance-masonry/docs/README.md | 24 + .../docs/assets/data_flow.png | Bin 0 -> 188005 bytes .../docs/assets/workflow.png | Bin 0 -> 35815 bytes .../docs/assets/workflow.svg | 4 + .../compliance-masonry/docs/development.md | 68 + .../compliance-masonry/docs/gitbook.md | 80 + .../compliance-masonry/docs/install.md | 43 + .../masonry-for-the-compliance-literate.md | 44 + .../compliance-masonry/docs/usage.md | 64 + .../exampleplugin/example.go | 32 + .../exampleplugin/example_test.go | 103 + .../exampleplugin/exampleplugin_suite_test.go | 13 + .../exampleplugin/opencontrol.yaml | 14 + .../common/EC2BrokenControl/component.yaml | 45 + .../EC2UnsupportedVersion/component.yaml | 26 + .../common/EC2VersionNotSemver/component.yaml | 26 + .../component.yaml | 22 + .../v2_0_0/EC2/component.yaml | 45 + .../v2_0_0/EC2WithKey/component.yaml | 46 + .../v3_0_0/EC2/component.yaml | 73 + .../v3_0_0/EC2WithKey/component.yaml | 74 + .../v3_1_0/EC2/component.yaml | 83 + .../v3_1_0/EC2WithKey/component.yaml | 83 + .../complete_export/README.md | 14 + .../complete_export/SUMMARY.md | 14 + .../complete_export/components/EC2.md | 6 + .../standards/NIST-800-53-AC-2.md | 32 + .../standards/NIST-800-53-AC-6.md | 9 + .../standards/NIST-800-53-AC.md | 3 + .../standards/NIST-800-53-CM-2.md | 19 + .../standards/NIST-800-53-CM.md | 2 + .../standards/PCI-DSS-MAY-2015-1.1.1.md | 4 + .../standards/PCI-DSS-MAY-2015-1.1.md | 20 + .../standards/PCI-DSS-MAY-2015-1.md | 3 + .../standards/PCI-DSS-MAY-2015-2.1.md | 9 + .../standards/PCI-DSS-MAY-2015-2.md | 2 + .../complete_export_with_markdown/README.md | 14 + .../complete_export_with_markdown/SUMMARY.md | 15 + .../components/EC2.md | 6 + .../standards/NIST-800-53-AC-2.md | 4 + .../standards/NIST-800-53-AC-6.md | 4 + .../standards/NIST-800-53-AC.md | 3 + .../standards/NIST-800-53-CM-2.md | 16 + .../standards/NIST-800-53-CM.md | 2 + .../standards/PCI-DSS-MAY-2015-1.1.1.md | 4 + .../standards/PCI-DSS-MAY-2015-1.1.md | 20 + .../standards/PCI-DSS-MAY-2015-1.md | 3 + .../standards/PCI-DSS-MAY-2015-2.1.md | 9 + .../standards/PCI-DSS-MAY-2015-2.md | 2 + .../system_documentation/about-the-ssp.md | 1 + .../gitbook_exports/components_readme.md | 3 + .../gitbook_exports/general_readme.md | 11 + .../standards/NIST-800-53-AC.md | 3 + .../standards/NIST-800-53-CM.md | 2 + .../standards/PCI-DSS-MAY-2015-1.md | 3 + .../standards/PCI-DSS-MAY-2015-2.md | 2 + .../gitbook_exports/standards_readme.md | 11 + .../certifications/LATO.yaml | 10 + .../components/EC2/artifact-ec2-1.png | Bin 0 -> 14721 bytes .../components/EC2/component.yaml | 53 + .../standards/NIST-800-53.yaml | 3111 +++ .../standards/PCI-DSS-MAY-2015.yaml | 1029 + .../certifications/LATO.yaml | 10 + .../components/EC2/artifact-ec2-1.png | Bin 0 -> 14721 bytes .../components/EC2/component.yaml | 63 + .../standards/NIST-800-53.yaml | 998 + .../standards/PCI-DSS-MAY-2015.yaml | 1029 + .../certifications/LATO.yaml | 10 + .../components/EC2/artifact-ec2-1.png | Bin 0 -> 14721 bytes .../components/EC2/component.yaml | 54 + .../markdowns/SUMMARY.md | 1 + .../system_documentation/about-the-ssp.md | 1 + .../standards/NIST-800-53.yaml | 998 + .../standards/PCI-DSS-MAY-2015.yaml | 1029 + .../BrokenStandard/NIST-800-53.yaml | 1 + .../compliance-masonry/masonry-go.go | 141 + .../compliance-masonry/masonry-go_test.go | 123 + .../opencontrol/compliance-masonry/release.sh | 8 + .../tools/certifications/certifications.go | 36 + .../tools/constants/constants.go | 39 + .../compliance-masonry/tools/fs/fs.go | 82 + .../compliance-masonry/tools/fs/mocks/Util.go | 108 + .../compliance-masonry/tools/mapset/map.go | 50 + .../tools/mapset/map_test.go | 25 + .../tools/mapset/mapset_suite_test.go | 13 + .../compliance-masonry/tools/vcs/manager.go | 47 + .../tools/vcs/manager_test.go | 33 + .../tools/vcs/mocks/RepoManager.go | 22 + .../tools/vcs/vcs_suite_test.go | 13 + .../vendor/gopkg.in/fatih/set.v0/.travis.yml | 3 + .../vendor/gopkg.in/fatih/set.v0/LICENSE.md | 20 + .../vendor/gopkg.in/fatih/set.v0/README.md | 245 + .../vendor/gopkg.in/fatih/set.v0/set.go | 116 + .../vendor/gopkg.in/fatih/set.v0/set_nots.go | 192 + .../gopkg.in/fatih/set.v0/set_nots_test.go | 258 + .../vendor/gopkg.in/fatih/set.v0/set_test.go | 188 + .../vendor/gopkg.in/fatih/set.v0/set_ts.go | 197 + .../gopkg.in/fatih/set.v0/set_ts_test.go | 297 + .../vendor/gopkg.in/yaml.v2/.travis.yml | 9 + .../generator/vendor/gopkg.in/yaml.v2/LICENSE | 13 + .../vendor/gopkg.in/yaml.v2/LICENSE.libyaml | 31 + .../vendor/gopkg.in/yaml.v2/README.md | 133 + .../generator/vendor/gopkg.in/yaml.v2/apic.go | 742 + .../vendor/gopkg.in/yaml.v2/decode.go | 685 + .../vendor/gopkg.in/yaml.v2/decode_test.go | 1017 + .../vendor/gopkg.in/yaml.v2/emitterc.go | 1684 ++ .../vendor/gopkg.in/yaml.v2/encode.go | 306 + .../vendor/gopkg.in/yaml.v2/encode_test.go | 501 + .../gopkg.in/yaml.v2/example_embedded_test.go | 41 + .../vendor/gopkg.in/yaml.v2/parserc.go | 1095 ++ .../vendor/gopkg.in/yaml.v2/readerc.go | 394 + .../vendor/gopkg.in/yaml.v2/resolve.go | 208 + .../vendor/gopkg.in/yaml.v2/scannerc.go | 2711 +++ .../vendor/gopkg.in/yaml.v2/sorter.go | 104 + .../vendor/gopkg.in/yaml.v2/suite_test.go | 12 + .../vendor/gopkg.in/yaml.v2/writerc.go | 89 + .../generator/vendor/gopkg.in/yaml.v2/yaml.go | 357 + .../vendor/gopkg.in/yaml.v2/yamlh.go | 716 + .../vendor/gopkg.in/yaml.v2/yamlprivateh.go | 173 + 221 files changed, 51627 insertions(+) create mode 100644 docs/generator/.dockerignore create mode 100644 docs/generator/Dockerfile create mode 100644 docs/generator/Gopkg.lock create mode 100644 docs/generator/Gopkg.toml create mode 100644 docs/generator/data/800-53-controls.xml create mode 100644 docs/generator/generator.go create mode 100644 docs/generator/tmpl/80053.test.tmpl create mode 100644 docs/generator/tmpl/80053.tmpl create mode 100644 docs/generator/tmpl/nist80053.html create mode 100644 docs/generator/types.go create mode 100644 docs/generator/vendor/github.com/blang/semver/.gx/lastpubver create mode 100644 docs/generator/vendor/github.com/blang/semver/LICENSE create mode 100644 docs/generator/vendor/github.com/blang/semver/README.md create mode 100644 docs/generator/vendor/github.com/blang/semver/examples/main.go create mode 100644 docs/generator/vendor/github.com/blang/semver/json.go create mode 100644 docs/generator/vendor/github.com/blang/semver/json_test.go create mode 100644 docs/generator/vendor/github.com/blang/semver/package.json create mode 100644 docs/generator/vendor/github.com/blang/semver/range.go create mode 100644 docs/generator/vendor/github.com/blang/semver/range_test.go create mode 100644 docs/generator/vendor/github.com/blang/semver/semver.go create mode 100644 docs/generator/vendor/github.com/blang/semver/semver_test.go create mode 100644 docs/generator/vendor/github.com/blang/semver/sort.go create mode 100644 docs/generator/vendor/github.com/blang/semver/sort_test.go create mode 100644 docs/generator/vendor/github.com/blang/semver/sql.go create mode 100644 docs/generator/vendor/github.com/blang/semver/sql_test.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/.gitignore create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/AUTHORS create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/CHANGELOG.md create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/CONTRIBUTING.md create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/LICENSE create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/README.md create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/example_test.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_bsd.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_linux.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_bsd.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_darwin.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_symlink_test.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_test.go create mode 100644 docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_windows.go create mode 100644 docs/generator/vendor/github.com/go-utils/ufs/README.md create mode 100644 docs/generator/vendor/github.com/go-utils/ufs/_gob.gtxt create mode 100644 docs/generator/vendor/github.com/go-utils/ufs/doc.go create mode 100644 docs/generator/vendor/github.com/go-utils/ufs/fs.go create mode 100644 docs/generator/vendor/github.com/go-utils/ufs/walker.go create mode 100644 docs/generator/vendor/github.com/go-utils/ufs/watcher-default.go create mode 100644 docs/generator/vendor/github.com/go-utils/ufs/watcher-sandboxed.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-misc/README.md create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-misc/doc.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-misc/util.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/-gen-sort.gt create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/-gen.gt create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/README.md create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/bool.gt.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/doc.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/f64.gt.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/int.gt.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-slice/str.gt.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-str/README.md create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-str/buf.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-str/doc.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-str/matcher.go create mode 100644 docs/generator/vendor/github.com/metaleap/go-util-str/str.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/.codeclimate.yml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/.dockerignore create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/.gitignore create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/.goxc.json create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/CONTRIBUTING.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/Dockerfile create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.lock create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.toml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/LICENSE.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/README.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/appveyor.yml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/circle.yml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/README.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/coverage.sh create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/diff_suite_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_suite_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/get.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Downloader.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Getter.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/resources_suite_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/compliance_masonry_go_suite_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/README.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/data_flow.png create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/workflow.png create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/workflow.svg create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/development.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/gitbook.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/install.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/masonry-for-the-compliance-literate.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/usage.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/exampleplugin_suite_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/opencontrol.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2BrokenControl/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2UnsupportedVersion/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2VersionNotSemver/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2_InvalidFieldTypeForVersion2_0/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2WithKey/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2WithKey/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2WithKey/component.yaml create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/README.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/SUMMARY.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/components/EC2.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-2.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-6.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM-2.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/README.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/SUMMARY.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/components/EC2.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-2.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-6.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM-2.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/system_documentation/about-the-ssp.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/components_readme.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/general_readme.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-AC.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-CM.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-1.md create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-2.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards_readme.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/certifications/LATO.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/components/EC2/artifact-ec2-1.png create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/components/EC2/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/NIST-800-53.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/PCI-DSS-MAY-2015.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/certifications/LATO.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/components/EC2/artifact-ec2-1.png create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/components/EC2/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/NIST-800-53.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/PCI-DSS-MAY-2015.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/certifications/LATO.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/components/EC2/artifact-ec2-1.png create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/components/EC2/component.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/SUMMARY.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/system_documentation/about-the-ssp.md create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/NIST-800-53.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/PCI-DSS-MAY-2015.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/standards_fixtures/BrokenStandard/NIST-800-53.yaml create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go_test.go create mode 100755 docs/generator/vendor/github.com/opencontrol/compliance-masonry/release.sh create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/certifications/certifications.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/constants/constants.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/fs.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/mocks/Util.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/mapset_suite_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager_test.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/mocks/RepoManager.go create mode 100644 docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/vcs_suite_test.go create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/.travis.yml create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/LICENSE.md create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/README.md create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/set.go create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots.go create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots_test.go create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/set_test.go create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts.go create mode 100644 docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts_test.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/.travis.yml create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/LICENSE create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/LICENSE.libyaml create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/README.md create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/apic.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/decode.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/decode_test.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/emitterc.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/encode.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/encode_test.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/example_embedded_test.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/parserc.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/readerc.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/resolve.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/scannerc.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/sorter.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/suite_test.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/writerc.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/yaml.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/yamlh.go create mode 100644 docs/generator/vendor/gopkg.in/yaml.v2/yamlprivateh.go diff --git a/docs/generator/.dockerignore b/docs/generator/.dockerignore new file mode 100644 index 0000000..f3c7a7c --- /dev/null +++ b/docs/generator/.dockerignore @@ -0,0 +1 @@ +Makefile diff --git a/docs/generator/Dockerfile b/docs/generator/Dockerfile new file mode 100644 index 0000000..2eee542 --- /dev/null +++ b/docs/generator/Dockerfile @@ -0,0 +1,8 @@ +FROM golang:latest AS builder +WORKDIR /go/src/github.com/docker/compliance/docs/generator +COPY . . +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o generator . + +FROM scratch +COPY --from=builder /go/src/github.com/docker/compliance/docs/generator . +ENTRYPOINT ["/generator"] diff --git a/docs/generator/Gopkg.lock b/docs/generator/Gopkg.lock new file mode 100644 index 0000000..d5f24e6 --- /dev/null +++ b/docs/generator/Gopkg.lock @@ -0,0 +1,63 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/blang/semver" + packages = ["."] + revision = "b38d23b8782a487059e8fc8773e9a5b228a77cb6" + version = "v3.5.0" + +[[projects]] + name = "github.com/go-forks/fsnotify" + packages = ["."] + revision = "441bbc86b167f3c1f4786afae9931403b99fdacf" + version = "v0.9.0" + +[[projects]] + branch = "master" + name = "github.com/go-utils/ufs" + packages = ["."] + revision = "759211ccbbfc380b7356c038dbb3667251f6b7b3" + +[[projects]] + branch = "master" + name = "github.com/metaleap/go-util-misc" + packages = ["."] + revision = "c53f803886d3a520c369beb2368914d853389f30" + +[[projects]] + branch = "master" + name = "github.com/metaleap/go-util-slice" + packages = ["."] + revision = "fb69df90f7992e63a8959323a08a85aaba012564" + +[[projects]] + branch = "master" + name = "github.com/metaleap/go-util-str" + packages = ["."] + revision = "ea3253c93490d3bbb0ad77670e2ad712e717ae1a" + +[[projects]] + branch = "master" + name = "github.com/opencontrol/compliance-masonry" + packages = ["lib/common","lib/components","lib/components/versions/2_0_0","lib/components/versions/3_0_0","lib/components/versions/3_1_0","tools/constants","tools/fs"] + revision = "cafffbccc21846dc4e1da4bbd893039b93f6d78a" + +[[projects]] + name = "gopkg.in/fatih/set.v0" + packages = ["."] + revision = "57907de300222151a123d29255ed17f5ed43fad3" + version = "v0.1.0" + +[[projects]] + branch = "v2" + name = "gopkg.in/yaml.v2" + packages = ["."] + revision = "25c4ec802a7d637f88d584ab26798e94ad14c13b" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "12a56b6783ddf76dcb9d04f7f57314b14202bc126e1738939abbc458f9f7dd60" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/docs/generator/Gopkg.toml b/docs/generator/Gopkg.toml new file mode 100644 index 0000000..017c818 --- /dev/null +++ b/docs/generator/Gopkg.toml @@ -0,0 +1,26 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + branch = "master" + name = "github.com/opencontrol/compliance-masonry" diff --git a/docs/generator/data/800-53-controls.xml b/docs/generator/data/800-53-controls.xml new file mode 100644 index 0000000..4375ea7 --- /dev/null +++ b/docs/generator/data/800-53-controls.xml @@ -0,0 +1,16323 @@ + + + + ACCESS CONTROL + AC-1 + ACCESS CONTROL POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + AC-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + AC-1a.1. + An access control policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + AC-1a.2. + Procedures to facilitate the implementation of the access control policy and associated access controls; and + + + + AC-1b. + Reviews and updates the current: + + AC-1b.1. + Access control policy [Assignment: organization-defined frequency]; and + + + AC-1b.2. + Access control procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the AC family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + ACCESS CONTROL + AC-2 + ACCOUNT MANAGEMENT + P1 + LOW + MODERATE + HIGH + + The organization: + + AC-2a. + Identifies and selects the following types of information system accounts to support organizational missions/business functions: [Assignment: organization-defined information system account types]; + + + AC-2b. + Assigns account managers for information system accounts; + + + AC-2c. + Establishes conditions for group and role membership; + + + AC-2d. + Specifies authorized users of the information system, group and role membership, and access authorizations (i.e., privileges) and other attributes (as required) for each account; + + + AC-2e. + Requires approvals by [Assignment: organization-defined personnel or roles] for requests to create information system accounts; + + + AC-2f. + Creates, enables, modifies, disables, and removes information system accounts in accordance with [Assignment: organization-defined procedures or conditions]; + + + AC-2g. + Monitors the use of information system accounts; + + + AC-2h. + Notifies account managers: + + AC-2h.1. + When accounts are no longer required; + + + AC-2h.2. + When users are terminated or transferred; and + + + AC-2h.3. + When individual information system usage or need-to-know changes; + + + + AC-2i. + Authorizes access to the information system based on: + + AC-2i.1. + A valid access authorization; + + + AC-2i.2. + Intended system usage; and + + + AC-2i.3. + Other attributes as required by the organization or associated missions/business functions; + + + + AC-2j. + Reviews accounts for compliance with account management requirements [Assignment: organization-defined frequency]; and + + + AC-2k. + Establishes a process for reissuing shared/group account credentials (if deployed) when individuals are removed from the group. + + + + Information system account types include, for example, individual, shared, group, system, guest/anonymous, emergency, developer/manufacturer/vendor, temporary, and service. Some of the account management requirements listed above can be implemented by organizational information systems. The identification of authorized users of the information system and the specification of access privileges reflects the requirements in other security controls in the security plan. Users requiring administrative privileges on information system accounts receive additional scrutiny by appropriate organizational personnel (e.g., system owner, mission/business owner, or chief information security officer) responsible for approving such accounts and privileged access. Organizations may choose to define access privileges or other attributes by account, by type of account, or a combination of both. Other attributes required for authorizing access include, for example, restrictions on time-of-day, day-of-week, and point-of-origin. In defining other account attributes, organizations consider system-related requirements (e.g., scheduled maintenance, system upgrades) and mission/business requirements, (e.g., time zone differences, customer requirements, remote access to support travel requirements). Failure to consider these factors could affect information system availability. Temporary and emergency accounts are accounts intended for short-term use. Organizations establish temporary accounts as a part of normal account activation procedures when there is a need for short-term accounts without the demand for immediacy in account activation. Organizations establish emergency accounts in response to crisis situations and with the need for rapid account activation. Therefore, emergency account activation may bypass normal account authorization processes. Emergency and temporary accounts are not to be confused with infrequently used accounts (e.g., local logon accounts used for special tasks defined by organizations or when network resources are unavailable). Such accounts remain available and are not subject to automatic disabling or removal dates. Conditions for disabling or deactivating accounts include, for example: (i) when shared/group, emergency, or temporary accounts are no longer required; or (ii) when individuals are transferred or terminated. Some types of information system accounts may require specialized training. + AC-3 + AC-4 + AC-5 + AC-6 + AC-10 + AC-17 + AC-19 + AC-20 + AU-9 + IA-2 + IA-4 + IA-5 + IA-8 + CM-5 + CM-6 + CM-11 + MA-3 + MA-4 + MA-5 + PL-4 + SC-13 + + + + AC-2 (1) + AUTOMATED SYSTEM ACCOUNT MANAGEMENT + MODERATE + HIGH + + The organization employs automated mechanisms to support the management of information system accounts. + + + The use of automated mechanisms can include, for example: using email or text messaging to automatically notify account managers when users are terminated or transferred; using the information system to monitor account usage; and using telephonic notification to report atypical system account usage. + + + + AC-2 (2) + REMOVAL OF TEMPORARY / EMERGENCY ACCOUNTS + MODERATE + HIGH + + The information system automatically [Selection: removes; disables] temporary and emergency accounts after [Assignment: organization-defined time period for each type of account]. + + + This control enhancement requires the removal of both temporary and emergency accounts automatically after a predefined period of time has elapsed, rather than at the convenience of the systems administrator. + + + + AC-2 (3) + DISABLE INACTIVE ACCOUNTS + MODERATE + HIGH + + The information system automatically disables inactive accounts after [Assignment: organization-defined time period]. + + + + AC-2 (4) + AUTOMATED AUDIT ACTIONS + MODERATE + HIGH + + The information system automatically audits account creation, modification, enabling, disabling, and removal actions, and notifies [Assignment: organization-defined personnel or roles]. + + + AU-2 + AU-12 + + + + AC-2 (5) + INACTIVITY LOGOUT + HIGH + + The organization requires that users log out when [Assignment: organization-defined time-period of expected inactivity or description of when to log out]. + + + SC-23 + + + + AC-2 (6) + DYNAMIC PRIVILEGE MANAGEMENT + + The information system implements the following dynamic privilege management capabilities: [Assignment: organization-defined list of dynamic privilege management capabilities]. + + + In contrast to conventional access control approaches which employ static information system accounts and predefined sets of user privileges, dynamic access control approaches (e.g., service-oriented architectures) rely on run time access control decisions facilitated by dynamic privilege management. While user identities may remain relatively constant over time, user privileges may change more frequently based on ongoing mission/business requirements and operational needs of organizations. Dynamic privilege management can include, for example, the immediate revocation of privileges from users, as opposed to requiring that users terminate and restart their sessions to reflect any changes in privileges. Dynamic privilege management can also refer to mechanisms that change the privileges of users based on dynamic rules as opposed to editing specific user profiles. This type of privilege management includes, for example, automatic adjustments of privileges if users are operating out of their normal work times, or if information systems are under duress or in emergency maintenance situations. This control enhancement also includes the ancillary effects of privilege changes, for example, the potential changes to encryption keys used for communications. Dynamic privilege management can support requirements for information system resiliency. + AC-16 + + + + AC-2 (7) + ROLE-BASED SCHEMES + + The organization: + + AC-2 (7)(a) + Establishes and administers privileged user accounts in accordance with a role-based access scheme that organizes allowed information system access and privileges into roles; + + + AC-2 (7)(b) + Monitors privileged role assignments; and + + + AC-2 (7)(c) + Takes [Assignment: organization-defined actions] when privileged role assignments are no longer appropriate. + + + + Privileged roles are organization-defined roles assigned to individuals that allow those individuals to perform certain security-relevant functions that ordinary users are not authorized to perform. These privileged roles include, for example, key management, account management, network and system administration, database administration, and web administration. + + + + AC-2 (8) + DYNAMIC ACCOUNT CREATION + + The information system creates [Assignment: organization-defined information system accounts] dynamically. + + + Dynamic approaches for creating information system accounts (e.g., as implemented within service-oriented architectures) rely on establishing accounts (identities) at run time for entities that were previously unknown. Organizations plan for dynamic creation of information system accounts by establishing trust relationships and mechanisms with the appropriate authorities to validate related authorizations and privileges. + AC-16 + + + + AC-2 (9) + RESTRICTIONS ON USE OF SHARED / GROUP ACCOUNTS + + The organization only permits the use of shared/group accounts that meet [Assignment: organization-defined conditions for establishing shared/group accounts]. + + + + AC-2 (10) + SHARED / GROUP ACCOUNT CREDENTIAL TERMINATION + + The information system terminates shared/group account credentials when members leave the group. + + + + AC-2 (11) + USAGE CONDITIONS + HIGH + + The information system enforces [Assignment: organization-defined circumstances and/or usage conditions] for [Assignment: organization-defined information system accounts]. + + + Organizations can describe the specific conditions or circumstances under which information system accounts can be used, for example, by restricting usage to certain days of the week, time of day, or specific durations of time. + + + + AC-2 (12) + ACCOUNT MONITORING / ATYPICAL USAGE + HIGH + + The organization: + + AC-2 (12)(a) + Monitors information system accounts for [Assignment: organization-defined atypical usage]; and + + + AC-2 (12)(b) + Reports atypical usage of information system accounts to [Assignment: organization-defined personnel or roles]. + + + + Atypical usage includes, for example, accessing information systems at certain times of the day and from locations that are not consistent with the normal usage patterns of individuals working in organizations. + CA-7 + + + + AC-2 (13) + DISABLE ACCOUNTS FOR HIGH-RISK INDIVIDUALS + HIGH + + The organization disables accounts of users posing a significant risk within [Assignment: organization-defined time period] of discovery of the risk. + + + Users posing a significant risk to organizations include individuals for whom reliable evidence or intelligence indicates either the intention to use authorized access to information systems to cause harm or through whom adversaries will cause harm. Harm includes potential adverse impacts to organizational operations and assets, individuals, other organizations, or the Nation. Close coordination between authorizing officials, information system administrators, and human resource managers is essential in order for timely execution of this control enhancement. + PS-4 + + + + + + ACCESS CONTROL + AC-3 + ACCESS ENFORCEMENT + P1 + LOW + MODERATE + HIGH + + The information system enforces approved authorizations for logical access to information and system resources in accordance with applicable access control policies. + + + Access control policies (e.g., identity-based policies, role-based policies, control matrices, cryptography) control access between active entities or subjects (i.e., users or processes acting on behalf of users) and passive entities or objects (e.g., devices, files, records, domains) in information systems. In addition to enforcing authorized access at the information system level and recognizing that information systems can host many applications and services in support of organizational missions and business operations, access enforcement mechanisms can also be employed at the application and service level to provide increased information security. + AC-2 + AC-4 + AC-5 + AC-6 + AC-16 + AC-17 + AC-18 + AC-19 + AC-20 + AC-21 + AC-22 + AU-9 + CM-5 + CM-6 + CM-11 + MA-3 + MA-4 + MA-5 + PE-3 + + + + AC-3 (1) + RESTRICTED ACCESS TO PRIVILEGED FUNCTIONS + + AC-6 + + + [Withdrawn: Incorporated into AC-6]. + + + + AC-3 (2) + DUAL AUTHORIZATION + + The information system enforces dual authorization for [Assignment: organization-defined privileged commands and/or other organization-defined actions]. + + + Dual authorization mechanisms require the approval of two authorized individuals in order to execute. Organizations do not require dual authorization mechanisms when immediate responses are necessary to ensure public and environmental safety. Dual authorization may also be known as two-person control. + CP-9 + MP-6 + + + + AC-3 (3) + MANDATORY ACCESS CONTROL + + The information system enforces [Assignment: organization-defined mandatory access control policy] over all subjects and objects where the policy: + + AC-3 (3)(a) + Is uniformly enforced across all subjects and objects within the boundary of the information system; + + + AC-3 (3)(b) + Specifies that a subject that has been granted access to information is constrained from doing any of the following; + + AC-3 (3)(b)(1) + Passing the information to unauthorized subjects or objects; + + + AC-3 (3)(b)(2) + Granting its privileges to other subjects; + + + AC-3 (3)(b)(3) + Changing one or more security attributes on subjects, objects, the information system, or information system components; + + + AC-3 (3)(b)(4) + Choosing the security attributes and attribute values to be associated with newly created or modified objects; or + + + AC-3 (3)(b)(5) + Changing the rules governing access control; and + + + + AC-3 (3)(c) + Specifies that [Assignment: organization-defined subjects] may explicitly be granted [Assignment: organization-defined privileges (i.e., they are trusted subjects)] such that they are not limited by some or all of the above constraints. + + + + Mandatory access control as defined in this control enhancement is synonymous with nondiscretionary access control, and is not constrained only to certain historical uses (e.g., implementations using the Bell-LaPadula Model). The above class of mandatory access control policies constrains what actions subjects can take with information obtained from data objects for which they have already been granted access, thus preventing the subjects from passing the information to unauthorized subjects and objects. This class of mandatory access control policies also constrains what actions subjects can take with respect to the propagation of access control privileges; that is, a subject with a privilege cannot pass that privilege to other subjects. The policy is uniformly enforced over all subjects and objects to which the information system has control. Otherwise, the access control policy can be circumvented. This enforcement typically is provided via an implementation that meets the reference monitor concept (see AC-25). The policy is bounded by the information system boundary (i.e., once the information is passed outside of the control of the system, additional means may be required to ensure that the constraints on the information remain in effect). The trusted subjects described above are granted privileges consistent with the concept of least privilege (see AC-6). Trusted subjects are only given the minimum privileges relative to the above policy necessary for satisfying organizational mission/business needs. The control is most applicable when there is some policy mandate (e.g., law, Executive Order, directive, or regulation) that establishes a policy regarding access to sensitive/classified information and some users of the information system are not authorized access to all sensitive/classified information resident in the information system. This control can operate in conjunction with AC-3 (4). A subject that is constrained in its operation by policies governed by this control is still able to operate under the less rigorous constraints of AC-3 (4), but policies governed by this control take precedence over the less rigorous constraints of AC-3 (4). For example, while a mandatory access control policy imposes a constraint preventing a subject from passing information to another subject operating at a different sensitivity label, AC-3 (4) permits the subject to pass the information to any subject with the same sensitivity label as the subject. + AC-25 + SC-11 + + + + AC-3 (4) + DISCRETIONARY ACCESS CONTROL + + The information system enforces [Assignment: organization-defined discretionary access control policy] over defined subjects and objects where the policy specifies that a subject that has been granted access to information can do one or more of the following: + + AC-3 (4)(a) + Pass the information to any other subjects or objects; + + + AC-3 (4)(b) + Grant its privileges to other subjects; + + + AC-3 (4)(c) + Change security attributes on subjects, objects, the information system, or the information system�s components; + + + AC-3 (4)(d) + Choose the security attributes to be associated with newly created or revised objects; or + + + AC-3 (4)(e) + Change the rules governing access control. + + + + When discretionary access control policies are implemented, subjects are not constrained with regard to what actions they can take with information for which they have already been granted access. Thus, subjects that have been granted access to information are not prevented from passing (i.e., the subjects have the discretion to pass) the information to other subjects or objects. This control enhancement can operate in conjunction with AC-3 (3). A subject that is constrained in its operation by policies governed by AC-3 (3) is still able to operate under the less rigorous constraints of this control enhancement. Thus, while AC-3 (3) imposes constraints preventing a subject from passing information to another subject operating at a different sensitivity level, AC-3 (4) permits the subject to pass the information to any subject at the same sensitivity level. The policy is bounded by the information system boundary. Once the information is passed outside of the control of the information system, additional means may be required to ensure that the constraints remain in effect. While the older, more traditional definitions of discretionary access control require identity-based access control, that limitation is not required for this use of discretionary access control. + + + + AC-3 (5) + SECURITY-RELEVANT INFORMATION + + The information system prevents access to [Assignment: organization-defined security-relevant information] except during secure, non-operable system states. + + + Security-relevant information is any information within information systems that can potentially impact the operation of security functions or the provision of security services in a manner that could result in failure to enforce system security policies or maintain the isolation of code and data. Security-relevant information includes, for example, filtering rules for routers/firewalls, cryptographic key management information, configuration parameters for security services, and access control lists. Secure, non-operable system states include the times in which information systems are not performing mission/business-related processing (e.g., the system is off-line for maintenance, troubleshooting, boot-up, shut down). + CM-3 + + + + AC-3 (6) + PROTECTION OF USER AND SYSTEM INFORMATION + + MP-4 + SC-28 + + + [Withdrawn: Incorporated into MP-4 and SC-28]. + + + + AC-3 (7) + ROLE-BASED ACCESS CONTROL + + The information system enforces a role-based access control policy over defined subjects and objects and controls access based upon [Assignment: organization-defined roles and users authorized to assume such roles]. + + + Role-based access control (RBAC) is an access control policy that restricts information system access to authorized users. Organizations can create specific roles based on job functions and the authorizations (i.e., privileges) to perform needed operations on organizational information systems associated with the organization-defined roles. When users are assigned to the organizational roles, they inherit the authorizations or privileges defined for those roles. RBAC simplifies privilege administration for organizations because privileges are not assigned directly to every user (which can be a significant number of individuals for mid- to large-size organizations) but are instead acquired through role assignments. RBAC can be implemented either as a mandatory or discretionary form of access control. For organizations implementing RBAC with mandatory access controls, the requirements in AC-3 (3) define the scope of the subjects and objects covered by the policy. + + + + AC-3 (8) + REVOCATION OF ACCESS AUTHORIZATIONS + + The information system enforces the revocation of access authorizations resulting from changes to the security attributes of subjects and objects based on [Assignment: organization-defined rules governing the timing of revocations of access authorizations]. + + + Revocation of access rules may differ based on the types of access revoked. For example, if a subject (i.e., user or process) is removed from a group, access may not be revoked until the next time the object (e.g., file) is opened or until the next time the subject attempts a new access to the object. Revocation based on changes to security labels may take effect immediately. Organizations can provide alternative approaches on how to make revocations immediate if information systems cannot provide such capability and immediate revocation is necessary. + + + + AC-3 (9) + CONTROLLED RELEASE + + The information system does not release information outside of the established system boundary unless: + + AC-3 (9)(a) + The receiving [Assignment: organization-defined information system or system component] provides [Assignment: organization-defined security safeguards]; and + + + AC-3 (9)(b) + [Assignment: organization-defined security safeguards] are used to validate the appropriateness of the information designated for release. + + + + Information systems can only protect organizational information within the confines of established system boundaries. Additional security safeguards may be needed to ensure that such information is adequately protected once it is passed beyond the established information system boundaries. Examples of information leaving the system boundary include transmitting information to an external information system or printing the information on one of its printers. In cases where the information system is unable to make a determination of the adequacy of the protections provided by entities outside its boundary, as a mitigating control, organizations determine procedurally whether the external information systems are providing adequate security. The means used to determine the adequacy of the security provided by external information systems include, for example, conducting inspections or periodic testing, establishing agreements between the organization and its counterpart organizations, or some other process. The means used by external entities to protect the information received need not be the same as those used by the organization, but the means employed are sufficient to provide consistent adjudication of the security policy to protect the information. This control enhancement requires information systems to employ technical or procedural means to validate the information prior to releasing it to external systems. For example, if the information system passes information to another system controlled by another organization, technical means are employed to validate that the security attributes associated with the exported information are appropriate for the receiving system. Alternatively, if the information system passes information to a printer in organization-controlled space, procedural means can be employed to ensure that only appropriately authorized individuals gain access to the printer. This control enhancement is most applicable when there is some policy mandate (e.g., law, Executive Order, directive, or regulation) that establishes policy regarding access to the information, and that policy applies beyond the realm of a particular information system or organization. + + + + AC-3 (10) + AUDITED OVERRIDE OF ACCESS CONTROL MECHANISMS + + The organization employs an audited override of automated access control mechanisms under [Assignment: organization-defined conditions]. + + + AU-2 + AU-6 + + + + + + ACCESS CONTROL + AC-4 + INFORMATION FLOW ENFORCEMENT + P1 + MODERATE + HIGH + + The information system enforces approved authorizations for controlling the flow of information within the system and between interconnected systems based on [Assignment: organization-defined information flow control policies]. + + + Information flow control regulates where information is allowed to travel within an information system and between information systems (as opposed to who is allowed to access the information) and without explicit regard to subsequent accesses to that information. Flow control restrictions include, for example, keeping export-controlled information from being transmitted in the clear to the Internet, blocking outside traffic that claims to be from within the organization, restricting web requests to the Internet that are not from the internal web proxy server, and limiting information transfers between organizations based on data structures and content. Transferring information between information systems representing different security domains with different security policies introduces risk that such transfers violate one or more domain security policies. In such situations, information owners/stewards provide guidance at designated policy enforcement points between interconnected systems. Organizations consider mandating specific architectural solutions when required to enforce specific security policies. Enforcement includes, for example: (i) prohibiting information transfers between interconnected systems (i.e., allowing access only); (ii) employing hardware mechanisms to enforce one-way information flows; and (iii) implementing trustworthy regrading mechanisms to reassign security attributes and security labels. +Organizations commonly employ information flow control policies and enforcement mechanisms to control the flow of information between designated sources and destinations (e.g., networks, individuals, and devices) within information systems and between interconnected systems. Flow control is based on the characteristics of the information and/or the information path. Enforcement occurs, for example, in boundary protection devices (e.g., gateways, routers, guards, encrypted tunnels, firewalls) that employ rule sets or establish configuration settings that restrict information system services, provide a packet-filtering capability based on header information, or message-filtering capability based on message content (e.g., implementing key word searches or using document characteristics). Organizations also consider the trustworthiness of filtering/inspection mechanisms (i.e., hardware, firmware, and software components) that are critical to information flow enforcement. Control enhancements 3 through 22 primarily address cross-domain solution needs which focus on more advanced filtering techniques, in-depth analysis, and stronger flow enforcement mechanisms implemented in cross-domain products, for example, high-assurance guards. Such capabilities are generally not available in commercial off-the-shelf information technology products. + AC-3 + AC-17 + AC-19 + AC-21 + CM-6 + CM-7 + SA-8 + SC-2 + SC-5 + SC-7 + SC-18 + + + + AC-4 (1) + OBJECT SECURITY ATTRIBUTES + + The information system uses [Assignment: organization-defined security attributes] associated with [Assignment: organization-defined information, source, and destination objects] to enforce [Assignment: organization-defined information flow control policies] as a basis for flow control decisions. + + + Information flow enforcement mechanisms compare security attributes associated with information (data content and data structure) and source/destination objects, and respond appropriately (e.g., block, quarantine, alert administrator) when the mechanisms encounter information flows not explicitly allowed by information flow policies. For example, an information object labeled Secret would be allowed to flow to a destination object labeled Secret, but an information object labeled Top Secret would not be allowed to flow to a destination object labeled Secret. Security attributes can also include, for example, source and destination addresses employed in traffic filter firewalls. Flow enforcement using explicit security attributes can be used, for example, to control the release of certain types of information. + AC-16 + + + + AC-4 (2) + PROCESSING DOMAINS + + The information system uses protected processing domains to enforce [Assignment: organization-defined information flow control policies] as a basis for flow control decisions. + + + Within information systems, protected processing domains are processing spaces that have controlled interactions with other processing spaces, thus enabling control of information flows between these spaces and to/from data/information objects. A protected processing domain can be provided, for example, by implementing domain and type enforcement. In domain and type enforcement, information system processes are assigned to domains; information is identified by types; and information flows are controlled based on allowed information accesses (determined by domain and type), allowed signaling among domains, and allowed process transitions to other domains. + + + + AC-4 (3) + DYNAMIC INFORMATION FLOW CONTROL + + The information system enforces dynamic information flow control based on [Assignment: organization-defined policies]. + + + Organizational policies regarding dynamic information flow control include, for example, allowing or disallowing information flows based on changing conditions or mission/operational considerations. Changing conditions include, for example, changes in organizational risk tolerance due to changes in the immediacy of mission/business needs, changes in the threat environment, and detection of potentially harmful or adverse events. + SI-4 + + + + AC-4 (4) + CONTENT CHECK ENCRYPTED INFORMATION + + The information system prevents encrypted information from bypassing content-checking mechanisms by [Selection (one or more): decrypting the information; blocking the flow of the encrypted information; terminating communications sessions attempting to pass encrypted information; [Assignment: organization-defined procedure or method]]. + + + SI-4 + + + + AC-4 (5) + EMBEDDED DATA TYPES + + The information system enforces [Assignment: organization-defined limitations] on embedding data types within other data types. + + + Embedding data types within other data types may result in reduced flow control effectiveness. Data type embedding includes, for example, inserting executable files as objects within word processing files, inserting references or descriptive information into a media file, and compressed or archived data types that may include multiple embedded data types. Limitations on data type embedding consider the levels of embedding and prohibit levels of data type embedding that are beyond the capability of the inspection tools. + + + + AC-4 (6) + METADATA + + The information system enforces information flow control based on [Assignment: organization-defined metadata]. + + + Metadata is information used to describe the characteristics of data. Metadata can include structural metadata describing data structures (e.g., data format, syntax, and semantics) or descriptive metadata describing data contents (e.g., age, location, telephone number). Enforcing allowed information flows based on metadata enables simpler and more effective flow control. Organizations consider the trustworthiness of metadata with regard to data accuracy (i.e., knowledge that the metadata values are correct with respect to the data), data integrity (i.e., protecting against unauthorized changes to metadata tags), and the binding of metadata to the data payload (i.e., ensuring sufficiently strong binding techniques with appropriate levels of assurance). + AC-16 + SI-7 + + + + AC-4 (7) + ONE-WAY FLOW MECHANISMS + + The information system enforces [Assignment: organization-defined one-way information flows] using hardware mechanisms. + + + + AC-4 (8) + SECURITY POLICY FILTERS + + The information system enforces information flow control using [Assignment: organization-defined security policy filters] as a basis for flow control decisions for [Assignment: organization-defined information flows]. + + + Organization-defined security policy filters can address data structures and content. For example, security policy filters for data structures can check for maximum file lengths, maximum field sizes, and data/file types (for structured and unstructured data). Security policy filters for data content can check for specific words (e.g., dirty/clean word filters), enumerated values or data value ranges, and hidden content. Structured data permits the interpretation of data content by applications. Unstructured data typically refers to digital information without a particular data structure or with a data structure that does not facilitate the development of rule sets to address the particular sensitivity of the information conveyed by the data or the associated flow enforcement decisions. Unstructured data consists of: (i) bitmap objects that are inherently non language-based (i.e., image, video, or audio files); and (ii) textual objects that are based on written or printed languages (e.g., commercial off-the-shelf word processing documents, spreadsheets, or emails). Organizations can implement more than one security policy filter to meet information flow control objectives (e.g., employing clean word lists in conjunction with dirty word lists may help to reduce false positives). + + + + AC-4 (9) + HUMAN REVIEWS + + The information system enforces the use of human reviews for [Assignment: organization-defined information flows] under the following conditions: [Assignment: organization-defined conditions]. + + + Organizations define security policy filters for all situations where automated flow control decisions are possible. When a fully automated flow control decision is not possible, then a human review may be employed in lieu of, or as a complement to, automated security policy filtering. Human reviews may also be employed as deemed necessary by organizations. + + + + AC-4 (10) + ENABLE / DISABLE SECURITY POLICY FILTERS + + The information system provides the capability for privileged administrators to enable/disable [Assignment: organization-defined security policy filters] under the following conditions: [Assignment: organization-defined conditions]. + + + For example, as allowed by the information system authorization, administrators can enable security policy filters to accommodate approved data types. + + + + AC-4 (11) + CONFIGURATION OF SECURITY POLICY FILTERS + + The information system provides the capability for privileged administrators to configure [Assignment: organization-defined security policy filters] to support different security policies. + + + For example, to reflect changes in security policies, administrators can change the list of �dirty words� that security policy mechanisms check in accordance with the definitions provided by organizations. + + + + AC-4 (12) + DATA TYPE IDENTIFIERS + + The information system, when transferring information between different security domains, uses [Assignment: organization-defined data type identifiers] to validate data essential for information flow decisions. + + + Data type identifiers include, for example, filenames, file types, file signatures/tokens, and multiple internal file signatures/tokens. Information systems may allow transfer of data only if compliant with data type format specifications. + + + + AC-4 (13) + DECOMPOSITION INTO POLICY-RELEVANT SUBCOMPONENTS + + The information system, when transferring information between different security domains, decomposes information into [Assignment: organization-defined policy-relevant subcomponents] for submission to policy enforcement mechanisms. + + + Policy enforcement mechanisms apply filtering, inspection, and/or sanitization rules to the policy-relevant subcomponents of information to facilitate flow enforcement prior to transferring such information to different security domains. Parsing transfer files facilitates policy decisions on source, destination, certificates, classification, attachments, and other security-related component differentiators. + + + + AC-4 (14) + SECURITY POLICY FILTER CONSTRAINTS + + The information system, when transferring information between different security domains, implements [Assignment: organization-defined security policy filters] requiring fully enumerated formats that restrict data structure and content. + + + Data structure and content restrictions reduce the range of potential malicious and/or unsanctioned content in cross-domain transactions. Security policy filters that restrict data structures include, for example, restricting file sizes and field lengths. Data content policy filters include, for example: (i) encoding formats for character sets (e.g., Universal Character Set Transformation Formats, American Standard Code for Information Interchange); (ii) restricting character data fields to only contain alpha-numeric characters; (iii) prohibiting special characters; and (iv) validating schema structures. + + + + AC-4 (15) + DETECTION OF UNSANCTIONED INFORMATION + + The information system, when transferring information between different security domains, examines the information for the presence of [Assignment: organized-defined unsanctioned information] and prohibits the transfer of such information in accordance with the [Assignment: organization-defined security policy]. + + + Detection of unsanctioned information includes, for example, checking all information to be transferred for malicious code and dirty words. + SI-3 + + + + AC-4 (16) + INFORMATION TRANSFERS ON INTERCONNECTED SYSTEMS + + AC-4 + + + [Withdrawn: Incorporated into AC-4]. + + + + AC-4 (17) + DOMAIN AUTHENTICATION + + The information system uniquely identifies and authenticates source and destination points by [Selection (one or more): organization, system, application, individual] for information transfer. + + + Attribution is a critical component of a security concept of operations. The ability to identify source and destination points for information flowing in information systems, allows the forensic reconstruction of events when required, and encourages policy compliance by attributing policy violations to specific organizations/individuals. Successful domain authentication requires that information system labels distinguish among systems, organizations, and individuals involved in preparing, sending, receiving, or disseminating information. + IA-2 + IA-3 + IA-4 + IA-5 + + + + AC-4 (18) + SECURITY ATTRIBUTE BINDING + + The information system binds security attributes to information using [Assignment: organization-defined binding techniques] to facilitate information flow policy enforcement. + + + Binding techniques implemented by information systems affect the strength of security attribute binding to information. Binding strength and the assurance associated with binding techniques play an important part in the trust organizations have in the information flow enforcement process. The binding techniques affect the number and degree of additional reviews required by organizations. + AC-16 + SC-16 + + + + AC-4 (19) + VALIDATION OF METADATA + + The information system, when transferring information between different security domains, applies the same security policy filtering to metadata as it applies to data payloads. + + + This control enhancement requires the validation of metadata and the data to which the metadata applies. Some organizations distinguish between metadata and data payloads (i.e., only the data to which the metadata is bound). Other organizations do not make such distinctions, considering metadata and the data to which the metadata applies as part of the payload. All information (including metadata and the data to which the metadata applies) is subject to filtering and inspection. + + + + AC-4 (20) + APPROVED SOLUTIONS + + The organization employs [Assignment: organization-defined solutions in approved configurations] to control the flow of [Assignment: organization-defined information] across security domains. + + + Organizations define approved solutions and configurations in cross-domain policies and guidance in accordance with the types of information flows across classification boundaries. The Unified Cross Domain Management Office (UCDMO) provides a baseline listing of approved cross-domain solutions. + + + + AC-4 (21) + PHYSICAL / LOGICAL SEPARATION OF INFORMATION FLOWS + + The information system separates information flows logically or physically using [Assignment: organization-defined mechanisms and/or techniques] to accomplish [Assignment: organization-defined required separations by types of information]. + + + Enforcing the separation of information flows by type can enhance protection by ensuring that information is not commingled while in transit and by enabling flow control by transmission paths perhaps not otherwise achievable. Types of separable information include, for example, inbound and outbound communications traffic, service requests and responses, and information of differing security categories. + + + + AC-4 (22) + ACCESS ONLY + + The information system provides access from a single device to computing platforms, applications, or data residing on multiple different security domains, while preventing any information flow between the different security domains. + + + The information system, for example, provides a desktop for users to access each connected security domain without providing any mechanisms to allow transfer of information between the different security domains. + + + + + + ACCESS CONTROL + AC-5 + SEPARATION OF DUTIES + P1 + MODERATE + HIGH + + The organization: + + AC-5a. + Separates [Assignment: organization-defined duties of individuals]; + + + AC-5b. + Documents separation of duties of individuals; and + + + AC-5c. + Defines information system access authorizations to support separation of duties. + + + + Separation of duties addresses the potential for abuse of authorized privileges and helps to reduce the risk of malevolent activity without collusion. Separation of duties includes, for example: (i) dividing mission functions and information system support functions among different individuals and/or roles; (ii) conducting information system support functions with different individuals (e.g., system management, programming, configuration management, quality assurance and testing, and network security); and (iii) ensuring security personnel administering access control functions do not also administer audit functions. + AC-3 + AC-6 + PE-3 + PE-4 + PS-2 + + + + ACCESS CONTROL + AC-6 + LEAST PRIVILEGE + P1 + MODERATE + HIGH + + The organization employs the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) which are necessary to accomplish assigned tasks in accordance with organizational missions and business functions. + + + Organizations employ least privilege for specific duties and information systems. The principle of least privilege is also applied to information system processes, ensuring that the processes operate at privilege levels no higher than necessary to accomplish required organizational missions/business functions. Organizations consider the creation of additional processes, roles, and information system accounts as necessary, to achieve least privilege. Organizations also apply least privilege to the development, implementation, and operation of organizational information systems. + AC-2 + AC-3 + AC-5 + CM-6 + CM-7 + PL-2 + + + + AC-6 (1) + AUTHORIZE ACCESS TO SECURITY FUNCTIONS + MODERATE + HIGH + + The organization explicitly authorizes access to [Assignment: organization-defined security functions (deployed in hardware, software, and firmware) and security-relevant information]. + + + Security functions include, for example, establishing system accounts, configuring access authorizations (i.e., permissions, privileges), setting events to be audited, and setting intrusion detection parameters. Security-relevant information includes, for example, filtering rules for routers/firewalls, cryptographic key management information, configuration parameters for security services, and access control lists. Explicitly authorized personnel include, for example, security administrators, system and network administrators, system security officers, system maintenance personnel, system programmers, and other privileged users. + AC-17 + AC-18 + AC-19 + + + + AC-6 (2) + NON-PRIVILEGED ACCESS FOR NONSECURITY FUNCTIONS + MODERATE + HIGH + + The organization requires that users of information system accounts, or roles, with access to [Assignment: organization-defined security functions or security-relevant information], use non-privileged accounts or roles, when accessing nonsecurity functions. + + + This control enhancement limits exposure when operating from within privileged accounts or roles. The inclusion of roles addresses situations where organizations implement access control policies such as role-based access control and where a change of role provides the same degree of assurance in the change of access authorizations for both the user and all processes acting on behalf of the user as would be provided by a change between a privileged and non-privileged account. + PL-4 + + + + AC-6 (3) + NETWORK ACCESS TO PRIVILEGED COMMANDS + HIGH + + The organization authorizes network access to [Assignment: organization-defined privileged commands] only for [Assignment: organization-defined compelling operational needs] and documents the rationale for such access in the security plan for the information system. + + + Network access is any access across a network connection in lieu of local access (i.e., user being physically present at the device). + AC-17 + + + + AC-6 (4) + SEPARATE PROCESSING DOMAINS + + The information system provides separate processing domains to enable finer-grained allocation of user privileges. + + + Providing separate processing domains for finer-grained allocation of user privileges includes, for example: (i) using virtualization techniques to allow additional privileges within a virtual machine while restricting privileges to other virtual machines or to the underlying actual machine; (ii) employing hardware and/or software domain separation mechanisms; and (iii) implementing separate physical domains. + AC-4 + SC-3 + SC-30 + SC-32 + + + + AC-6 (5) + PRIVILEGED ACCOUNTS + MODERATE + HIGH + + The organization restricts privileged accounts on the information system to [Assignment: organization-defined personnel or roles]. + + + Privileged accounts, including super user accounts, are typically described as system administrator for various types of commercial off-the-shelf operating systems. Restricting privileged accounts to specific personnel or roles prevents day-to-day users from having access to privileged information/functions. Organizations may differentiate in the application of this control enhancement between allowed privileges for local accounts and for domain accounts provided organizations retain the ability to control information system configurations for key security parameters and as otherwise necessary to sufficiently mitigate risk. + CM-6 + + + + AC-6 (6) + PRIVILEGED ACCESS BY NON-ORGANIZATIONAL USERS + + The organization prohibits privileged access to the information system by non-organizational users. + + + IA-8 + + + + AC-6 (7) + REVIEW OF USER PRIVILEGES + + The organization: + + AC-6 (7)(a) + Reviews [Assignment: organization-defined frequency] the privileges assigned to [Assignment: organization-defined roles or classes of users] to validate the need for such privileges; and + + + AC-6 (7)(b) + Reassigns or removes privileges, if necessary, to correctly reflect organizational mission/business needs. + + + + The need for certain assigned user privileges may change over time reflecting changes in organizational missions/business function, environments of operation, technologies, or threat. Periodic review of assigned user privileges is necessary to determine if the rationale for assigning such privileges remains valid. If the need cannot be revalidated, organizations take appropriate corrective actions. + CA-7 + + + + AC-6 (8) + PRIVILEGE LEVELS FOR CODE EXECUTION + + The information system prevents [Assignment: organization-defined software] from executing at higher privilege levels than users executing the software. + + + In certain situations, software applications/programs need to execute with elevated privileges to perform required functions. However, if the privileges required for execution are at a higher level than the privileges assigned to organizational users invoking such applications/programs, those users are indirectly provided with greater privileges than assigned by organizations. + + + + AC-6 (9) + AUDITING USE OF PRIVILEGED FUNCTIONS + MODERATE + HIGH + + The information system audits the execution of privileged functions. + + + Misuse of privileged functions, either intentionally or unintentionally by authorized users, or by unauthorized external entities that have compromised information system accounts, is a serious and ongoing concern and can have significant adverse impacts on organizations. Auditing the use of privileged functions is one way to detect such misuse, and in doing so, help mitigate the risk from insider threats and the advanced persistent threat (APT). + AU-2 + + + + AC-6 (10) + PROHIBIT NON-PRIVILEGED USERS FROM EXECUTING PRIVILEGED FUNCTIONS + MODERATE + HIGH + + The information system prevents non-privileged users from executing privileged functions to include disabling, circumventing, or altering implemented security safeguards/countermeasures. + + + Privileged functions include, for example, establishing information system accounts, performing system integrity checks, or administering cryptographic key management activities. Non-privileged users are individuals that do not possess appropriate authorizations. Circumventing intrusion detection and prevention mechanisms or malicious code protection mechanisms are examples of privileged functions that require protection from non-privileged users. + + + + + + ACCESS CONTROL + AC-7 + UNSUCCESSFUL LOGON ATTEMPTS + P2 + LOW + MODERATE + HIGH + + The information system: + + AC-7a. + Enforces a limit of [Assignment: organization-defined number] consecutive invalid logon attempts by a user during a [Assignment: organization-defined time period]; and + + + AC-7b. + Automatically [Selection: locks the account/node for an [Assignment: organization-defined time period]; locks the account/node until released by an administrator; delays next logon prompt according to [Assignment: organization-defined delay algorithm]] when the maximum number of unsuccessful attempts is exceeded. + + + + This control applies regardless of whether the logon occurs via a local or network connection. Due to the potential for denial of service, automatic lockouts initiated by information systems are usually temporary and automatically release after a predetermined time period established by organizations. If a delay algorithm is selected, organizations may choose to employ different algorithms for different information system components based on the capabilities of those components. Responses to unsuccessful logon attempts may be implemented at both the operating system and the application levels. + AC-2 + AC-9 + AC-14 + IA-5 + + + + AC-7 (1) + AUTOMATIC ACCOUNT LOCK + + AC-7 + + + [Withdrawn: Incorporated into AC-7]. + + + + AC-7 (2) + PURGE / WIPE MOBILE DEVICE + + The information system purges/wipes information from [Assignment: organization-defined mobile devices] based on [Assignment: organization-defined purging/wiping requirements/techniques] after [Assignment: organization-defined number] consecutive, unsuccessful device logon attempts. + + + This control enhancement applies only to mobile devices for which a logon occurs (e.g., personal digital assistants, smart phones, tablets). The logon is to the mobile device, not to any one account on the device. Therefore, successful logons to any accounts on mobile devices reset the unsuccessful logon count to zero. Organizations define information to be purged/wiped carefully in order to avoid over purging/wiping which may result in devices becoming unusable. Purging/wiping may be unnecessary if the information on the device is protected with sufficiently strong encryption mechanisms. + AC-19 + MP-5 + MP-6 + SC-13 + + + + + + ACCESS CONTROL + AC-8 + SYSTEM USE NOTIFICATION + P1 + LOW + MODERATE + HIGH + + The information system: + + AC-8a. + Displays to users [Assignment: organization-defined system use notification message or banner] before granting access to the system that provides privacy and security notices consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance and states that: + + AC-8a.1. + Users are accessing a U.S. Government information system; + + + AC-8a.2. + Information system usage may be monitored, recorded, and subject to audit; + + + AC-8a.3. + Unauthorized use of the information system is prohibited and subject to criminal and civil penalties; and + + + AC-8a.4. + Use of the information system indicates consent to monitoring and recording; + + + + AC-8b. + Retains the notification message or banner on the screen until users acknowledge the usage conditions and take explicit actions to log on to or further access the information system; and + + + AC-8c. + For publicly accessible systems: + + AC-8c.1. + Displays system use information [Assignment: organization-defined conditions], before granting further access; + + + AC-8c.2. + Displays references, if any, to monitoring, recording, or auditing that are consistent with privacy accommodations for such systems that generally prohibit those activities; and + + + AC-8c.3. + Includes a description of the authorized uses of the system. + + + + + System use notifications can be implemented using messages or warning banners displayed before individuals log in to information systems. System use notifications are used only for access via logon interfaces with human users and are not required when such human interfaces do not exist. Organizations consider system use notification messages/banners displayed in multiple languages based on specific organizational needs and the demographics of information system users. Organizations also consult with the Office of the General Counsel for legal review and approval of warning banner content. + + + + ACCESS CONTROL + AC-9 + PREVIOUS LOGON (ACCESS) NOTIFICATION + P0 + + The information system notifies the user, upon successful logon (access) to the system, of the date and time of the last logon (access). + + + This control is applicable to logons to information systems via human user interfaces and logons to systems that occur in other types of architectures (e.g., service-oriented architectures). + AC-7 + PL-4 + + + + AC-9 (1) + UNSUCCESSFUL LOGONS + + The information system notifies the user, upon successful logon/access, of the number of unsuccessful logon/access attempts since the last successful logon/access. + + + + AC-9 (2) + SUCCESSFUL / UNSUCCESSFUL LOGONS + + The information system notifies the user of the number of [Selection: successful logons/accesses; unsuccessful logon/access attempts; both] during [Assignment: organization-defined time period]. + + + + AC-9 (3) + NOTIFICATION OF ACCOUNT CHANGES + + The information system notifies the user of changes to [Assignment: organization-defined security-related characteristics/parameters of the user�s account] during [Assignment: organization-defined time period]. + + + + AC-9 (4) + ADDITIONAL LOGON INFORMATION + + The information system notifies the user, upon successful logon (access), of the following additional information: [Assignment: organization-defined information to be included in addition to the date and time of the last logon (access)]. + + + This control enhancement permits organizations to specify additional information to be provided to users upon logon including, for example, the location of last logon. User location is defined as that information which can be determined by information systems, for example, IP addresses from which network logons occurred, device identifiers, or notifications of local logons. + + + + + + ACCESS CONTROL + AC-10 + CONCURRENT SESSION CONTROL + P3 + HIGH + + The information system limits the number of concurrent sessions for each [Assignment: organization-defined account and/or account type] to [Assignment: organization-defined number]. + + + Organizations may define the maximum number of concurrent sessions for information system accounts globally, by account type (e.g., privileged user, non-privileged user, domain, specific application), by account, or a combination. For example, organizations may limit the number of concurrent sessions for system administrators or individuals working in particularly sensitive domains or mission-critical applications. This control addresses concurrent sessions for information system accounts and does not address concurrent sessions by single users via multiple system accounts. + + + + ACCESS CONTROL + AC-11 + SESSION LOCK + P3 + MODERATE + HIGH + + The information system: + + AC-11a. + Prevents further access to the system by initiating a session lock after [Assignment: organization-defined time period] of inactivity or upon receiving a request from a user; and + + + AC-11b. + Retains the session lock until the user reestablishes access using established identification and authentication procedures. + + + + Session locks are temporary actions taken when users stop work and move away from the immediate vicinity of information systems but do not want to log out because of the temporary nature of their absences. Session locks are implemented where session activities can be determined. This is typically at the operating system level, but can also be at the application level. Session locks are not an acceptable substitute for logging out of information systems, for example, if organizations require users to log out at the end of workdays. + AC-7 + + + + AC-11 (1) + PATTERN-HIDING DISPLAYS + MODERATE + HIGH + + The information system conceals, via the session lock, information previously visible on the display with a publicly viewable image. + + + Publicly viewable images can include static or dynamic images, for example, patterns used with screen savers, photographic images, solid colors, clock, battery life indicator, or a blank screen, with the additional caveat that none of the images convey sensitive information. + + + + + + OMB Memorandum 06-16 + + + + + ACCESS CONTROL + AC-12 + SESSION TERMINATION + P2 + MODERATE + HIGH + + The information system automatically terminates a user session after [Assignment: organization-defined conditions or trigger events requiring session disconnect]. + + + This control addresses the termination of user-initiated logical sessions in contrast to SC-10 which addresses the termination of network connections that are associated with communications sessions (i.e., network disconnect). A logical session (for local, network, and remote access) is initiated whenever a user (or process acting on behalf of a user) accesses an organizational information system. Such user sessions can be terminated (and thus terminate user access) without terminating network sessions. Session termination terminates all processes associated with a user�s logical session except those processes that are specifically created by the user (i.e., session owner) to continue after the session is terminated. Conditions or trigger events requiring automatic session termination can include, for example, organization-defined periods of user inactivity, targeted responses to certain types of incidents, time-of-day restrictions on information system use. + SC-10 + SC-23 + + + + AC-12 (1) + USER-INITIATED LOGOUTS / MESSAGE DISPLAYS + + The information system: + + AC-12 (1)(a) + Provides a logout capability for user-initiated communications sessions whenever authentication is used to gain access to [Assignment: organization-defined information resources]; and + + + AC-12 (1)(b) + Displays an explicit logout message to users indicating the reliable termination of authenticated communications sessions. + + + + Information resources to which users gain access via authentication include, for example, local workstations, databases, and password-protected websites/web-based services. Logout messages for web page access, for example, can be displayed after authenticated sessions have been terminated. However, for some types of interactive sessions including, for example, file transfer protocol (FTP) sessions, information systems typically send logout messages as final messages prior to terminating sessions. + + + + + + ACCESS CONTROL + AC-13 + SUPERVISION AND REVIEW - ACCESS CONTROL + + AC-2 + AU-6 + + + [Withdrawn: Incorporated into AC-2 and AU-6]. + + + + ACCESS CONTROL + AC-14 + PERMITTED ACTIONS WITHOUT IDENTIFICATION OR AUTHENTICATION + P3 + LOW + MODERATE + HIGH + + The organization: + + AC-14a. + Identifies [Assignment: organization-defined user actions] that can be performed on the information system without identification or authentication consistent with organizational missions/business functions; and + + + AC-14b. + Documents and provides supporting rationale in the security plan for the information system, user actions not requiring identification or authentication. + + + + This control addresses situations in which organizations determine that no identification or authentication is required in organizational information systems. Organizations may allow a limited number of user actions without identification or authentication including, for example, when individuals access public websites or other publicly accessible federal information systems, when individuals use mobile phones to receive calls, or when facsimiles are received. Organizations also identify actions that normally require identification or authentication but may under certain circumstances (e.g., emergencies), allow identification or authentication mechanisms to be bypassed. Such bypasses may occur, for example, via a software-readable physical switch that commands bypass of the logon functionality and is protected from accidental or unmonitored use. This control does not apply to situations where identification and authentication have already occurred and are not repeated, but rather to situations where identification and authentication have not yet occurred. Organizations may decide that there are no user actions that can be performed on organizational information systems without identification and authentication and thus, the values for assignment statements can be none. + CP-2 + IA-2 + + + + AC-14 (1) + NECESSARY USES + + AC-14 + + + [Withdrawn: Incorporated into AC-14]. + + + + + + ACCESS CONTROL + AC-15 + AUTOMATED MARKING + + MP-3 + + + [Withdrawn: Incorporated into MP-3]. + + + + ACCESS CONTROL + AC-16 + SECURITY ATTRIBUTES + P0 + + The organization: + + AC-16a. + Provides the means to associate [Assignment: organization-defined types of security attributes] having [Assignment: organization-defined security attribute values] with information in storage, in process, and/or in transmission; + + + AC-16b. + Ensures that the security attribute associations are made and retained with the information; + + + AC-16c. + Establishes the permitted [Assignment: organization-defined security attributes] for [Assignment: organization-defined information systems]; and + + + AC-16d. + Determines the permitted [Assignment: organization-defined values or ranges] for each of the established security attributes. + + + + Information is represented internally within information systems using abstractions known as data structures. Internal data structures can represent different types of entities, both active and passive. Active entities, also known as subjects, are typically associated with individuals, devices, or processes acting on behalf of individuals. Passive entities, also known as objects, are typically associated with data structures such as records, buffers, tables, files, inter-process pipes, and communications ports. Security attributes, a form of metadata, are abstractions representing the basic properties or characteristics of active and passive entities with respect to safeguarding information. These attributes may be associated with active entities (i.e., subjects) that have the potential to send or receive information, to cause information to flow among objects, or to change the information system state. These attributes may also be associated with passive entities (i.e., objects) that contain or receive information. The association of security attributes to subjects and objects is referred to as binding and is typically inclusive of setting the attribute value and the attribute type. Security attributes when bound to data/information, enables the enforcement of information security policies for access control and information flow control, either through organizational processes or information system functions or mechanisms. The content or assigned values of security attributes can directly affect the ability of individuals to access organizational information. +Organizations can define the types of attributes needed for selected information systems to support missions/business functions. There is potentially a wide range of values that can be assigned to any given security attribute. Release markings could include, for example, US only, NATO, or NOFORN (not releasable to foreign nationals). By specifying permitted attribute ranges and values, organizations can ensure that the security attribute values are meaningful and relevant. The term security labeling refers to the association of security attributes with subjects and objects represented by internal data structures within organizational information systems, to enable information system-based enforcement of information security policies. Security labels include, for example, access authorizations, data life cycle protection (i.e., encryption and data expiration), nationality, affiliation as contractor, and classification of information in accordance with legal and compliance requirements. The term security marking refers to the association of security attributes with objects in a human-readable form, to enable organizational process-based enforcement of information security policies. The AC-16 base control represents the requirement for user-based attribute association (marking). The enhancements to AC-16 represent additional requirements including information system-based attribute association (labeling). Types of attributes include, for example, classification level for objects and clearance (access authorization) level for subjects. An example of a value for both of these attribute types is Top Secret. + AC-3 + AC-4 + AC-6 + AC-21 + AU-2 + AU-10 + SC-16 + MP-3 + + + + AC-16 (1) + DYNAMIC ATTRIBUTE ASSOCIATION + + The information system dynamically associates security attributes with [Assignment: organization-defined subjects and objects] in accordance with [Assignment: organization-defined security policies] as information is created and combined. + + + Dynamic association of security attributes is appropriate whenever the security characteristics of information changes over time. Security attributes may change, for example, due to information aggregation issues (i.e., the security characteristics of individual information elements are different from the combined elements), changes in individual access authorizations (i.e., privileges), and changes in the security category of information. + AC-4 + + + + AC-16 (2) + ATTRIBUTE VALUE CHANGES BY AUTHORIZED INDIVIDUALS + + The information system provides authorized individuals (or processes acting on behalf of individuals) the capability to define or change the value of associated security attributes. + + + The content or assigned values of security attributes can directly affect the ability of individuals to access organizational information. Therefore, it is important for information systems to be able to limit the ability to create or modify security attributes to authorized individuals. + AC-6 + AU-2 + + + + AC-16 (3) + MAINTENANCE OF ATTRIBUTE ASSOCIATIONS BY INFORMATION SYSTEM + + The information system maintains the association and integrity of [Assignment: organization-defined security attributes] to [Assignment: organization-defined subjects and objects]. + + + Maintaining the association and integrity of security attributes to subjects and objects with sufficient assurance helps to ensure that the attribute associations can be used as the basis of automated policy actions. Automated policy actions include, for example, access control decisions or information flow control decisions. + + + + AC-16 (4) + ASSOCIATION OF ATTRIBUTES BY AUTHORIZED INDIVIDUALS + + The information system supports the association of [Assignment: organization-defined security attributes] with [Assignment: organization-defined subjects and objects] by authorized individuals (or processes acting on behalf of individuals). + + + The support provided by information systems can vary to include: (i) prompting users to select specific security attributes to be associated with specific information objects; (ii) employing automated mechanisms for categorizing information with appropriate attributes based on defined policies; or (iii) ensuring that the combination of selected security attributes selected is valid. Organizations consider the creation, deletion, or modification of security attributes when defining auditable events. + + + + AC-16 (5) + ATTRIBUTE DISPLAYS FOR OUTPUT DEVICES + + The information system displays security attributes in human-readable form on each object that the system transmits to output devices to identify [Assignment: organization-identified special dissemination, handling, or distribution instructions] using [Assignment: organization-identified human-readable, standard naming conventions]. + + + Information system outputs include, for example, pages, screens, or equivalent. Information system output devices include, for example, printers and video displays on computer workstations, notebook computers, and personal digital assistants. + + + + AC-16 (6) + MAINTENANCE OF ATTRIBUTE ASSOCIATION BY ORGANIZATION + + The organization allows personnel to associate, and maintain the association of [Assignment: organization-defined security attributes] with [Assignment: organization-defined subjects and objects] in accordance with [Assignment: organization-defined security policies]. + + + This control enhancement requires individual users (as opposed to the information system) to maintain associations of security attributes with subjects and objects. + + + + AC-16 (7) + CONSISTENT ATTRIBUTE INTERPRETATION + + The organization provides a consistent interpretation of security attributes transmitted between distributed information system components. + + + In order to enforce security policies across multiple components in distributed information systems (e.g., distributed database management systems, cloud-based systems, and service-oriented architectures), organizations provide a consistent interpretation of security attributes that are used in access enforcement and flow enforcement decisions. Organizations establish agreements and processes to ensure that all distributed information system components implement security attributes with consistent interpretations in automated access/flow enforcement actions. + + + + AC-16 (8) + ASSOCIATION TECHNIQUES / TECHNOLOGIES + + The information system implements [Assignment: organization-defined techniques or technologies] with [Assignment: organization-defined level of assurance] in associating security attributes to information. + + + The association (i.e., binding) of security attributes to information within information systems is of significant importance with regard to conducting automated access enforcement and flow enforcement actions. The association of such security attributes can be accomplished with technologies/techniques providing different levels of assurance. For example, information systems can cryptographically bind security attributes to information using digital signatures with the supporting cryptographic keys protected by hardware devices (sometimes known as hardware roots of trust). + + + + AC-16 (9) + ATTRIBUTE REASSIGNMENT + + The organization ensures that security attributes associated with information are reassigned only via re-grading mechanisms validated using [Assignment: organization-defined techniques or procedures]. + + + Validated re-grading mechanisms are employed by organizations to provide the requisite levels of assurance for security attribute reassignment activities. The validation is facilitated by ensuring that re-grading mechanisms are single purpose and of limited function. Since security attribute reassignments can affect security policy enforcement actions (e.g., access/flow enforcement decisions), using trustworthy re-grading mechanisms is necessary to ensure that such mechanisms perform in a consistent/correct mode of operation. + + + + AC-16 (10) + ATTRIBUTE CONFIGURATION BY AUTHORIZED INDIVIDUALS + + The information system provides authorized individuals the capability to define or change the type and value of security attributes available for association with subjects and objects. + + + The content or assigned values of security attributes can directly affect the ability of individuals to access organizational information. Therefore, it is important for information systems to be able to limit the ability to create or modify security attributes to authorized individuals only. + + + + + + ACCESS CONTROL + AC-17 + REMOTE ACCESS + P1 + LOW + MODERATE + HIGH + + The organization: + + AC-17a. + Establishes and documents usage restrictions, configuration/connection requirements, and implementation guidance for each type of remote access allowed; and + + + AC-17b. + Authorizes remote access to the information system prior to allowing such connections. + + + + Remote access is access to organizational information systems by users (or processes acting on behalf of users) communicating through external networks (e.g., the Internet). Remote access methods include, for example, dial-up, broadband, and wireless. Organizations often employ encrypted virtual private networks (VPNs) to enhance confidentiality and integrity over remote connections. The use of encrypted VPNs does not make the access non-remote; however, the use of VPNs, when adequately provisioned with appropriate security controls (e.g., employing appropriate encryption techniques for confidentiality and integrity protection) may provide sufficient assurance to the organization that it can effectively treat such connections as internal networks. Still, VPN connections traverse external networks, and the encrypted VPN does not enhance the availability of remote connections. Also, VPNs with encrypted tunnels can affect the organizational capability to adequately monitor network communications traffic for malicious code. Remote access controls apply to information systems other than public web servers or systems designed for public access. This control addresses authorization prior to allowing remote access without specifying the formats for such authorization. While organizations may use interconnection security agreements to authorize remote access connections, such agreements are not required by this control. Enforcing access restrictions for remote connections is addressed in AC-3. + AC-2 + AC-3 + AC-18 + AC-19 + AC-20 + CA-3 + CA-7 + CM-8 + IA-2 + IA-3 + IA-8 + MA-4 + PE-17 + PL-4 + SC-10 + SI-4 + + + + AC-17 (1) + AUTOMATED MONITORING / CONTROL + MODERATE + HIGH + + The information system monitors and controls remote access methods. + + + Automated monitoring and control of remote access sessions allows organizations to detect cyber attacks and also ensure ongoing compliance with remote access policies by auditing connection activities of remote users on a variety of information system components (e.g., servers, workstations, notebook computers, smart phones, and tablets). + AU-2 + AU-12 + + + + AC-17 (2) + PROTECTION OF CONFIDENTIALITY / INTEGRITY USING ENCRYPTION + MODERATE + HIGH + + The information system implements cryptographic mechanisms to protect the confidentiality and integrity of remote access sessions. + + + The encryption strength of mechanism is selected based on the security categorization of the information. + SC-8 + SC-12 + SC-13 + + + + AC-17 (3) + MANAGED ACCESS CONTROL POINTS + MODERATE + HIGH + + The information system routes all remote accesses through [Assignment: organization-defined number] managed network access control points. + + + Limiting the number of access control points for remote accesses reduces the attack surface for organizations. Organizations consider the Trusted Internet Connections (TIC) initiative requirements for external network connections. + SC-7 + + + + AC-17 (4) + PRIVILEGED COMMANDS / ACCESS + MODERATE + HIGH + + The organization: + + AC-17 (4)(a) + Authorizes the execution of privileged commands and access to security-relevant information via remote access only for [Assignment: organization-defined needs]; and + + + AC-17 (4)(b) + Documents the rationale for such access in the security plan for the information system. + + + + AC-6 + + + + AC-17 (5) + MONITORING FOR UNAUTHORIZED CONNECTIONS + + SI-4 + + + [Withdrawn: Incorporated into SI-4]. + + + + AC-17 (6) + PROTECTION OF INFORMATION + + The organization ensures that users protect information about remote access mechanisms from unauthorized use and disclosure. + + + AT-2 + AT-3 + PS-6 + + + + AC-17 (7) + ADDITIONAL PROTECTION FOR SECURITY FUNCTION ACCESS + + AC-3 (10) + + + [Withdrawn: Incorporated into AC-3 (10)]. + + + + AC-17 (8) + DISABLE NONSECURE NETWORK PROTOCOLS + + CM-7 + + + [Withdrawn: Incorporated into CM-7]. + + + + AC-17 (9) + DISCONNECT / DISABLE ACCESS + + The organization provides the capability to expeditiously disconnect or disable remote access to the information system within [Assignment: organization-defined time period]. + + + This control enhancement requires organizations to have the capability to rapidly disconnect current users remotely accessing the information system and/or disable further remote access. The speed of disconnect or disablement varies based on the criticality of missions/business functions and the need to eliminate immediate or future remote access to organizational information systems. + + + + + + NIST Special Publication 800-46 + + + NIST Special Publication 800-77 + + + NIST Special Publication 800-113 + + + NIST Special Publication 800-114 + + + NIST Special Publication 800-121 + + + + + ACCESS CONTROL + AC-18 + WIRELESS ACCESS + P1 + LOW + MODERATE + HIGH + + The organization: + + AC-18a. + Establishes usage restrictions, configuration/connection requirements, and implementation guidance for wireless access; and + + + AC-18b. + Authorizes wireless access to the information system prior to allowing such connections. + + + + Wireless technologies include, for example, microwave, packet radio (UHF/VHF), 802.11x, and Bluetooth. Wireless networks use authentication protocols (e.g., EAP/TLS, PEAP), which provide credential protection and mutual authentication. + AC-2 + AC-3 + AC-17 + AC-19 + CA-3 + CA-7 + CM-8 + IA-2 + IA-3 + IA-8 + PL-4 + SI-4 + + + + AC-18 (1) + AUTHENTICATION AND ENCRYPTION + MODERATE + HIGH + + The information system protects wireless access to the system using authentication of [Selection (one or more): users; devices] and encryption. + + + SC-8 + SC-13 + + + + AC-18 (2) + MONITORING UNAUTHORIZED CONNECTIONS + + SI-4 + + + [Withdrawn: Incorporated into SI-4]. + + + + AC-18 (3) + DISABLE WIRELESS NETWORKING + + The organization disables, when not intended for use, wireless networking capabilities internally embedded within information system components prior to issuance and deployment. + + + AC-19 + + + + AC-18 (4) + RESTRICT CONFIGURATIONS BY USERS + HIGH + + The organization identifies and explicitly authorizes users allowed to independently configure wireless networking capabilities. + + + Organizational authorizations to allow selected users to configure wireless networking capability are enforced in part, by the access enforcement mechanisms employed within organizational information systems. + AC-3 + SC-15 + + + + AC-18 (5) + ANTENNAS / TRANSMISSION POWER LEVELS + HIGH + + The organization selects radio antennas and calibrates transmission power levels to reduce the probability that usable signals can be received outside of organization-controlled boundaries. + + + Actions that may be taken by organizations to limit unauthorized use of wireless communications outside of organization-controlled boundaries include, for example: (i) reducing the power of wireless transmissions so that the transmissions are less likely to emit a signal that can be used by adversaries outside of the physical perimeters of organizations; (ii) employing measures such as TEMPEST to control wireless emanations; and (iii) using directional/beam forming antennas that reduce the likelihood that unintended receivers will be able to intercept signals. Prior to taking such actions, organizations can conduct periodic wireless surveys to understand the radio frequency profile of organizational information systems as well as other systems that may be operating in the area. + PE-19 + + + + + + NIST Special Publication 800-48 + + + NIST Special Publication 800-94 + + + NIST Special Publication 800-97 + + + + + ACCESS CONTROL + AC-19 + ACCESS CONTROL FOR MOBILE DEVICES + P1 + LOW + MODERATE + HIGH + + The organization: + + AC-19a. + Establishes usage restrictions, configuration requirements, connection requirements, and implementation guidance for organization-controlled mobile devices; and + + + AC-19b. + Authorizes the connection of mobile devices to organizational information systems. + + + + A mobile device is a computing device that: (i) has a small form factor such that it can easily be carried by a single individual; (ii) is designed to operate without a physical connection (e.g., wirelessly transmit or receive information); (iii) possesses local, non-removable or removable data storage; and (iv) includes a self-contained power source. Mobile devices may also include voice communication capabilities, on-board sensors that allow the device to capture information, and/or built-in features for synchronizing local data with remote locations. Examples include smart phones, E-readers, and tablets. Mobile devices are typically associated with a single individual and the device is usually in close proximity to the individual; however, the degree of proximity can vary depending upon on the form factor and size of the device. The processing, storage, and transmission capability of the mobile device may be comparable to or merely a subset of desktop systems, depending upon the nature and intended purpose of the device. Due to the large variety of mobile devices with different technical characteristics and capabilities, organizational restrictions may vary for the different classes/types of such devices. Usage restrictions and specific implementation guidance for mobile devices include, for example, configuration management, device identification and authentication, implementation of mandatory protective software (e.g., malicious code detection, firewall), scanning devices for malicious code, updating virus protection software, scanning for critical software updates and patches, conducting primary operating system (and possibly other resident software) integrity checks, and disabling unnecessary hardware (e.g., wireless, infrared). Organizations are cautioned that the need to provide adequate security for mobile devices goes beyond the requirements in this control. Many safeguards and countermeasures for mobile devices are reflected in other security controls in the catalog allocated in the initial control baselines as starting points for the development of security plans and overlays using the tailoring process. There may also be some degree of overlap in the requirements articulated by the security controls within the different families of controls. AC-20 addresses mobile devices that are not organization-controlled. + AC-3 + AC-7 + AC-18 + AC-20 + CA-9 + CM-2 + IA-2 + IA-3 + MP-2 + MP-4 + MP-5 + PL-4 + SC-7 + SC-43 + SI-3 + SI-4 + + + + AC-19 (1) + USE OF WRITABLE / PORTABLE STORAGE DEVICES + + MP-7 + + + [Withdrawn: Incorporated into MP-7]. + + + + AC-19 (2) + USE OF PERSONALLY OWNED PORTABLE STORAGE DEVICES + + MP-7 + + + [Withdrawn: Incorporated into MP-7]. + + + + AC-19 (3) + USE OF PORTABLE STORAGE DEVICES WITH NO IDENTIFIABLE OWNER + + MP-7 + + + [Withdrawn: Incorporated into MP-7]. + + + + AC-19 (4) + RESTRICTIONS FOR CLASSIFIED INFORMATION + + The organization: + + AC-19 (4)(a) + Prohibits the use of unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information unless specifically permitted by the authorizing official; and + + + AC-19 (4)(b) + Enforces the following restrictions on individuals permitted by the authorizing official to use unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information: + + AC-19 (4)(b)(1) + Connection of unclassified mobile devices to classified information systems is prohibited; + + + AC-19 (4)(b)(2) + Connection of unclassified mobile devices to unclassified information systems requires approval from the authorizing official; + + + AC-19 (4)(b)(3) + Use of internal or external modems or wireless interfaces within the unclassified mobile devices is prohibited; and + + + AC-19 (4)(b)(4) + Unclassified mobile devices and the information stored on those devices are subject to random reviews and inspections by [Assignment: organization-defined security officials], and if classified information is found, the incident handling policy is followed. + + + + AC-19 (4)(c) + Restricts the connection of classified mobile devices to classified information systems in accordance with [Assignment: organization-defined security policies]. + + + + CA-6 + IR-4 + + + + AC-19 (5) + FULL DEVICE / CONTAINER-BASED ENCRYPTION + MODERATE + HIGH + + The organization employs [Selection: full-device encryption; container encryption] to protect the confidentiality and integrity of information on [Assignment: organization-defined mobile devices]. + + + Container-based encryption provides a more fine-grained approach to the encryption of data/information on mobile devices, including for example, encrypting selected data structures such as files, records, or fields. + MP-5 + SC-13 + SC-28 + + + + + + OMB Memorandum 06-16 + + + NIST Special Publication 800-114 + + + NIST Special Publication 800-124 + + + NIST Special Publication 800-164 + + + + + ACCESS CONTROL + AC-20 + USE OF EXTERNAL INFORMATION SYSTEMS + P1 + LOW + MODERATE + HIGH + + The organization establishes terms and conditions, consistent with any trust relationships established with other organizations owning, operating, and/or maintaining external information systems, allowing authorized individuals to: + + AC-20a. + Access the information system from external information systems; and + + + AC-20b. + Process, store, or transmit organization-controlled information using external information systems. + + + + External information systems are information systems or components of information systems that are outside of the authorization boundary established by organizations and for which organizations typically have no direct supervision and authority over the application of required security controls or the assessment of control effectiveness. External information systems include, for example: (i) personally owned information systems/devices (e.g., notebook computers, smart phones, tablets, personal digital assistants); (ii) privately owned computing and communications devices resident in commercial or public facilities (e.g., hotels, train stations, convention centers, shopping malls, or airports); (iii) information systems owned or controlled by nonfederal governmental organizations; and (iv) federal information systems that are not owned by, operated by, or under the direct supervision and authority of organizations. This control also addresses the use of external information systems for the processing, storage, or transmission of organizational information, including, for example, accessing cloud services (e.g., infrastructure as a service, platform as a service, or software as a service) from organizational information systems. +For some external information systems (i.e., information systems operated by other federal agencies, including organizations subordinate to those agencies), the trust relationships that have been established between those organizations and the originating organization may be such, that no explicit terms and conditions are required. Information systems within these organizations would not be considered external. These situations occur when, for example, there are pre-existing sharing/trust agreements (either implicit or explicit) established between federal agencies or organizations subordinate to those agencies, or when such trust agreements are specified by applicable laws, Executive Orders, directives, or policies. Authorized individuals include, for example, organizational personnel, contractors, or other individuals with authorized access to organizational information systems and over which organizations have the authority to impose rules of behavior with regard to system access. Restrictions that organizations impose on authorized individuals need not be uniform, as those restrictions may vary depending upon the trust relationships between organizations. Therefore, organizations may choose to impose different security restrictions on contractors than on state, local, or tribal governments. +This control does not apply to the use of external information systems to access public interfaces to organizational information systems (e.g., individuals accessing federal information through www.usa.gov). Organizations establish terms and conditions for the use of external information systems in accordance with organizational security policies and procedures. Terms and conditions address as a minimum: types of applications that can be accessed on organizational information systems from external information systems; and the highest security category of information that can be processed, stored, or transmitted on external information systems. If terms and conditions with the owners of external information systems cannot be established, organizations may impose restrictions on organizational personnel using those external systems. + AC-3 + AC-17 + AC-19 + CA-3 + PL-4 + SA-9 + + + + AC-20 (1) + LIMITS ON AUTHORIZED USE + MODERATE + HIGH + + The organization permits authorized individuals to use an external information system to access the information system or to process, store, or transmit organization-controlled information only when the organization: + + AC-20 (1)(a) + Verifies the implementation of required security controls on the external system as specified in the organization�s information security policy and security plan; or + + + AC-20 (1)(b) + Retains approved information system connection or processing agreements with the organizational entity hosting the external information system. + + + + This control enhancement recognizes that there are circumstances where individuals using external information systems (e.g., contractors, coalition partners) need to access organizational information systems. In those situations, organizations need confidence that the external information systems contain the necessary security safeguards (i.e., security controls), so as not to compromise, damage, or otherwise harm organizational information systems. Verification that the required security controls have been implemented can be achieved, for example, by third-party, independent assessments, attestations, or other means, depending on the confidence level required by organizations. + CA-2 + + + + AC-20 (2) + PORTABLE STORAGE DEVICES + MODERATE + HIGH + + The organization [Selection: restricts; prohibits] the use of organization-controlled portable storage devices by authorized individuals on external information systems. + + + Limits on the use of organization-controlled portable storage devices in external information systems include, for example, complete prohibition of the use of such devices or restrictions on how the devices may be used and under what conditions the devices may be used. + + + + AC-20 (3) + NON-ORGANIZATIONALLY OWNED SYSTEMS / COMPONENTS / DEVICES + + The organization [Selection: restricts; prohibits] the use of non-organizationally owned information systems, system components, or devices to process, store, or transmit organizational information. + + + Non-organizationally owned devices include devices owned by other organizations (e.g., federal/state agencies, contractors) and personally owned devices. There are risks to using non-organizationally owned devices. In some cases, the risk is sufficiently high as to prohibit such use. In other cases, it may be such that the use of non-organizationally owned devices is allowed but restricted in some way. Restrictions include, for example: (i) requiring the implementation of organization-approved security controls prior to authorizing such connections; (ii) limiting access to certain types of information, services, or applications; (iii) using virtualization techniques to limit processing and storage activities to servers or other system components provisioned by the organization; and (iv) agreeing to terms and conditions for usage. For personally owned devices, organizations consult with the Office of the General Counsel regarding legal issues associated with using such devices in operational environments, including, for example, requirements for conducting forensic analyses during investigations after an incident. + + + + AC-20 (4) + NETWORK ACCESSIBLE STORAGE DEVICES + + The organization prohibits the use of [Assignment: organization-defined network accessible storage devices] in external information systems. + + + Network accessible storage devices in external information systems include, for example, online storage devices in public, hybrid, or community cloud-based systems. + + + + + + FIPS Publication 199 + + + + + ACCESS CONTROL + AC-21 + INFORMATION SHARING + P2 + MODERATE + HIGH + + The organization: + + AC-21a. + Facilitates information sharing by enabling authorized users to determine whether access authorizations assigned to the sharing partner match the access restrictions on the information for [Assignment: organization-defined information sharing circumstances where user discretion is required]; and + + + AC-21b. + Employs [Assignment: organization-defined automated mechanisms or manual processes] to assist users in making information sharing/collaboration decisions. + + + + This control applies to information that may be restricted in some manner (e.g., privileged medical information, contract-sensitive information, proprietary information, personally identifiable information, classified information related to special access programs or compartments) based on some formal or administrative determination. Depending on the particular information-sharing circumstances, sharing partners may be defined at the individual, group, or organizational level. Information may be defined by content, type, security category, or special access program/compartment. + AC-3 + + + + AC-21 (1) + AUTOMATED DECISION SUPPORT + + The information system enforces information-sharing decisions by authorized users based on access authorizations of sharing partners and access restrictions on information to be shared. + + + + AC-21 (2) + INFORMATION SEARCH AND RETRIEVAL + + The information system implements information search and retrieval services that enforce [Assignment: organization-defined information sharing restrictions]. + + + + + + ACCESS CONTROL + AC-22 + PUBLICLY ACCESSIBLE CONTENT + P3 + LOW + MODERATE + HIGH + + The organization: + + AC-22a. + Designates individuals authorized to post information onto a publicly accessible information system; + + + AC-22b. + Trains authorized individuals to ensure that publicly accessible information does not contain nonpublic information; + + + AC-22c. + Reviews the proposed content of information prior to posting onto the publicly accessible information system to ensure that nonpublic information is not included; and + + + AC-22d. + Reviews the content on the publicly accessible information system for nonpublic information [Assignment: organization-defined frequency] and removes such information, if discovered. + + + + In accordance with federal laws, Executive Orders, directives, policies, regulations, standards, and/or guidance, the general public is not authorized access to nonpublic information (e.g., information protected under the Privacy Act and proprietary information). This control addresses information systems that are controlled by the organization and accessible to the general public, typically without identification or authentication. The posting of information on non-organization information systems is covered by organizational policy. + AC-3 + AC-4 + AT-2 + AT-3 + AU-13 + + + + ACCESS CONTROL + AC-23 + DATA MINING PROTECTION + P0 + + The organization employs [Assignment: organization-defined data mining prevention and detection techniques] for [Assignment: organization-defined data storage objects] to adequately detect and protect against data mining. + + + Data storage objects include, for example, databases, database records, and database fields. Data mining prevention and detection techniques include, for example: (i) limiting the types of responses provided to database queries; (ii) limiting the number/frequency of database queries to increase the work factor needed to determine the contents of such databases; and (iii) notifying organizational personnel when atypical database queries or accesses occur. This control focuses on the protection of organizational information from data mining while such information resides in organizational data stores. In contrast, AU-13 focuses on monitoring for organizational information that may have been mined or otherwise obtained from data stores and is now available as open source information residing on external sites, for example, through social networking or social media websites. + + + + ACCESS CONTROL + AC-24 + ACCESS CONTROL DECISIONS + P0 + + The organization establishes procedures to ensure [Assignment: organization-defined access control decisions] are applied to each access request prior to access enforcement. + + + Access control decisions (also known as authorization decisions) occur when authorization information is applied to specific accesses. In contrast, access enforcement occurs when information systems enforce access control decisions. While it is very common to have access control decisions and access enforcement implemented by the same entity, it is not required and it is not always an optimal implementation choice. For some architectures and distributed information systems, different entities may perform access control decisions and access enforcement. + + + + AC-24 (1) + TRANSMIT ACCESS AUTHORIZATION INFORMATION + + The information system transmits [Assignment: organization-defined access authorization information] using [Assignment: organization-defined security safeguards] to [Assignment: organization-defined information systems] that enforce access control decisions. + + + In distributed information systems, authorization processes and access control decisions may occur in separate parts of the systems. In such instances, authorization information is transmitted securely so timely access control decisions can be enforced at the appropriate locations. To support the access control decisions, it may be necessary to transmit as part of the access authorization information, supporting security attributes. This is due to the fact that in distributed information systems, there are various access control decisions that need to be made and different entities (e.g., services) make these decisions in a serial fashion, each requiring some security attributes to make the decisions. Protecting access authorization information (i.e., access control decisions) ensures that such information cannot be altered, spoofed, or otherwise compromised during transmission. + + + + AC-24 (2) + NO USER OR PROCESS IDENTITY + + The information system enforces access control decisions based on [Assignment: organization-defined security attributes] that do not include the identity of the user or process acting on behalf of the user. + + + In certain situations, it is important that access control decisions can be made without information regarding the identity of the users issuing the requests. These are generally instances where preserving individual privacy is of paramount importance. In other situations, user identification information is simply not needed for access control decisions and, especially in the case of distributed information systems, transmitting such information with the needed degree of assurance may be very expensive or difficult to accomplish. + + + + + + ACCESS CONTROL + AC-25 + REFERENCE MONITOR + P0 + + The information system implements a reference monitor for [Assignment: organization-defined access control policies] that is tamperproof, always invoked, and small enough to be subject to analysis and testing, the completeness of which can be assured. + + + Information is represented internally within information systems using abstractions known as data structures. Internal data structures can represent different types of entities, both active and passive. Active entities, also known as subjects, are typically associated with individuals, devices, or processes acting on behalf of individuals. Passive entities, also known as objects, are typically associated with data structures such as records, buffers, tables, files, inter-process pipes, and communications ports. Reference monitors typically enforce mandatory access control policies�a type of access control that restricts access to objects based on the identity of subjects or groups to which the subjects belong. The access controls are mandatory because subjects with certain privileges (i.e., access permissions) are restricted from passing those privileges on to any other subjects, either directly or indirectly�that is, the information system strictly enforces the access control policy based on the rule set established by the policy. The tamperproof property of the reference monitor prevents adversaries from compromising the functioning of the mechanism. The always invoked property prevents adversaries from bypassing the mechanism and hence violating the security policy. The smallness property helps to ensure the completeness in the analysis and testing of the mechanism to detect weaknesses or deficiencies (i.e., latent flaws) that would prevent the enforcement of the security policy. + AC-3 + AC-16 + SC-3 + SC-39 + + + + AWARENESS AND TRAINING + AT-1 + SECURITY AWARENESS AND TRAINING POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + AT-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + AT-1a.1. + A security awareness and training policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + AT-1a.2. + Procedures to facilitate the implementation of the security awareness and training policy and associated security awareness and training controls; and + + + + AT-1b. + Reviews and updates the current: + + AT-1b.1. + Security awareness and training policy [Assignment: organization-defined frequency]; and + + + AT-1b.2. + Security awareness and training procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the AT family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-16 + + + NIST Special Publication 800-50 + + + NIST Special Publication 800-100 + + + + + AWARENESS AND TRAINING + AT-2 + SECURITY AWARENESS TRAINING + P1 + LOW + MODERATE + HIGH + + The organization provides basic security awareness training to information system users (including managers, senior executives, and contractors): + + AT-2a. + As part of initial training for new users; + + + AT-2b. + When required by information system changes; and + + + AT-2c. + [Assignment: organization-defined frequency] thereafter. + + + + Organizations determine the appropriate content of security awareness training and security awareness techniques based on the specific organizational requirements and the information systems to which personnel have authorized access. The content includes a basic understanding of the need for information security and user actions to maintain security and to respond to suspected security incidents. The content also addresses awareness of the need for operations security. Security awareness techniques can include, for example, displaying posters, offering supplies inscribed with security reminders, generating email advisories/notices from senior organizational officials, displaying logon screen messages, and conducting information security awareness events. + AT-3 + AT-4 + PL-4 + + + + AT-2 (1) + PRACTICAL EXERCISES + + The organization includes practical exercises in security awareness training that simulate actual cyber attacks. + + + Practical exercises may include, for example, no-notice social engineering attempts to collect information, gain unauthorized access, or simulate the adverse impact of opening malicious email attachments or invoking, via spear phishing attacks, malicious web links. + CA-2 + CA-7 + CP-4 + IR-3 + + + + AT-2 (2) + INSIDER THREAT + MODERATE + HIGH + + The organization includes security awareness training on recognizing and reporting potential indicators of insider threat. + + + Potential indicators and possible precursors of insider threat can include behaviors such as inordinate, long-term job dissatisfaction, attempts to gain access to information not required for job performance, unexplained access to financial resources, bullying or sexual harassment of fellow employees, workplace violence, and other serious violations of organizational policies, procedures, directives, rules, or practices. Security awareness training includes how to communicate employee and management concerns regarding potential indicators of insider threat through appropriate organizational channels in accordance with established organizational policies and procedures. + PL-4 + PM-12 + PS-3 + PS-6 + + + + + + C.F.R. Part 5 Subpart C (5 C.F.R. 930.301) + + + Executive Order 13587 + + + NIST Special Publication 800-50 + + + + + AWARENESS AND TRAINING + AT-3 + ROLE-BASED SECURITY TRAINING + P1 + LOW + MODERATE + HIGH + + The organization provides role-based security training to personnel with assigned security roles and responsibilities: + + AT-3a. + Before authorizing access to the information system or performing assigned duties; + + + AT-3b. + When required by information system changes; and + + + AT-3c. + [Assignment: organization-defined frequency] thereafter. + + + + Organizations determine the appropriate content of security training based on the assigned roles and responsibilities of individuals and the specific security requirements of organizations and the information systems to which personnel have authorized access. In addition, organizations provide enterprise architects, information system developers, software developers, acquisition/procurement officials, information system managers, system/network administrators, personnel conducting configuration management and auditing activities, personnel performing independent verification and validation activities, security control assessors, and other personnel having access to system-level software, adequate security-related technical training specifically tailored for their assigned duties. Comprehensive role-based training addresses management, operational, and technical roles and responsibilities covering physical, personnel, and technical safeguards and countermeasures. Such training can include for example, policies, procedures, tools, and artifacts for the organizational security roles defined. Organizations also provide the training necessary for individuals to carry out their responsibilities related to operations and supply chain security within the context of organizational information security programs. Role-based security training also applies to contractors providing services to federal agencies. + AT-2 + AT-4 + PL-4 + PS-7 + SA-3 + SA-12 + SA-16 + + + + AT-3 (1) + ENVIRONMENTAL CONTROLS + + The organization provides [Assignment: organization-defined personnel or roles] with initial and [Assignment: organization-defined frequency] training in the employment and operation of environmental controls. + + + Environmental controls include, for example, fire suppression and detection devices/systems, sprinkler systems, handheld fire extinguishers, fixed fire hoses, smoke detectors, temperature/humidity, HVAC, and power within the facility. Organizations identify personnel with specific roles and responsibilities associated with environmental controls requiring specialized training. + PE-1 + PE-13 + PE-14 + PE-15 + + + + AT-3 (2) + PHYSICAL SECURITY CONTROLS + + The organization provides [Assignment: organization-defined personnel or roles] with initial and [Assignment: organization-defined frequency] training in the employment and operation of physical security controls. + + + Physical security controls include, for example, physical access control devices, physical intrusion alarms, monitoring/surveillance equipment, and security guards (deployment and operating procedures). Organizations identify personnel with specific roles and responsibilities associated with physical security controls requiring specialized training. + PE-2 + PE-3 + PE-4 + PE-5 + + + + AT-3 (3) + PRACTICAL EXERCISES + + The organization includes practical exercises in security training that reinforce training objectives. + + + Practical exercises may include, for example, security training for software developers that includes simulated cyber attacks exploiting common software vulnerabilities (e.g., buffer overflows), or spear/whale phishing attacks targeted at senior leaders/executives. These types of practical exercises help developers better understand the effects of such vulnerabilities and appreciate the need for security coding standards and processes. + + + + AT-3 (4) + SUSPICIOUS COMMUNICATIONS AND ANOMALOUS SYSTEM BEHAVIOR + + The organization provides training to its personnel on [Assignment: organization-defined indicators of malicious code] to recognize suspicious communications and anomalous behavior in organizational information systems. + + + A well-trained workforce provides another organizational safeguard that can be employed as part of a defense-in-depth strategy to protect organizations against malicious code coming in to organizations via email or the web applications. Personnel are trained to look for indications of potentially suspicious email (e.g., receiving an unexpected email, receiving an email containing strange or poor grammar, or receiving an email from an unfamiliar sender but who appears to be from a known sponsor or contractor). Personnel are also trained on how to respond to such suspicious email or web communications (e.g., not opening attachments, not clicking on embedded web links, and checking the source of email addresses). For this process to work effectively, all organizational personnel are trained and made aware of what constitutes suspicious communications. Training personnel on how to recognize anomalous behaviors in organizational information systems can potentially provide early warning for the presence of malicious code. Recognition of such anomalous behavior by organizational personnel can supplement automated malicious code detection and protection tools and systems employed by organizations. + + + + + + C.F.R. Part 5 Subpart C (5 C.F.R. 930.301) + + + NIST Special Publication 800-16 + + + NIST Special Publication 800-50 + + + + + AWARENESS AND TRAINING + AT-4 + SECURITY TRAINING RECORDS + P3 + LOW + MODERATE + HIGH + + The organization: + + AT-4a. + Documents and monitors individual information system security training activities including basic security awareness training and specific information system security training; and + + + AT-4b. + Retains individual training records for [Assignment: organization-defined time period]. + + + + Documentation for specialized training may be maintained by individual supervisors at the option of the organization. + AT-2 + AT-3 + PM-14 + + + + AWARENESS AND TRAINING + AT-5 + CONTACTS WITH SECURITY GROUPS AND ASSOCIATIONS + + PM-15 + + + [Withdrawn: Incorporated into PM-15]. + + + + AUDIT AND ACCOUNTABILITY + AU-1 + AUDIT AND ACCOUNTABILITY POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + AU-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + AU-1a.1. + An audit and accountability policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + AU-1a.2. + Procedures to facilitate the implementation of the audit and accountability policy and associated audit and accountability controls; and + + + + AU-1b. + Reviews and updates the current: + + AU-1b.1. + Audit and accountability policy [Assignment: organization-defined frequency]; and + + + AU-1b.2. + Audit and accountability procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the AU family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + AUDIT AND ACCOUNTABILITY + AU-2 + AUDIT EVENTS + P1 + LOW + MODERATE + HIGH + + The organization: + + AU-2a. + Determines that the information system is capable of auditing the following events: [Assignment: organization-defined auditable events]; + + + AU-2b. + Coordinates the security audit function with other organizational entities requiring audit-related information to enhance mutual support and to help guide the selection of auditable events; + + + AU-2c. + Provides a rationale for why the auditable events are deemed to be adequate to support after-the-fact investigations of security incidents; and + + + AU-2d. + Determines that the following events are to be audited within the information system: [Assignment: organization-defined audited events (the subset of the auditable events defined in AU-2 a.) along with the frequency of (or situation requiring) auditing for each identified event]. + + + + An event is any observable occurrence in an organizational information system. Organizations identify audit events as those events which are significant and relevant to the security of information systems and the environments in which those systems operate in order to meet specific and ongoing audit needs. Audit events can include, for example, password changes, failed logons, or failed accesses related to information systems, administrative privilege usage, PIV credential usage, or third-party credential usage. In determining the set of auditable events, organizations consider the auditing appropriate for each of the security controls to be implemented. To balance auditing requirements with other information system needs, this control also requires identifying that subset of auditable events that are audited at a given point in time. For example, organizations may determine that information systems must have the capability to log every file access both successful and unsuccessful, but not activate that capability except for specific circumstances due to the potential burden on system performance. Auditing requirements, including the need for auditable events, may be referenced in other security controls and control enhancements. Organizations also include auditable events that are required by applicable federal laws, Executive Orders, directives, policies, regulations, and standards. Audit records can be generated at various levels of abstraction, including at the packet level as information traverses the network. Selecting the appropriate level of abstraction is a critical aspect of an audit capability and can facilitate the identification of root causes to problems. Organizations consider in the definition of auditable events, the auditing necessary to cover related events such as the steps in distributed, transaction-based processes (e.g., processes that are distributed across multiple organizations) and actions that occur in service-oriented architectures. + AC-6 + AC-17 + AU-3 + AU-12 + MA-4 + MP-2 + MP-4 + SI-4 + + + + AU-2 (1) + COMPILATION OF AUDIT RECORDS FROM MULTIPLE SOURCES + + AU-12 + + + [Withdrawn: Incorporated into AU-12]. + + + + AU-2 (2) + SELECTION OF AUDIT EVENTS BY COMPONENT + + AU-12 + + + [Withdrawn: Incorporated into AU-12]. + + + + AU-2 (3) + REVIEWS AND UPDATES + MODERATE + HIGH + + The organization reviews and updates the audited events [Assignment: organization-defined frequency]. + + + Over time, the events that organizations believe should be audited may change. Reviewing and updating the set of audited events periodically is necessary to ensure that the current set is still necessary and sufficient. + + + + AU-2 (4) + PRIVILEGED FUNCTIONS + + AC-6 (9) + + + [Withdrawn: Incorporated into AC-6 (9)]. + + + + + + NIST Special Publication 800-92 + + + http://idmanagement.gov + + + + + AUDIT AND ACCOUNTABILITY + AU-3 + CONTENT OF AUDIT RECORDS + P1 + LOW + MODERATE + HIGH + + The information system generates audit records containing information that establishes what type of event occurred, when the event occurred, where the event occurred, the source of the event, the outcome of the event, and the identity of any individuals or subjects associated with the event. + + + Audit record content that may be necessary to satisfy the requirement of this control, includes, for example, time stamps, source and destination addresses, user/process identifiers, event descriptions, success/fail indications, filenames involved, and access control or flow control rules invoked. Event outcomes can include indicators of event success or failure and event-specific results (e.g., the security state of the information system after the event occurred). + AU-2 + AU-8 + AU-12 + SI-11 + + + + AU-3 (1) + ADDITIONAL AUDIT INFORMATION + MODERATE + HIGH + + The information system generates audit records containing the following additional information: [Assignment: organization-defined additional, more detailed information]. + + + Detailed information that organizations may consider in audit records includes, for example, full text recording of privileged commands or the individual identities of group account users. Organizations consider limiting the additional audit information to only that information explicitly needed for specific audit requirements. This facilitates the use of audit trails and audit logs by not including information that could potentially be misleading or could make it more difficult to locate information of interest. + + + + AU-3 (2) + CENTRALIZED MANAGEMENT OF PLANNED AUDIT RECORD CONTENT + HIGH + + The information system provides centralized management and configuration of the content to be captured in audit records generated by [Assignment: organization-defined information system components]. + + + This control enhancement requires that the content to be captured in audit records be configured from a central location (necessitating automation). Organizations coordinate the selection of required audit content to support the centralized management and configuration capability provided by the information system. + AU-6 + AU-7 + + + + + + AUDIT AND ACCOUNTABILITY + AU-4 + AUDIT STORAGE CAPACITY + P1 + LOW + MODERATE + HIGH + + The organization allocates audit record storage capacity in accordance with [Assignment: organization-defined audit record storage requirements]. + + + Organizations consider the types of auditing to be performed and the audit processing requirements when allocating audit storage capacity. Allocating sufficient audit storage capacity reduces the likelihood of such capacity being exceeded and resulting in the potential loss or reduction of auditing capability. + AU-2 + AU-5 + AU-6 + AU-7 + AU-11 + SI-4 + + + + AU-4 (1) + TRANSFER TO ALTERNATE STORAGE + + The information system off-loads audit records [Assignment: organization-defined frequency] onto a different system or media than the system being audited. + + + Off-loading is a process designed to preserve the confidentiality and integrity of audit records by moving the records from the primary information system to a secondary or alternate system. It is a common process in information systems with limited audit storage capacity; the audit storage is used only in a transitory fashion until the system can communicate with the secondary or alternate system designated for storing the audit records, at which point the information is transferred. + + + + + + AUDIT AND ACCOUNTABILITY + AU-5 + RESPONSE TO AUDIT PROCESSING FAILURES + P1 + LOW + MODERATE + HIGH + + The information system: + + AU-5a. + Alerts [Assignment: organization-defined personnel or roles] in the event of an audit processing failure; and + + + AU-5b. + Takes the following additional actions: [Assignment: organization-defined actions to be taken (e.g., shut down information system, overwrite oldest audit records, stop generating audit records)]. + + + + Audit processing failures include, for example, software/hardware errors, failures in the audit capturing mechanisms, and audit storage capacity being reached or exceeded. Organizations may choose to define additional actions for different audit processing failures (e.g., by type, by location, by severity, or a combination of such factors). This control applies to each audit data storage repository (i.e., distinct information system component where audit records are stored), the total audit storage capacity of organizations (i.e., all audit data storage repositories combined), or both. + AU-4 + SI-12 + + + + AU-5 (1) + AUDIT STORAGE CAPACITY + HIGH + + The information system provides a warning to [Assignment: organization-defined personnel, roles, and/or locations] within [Assignment: organization-defined time period] when allocated audit record storage volume reaches [Assignment: organization-defined percentage] of repository maximum audit record storage capacity. + + + Organizations may have multiple audit data storage repositories distributed across multiple information system components, with each repository having different storage volume capacities. + + + + AU-5 (2) + REAL-TIME ALERTS + HIGH + + The information system provides an alert in [Assignment: organization-defined real-time period] to [Assignment: organization-defined personnel, roles, and/or locations] when the following audit failure events occur: [Assignment: organization-defined audit failure events requiring real-time alerts]. + + + Alerts provide organizations with urgent messages. Real-time alerts provide these messages at information technology speed (i.e., the time from event detection to alert occurs in seconds or less). + + + + AU-5 (3) + CONFIGURABLE TRAFFIC VOLUME THRESHOLDS + + The information system enforces configurable network communications traffic volume thresholds reflecting limits on auditing capacity and [Selection: rejects; delays] network traffic above those thresholds. + + + Organizations have the capability to reject or delay the processing of network communications traffic if auditing such traffic is determined to exceed the storage capacity of the information system audit function. The rejection or delay response is triggered by the established organizational traffic volume thresholds which can be adjusted based on changes to audit storage capacity. + + + + AU-5 (4) + SHUTDOWN ON FAILURE + + The information system invokes a [Selection: full system shutdown; partial system shutdown; degraded operational mode with limited mission/business functionality available] in the event of [Assignment: organization-defined audit failures], unless an alternate audit capability exists. + + + Organizations determine the types of audit failures that can trigger automatic information system shutdowns or degraded operations. Because of the importance of ensuring mission/business continuity, organizations may determine that the nature of the audit failure is not so severe that it warrants a complete shutdown of the information system supporting the core organizational missions/business operations. In those instances, partial information system shutdowns or operating in a degraded mode with reduced capability may be viable alternatives. + AU-15 + + + + + + AUDIT AND ACCOUNTABILITY + AU-6 + AUDIT REVIEW, ANALYSIS, AND REPORTING + P1 + LOW + MODERATE + HIGH + + The organization: + + AU-6a. + Reviews and analyzes information system audit records [Assignment: organization-defined frequency] for indications of [Assignment: organization-defined inappropriate or unusual activity]; and + + + AU-6b. + Reports findings to [Assignment: organization-defined personnel or roles]. + + + + Audit review, analysis, and reporting covers information security-related auditing performed by organizations including, for example, auditing that results from monitoring of account usage, remote access, wireless connectivity, mobile device connection, configuration settings, system component inventory, use of maintenance tools and nonlocal maintenance, physical access, temperature and humidity, equipment delivery and removal, communications at the information system boundaries, use of mobile code, and use of VoIP. Findings can be reported to organizational entities that include, for example, incident response team, help desk, information security group/department. If organizations are prohibited from reviewing and analyzing audit information or unable to conduct such activities (e.g., in certain national security applications or systems), the review/analysis may be carried out by other organizations granted such authority. + AC-2 + AC-3 + AC-6 + AC-17 + AT-3 + AU-7 + AU-16 + CA-7 + CM-5 + CM-10 + CM-11 + IA-3 + IA-5 + IR-5 + IR-6 + MA-4 + MP-4 + PE-3 + PE-6 + PE-14 + PE-16 + RA-5 + SC-7 + SC-18 + SC-19 + SI-3 + SI-4 + SI-7 + + + + AU-6 (1) + PROCESS INTEGRATION + MODERATE + HIGH + + The organization employs automated mechanisms to integrate audit review, analysis, and reporting processes to support organizational processes for investigation and response to suspicious activities. + + + Organizational processes benefiting from integrated audit review, analysis, and reporting include, for example, incident response, continuous monitoring, contingency planning, and Inspector General audits. + AU-12 + PM-7 + + + + AU-6 (2) + AUTOMATED SECURITY ALERTS + + SI-4 + + + [Withdrawn: Incorporated into SI-4]. + + + + AU-6 (3) + CORRELATE AUDIT REPOSITORIES + MODERATE + HIGH + + The organization analyzes and correlates audit records across different repositories to gain organization-wide situational awareness. + + + Organization-wide situational awareness includes awareness across all three tiers of risk management (i.e., organizational, mission/business process, and information system) and supports cross-organization awareness. + AU-12 + IR-4 + + + + AU-6 (4) + CENTRAL REVIEW AND ANALYSIS + + The information system provides the capability to centrally review and analyze audit records from multiple components within the system. + + + Automated mechanisms for centralized reviews and analyses include, for example, Security Information Management products. + AU-2 + AU-12 + + + + AU-6 (5) + INTEGRATION / SCANNING AND MONITORING CAPABILITIES + HIGH + + The organization integrates analysis of audit records with analysis of [Selection (one or more): vulnerability scanning information; performance data; information system monitoring information; [Assignment: organization-defined data/information collected from other sources]] to further enhance the ability to identify inappropriate or unusual activity. + + + This control enhancement does not require vulnerability scanning, the generation of performance data, or information system monitoring. Rather, the enhancement requires that the analysis of information being otherwise produced in these areas is integrated with the analysis of audit information. Security Event and Information Management System tools can facilitate audit record aggregation/consolidation from multiple information system components as well as audit record correlation and analysis. The use of standardized audit record analysis scripts developed by organizations (with localized script adjustments, as necessary) provides more cost-effective approaches for analyzing audit record information collected. The correlation of audit record information with vulnerability scanning information is important in determining the veracity of vulnerability scans and correlating attack detection events with scanning results. Correlation with performance data can help uncover denial of service attacks or cyber attacks resulting in unauthorized use of resources. Correlation with system monitoring information can assist in uncovering attacks and in better relating audit information to operational situations. + AU-12 + IR-4 + RA-5 + + + + AU-6 (6) + CORRELATION WITH PHYSICAL MONITORING + HIGH + + The organization correlates information from audit records with information obtained from monitoring physical access to further enhance the ability to identify suspicious, inappropriate, unusual, or malevolent activity. + + + The correlation of physical audit information and audit logs from information systems may assist organizations in identifying examples of suspicious behavior or supporting evidence of such behavior. For example, the correlation of an individual�s identity for logical access to certain information systems with the additional physical security information that the individual was actually present at the facility when the logical access occurred, may prove to be useful in investigations. + + + + AU-6 (7) + PERMITTED ACTIONS + + The organization specifies the permitted actions for each [Selection (one or more): information system process; role; user] associated with the review, analysis, and reporting of audit information. + + + Organizations specify permitted actions for information system processes, roles, and/or users associated with the review, analysis, and reporting of audit records through account management techniques. Specifying permitted actions on audit information is a way to enforce the principle of least privilege. Permitted actions are enforced by the information system and include, for example, read, write, execute, append, and delete. + + + + AU-6 (8) + FULL TEXT ANALYSIS OF PRIVILEGED COMMANDS + + The organization performs a full text analysis of audited privileged commands in a physically distinct component or subsystem of the information system, or other information system that is dedicated to that analysis. + + + This control enhancement requires a distinct environment for the dedicated analysis of audit information related to privileged users without compromising such information on the information system where the users have elevated privileges including the capability to execute privileged commands. Full text analysis refers to analysis that considers the full text of privileged commands (i.e., commands and all parameters) as opposed to analysis that considers only the name of the command. Full text analysis includes, for example, the use of pattern matching and heuristics. + AU-3 + AU-9 + AU-11 + AU-12 + + + + AU-6 (9) + CORRELATION WITH INFORMATION FROM NONTECHNICAL SOURCES + + The organization correlates information from nontechnical sources with audit information to enhance organization-wide situational awareness. + + + Nontechnical sources include, for example, human resources records documenting organizational policy violations (e.g., sexual harassment incidents, improper use of organizational information assets). Such information can lead organizations to a more directed analytical effort to detect potential malicious insider activity. Due to the sensitive nature of the information available from nontechnical sources, organizations limit access to such information to minimize the potential for the inadvertent release of privacy-related information to individuals that do not have a need to know. Thus, correlation of information from nontechnical sources with audit information generally occurs only when individuals are suspected of being involved in a security incident. Organizations obtain legal advice prior to initiating such actions. + AT-2 + + + + AU-6 (10) + AUDIT LEVEL ADJUSTMENT + + The organization adjusts the level of audit review, analysis, and reporting within the information system when there is a change in risk based on law enforcement information, intelligence information, or other credible sources of information. + + + The frequency, scope, and/or depth of the audit review, analysis, and reporting may be adjusted to meet organizational needs based on new information received. + + + + + + AUDIT AND ACCOUNTABILITY + AU-7 + AUDIT REDUCTION AND REPORT GENERATION + P2 + MODERATE + HIGH + + The information system provides an audit reduction and report generation capability that: + + AU-7a. + Supports on-demand audit review, analysis, and reporting requirements and after-the-fact investigations of security incidents; and + + + AU-7b. + Does not alter the original content or time ordering of audit records. + + + + Audit reduction is a process that manipulates collected audit information and organizes such information in a summary format that is more meaningful to analysts. Audit reduction and report generation capabilities do not always emanate from the same information system or from the same organizational entities conducting auditing activities. Audit reduction capability can include, for example, modern data mining techniques with advanced data filters to identify anomalous behavior in audit records. The report generation capability provided by the information system can generate customizable reports. Time ordering of audit records can be a significant issue if the granularity of the timestamp in the record is insufficient. + AU-6 + + + + AU-7 (1) + AUTOMATIC PROCESSING + MODERATE + HIGH + + The information system provides the capability to process audit records for events of interest based on [Assignment: organization-defined audit fields within audit records]. + + + Events of interest can be identified by the content of specific audit record fields including, for example, identities of individuals, event types, event locations, event times, event dates, system resources involved, IP addresses involved, or information objects accessed. Organizations may define audit event criteria to any degree of granularity required, for example, locations selectable by general networking location (e.g., by network or subnetwork) or selectable by specific information system component. + AU-2 + AU-12 + + + + AU-7 (2) + AUTOMATIC SORT AND SEARCH + + The information system provides the capability to sort and search audit records for events of interest based on the content of [Assignment: organization-defined audit fields within audit records]. + + + Sorting and searching of audit records may be based upon the contents of audit record fields, for example: (i) date/time of events; (ii) user identifiers; (iii) Internet Protocol (IP) addresses involved in the event; (iv) type of event; or (v) event success/failure. + + + + + + AUDIT AND ACCOUNTABILITY + AU-8 + TIME STAMPS + P1 + LOW + MODERATE + HIGH + + The information system: + + AU-8a. + Uses internal system clocks to generate time stamps for audit records; and + + + AU-8b. + Records time stamps for audit records that can be mapped to Coordinated Universal Time (UTC) or Greenwich Mean Time (GMT) and meets [Assignment: organization-defined granularity of time measurement]. + + + + Time stamps generated by the information system include date and time. Time is commonly expressed in Coordinated Universal Time (UTC), a modern continuation of Greenwich Mean Time (GMT), or local time with an offset from UTC. Granularity of time measurements refers to the degree of synchronization between information system clocks and reference clocks, for example, clocks synchronizing within hundreds of milliseconds or within tens of milliseconds. Organizations may define different time granularities for different system components. Time service can also be critical to other security capabilities such as access control and identification and authentication, depending on the nature of the mechanisms used to support those capabilities. + AU-3 + AU-12 + + + + AU-8 (1) + SYNCHRONIZATION WITH AUTHORITATIVE TIME SOURCE + MODERATE + HIGH + + The information system: + + AU-8 (1)(a) + Compares the internal information system clocks [Assignment: organization-defined frequency] with [Assignment: organization-defined authoritative time source]; and + + + AU-8 (1)(b) + Synchronizes the internal system clocks to the authoritative time source when the time difference is greater than [Assignment: organization-defined time period]. + + + + This control enhancement provides uniformity of time stamps for information systems with multiple system clocks and systems connected over a network. + + + + AU-8 (2) + SECONDARY AUTHORITATIVE TIME SOURCE + + The information system identifies a secondary authoritative time source that is located in a different geographic region than the primary authoritative time source. + + + + + + AUDIT AND ACCOUNTABILITY + AU-9 + PROTECTION OF AUDIT INFORMATION + P1 + LOW + MODERATE + HIGH + + The information system protects audit information and audit tools from unauthorized access, modification, and deletion. + + + Audit information includes all information (e.g., audit records, audit settings, and audit reports) needed to successfully audit information system activity. This control focuses on technical protection of audit information. Physical protection of audit information is addressed by media protection controls and physical and environmental protection controls. + AC-3 + AC-6 + MP-2 + MP-4 + PE-2 + PE-3 + PE-6 + + + + AU-9 (1) + HARDWARE WRITE-ONCE MEDIA + + The information system writes audit trails to hardware-enforced, write-once media. + + + This control enhancement applies to the initial generation of audit trails (i.e., the collection of audit records that represents the audit information to be used for detection, analysis, and reporting purposes) and to the backup of those audit trails. The enhancement does not apply to the initial generation of audit records prior to being written to an audit trail. Write-once, read-many (WORM) media includes, for example, Compact Disk-Recordable (CD-R) and Digital Video Disk-Recordable (DVD-R). In contrast, the use of switchable write-protection media such as on tape cartridges or Universal Serial Bus (USB) drives results in write-protected, but not write-once, media. + AU-4 + AU-5 + + + + AU-9 (2) + AUDIT BACKUP ON SEPARATE PHYSICAL SYSTEMS / COMPONENTS + HIGH + + The information system backs up audit records [Assignment: organization-defined frequency] onto a physically different system or system component than the system or component being audited. + + + This control enhancement helps to ensure that a compromise of the information system being audited does not also result in a compromise of the audit records. + AU-4 + AU-5 + AU-11 + + + + AU-9 (3) + CRYPTOGRAPHIC PROTECTION + HIGH + + The information system implements cryptographic mechanisms to protect the integrity of audit information and audit tools. + + + Cryptographic mechanisms used for protecting the integrity of audit information include, for example, signed hash functions using asymmetric cryptography enabling distribution of the public key to verify the hash information while maintaining the confidentiality of the secret key used to generate the hash. + AU-10 + SC-12 + SC-13 + + + + AU-9 (4) + ACCESS BY SUBSET OF PRIVILEGED USERS + MODERATE + HIGH + + The organization authorizes access to management of audit functionality to only [Assignment: organization-defined subset of privileged users]. + + + Individuals with privileged access to an information system and who are also the subject of an audit by that system, may affect the reliability of audit information by inhibiting audit activities or modifying audit records. This control enhancement requires that privileged access be further defined between audit-related privileges and other privileges, thus limiting the users with audit-related privileges. + AC-5 + + + + AU-9 (5) + DUAL AUTHORIZATION + + The organization enforces dual authorization for [Selection (one or more): movement; deletion] of [Assignment: organization-defined audit information]. + + + Organizations may choose different selection options for different types of audit information. Dual authorization mechanisms require the approval of two authorized individuals in order to execute. Dual authorization may also be known as two-person control. + AC-3 + MP-2 + + + + AU-9 (6) + READ ONLY ACCESS + + The organization authorizes read-only access to audit information to [Assignment: organization-defined subset of privileged users]. + + + Restricting privileged user authorizations to read-only helps to limit the potential damage to organizations that could be initiated by such users (e.g., deleting audit records to cover up malicious activity). + + + + + + AUDIT AND ACCOUNTABILITY + AU-10 + NON-REPUDIATION + P2 + HIGH + + The information system protects against an individual (or process acting on behalf of an individual) falsely denying having performed [Assignment: organization-defined actions to be covered by non-repudiation]. + + + Types of individual actions covered by non-repudiation include, for example, creating information, sending and receiving messages, approving information (e.g., indicating concurrence or signing a contract). Non-repudiation protects individuals against later claims by: (i) authors of not having authored particular documents; (ii) senders of not having transmitted messages; (iii) receivers of not having received messages; or (iv) signatories of not having signed documents. Non-repudiation services can be used to determine if information originated from a particular individual, or if an individual took specific actions (e.g., sending an email, signing a contract, approving a procurement request) or received specific information. Organizations obtain non-repudiation services by employing various techniques or mechanisms (e.g., digital signatures, digital message receipts). + SC-12 + SC-8 + SC-13 + SC-16 + SC-17 + SC-23 + + + + AU-10 (1) + ASSOCIATION OF IDENTITIES + + The information system: + + AU-10 (1)(a) + Binds the identity of the information producer with the information to [Assignment: organization-defined strength of binding]; and + + + AU-10 (1)(b) + Provides the means for authorized individuals to determine the identity of the producer of the information. + + + + This control enhancement supports audit requirements that provide organizational personnel with the means to identify who produced specific information in the event of an information transfer. Organizations determine and approve the strength of the binding between the information producer and the information based on the security category of the information and relevant risk factors. + AC-4 + AC-16 + + + + AU-10 (2) + VALIDATE BINDING OF INFORMATION PRODUCER IDENTITY + + The information system: + + AU-10 (2)(a) + Validates the binding of the information producer identity to the information at [Assignment: organization-defined frequency]; and + + + AU-10 (2)(b) + Performs [Assignment: organization-defined actions] in the event of a validation error. + + + + This control enhancement prevents the modification of information between production and review. The validation of bindings can be achieved, for example, by the use of cryptographic checksums. Organizations determine if validations are in response to user requests or generated automatically. + AC-3 + AC-4 + AC-16 + + + + AU-10 (3) + CHAIN OF CUSTODY + + The information system maintains reviewer/releaser identity and credentials within the established chain of custody for all information reviewed or released. + + + Chain of custody is a process that tracks the movement of evidence through its collection, safeguarding, and analysis life cycle by documenting each person who handled the evidence, the date and time it was collected or transferred, and the purpose for the transfer. If the reviewer is a human or if the review function is automated but separate from the release/transfer function, the information system associates the identity of the reviewer of the information to be released with the information and the information label. In the case of human reviews, this control enhancement provides organizational officials the means to identify who reviewed and released the information. In the case of automated reviews, this control enhancement ensures that only approved review functions are employed. + AC-4 + AC-16 + + + + AU-10 (4) + VALIDATE BINDING OF INFORMATION REVIEWER IDENTITY + + The information system: + + AU-10 (4)(a) + Validates the binding of the information reviewer identity to the information at the transfer or release points prior to release/transfer between [Assignment: organization-defined security domains]; and + + + AU-10 (4)(b) + Performs [Assignment: organization-defined actions] in the event of a validation error. + + + + This control enhancement prevents the modification of information between review and transfer/release. The validation of bindings can be achieved, for example, by the use of cryptographic checksums. Organizations determine validations are in response to user requests or generated automatically. + AC-4 + AC-16 + + + + AU-10 (5) + DIGITAL SIGNATURES + + SI-7 + + + [Withdrawn: Incorporated into SI-7]. + + + + + + AUDIT AND ACCOUNTABILITY + AU-11 + AUDIT RECORD RETENTION + P3 + LOW + MODERATE + HIGH + + The organization retains audit records for [Assignment: organization-defined time period consistent with records retention policy] to provide support for after-the-fact investigations of security incidents and to meet regulatory and organizational information retention requirements. + + + Organizations retain audit records until it is determined that they are no longer needed for administrative, legal, audit, or other operational purposes. This includes, for example, retention and availability of audit records relative to Freedom of Information Act (FOIA) requests, subpoenas, and law enforcement actions. Organizations develop standard categories of audit records relative to such types of actions and standard response processes for each type of action. The National Archives and Records Administration (NARA) General Records Schedules provide federal policy on record retention. + AU-4 + AU-5 + AU-9 + MP-6 + + + + AU-11 (1) + LONG-TERM RETRIEVAL CAPABILITY + + The organization employs [Assignment: organization-defined measures] to ensure that long-term audit records generated by the information system can be retrieved. + + + Measures employed by organizations to help facilitate the retrieval of audit records include, for example, converting records to newer formats, retaining equipment capable of reading the records, and retaining necessary documentation to help organizational personnel understand how to interpret the records. + + + + + + AUDIT AND ACCOUNTABILITY + AU-12 + AUDIT GENERATION + P1 + LOW + MODERATE + HIGH + + The information system: + + AU-12a. + Provides audit record generation capability for the auditable events defined in AU-2 a. at [Assignment: organization-defined information system components]; + + + AU-12b. + Allows [Assignment: organization-defined personnel or roles] to select which auditable events are to be audited by specific components of the information system; and + + + AU-12c. + Generates audit records for the events defined in AU-2 d. with the content defined in AU-3. + + + + Audit records can be generated from many different information system components. The list of audited events is the set of events for which audits are to be generated. These events are typically a subset of all events for which the information system is capable of generating audit records. + AC-3 + AU-2 + AU-3 + AU-6 + AU-7 + + + + AU-12 (1) + SYSTEM-WIDE / TIME-CORRELATED AUDIT TRAIL + HIGH + + The information system compiles audit records from [Assignment: organization-defined information system components] into a system-wide (logical or physical) audit trail that is time-correlated to within [Assignment: organization-defined level of tolerance for the relationship between time stamps of individual records in the audit trail]. + + + Audit trails are time-correlated if the time stamps in the individual audit records can be reliably related to the time stamps in other audit records to achieve a time ordering of the records within organizational tolerances. + AU-8 + AU-12 + + + + AU-12 (2) + STANDARDIZED FORMATS + + The information system produces a system-wide (logical or physical) audit trail composed of audit records in a standardized format. + + + Audit information that is normalized to common standards promotes interoperability and exchange of such information between dissimilar devices and information systems. This facilitates production of event information that can be more readily analyzed and correlated. Standard formats for audit records include, for example, system log records and audit records compliant with Common Event Expressions (CEE). If logging mechanisms within information systems do not conform to standardized formats, systems may convert individual audit records into standardized formats when compiling system-wide audit trails. + + + + AU-12 (3) + CHANGES BY AUTHORIZED INDIVIDUALS + HIGH + + The information system provides the capability for [Assignment: organization-defined individuals or roles] to change the auditing to be performed on [Assignment: organization-defined information system components] based on [Assignment: organization-defined selectable event criteria] within [Assignment: organization-defined time thresholds]. + + + This control enhancement enables organizations to extend or limit auditing as necessary to meet organizational requirements. Auditing that is limited to conserve information system resources may be extended to address certain threat situations. In addition, auditing may be limited to a specific set of events to facilitate audit reduction, analysis, and reporting. Organizations can establish time thresholds in which audit actions are changed, for example, near real-time, within minutes, or within hours. + AU-7 + + + + + + AUDIT AND ACCOUNTABILITY + AU-13 + MONITORING FOR INFORMATION DISCLOSURE + P0 + + The organization monitors [Assignment: organization-defined open source information and/or information sites] [Assignment: organization-defined frequency] for evidence of unauthorized disclosure of organizational information. + + + Open source information includes, for example, social networking sites. + PE-3 + SC-7 + + + + AU-13 (1) + USE OF AUTOMATED TOOLS + + The organization employs automated mechanisms to determine if organizational information has been disclosed in an unauthorized manner. + + + Automated mechanisms can include, for example, automated scripts to monitor new posts on selected websites, and commercial services providing notifications and alerts to organizations. + + + + AU-13 (2) + REVIEW OF MONITORED SITES + + The organization reviews the open source information sites being monitored [Assignment: organization-defined frequency]. + + + + + + AUDIT AND ACCOUNTABILITY + AU-14 + SESSION AUDIT + P0 + + The information system provides the capability for authorized users to select a user session to capture/record or view/hear. + + + Session audits include, for example, monitoring keystrokes, tracking websites visited, and recording information and/or file transfers. Session auditing activities are developed, integrated, and used in consultation with legal counsel in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, or standards. + AC-3 + AU-4 + AU-5 + AU-9 + AU-11 + + + + AU-14 (1) + SYSTEM START-UP + + The information system initiates session audits at system start-up. + + + + AU-14 (2) + CAPTURE/RECORD AND LOG CONTENT + + The information system provides the capability for authorized users to capture/record and log content related to a user session. + + + + AU-14 (3) + REMOTE VIEWING / LISTENING + + The information system provides the capability for authorized users to remotely view/hear all content related to an established user session in real time. + + + + + + AUDIT AND ACCOUNTABILITY + AU-15 + ALTERNATE AUDIT CAPABILITY + P0 + + The organization provides an alternate audit capability in the event of a failure in primary audit capability that provides [Assignment: organization-defined alternate audit functionality]. + + + Since an alternate audit capability may be a short-term protection employed until the failure in the primary auditing capability is corrected, organizations may determine that the alternate audit capability need only provide a subset of the primary audit functionality that is impacted by the failure. + AU-5 + + + + AUDIT AND ACCOUNTABILITY + AU-16 + CROSS-ORGANIZATIONAL AUDITING + P0 + + The organization employs [Assignment: organization-defined methods] for coordinating [Assignment: organization-defined audit information] among external organizations when audit information is transmitted across organizational boundaries. + + + When organizations use information systems and/or services of external organizations, the auditing capability necessitates a coordinated approach across organizations. For example, maintaining the identity of individuals that requested particular services across organizational boundaries may often be very difficult, and doing so may prove to have significant performance ramifications. Therefore, it is often the case that cross-organizational auditing (e.g., the type of auditing capability provided by service-oriented architectures) simply captures the identity of individuals issuing requests at the initial information system, and subsequent systems record that the requests emanated from authorized individuals. + AU-6 + + + + AU-16 (1) + IDENTITY PRESERVATION + + The organization requires that the identity of individuals be preserved in cross-organizational audit trails. + + + This control enhancement applies when there is a need to be able to trace actions that are performed across organizational boundaries to a specific individual. + + + + AU-16 (2) + SHARING OF AUDIT INFORMATION + + The organization provides cross-organizational audit information to [Assignment: organization-defined organizations] based on [Assignment: organization-defined cross-organizational sharing agreements]. + + + Because of the distributed nature of the audit information, cross-organization sharing of audit information may be essential for effective analysis of the auditing being performed. For example, the audit records of one organization may not provide sufficient information to determine the appropriate or inappropriate use of organizational information resources by individuals in other organizations. In some instances, only the home organizations of individuals have the appropriate knowledge to make such determinations, thus requiring the sharing of audit information among organizations. + + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-1 + SECURITY ASSESSMENT AND AUTHORIZATION POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + CA-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + CA-1a.1. + A security assessment and authorization policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + CA-1a.2. + Procedures to facilitate the implementation of the security assessment and authorization policy and associated security assessment and authorization controls; and + + + + CA-1b. + Reviews and updates the current: + + CA-1b.1. + Security assessment and authorization policy [Assignment: organization-defined frequency]; and + + + CA-1b.2. + Security assessment and authorization procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the CA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-53A + + + NIST Special Publication 800-100 + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-2 + SECURITY ASSESSMENTS + P2 + LOW + MODERATE + HIGH + + The organization: + + CA-2a. + Develops a security assessment plan that describes the scope of the assessment including: + + CA-2a.1. + Security controls and control enhancements under assessment; + + + CA-2a.2. + Assessment procedures to be used to determine security control effectiveness; and + + + CA-2a.3. + Assessment environment, assessment team, and assessment roles and responsibilities; + + + + CA-2b. + Assesses the security controls in the information system and its environment of operation [Assignment: organization-defined frequency] to determine the extent to which the controls are implemented correctly, operating as intended, and producing the desired outcome with respect to meeting established security requirements; + + + CA-2c. + Produces a security assessment report that documents the results of the assessment; and + + + CA-2d. + Provides the results of the security control assessment to [Assignment: organization-defined individuals or roles]. + + + + Organizations assess security controls in organizational information systems and the environments in which those systems operate as part of: (i) initial and ongoing security authorizations; (ii) FISMA annual assessments; (iii) continuous monitoring; and (iv) system development life cycle activities. Security assessments: (i) ensure that information security is built into organizational information systems; (ii) identify weaknesses and deficiencies early in the development process; (iii) provide essential information needed to make risk-based decisions as part of security authorization processes; and (iv) ensure compliance to vulnerability mitigation procedures. Assessments are conducted on the implemented security controls from Appendix F (main catalog) and Appendix G (Program Management controls) as documented in System Security Plans and Information Security Program Plans. Organizations can use other types of assessment activities such as vulnerability scanning and system monitoring to maintain the security posture of information systems during the entire life cycle. Security assessment reports document assessment results in sufficient detail as deemed necessary by organizations, to determine the accuracy and completeness of the reports and whether the security controls are implemented correctly, operating as intended, and producing the desired outcome with respect to meeting security requirements. The FISMA requirement for assessing security controls at least annually does not require additional assessment activities to those activities already in place in organizational security authorization processes. Security assessment results are provided to the individuals or roles appropriate for the types of assessments being conducted. For example, assessments conducted in support of security authorization decisions are provided to authorizing officials or authorizing official designated representatives. +To satisfy annual assessment requirements, organizations can use assessment results from the following sources: (i) initial or ongoing information system authorizations; (ii) continuous monitoring; or (iii) system development life cycle activities. Organizations ensure that security assessment results are current, relevant to the determination of security control effectiveness, and obtained with the appropriate level of assessor independence. Existing security control assessment results can be reused to the extent that the results are still valid and can also be supplemented with additional assessments as needed. Subsequent to initial authorizations and in accordance with OMB policy, organizations assess security controls during continuous monitoring. Organizations establish the frequency for ongoing security control assessments in accordance with organizational continuous monitoring strategies. Information Assurance Vulnerability Alerts provide useful examples of vulnerability mitigation procedures. External audits (e.g., audits by external entities such as regulatory agencies) are outside the scope of this control. + CA-5 + CA-6 + CA-7 + PM-9 + RA-5 + SA-11 + SA-12 + SI-4 + + + + CA-2 (1) + INDEPENDENT ASSESSORS + MODERATE + HIGH + + The organization employs assessors or assessment teams with [Assignment: organization-defined level of independence] to conduct security control assessments. + + + Independent assessors or assessment teams are individuals or groups who conduct impartial assessments of organizational information systems. Impartiality implies that assessors are free from any perceived or actual conflicts of interest with regard to the development, operation, or management of the organizational information systems under assessment or to the determination of security control effectiveness. To achieve impartiality, assessors should not: (i) create a mutual or conflicting interest with the organizations where the assessments are being conducted; (ii) assess their own work; (iii) act as management or employees of the organizations they are serving; or (iv) place themselves in positions of advocacy for the organizations acquiring their services. Independent assessments can be obtained from elements within organizations or can be contracted to public or private sector entities outside of organizations. Authorizing officials determine the required level of independence based on the security categories of information systems and/or the ultimate risk to organizational operations, organizational assets, or individuals. Authorizing officials also determine if the level of assessor independence provides sufficient assurance that the results are sound and can be used to make credible, risk-based decisions. This includes determining whether contracted security assessment services have sufficient independence, for example, when information system owners are not directly involved in contracting processes or cannot unduly influence the impartiality of assessors conducting assessments. In special situations, for example, when organizations that own the information systems are small or organizational structures require that assessments are conducted by individuals that are in the developmental, operational, or management chain of system owners, independence in assessment processes can be achieved by ensuring that assessment results are carefully reviewed and analyzed by independent teams of experts to validate the completeness, accuracy, integrity, and reliability of the results. Organizations recognize that assessments performed for purposes other than direct support to authorization decisions are, when performed by assessors with sufficient independence, more likely to be useable for such decisions, thereby reducing the need to repeat assessments. + + + + CA-2 (2) + SPECIALIZED ASSESSMENTS + HIGH + + The organization includes as part of security control assessments, [Assignment: organization-defined frequency], [Selection: announced; unannounced], [Selection (one or more): in-depth monitoring; vulnerability scanning; malicious user testing; insider threat assessment; performance/load testing; [Assignment: organization-defined other forms of security assessment]]. + + + Organizations can employ information system monitoring, insider threat assessments, malicious user testing, and other forms of testing (e.g., verification and validation) to improve readiness by exercising organizational capabilities and indicating current performance levels as a means of focusing actions to improve security. Organizations conduct assessment activities in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards. Authorizing officials approve the assessment methods in coordination with the organizational risk executive function. Organizations can incorporate vulnerabilities uncovered during assessments into vulnerability remediation processes. + PE-3 + SI-2 + + + + CA-2 (3) + EXTERNAL ORGANIZATIONS + + The organization accepts the results of an assessment of [Assignment: organization-defined information system] performed by [Assignment: organization-defined external organization] when the assessment meets [Assignment: organization-defined requirements]. + + + Organizations may often rely on assessments of specific information systems by other (external) organizations. Utilizing such existing assessments (i.e., reusing existing assessment evidence) can significantly decrease the time and resources required for organizational assessments by limiting the amount of independent assessment activities that organizations need to perform. The factors that organizations may consider in determining whether to accept assessment results from external organizations can vary. Determinations for accepting assessment results can be based on, for example, past assessment experiences one organization has had with another organization, the reputation that organizations have with regard to assessments, the level of detail of supporting assessment documentation provided, or mandates imposed upon organizations by federal legislation, policies, or directives. + + + + + + Executive Order 13587 + + + FIPS Publication 199 + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-39 + + + NIST Special Publication 800-53A + + + NIST Special Publication 800-115 + + + NIST Special Publication 800-137 + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-3 + SYSTEM INTERCONNECTIONS + P1 + LOW + MODERATE + HIGH + + The organization: + + CA-3a. + Authorizes connections from the information system to other information systems through the use of Interconnection Security Agreements; + + + CA-3b. + Documents, for each interconnection, the interface characteristics, security requirements, and the nature of the information communicated; and + + + CA-3c. + Reviews and updates Interconnection Security Agreements [Assignment: organization-defined frequency]. + + + + This control applies to dedicated connections between information systems (i.e., system interconnections) and does not apply to transitory, user-controlled connections such as email and website browsing. Organizations carefully consider the risks that may be introduced when information systems are connected to other systems with different security requirements and security controls, both within organizations and external to organizations. Authorizing officials determine the risk associated with information system connections and the appropriate controls employed. If interconnecting systems have the same authorizing official, organizations do not need to develop Interconnection Security Agreements. Instead, organizations can describe the interface characteristics between those interconnecting systems in their respective security plans. If interconnecting systems have different authorizing officials within the same organization, organizations can either develop Interconnection Security Agreements or describe the interface characteristics between systems in the security plans for the respective systems. Organizations may also incorporate Interconnection Security Agreement information into formal contracts, especially for interconnections established between federal agencies and nonfederal (i.e., private sector) organizations. Risk considerations also include information systems sharing the same networks. For certain technologies (e.g., space, unmanned aerial vehicles, and medical devices), there may be specialized connections in place during preoperational testing. Such connections may require Interconnection Security Agreements and be subject to additional security controls. + AC-3 + AC-4 + AC-20 + AU-2 + AU-12 + AU-16 + CA-7 + IA-3 + SA-9 + SC-7 + SI-4 + + + + CA-3 (1) + UNCLASSIFIED NATIONAL SECURITY SYSTEM CONNECTIONS + + The organization prohibits the direct connection of an [Assignment: organization-defined unclassified, national security system] to an external network without the use of [Assignment: organization-defined boundary protection device]. + + + Organizations typically do not have control over external networks (e.g., the Internet). Approved boundary protection devices (e.g., routers, firewalls) mediate communications (i.e., information flows) between unclassified national security systems and external networks. This control enhancement is required for organizations processing, storing, or transmitting Controlled Unclassified Information (CUI). + + + + CA-3 (2) + CLASSIFIED NATIONAL SECURITY SYSTEM CONNECTIONS + + The organization prohibits the direct connection of a classified, national security system to an external network without the use of [Assignment: organization-defined boundary protection device]. + + + Organizations typically do not have control over external networks (e.g., the Internet). Approved boundary protection devices (e.g., routers, firewalls) mediate communications (i.e., information flows) between classified national security systems and external networks. In addition, approved boundary protection devices (typically managed interface/cross-domain systems) provide information flow enforcement from information systems to external networks. + + + + CA-3 (3) + UNCLASSIFIED NON-NATIONAL SECURITY SYSTEM CONNECTIONS + + The organization prohibits the direct connection of an [Assignment: organization-defined unclassified, non-national security system] to an external network without the use of [Assignment; organization-defined boundary protection device]. + + + Organizations typically do not have control over external networks (e.g., the Internet). Approved boundary protection devices (e.g., routers, firewalls) mediate communications (i.e., information flows) between unclassified non-national security systems and external networks. This control enhancement is required for organizations processing, storing, or transmitting Controlled Unclassified Information (CUI). + + + + CA-3 (4) + CONNECTIONS TO PUBLIC NETWORKS + + The organization prohibits the direct connection of an [Assignment: organization-defined information system] to a public network. + + + A public network is any network accessible to the general public including, for example, the Internet and organizational extranets with public access. + + + + CA-3 (5) + RESTRICTIONS ON EXTERNAL SYSTEM CONNECTIONS + MODERATE + HIGH + + The organization employs [Selection: allow-all, deny-by-exception; deny-all, permit-by-exception] policy for allowing [Assignment: organization-defined information systems] to connect to external information systems. + + + Organizations can constrain information system connectivity to external domains (e.g., websites) by employing one of two policies with regard to such connectivity: (i) allow-all, deny by exception, also known as blacklisting (the weaker of the two policies); or (ii) deny-all, allow by exception, also known as whitelisting (the stronger of the two policies). For either policy, organizations determine what exceptions, if any, are acceptable. + CM-7 + + + + + + FIPS Publication 199 + + + NIST Special Publication 800-47 + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-4 + SECURITY CERTIFICATION + + CA-2 + + + [Withdrawn: Incorporated into CA-2]. + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-5 + PLAN OF ACTION AND MILESTONES + P3 + LOW + MODERATE + HIGH + + The organization: + + CA-5a. + Develops a plan of action and milestones for the information system to document the organization�s planned remedial actions to correct weaknesses or deficiencies noted during the assessment of the security controls and to reduce or eliminate known vulnerabilities in the system; and + + + CA-5b. + Updates existing plan of action and milestones [Assignment: organization-defined frequency] based on the findings from security controls assessments, security impact analyses, and continuous monitoring activities. + + + + Plans of action and milestones are key documents in security authorization packages and are subject to federal reporting requirements established by OMB. + CA-2 + CA-7 + CM-4 + PM-4 + + + + CA-5 (1) + AUTOMATION SUPPORT FOR ACCURACY / CURRENCY + + The organization employs automated mechanisms to help ensure that the plan of action and milestones for the information system is accurate, up to date, and readily available. + + + + + + OMB Memorandum 02-01 + + + NIST Special Publication 800-37 + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-6 + SECURITY AUTHORIZATION + P2 + LOW + MODERATE + HIGH + + The organization: + + CA-6a. + Assigns a senior-level executive or manager as the authorizing official for the information system; + + + CA-6b. + Ensures that the authorizing official authorizes the information system for processing before commencing operations; and + + + CA-6c. + Updates the security authorization [Assignment: organization-defined frequency]. + + + + Security authorizations are official management decisions, conveyed through authorization decision documents, by senior organizational officials or executives (i.e., authorizing officials) to authorize operation of information systems and to explicitly accept the risk to organizational operations and assets, individuals, other organizations, and the Nation based on the implementation of agreed-upon security controls. Authorizing officials provide budgetary oversight for organizational information systems or assume responsibility for the mission/business operations supported by those systems. The security authorization process is an inherently federal responsibility and therefore, authorizing officials must be federal employees. Through the security authorization process, authorizing officials assume responsibility and are accountable for security risks associated with the operation and use of organizational information systems. Accordingly, authorizing officials are in positions with levels of authority commensurate with understanding and accepting such information security-related risks. OMB policy requires that organizations conduct ongoing authorizations of information systems by implementing continuous monitoring programs. Continuous monitoring programs can satisfy three-year reauthorization requirements, so separate reauthorization processes are not necessary. Through the employment of comprehensive continuous monitoring processes, critical information contained in authorization packages (i.e., security plans, security assessment reports, and plans of action and milestones) is updated on an ongoing basis, providing authorizing officials and information system owners with an up-to-date status of the security state of organizational information systems and environments of operation. To reduce the administrative cost of security reauthorization, authorizing officials use the results of continuous monitoring processes to the maximum extent possible as the basis for rendering reauthorization decisions. + CA-2 + CA-7 + PM-9 + PM-10 + + + + OMB Circular A-130 + + + OMB Memorandum 11-33 + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-137 + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-7 + CONTINUOUS MONITORING + P2 + LOW + MODERATE + HIGH + + The organization develops a continuous monitoring strategy and implements a continuous monitoring program that includes: + + CA-7a. + Establishment of [Assignment: organization-defined metrics] to be monitored; + + + CA-7b. + Establishment of [Assignment: organization-defined frequencies] for monitoring and [Assignment: organization-defined frequencies] for assessments supporting such monitoring; + + + CA-7c. + Ongoing security control assessments in accordance with the organizational continuous monitoring strategy; + + + CA-7d. + Ongoing security status monitoring of organization-defined metrics in accordance with the organizational continuous monitoring strategy; + + + CA-7e. + Correlation and analysis of security-related information generated by assessments and monitoring; + + + CA-7f. + Response actions to address results of the analysis of security-related information; and + + + CA-7g. + Reporting the security status of organization and the information system to [Assignment: organization-defined personnel or roles] [Assignment: organization-defined frequency]. + + + + Continuous monitoring programs facilitate ongoing awareness of threats, vulnerabilities, and information security to support organizational risk management decisions. The terms continuous and ongoing imply that organizations assess/analyze security controls and information security-related risks at a frequency sufficient to support organizational risk-based decisions. The results of continuous monitoring programs generate appropriate risk response actions by organizations. Continuous monitoring programs also allow organizations to maintain the security authorizations of information systems and common controls over time in highly dynamic environments of operation with changing mission/business needs, threats, vulnerabilities, and technologies. Having access to security-related information on a continuing basis through reports/dashboards gives organizational officials the capability to make more effective and timely risk management decisions, including ongoing security authorization decisions. Automation supports more frequent updates to security authorization packages, hardware/software/firmware inventories, and other system information. Effectiveness is further enhanced when continuous monitoring outputs are formatted to provide information that is specific, measurable, actionable, relevant, and timely. Continuous monitoring activities are scaled in accordance with the security categories of information systems. + CA-2 + CA-5 + CA-6 + CM-3 + CM-4 + PM-6 + PM-9 + RA-5 + SA-11 + SA-12 + SI-2 + SI-4 + + + + CA-7 (1) + INDEPENDENT ASSESSMENT + MODERATE + HIGH + + The organization employs assessors or assessment teams with [Assignment: organization-defined level of independence] to monitor the security controls in the information system on an ongoing basis. + + + Organizations can maximize the value of assessments of security controls during the continuous monitoring process by requiring that such assessments be conducted by assessors or assessment teams with appropriate levels of independence based on continuous monitoring strategies. Assessor independence provides a degree of impartiality to the monitoring process. To achieve such impartiality, assessors should not: (i) create a mutual or conflicting interest with the organizations where the assessments are being conducted; (ii) assess their own work; (iii) act as management or employees of the organizations they are serving; or (iv) place themselves in advocacy positions for the organizations acquiring their services. + + + + CA-7 (2) + TYPES OF ASSESSMENTS + + CA-2 + + + [Withdrawn: Incorporated into CA-2]. + + + + CA-7 (3) + TREND ANALYSES + + The organization employs trend analyses to determine if security control implementations, the frequency of continuous monitoring activities, and/or the types of activities used in the continuous monitoring process need to be modified based on empirical data. + + + Trend analyses can include, for example, examining recent threat information regarding the types of threat events that have occurred within the organization or across the federal government, success rates of certain types of cyber attacks, emerging vulnerabilities in information technologies, evolving social engineering techniques, results from multiple security control assessments, the effectiveness of configuration settings, and findings from Inspectors General or auditors. + + + + + + OMB Memorandum 11-33 + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-39 + + + NIST Special Publication 800-53A + + + NIST Special Publication 800-115 + + + NIST Special Publication 800-137 + + + US-CERT Technical Cyber Security Alerts + + + DoD Information Assurance Vulnerability Alerts + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-8 + PENETRATION TESTING + P2 + HIGH + + The organization conducts penetration testing [Assignment: organization-defined frequency] on [Assignment: organization-defined information systems or system components]. + + + Penetration testing is a specialized type of assessment conducted on information systems or individual system components to identify vulnerabilities that could be exploited by adversaries. Such testing can be used to either validate vulnerabilities or determine the degree of resistance organizational information systems have to adversaries within a set of specified constraints (e.g., time, resources, and/or skills). Penetration testing attempts to duplicate the actions of adversaries in carrying out hostile cyber attacks against organizations and provides a more in-depth analysis of security-related weaknesses/deficiencies. Organizations can also use the results of vulnerability analyses to support penetration testing activities. Penetration testing can be conducted on the hardware, software, or firmware components of an information system and can exercise both physical and technical security controls. A standard method for penetration testing includes, for example: (i) pretest analysis based on full knowledge of the target system; (ii) pretest identification of potential vulnerabilities based on pretest analysis; and (iii) testing designed to determine exploitability of identified vulnerabilities. All parties agree to the rules of engagement before the commencement of penetration testing scenarios. Organizations correlate the penetration testing rules of engagement with the tools, techniques, and procedures that are anticipated to be employed by adversaries carrying out attacks. Organizational risk assessments guide decisions on the level of independence required for personnel conducting penetration testing. + SA-12 + + + + CA-8 (1) + INDEPENDENT PENETRATION AGENT OR TEAM + + The organization employs an independent penetration agent or penetration team to perform penetration testing on the information system or system components. + + + Independent penetration agents or teams are individuals or groups who conduct impartial penetration testing of organizational information systems. Impartiality implies that penetration agents or teams are free from any perceived or actual conflicts of interest with regard to the development, operation, or management of the information systems that are the targets of the penetration testing. Supplemental guidance for CA-2 (1) provides additional information regarding independent assessments that can be applied to penetration testing. + CA-2 + + + + CA-8 (2) + RED TEAM EXERCISES + + The organization employs [Assignment: organization-defined red team exercises] to simulate attempts by adversaries to compromise organizational information systems in accordance with [Assignment: organization-defined rules of engagement]. + + + Red team exercises extend the objectives of penetration testing by examining the security posture of organizations and their ability to implement effective cyber defenses. As such, red team exercises reflect simulated adversarial attempts to compromise organizational mission/business functions and provide a comprehensive assessment of the security state of information systems and organizations. Simulated adversarial attempts to compromise organizational missions/business functions and the information systems that support those missions/functions may include technology-focused attacks (e.g., interactions with hardware, software, or firmware components and/or mission/business processes) and social engineering-based attacks (e.g., interactions via email, telephone, shoulder surfing, or personal conversations). While penetration testing may be largely laboratory-based testing, organizations use red team exercises to provide more comprehensive assessments that reflect real-world conditions. Red team exercises can be used to improve security awareness and training and to assess levels of security control effectiveness. + + + + + + SECURITY ASSESSMENT AND AUTHORIZATION + CA-9 + INTERNAL SYSTEM CONNECTIONS + P2 + LOW + MODERATE + HIGH + + The organization: + + CA-9a. + Authorizes internal connections of [Assignment: organization-defined information system components or classes of components] to the information system; and + + + CA-9b. + Documents, for each internal connection, the interface characteristics, security requirements, and the nature of the information communicated. + + + + This control applies to connections between organizational information systems and (separate) constituent system components (i.e., intra-system connections) including, for example, system connections with mobile devices, notebook/desktop computers, printers, copiers, facsimile machines, scanners, sensors, and servers. Instead of authorizing each individual internal connection, organizations can authorize internal connections for a class of components with common characteristics and/or configurations, for example, all digital printers, scanners, and copiers with a specified processing, storage, and transmission capability or all smart phones with a specific baseline configuration. + AC-3 + AC-4 + AC-18 + AC-19 + AU-2 + AU-12 + CA-7 + CM-2 + IA-3 + SC-7 + SI-4 + + + + CA-9 (1) + SECURITY COMPLIANCE CHECKS + + The information system performs security compliance checks on constituent system components prior to the establishment of the internal connection. + + + Security compliance checks may include, for example, verification of the relevant baseline configuration. + CM-6 + + + + + + CONFIGURATION MANAGEMENT + CM-1 + CONFIGURATION MANAGEMENT POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + CM-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + CM-1a.1. + A configuration management policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + CM-1a.2. + Procedures to facilitate the implementation of the configuration management policy and associated configuration management controls; and + + + + CM-1b. + Reviews and updates the current: + + CM-1b.1. + Configuration management policy [Assignment: organization-defined frequency]; and + + + CM-1b.2. + Configuration management procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the CM family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + CONFIGURATION MANAGEMENT + CM-2 + BASELINE CONFIGURATION + P1 + LOW + MODERATE + HIGH + + The organization develops, documents, and maintains under configuration control, a current baseline configuration of the information system. + + + This control establishes baseline configurations for information systems and system components including communications and connectivity-related aspects of systems. Baseline configurations are documented, formally reviewed and agreed-upon sets of specifications for information systems or configuration items within those systems. Baseline configurations serve as a basis for future builds, releases, and/or changes to information systems. Baseline configurations include information about information system components (e.g., standard software packages installed on workstations, notebook computers, servers, network components, or mobile devices; current version numbers and patch information on operating systems and applications; and configuration settings/parameters), network topology, and the logical placement of those components within the system architecture. Maintaining baseline configurations requires creating new baselines as organizational information systems change over time. Baseline configurations of information systems reflect the current enterprise architecture. + CM-3 + CM-6 + CM-8 + CM-9 + SA-10 + PM-5 + PM-7 + + + + CM-2 (1) + REVIEWS AND UPDATES + MODERATE + HIGH + + The organization reviews and updates the baseline configuration of the information system: + + CM-2 (1)(a) + [Assignment: organization-defined frequency]; + + + CM-2 (1)(b) + When required due to [Assignment organization-defined circumstances]; and + + + CM-2 (1)(c) + As an integral part of information system component installations and upgrades. + + + + CM-5 + + + + CM-2 (2) + AUTOMATION SUPPORT FOR ACCURACY / CURRENCY + HIGH + + The organization employs automated mechanisms to maintain an up-to-date, complete, accurate, and readily available baseline configuration of the information system. + + + Automated mechanisms that help organizations maintain consistent baseline configurations for information systems include, for example, hardware and software inventory tools, configuration management tools, and network management tools. Such tools can be deployed and/or allocated as common controls, at the information system level, or at the operating system or component level (e.g., on workstations, servers, notebook computers, network components, or mobile devices). Tools can be used, for example, to track version numbers on operating system applications, types of software installed, and current patch levels. This control enhancement can be satisfied by the implementation of CM-8 (2) for organizations that choose to combine information system component inventory and baseline configuration activities. + CM-7 + RA-5 + + + + CM-2 (3) + RETENTION OF PREVIOUS CONFIGURATIONS + MODERATE + HIGH + + The organization retains [Assignment: organization-defined previous versions of baseline configurations of the information system] to support rollback. + + + Retaining previous versions of baseline configurations to support rollback may include, for example, hardware, software, firmware, configuration files, and configuration records. + + + + CM-2 (4) + UNAUTHORIZED SOFTWARE + + CM-7 + + + [Withdrawn: Incorporated into CM-7]. + + + + CM-2 (5) + AUTHORIZED SOFTWARE + + CM-7 + + + [Withdrawn: Incorporated into CM-7]. + + + + CM-2 (6) + DEVELOPMENT AND TEST ENVIRONMENTS + + The organization maintains a baseline configuration for information system development and test environments that is managed separately from the operational baseline configuration. + + + Establishing separate baseline configurations for development, testing, and operational environments helps protect information systems from unplanned/unexpected events related to development and testing activities. Separate baseline configurations allow organizations to apply the configuration management that is most appropriate for each type of configuration. For example, management of operational configurations typically emphasizes the need for stability, while management of development/test configurations requires greater flexibility. Configurations in the test environment mirror the configurations in the operational environment to the extent practicable so that the results of the testing are representative of the proposed changes to the operational systems. This control enhancement requires separate configurations but not necessarily separate physical environments. + CM-4 + SC-3 + SC-7 + + + + CM-2 (7) + CONFIGURE SYSTEMS, COMPONENTS, OR DEVICES FOR HIGH-RISK AREAS + MODERATE + HIGH + + The organization: + + CM-2 (7)(a) + Issues [Assignment: organization-defined information systems, system components, or devices] with [Assignment: organization-defined configurations] to individuals traveling to locations that the organization deems to be of significant risk; and + + + CM-2 (7)(b) + Applies [Assignment: organization-defined security safeguards] to the devices when the individuals return. + + + + When it is known that information systems, system components, or devices (e.g., notebook computers, mobile devices) will be located in high-risk areas, additional security controls may be implemented to counter the greater threat in such areas coupled with the lack of physical security relative to organizational-controlled areas. For example, organizational policies and procedures for notebook computers used by individuals departing on and returning from travel include, for example, determining which locations are of concern, defining required configurations for the devices, ensuring that the devices are configured as intended before travel is initiated, and applying specific safeguards to the device after travel is completed. Specially configured notebook computers include, for example, computers with sanitized hard drives, limited applications, and additional hardening (e.g., more stringent configuration settings). Specified safeguards applied to mobile devices upon return from travel include, for example, examining the device for signs of physical tampering and purging/reimaging the hard disk drive. Protecting information residing on mobile devices is covered in the media protection family. + + + + + + NIST Special Publication 800-128 + + + + + CONFIGURATION MANAGEMENT + CM-3 + CONFIGURATION CHANGE CONTROL + P1 + MODERATE + HIGH + + The organization: + + CM-3a. + Determines the types of changes to the information system that are configuration-controlled; + + + CM-3b. + Reviews proposed configuration-controlled changes to the information system and approves or disapproves such changes with explicit consideration for security impact analyses; + + + CM-3c. + Documents configuration change decisions associated with the information system; + + + CM-3d. + Implements approved configuration-controlled changes to the information system; + + + CM-3e. + Retains records of configuration-controlled changes to the information system for [Assignment: organization-defined time period]; + + + CM-3f. + Audits and reviews activities associated with configuration-controlled changes to the information system; and + + + CM-3g. + Coordinates and provides oversight for configuration change control activities through [Assignment: organization-defined configuration change control element (e.g., committee, board)] that convenes [Selection (one or more): [Assignment: organization-defined frequency]; [Assignment: organization-defined configuration change conditions]]. + + + + Configuration change controls for organizational information systems involve the systematic proposal, justification, implementation, testing, review, and disposition of changes to the systems, including system upgrades and modifications. Configuration change control includes changes to baseline configurations for components and configuration items of information systems, changes to configuration settings for information technology products (e.g., operating systems, applications, firewalls, routers, and mobile devices), unscheduled/unauthorized changes, and changes to remediate vulnerabilities. Typical processes for managing configuration changes to information systems include, for example, Configuration Control Boards that approve proposed changes to systems. For new development information systems or systems undergoing major upgrades, organizations consider including representatives from development organizations on the Configuration Control Boards. Auditing of changes includes activities before and after changes are made to organizational information systems and the auditing activities required to implement such changes. + CA-7 + CM-2 + CM-4 + CM-5 + CM-6 + CM-9 + SA-10 + SI-2 + SI-12 + + + + CM-3 (1) + AUTOMATED DOCUMENT / NOTIFICATION / PROHIBITION OF CHANGES + HIGH + + The organization employs automated mechanisms to: + + CM-3 (1)(a) + Document proposed changes to the information system; + + + CM-3 (1)(b) + Notify [Assignment: organized-defined approval authorities] of proposed changes to the information system and request change approval; + + + CM-3 (1)(c) + Highlight proposed changes to the information system that have not been approved or disapproved by [Assignment: organization-defined time period]; + + + CM-3 (1)(d) + Prohibit changes to the information system until designated approvals are received; + + + CM-3 (1)(e) + Document all changes to the information system; and + + + CM-3 (1)(f) + Notify [Assignment: organization-defined personnel] when approved changes to the information system are completed. + + + + + CM-3 (2) + TEST / VALIDATE / DOCUMENT CHANGES + MODERATE + HIGH + + The organization tests, validates, and documents changes to the information system before implementing the changes on the operational system. + + + Changes to information systems include modifications to hardware, software, or firmware components and configuration settings defined in CM-6. Organizations ensure that testing does not interfere with information system operations. Individuals/groups conducting tests understand organizational security policies and procedures, information system security policies and procedures, and the specific health, safety, and environmental risks associated with particular facilities/processes. Operational systems may need to be taken off-line, or replicated to the extent feasible, before testing can be conducted. If information systems must be taken off-line for testing, the tests are scheduled to occur during planned system outages whenever possible. If testing cannot be conducted on operational systems, organizations employ compensating controls (e.g., testing on replicated systems). + + + + CM-3 (3) + AUTOMATED CHANGE IMPLEMENTATION + + The organization employs automated mechanisms to implement changes to the current information system baseline and deploys the updated baseline across the installed base. + + + + CM-3 (4) + SECURITY REPRESENTATIVE + + The organization requires an information security representative to be a member of the [Assignment: organization-defined configuration change control element]. + + + Information security representatives can include, for example, senior agency information security officers, information system security officers, or information system security managers. Representation by personnel with information security expertise is important because changes to information system configurations can have unintended side effects, some of which may be security-relevant. Detecting such changes early in the process can help avoid unintended, negative consequences that could ultimately affect the security state of organizational information systems. The configuration change control element in this control enhancement reflects the change control elements defined by organizations in CM-3. + + + + CM-3 (5) + AUTOMATED SECURITY RESPONSE + + The information system implements [Assignment: organization-defined security responses] automatically if baseline configurations are changed in an unauthorized manner. + + + Security responses include, for example, halting information system processing, halting selected system functions, or issuing alerts/notifications to organizational personnel when there is an unauthorized modification of a configuration item. + + + + CM-3 (6) + CRYPTOGRAPHY MANAGEMENT + + The organization ensures that cryptographic mechanisms used to provide [Assignment: organization-defined security safeguards] are under configuration management. + + + Regardless of the cryptographic means employed (e.g., public key, private key, shared secrets), organizations ensure that there are processes and procedures in place to effectively manage those means. For example, if devices use certificates as a basis for identification and authentication, there needs to be a process in place to address the expiration of those certificates. + SC-13 + + + + + + NIST Special Publication 800-128 + + + + + CONFIGURATION MANAGEMENT + CM-4 + SECURITY IMPACT ANALYSIS + P2 + LOW + MODERATE + HIGH + + The organization analyzes changes to the information system to determine potential security impacts prior to change implementation. + + + Organizational personnel with information security responsibilities (e.g., Information System Administrators, Information System Security Officers, Information System Security Managers, and Information System Security Engineers) conduct security impact analyses. Individuals conducting security impact analyses possess the necessary skills/technical expertise to analyze the changes to information systems and the associated security ramifications. Security impact analysis may include, for example, reviewing security plans to understand security control requirements and reviewing system design documentation to understand control implementation and how specific changes might affect the controls. Security impact analyses may also include assessments of risk to better understand the impact of the changes and to determine if additional security controls are required. Security impact analyses are scaled in accordance with the security categories of the information systems. + CA-2 + CA-7 + CM-3 + CM-9 + SA-4 + SA-5 + SA-10 + SI-2 + + + + CM-4 (1) + SEPARATE TEST ENVIRONMENTS + HIGH + + The organization analyzes changes to the information system in a separate test environment before implementation in an operational environment, looking for security impacts due to flaws, weaknesses, incompatibility, or intentional malice. + + + Separate test environment in this context means an environment that is physically or logically isolated and distinct from the operational environment. The separation is sufficient to ensure that activities in the test environment do not impact activities in the operational environment, and information in the operational environment is not inadvertently transmitted to the test environment. Separate environments can be achieved by physical or logical means. If physically separate test environments are not used, organizations determine the strength of mechanism required when implementing logical separation (e.g., separation achieved through virtual machines). + SA-11 + SC-3 + SC-7 + + + + CM-4 (2) + VERIFICATION OF SECURITY FUNCTIONS + + The organization, after the information system is changed, checks the security functions to verify that the functions are implemented correctly, operating as intended, and producing the desired outcome with regard to meeting the security requirements for the system. + + + Implementation is this context refers to installing changed code in the operational information system. + SA-11 + + + + + + NIST Special Publication 800-128 + + + + + CONFIGURATION MANAGEMENT + CM-5 + ACCESS RESTRICTIONS FOR CHANGE + P1 + MODERATE + HIGH + + The organization defines, documents, approves, and enforces physical and logical access restrictions associated with changes to the information system. + + + Any changes to the hardware, software, and/or firmware components of information systems can potentially have significant effects on the overall security of the systems. Therefore, organizations permit only qualified and authorized individuals to access information systems for purposes of initiating changes, including upgrades and modifications. Organizations maintain records of access to ensure that configuration change control is implemented and to support after-the-fact actions should organizations discover any unauthorized changes. Access restrictions for change also include software libraries. Access restrictions include, for example, physical and logical access controls (see AC-3 and PE-3), workflow automation, media libraries, abstract layers (e.g., changes implemented into third-party interfaces rather than directly into information systems), and change windows (e.g., changes occur only during specified times, making unauthorized changes easy to discover). + AC-3 + AC-6 + PE-3 + + + + CM-5 (1) + AUTOMATED ACCESS ENFORCEMENT / AUDITING + HIGH + + The information system enforces access restrictions and supports auditing of the enforcement actions. + + + AU-2 + AU-12 + AU-6 + CM-3 + CM-6 + + + + CM-5 (2) + REVIEW SYSTEM CHANGES + HIGH + + The organization reviews information system changes [Assignment: organization-defined frequency] and [Assignment: organization-defined circumstances] to determine whether unauthorized changes have occurred. + + + Indications that warrant review of information system changes and the specific circumstances justifying such reviews may be obtained from activities carried out by organizations during the configuration change process. + AU-6 + AU-7 + CM-3 + CM-5 + PE-6 + PE-8 + + + + CM-5 (3) + SIGNED COMPONENTS + HIGH + + The information system prevents the installation of [Assignment: organization-defined software and firmware components] without verification that the component has been digitally signed using a certificate that is recognized and approved by the organization. + + + Software and firmware components prevented from installation unless signed with recognized and approved certificates include, for example, software and firmware version updates, patches, service packs, device drivers, and basic input output system (BIOS) updates. Organizations can identify applicable software and firmware components by type, by specific items, or a combination of both. Digital signatures and organizational verification of such signatures, is a method of code authentication. + CM-7 + SC-13 + SI-7 + + + + CM-5 (4) + DUAL AUTHORIZATION + + The organization enforces dual authorization for implementing changes to [Assignment: organization-defined information system components and system-level information]. + + + Organizations employ dual authorization to ensure that any changes to selected information system components and information cannot occur unless two qualified individuals implement such changes. The two individuals possess sufficient skills/expertise to determine if the proposed changes are correct implementations of approved changes. Dual authorization may also be known as two-person control. + AC-5 + CM-3 + + + + CM-5 (5) + LIMIT PRODUCTION / OPERATIONAL PRIVILEGES + + The organization: + + CM-5 (5)(a) + Limits privileges to change information system components and system-related information within a production or operational environment; and + + + CM-5 (5)(b) + Reviews and reevaluates privileges [Assignment: organization-defined frequency]. + + + + In many organizations, information systems support multiple core missions/business functions. Limiting privileges to change information system components with respect to operational systems is necessary because changes to a particular information system component may have far-reaching effects on mission/business processes supported by the system where the component resides. The complex, many-to-many relationships between systems and mission/business processes are in some cases, unknown to developers. + AC-2 + + + + CM-5 (6) + LIMIT LIBRARY PRIVILEGES + + The organization limits privileges to change software resident within software libraries. + + + Software libraries include privileged programs. + AC-2 + + + + CM-5 (7) + AUTOMATIC IMPLEMENTATION OF SECURITY SAFEGUARDS + + SI-7 + + + [Withdrawn: Incorporated into SI-7]. + + + + + + CONFIGURATION MANAGEMENT + CM-6 + CONFIGURATION SETTINGS + P1 + LOW + MODERATE + HIGH + + The organization: + + CM-6a. + Establishes and documents configuration settings for information technology products employed within the information system using [Assignment: organization-defined security configuration checklists] that reflect the most restrictive mode consistent with operational requirements; + + + CM-6b. + Implements the configuration settings; + + + CM-6c. + Identifies, documents, and approves any deviations from established configuration settings for [Assignment: organization-defined information system components] based on [Assignment: organization-defined operational requirements]; and + + + CM-6d. + Monitors and controls changes to the configuration settings in accordance with organizational policies and procedures. + + + + Configuration settings are the set of parameters that can be changed in hardware, software, or firmware components of the information system that affect the security posture and/or functionality of the system. Information technology products for which security-related configuration settings can be defined include, for example, mainframe computers, servers (e.g., database, electronic mail, authentication, web, proxy, file, domain name), workstations, input/output devices (e.g., scanners, copiers, and printers), network components (e.g., firewalls, routers, gateways, voice and data switches, wireless access points, network appliances, sensors), operating systems, middleware, and applications. Security-related parameters are those parameters impacting the security state of information systems including the parameters required to satisfy other security control requirements. Security-related parameters include, for example: (i) registry settings; (ii) account, file, directory permission settings; and (iii) settings for functions, ports, protocols, services, and remote connections. Organizations establish organization-wide configuration settings and subsequently derive specific settings for information systems. The established settings become part of the systems configuration baseline. +Common secure configurations (also referred to as security configuration checklists, lockdown and hardening guides, security reference guides, security technical implementation guides) provide recognized, standardized, and established benchmarks that stipulate secure configuration settings for specific information technology platforms/products and instructions for configuring those information system components to meet operational requirements. Common secure configurations can be developed by a variety of organizations including, for example, information technology product developers, manufacturers, vendors, consortia, academia, industry, federal agencies, and other organizations in the public and private sectors. Common secure configurations include the United States Government Configuration Baseline (USGCB) which affects the implementation of CM-6 and other controls such as AC-19 and CM-7. The Security Content Automation Protocol (SCAP) and the defined standards within the protocol (e.g., Common Configuration Enumeration) provide an effective method to uniquely identify, track, and control configuration settings. OMB establishes federal policy on configuration requirements for federal information systems. + AC-19 + CM-2 + CM-3 + CM-7 + SI-4 + + + + CM-6 (1) + AUTOMATED CENTRAL MANAGEMENT / APPLICATION / VERIFICATION + HIGH + + The organization employs automated mechanisms to centrally manage, apply, and verify configuration settings for [Assignment: organization-defined information system components]. + + + CA-7 + CM-4 + + + + CM-6 (2) + RESPOND TO UNAUTHORIZED CHANGES + HIGH + + The organization employs [Assignment: organization-defined security safeguards] to respond to unauthorized changes to [Assignment: organization-defined configuration settings]. + + + Responses to unauthorized changes to configuration settings can include, for example, alerting designated organizational personnel, restoring established configuration settings, or in extreme cases, halting affected information system processing. + IR-4 + SI-7 + + + + CM-6 (3) + UNAUTHORIZED CHANGE DETECTION + + SI-7 + + + [Withdrawn: Incorporated into SI-7]. + + + + CM-6 (4) + CONFORMANCE DEMONSTRATION + + CM-4 + + + [Withdrawn: Incorporated into CM-4]. + + + + + + OMB Memorandum 07-11 + + + OMB Memorandum 07-18 + + + OMB Memorandum 08-22 + + + NIST Special Publication 800-70 + + + NIST Special Publication 800-128 + + + http://nvd.nist.gov + + + http://checklists.nist.gov + + + http://www.nsa.gov + + + + + CONFIGURATION MANAGEMENT + CM-7 + LEAST FUNCTIONALITY + P1 + LOW + MODERATE + HIGH + + The organization: + + CM-7a. + Configures the information system to provide only essential capabilities; and + + + CM-7b. + Prohibits or restricts the use of the following functions, ports, protocols, and/or services: [Assignment: organization-defined prohibited or restricted functions, ports, protocols, and/or services]. + + + + Information systems can provide a wide variety of functions and services. Some of the functions and services, provided by default, may not be necessary to support essential organizational operations (e.g., key missions, functions). Additionally, it is sometimes convenient to provide multiple services from single information system components, but doing so increases risk over limiting the services provided by any one component. Where feasible, organizations limit component functionality to a single function per device (e.g., email servers or web servers, but not both). Organizations review functions and services provided by information systems or individual components of information systems, to determine which functions and services are candidates for elimination (e.g., Voice Over Internet Protocol, Instant Messaging, auto-execute, and file sharing). Organizations consider disabling unused or unnecessary physical and logical ports/protocols (e.g., Universal Serial Bus, File Transfer Protocol, and Hyper Text Transfer Protocol) on information systems to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling. Organizations can utilize network scanning tools, intrusion detection and prevention systems, and end-point protections such as firewalls and host-based intrusion detection systems to identify and prevent the use of prohibited functions, ports, protocols, and services. + AC-6 + CM-2 + RA-5 + SA-5 + SC-7 + + + + CM-7 (1) + PERIODIC REVIEW + MODERATE + HIGH + + The organization: + + CM-7 (1)(a) + Reviews the information system [Assignment: organization-defined frequency] to identify unnecessary and/or nonsecure functions, ports, protocols, and services; and + + + CM-7 (1)(b) + Disables [Assignment: organization-defined functions, ports, protocols, and services within the information system deemed to be unnecessary and/or nonsecure]. + + + + The organization can either make a determination of the relative security of the function, port, protocol, and/or service or base the security decision on the assessment of other entities. Bluetooth, FTP, and peer-to-peer networking are examples of less than secure protocols. + AC-18 + CM-7 + IA-2 + + + + CM-7 (2) + PREVENT PROGRAM EXECUTION + MODERATE + HIGH + + The information system prevents program execution in accordance with [Selection (one or more): [Assignment: organization-defined policies regarding software program usage and restrictions]; rules authorizing the terms and conditions of software program usage]. + + + CM-8 + PM-5 + + + + CM-7 (3) + REGISTRATION COMPLIANCE + + The organization ensures compliance with [Assignment: organization-defined registration requirements for functions, ports, protocols, and services]. + + + Organizations use the registration process to manage, track, and provide oversight for information systems and implemented functions, ports, protocols, and services. + + + + CM-7 (4) + UNAUTHORIZED SOFTWARE / BLACKLISTING + MODERATE + + The organization: + + CM-7 (4)(a) + Identifies [Assignment: organization-defined software programs not authorized to execute on the information system]; + + + CM-7 (4)(b) + Employs an allow-all, deny-by-exception policy to prohibit the execution of unauthorized software programs on the information system; and + + + CM-7 (4)(c) + Reviews and updates the list of unauthorized software programs [Assignment: organization-defined frequency]. + + + + The process used to identify software programs that are not authorized to execute on organizational information systems is commonly referred to as blacklisting. Organizations can implement CM-7 (5) instead of this control enhancement if whitelisting (the stronger of the two policies) is the preferred approach for restricting software program execution. + CM-6 + CM-8 + PM-5 + + + + CM-7 (5) + AUTHORIZED SOFTWARE / WHITELISTING + HIGH + + The organization: + + CM-7 (5)(a) + Identifies [Assignment: organization-defined software programs authorized to execute on the information system]; + + + CM-7 (5)(b) + Employs a deny-all, permit-by-exception policy to allow the execution of authorized software programs on the information system; and + + + CM-7 (5)(c) + Reviews and updates the list of authorized software programs [Assignment: organization-defined frequency]. + + + + The process used to identify software programs that are authorized to execute on organizational information systems is commonly referred to as whitelisting. In addition to whitelisting, organizations consider verifying the integrity of white-listed software programs using, for example, cryptographic checksums, digital signatures, or hash functions. Verification of white-listed software can occur either prior to execution or at system startup. + CM-2 + CM-6 + CM-8 + PM-5 + SA-10 + SC-34 + SI-7 + + + + + + DoD Instruction 8551.01 + + + + + CONFIGURATION MANAGEMENT + CM-8 + INFORMATION SYSTEM COMPONENT INVENTORY + P1 + LOW + MODERATE + HIGH + + The organization: + + CM-8a. + Develops and documents an inventory of information system components that: + + CM-8a.1. + Accurately reflects the current information system; + + + CM-8a.2. + Includes all components within the authorization boundary of the information system; + + + CM-8a.3. + Is at the level of granularity deemed necessary for tracking and reporting; and + + + CM-8a.4. + Includes [Assignment: organization-defined information deemed necessary to achieve effective information system component accountability]; and + + + + CM-8b. + Reviews and updates the information system component inventory [Assignment: organization-defined frequency]. + + + + Organizations may choose to implement centralized information system component inventories that include components from all organizational information systems. In such situations, organizations ensure that the resulting inventories include system-specific information required for proper component accountability (e.g., information system association, information system owner). Information deemed necessary for effective accountability of information system components includes, for example, hardware inventory specifications, software license information, software version numbers, component owners, and for networked components or devices, machine names and network addresses. Inventory specifications include, for example, manufacturer, device type, model, serial number, and physical location. + CM-2 + CM-6 + PM-5 + + + + CM-8 (1) + UPDATES DURING INSTALLATIONS / REMOVALS + MODERATE + HIGH + + The organization updates the inventory of information system components as an integral part of component installations, removals, and information system updates. + + + + CM-8 (2) + AUTOMATED MAINTENANCE + HIGH + + The organization employs automated mechanisms to help maintain an up-to-date, complete, accurate, and readily available inventory of information system components. + + + Organizations maintain information system inventories to the extent feasible. Virtual machines, for example, can be difficult to monitor because such machines are not visible to the network when not in use. In such cases, organizations maintain as up-to-date, complete, and accurate an inventory as is deemed reasonable. This control enhancement can be satisfied by the implementation of CM-2 (2) for organizations that choose to combine information system component inventory and baseline configuration activities. + SI-7 + + + + CM-8 (3) + AUTOMATED UNAUTHORIZED COMPONENT DETECTION + MODERATE + HIGH + + The organization: + + CM-8 (3)(a) + Employs automated mechanisms [Assignment: organization-defined frequency] to detect the presence of unauthorized hardware, software, and firmware components within the information system; and + + + CM-8 (3)(b) + Takes the following actions when unauthorized components are detected: [Selection (one or more): disables network access by such components; isolates the components; notifies [Assignment: organization-defined personnel or roles]]. + + + + This control enhancement is applied in addition to the monitoring for unauthorized remote connections and mobile devices. Monitoring for unauthorized system components may be accomplished on an ongoing basis or by the periodic scanning of systems for that purpose. Automated mechanisms can be implemented within information systems or in other separate devices. Isolation can be achieved, for example, by placing unauthorized information system components in separate domains or subnets or otherwise quarantining such components. This type of component isolation is commonly referred to as sandboxing. + AC-17 + AC-18 + AC-19 + CA-7 + SI-3 + SI-4 + SI-7 + RA-5 + + + + CM-8 (4) + ACCOUNTABILITY INFORMATION + HIGH + + The organization includes in the information system component inventory information, a means for identifying by [Selection (one or more): name; position; role], individuals responsible/accountable for administering those components. + + + Identifying individuals who are both responsible and accountable for administering information system components helps to ensure that the assigned components are properly administered and organizations can contact those individuals if some action is required (e.g., component is determined to be the source of a breach/compromise, component needs to be recalled/replaced, or component needs to be relocated). + + + + CM-8 (5) + NO DUPLICATE ACCOUNTING OF COMPONENTS + MODERATE + HIGH + + The organization verifies that all components within the authorization boundary of the information system are not duplicated in other information system component inventories. + + + This control enhancement addresses the potential problem of duplicate accounting of information system components in large or complex interconnected systems. + + + + CM-8 (6) + ASSESSED CONFIGURATIONS / APPROVED DEVIATIONS + + The organization includes assessed component configurations and any approved deviations to current deployed configurations in the information system component inventory. + + + This control enhancement focuses on configuration settings established by organizations for information system components, the specific components that have been assessed to determine compliance with the required configuration settings, and any approved deviations from established configuration settings. + CM-2 + CM-6 + + + + CM-8 (7) + CENTRALIZED REPOSITORY + + The organization provides a centralized repository for the inventory of information system components. + + + Organizations may choose to implement centralized information system component inventories that include components from all organizational information systems. Centralized repositories of information system component inventories provide opportunities for efficiencies in accounting for organizational hardware, software, and firmware assets. Such repositories may also help organizations rapidly identify the location and responsible individuals of system components that have been compromised, breached, or are otherwise in need of mitigation actions. Organizations ensure that the resulting centralized inventories include system-specific information required for proper component accountability (e.g., information system association, information system owner). + + + + CM-8 (8) + AUTOMATED LOCATION TRACKING + + The organization employs automated mechanisms to support tracking of information system components by geographic location. + + + The use of automated mechanisms to track the location of information system components can increase the accuracy of component inventories. Such capability may also help organizations rapidly identify the location and responsible individuals of system components that have been compromised, breached, or are otherwise in need of mitigation actions. + + + + CM-8 (9) + ASSIGNMENT OF COMPONENTS TO SYSTEMS + + The organization: + + CM-8 (9)(a) + Assigns [Assignment: organization-defined acquired information system components] to an information system; and + + + CM-8 (9)(b) + Receives an acknowledgement from the information system owner of this assignment. + + + + Organizations determine the criteria for or types of information system components (e.g., microprocessors, motherboards, software, programmable logic controllers, and network devices) that are subject to this control enhancement. + SA-4 + + + + + + NIST Special Publication 800-128 + + + + + CONFIGURATION MANAGEMENT + CM-9 + CONFIGURATION MANAGEMENT PLAN + P1 + MODERATE + HIGH + + The organization develops, documents, and implements a configuration management plan for the information system that: + + CM-9a. + Addresses roles, responsibilities, and configuration management processes and procedures; + + + CM-9b. + Establishes a process for identifying configuration items throughout the system development life cycle and for managing the configuration of the configuration items; + + + CM-9c. + Defines the configuration items for the information system and places the configuration items under configuration management; and + + + CM-9d. + Protects the configuration management plan from unauthorized disclosure and modification. + + + + Configuration management plans satisfy the requirements in configuration management policies while being tailored to individual information systems. Such plans define detailed processes and procedures for how configuration management is used to support system development life cycle activities at the information system level. Configuration management plans are typically developed during the development/acquisition phase of the system development life cycle. The plans describe how to move changes through change management processes, how to update configuration settings and baselines, how to maintain information system component inventories, how to control development, test, and operational environments, and how to develop, release, and update key documents. Organizations can employ templates to help ensure consistent and timely development and implementation of configuration management plans. Such templates can represent a master configuration management plan for the organization at large with subsets of the plan implemented on a system by system basis. Configuration management approval processes include designation of key management stakeholders responsible for reviewing and approving proposed changes to information systems, and personnel that conduct security impact analyses prior to the implementation of changes to the systems. Configuration items are the information system items (hardware, software, firmware, and documentation) to be configuration-managed. As information systems continue through the system development life cycle, new configuration items may be identified and some existing configuration items may no longer need to be under configuration control. + CM-2 + CM-3 + CM-4 + CM-5 + CM-8 + SA-10 + + + + CM-9 (1) + ASSIGNMENT OF RESPONSIBILITY + + The organization assigns responsibility for developing the configuration management process to organizational personnel that are not directly involved in information system development. + + + In the absence of dedicated configuration management teams assigned within organizations, system developers may be tasked to develop configuration management processes using personnel who are not directly involved in system development or integration. This separation of duties ensures that organizations establish and maintain a sufficient degree of independence between the information system development and integration processes and configuration management processes to facilitate quality control and more effective oversight. + + + + + + NIST Special Publication 800-128 + + + + + CONFIGURATION MANAGEMENT + CM-10 + SOFTWARE USAGE RESTRICTIONS + P2 + LOW + MODERATE + HIGH + + The organization: + + CM-10a. + Uses software and associated documentation in accordance with contract agreements and copyright laws; + + + CM-10b. + Tracks the use of software and associated documentation protected by quantity licenses to control copying and distribution; and + + + CM-10c. + Controls and documents the use of peer-to-peer file sharing technology to ensure that this capability is not used for the unauthorized distribution, display, performance, or reproduction of copyrighted work. + + + + Software license tracking can be accomplished by manual methods (e.g., simple spreadsheets) or automated methods (e.g., specialized tracking applications) depending on organizational needs. + AC-17 + CM-8 + SC-7 + + + + CM-10 (1) + OPEN SOURCE SOFTWARE + + The organization establishes the following restrictions on the use of open source software: [Assignment: organization-defined restrictions]. + + + Open source software refers to software that is available in source code form. Certain software rights normally reserved for copyright holders are routinely provided under software license agreements that permit individuals to study, change, and improve the software. From a security perspective, the major advantage of open source software is that it provides organizations with the ability to examine the source code. However, there are also various licensing issues associated with open source software including, for example, the constraints on derivative use of such software. + + + + + + CONFIGURATION MANAGEMENT + CM-11 + USER-INSTALLED SOFTWARE + P1 + LOW + MODERATE + HIGH + + The organization: + + CM-11a. + Establishes [Assignment: organization-defined policies] governing the installation of software by users; + + + CM-11b. + Enforces software installation policies through [Assignment: organization-defined methods]; and + + + CM-11c. + Monitors policy compliance at [Assignment: organization-defined frequency]. + + + + If provided the necessary privileges, users have the ability to install software in organizational information systems. To maintain control over the types of software installed, organizations identify permitted and prohibited actions regarding software installation. Permitted software installations may include, for example, updates and security patches to existing software and downloading applications from organization-approved �app stores.� Prohibited software installations may include, for example, software with unknown or suspect pedigrees or software that organizations consider potentially malicious. The policies organizations select governing user-installed software may be organization-developed or provided by some external entity. Policy enforcement methods include procedural methods (e.g., periodic examination of user accounts), automated methods (e.g., configuration settings implemented on organizational information systems), or both. + AC-3 + CM-2 + CM-3 + CM-5 + CM-6 + CM-7 + PL-4 + + + + CM-11 (1) + ALERTS FOR UNAUTHORIZED INSTALLATIONS + + The information system alerts [Assignment: organization-defined personnel or roles] when the unauthorized installation of software is detected. + + + CA-7 + SI-4 + + + + CM-11 (2) + PROHIBIT INSTALLATION WITHOUT PRIVILEGED STATUS + + The information system prohibits user installation of software without explicit privileged status. + + + Privileged status can be obtained, for example, by serving in the role of system administrator. + AC-6 + + + + + + CONTINGENCY PLANNING + CP-1 + CONTINGENCY PLANNING POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + CP-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + CP-1a.1. + A contingency planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + CP-1a.2. + Procedures to facilitate the implementation of the contingency planning policy and associated contingency planning controls; and + + + + CP-1b. + Reviews and updates the current: + + CP-1b.1. + Contingency planning policy [Assignment: organization-defined frequency]; and + + + CP-1b.2. + Contingency planning procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the CP family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + Federal Continuity Directive 1 + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-34 + + + NIST Special Publication 800-100 + + + + + CONTINGENCY PLANNING + CP-2 + CONTINGENCY PLAN + P1 + LOW + MODERATE + HIGH + + The organization: + + CP-2a. + Develops a contingency plan for the information system that: + + CP-2a.1. + Identifies essential missions and business functions and associated contingency requirements; + + + CP-2a.2. + Provides recovery objectives, restoration priorities, and metrics; + + + CP-2a.3. + Addresses contingency roles, responsibilities, assigned individuals with contact information; + + + CP-2a.4. + Addresses maintaining essential missions and business functions despite an information system disruption, compromise, or failure; + + + CP-2a.5. + Addresses eventual, full information system restoration without deterioration of the security safeguards originally planned and implemented; and + + + CP-2a.6. + Is reviewed and approved by [Assignment: organization-defined personnel or roles]; + + + + CP-2b. + Distributes copies of the contingency plan to [Assignment: organization-defined key contingency personnel (identified by name and/or by role) and organizational elements]; + + + CP-2c. + Coordinates contingency planning activities with incident handling activities; + + + CP-2d. + Reviews the contingency plan for the information system [Assignment: organization-defined frequency]; + + + CP-2e. + Updates the contingency plan to address changes to the organization, information system, or environment of operation and problems encountered during contingency plan implementation, execution, or testing; + + + CP-2f. + Communicates contingency plan changes to [Assignment: organization-defined key contingency personnel (identified by name and/or by role) and organizational elements]; and + + + CP-2g. + Protects the contingency plan from unauthorized disclosure and modification. + + + + Contingency planning for information systems is part of an overall organizational program for achieving continuity of operations for mission/business functions. Contingency planning addresses both information system restoration and implementation of alternative mission/business processes when systems are compromised. The effectiveness of contingency planning is maximized by considering such planning throughout the phases of the system development life cycle. Performing contingency planning on hardware, software, and firmware development can be an effective means of achieving information system resiliency. Contingency plans reflect the degree of restoration required for organizational information systems since not all systems may need to fully recover to achieve the level of continuity of operations desired. Information system recovery objectives reflect applicable laws, Executive Orders, directives, policies, standards, regulations, and guidelines. In addition to information system availability, contingency plans also address other security-related events resulting in a reduction in mission and/or business effectiveness, such as malicious attacks compromising the confidentiality or integrity of information systems. Actions addressed in contingency plans include, for example, orderly/graceful degradation, information system shutdown, fallback to a manual mode, alternate information flows, and operating in modes reserved for when systems are under attack. By closely coordinating contingency planning with incident handling activities, organizations can ensure that the necessary contingency planning activities are in place and activated in the event of a security incident. + AC-14 + CP-6 + CP-7 + CP-8 + CP-9 + CP-10 + IR-4 + IR-8 + MP-2 + MP-4 + MP-5 + PM-8 + PM-11 + + + + CP-2 (1) + COORDINATE WITH RELATED PLANS + MODERATE + HIGH + + The organization coordinates contingency plan development with organizational elements responsible for related plans. + + + Plans related to contingency plans for organizational information systems include, for example, Business Continuity Plans, Disaster Recovery Plans, Continuity of Operations Plans, Crisis Communications Plans, Critical Infrastructure Plans, Cyber Incident Response Plans, Insider Threat Implementation Plan, and Occupant Emergency Plans. + + + + CP-2 (2) + CAPACITY PLANNING + HIGH + + The organization conducts capacity planning so that necessary capacity for information processing, telecommunications, and environmental support exists during contingency operations. + + + Capacity planning is needed because different types of threats (e.g., natural disasters, targeted cyber attacks) can result in a reduction of the available processing, telecommunications, and support services originally intended to support the organizational missions/business functions. Organizations may need to anticipate degraded operations during contingency operations and factor such degradation into capacity planning. + + + + CP-2 (3) + RESUME ESSENTIAL MISSIONS / BUSINESS FUNCTIONS + MODERATE + HIGH + + The organization plans for the resumption of essential missions and business functions within [Assignment: organization-defined time period] of contingency plan activation. + + + Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. The time period for resumption of essential missions/business functions may be dependent on the severity/extent of disruptions to the information system and its supporting infrastructure. + PE-12 + + + + CP-2 (4) + RESUME ALL MISSIONS / BUSINESS FUNCTIONS + HIGH + + The organization plans for the resumption of all missions and business functions within [Assignment: organization-defined time period] of contingency plan activation. + + + Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. The time period for resumption of all missions/business functions may be dependent on the severity/extent of disruptions to the information system and its supporting infrastructure. + PE-12 + + + + CP-2 (5) + CONTINUE ESSENTIAL MISSIONS / BUSINESS FUNCTIONS + HIGH + + The organization plans for the continuance of essential missions and business functions with little or no loss of operational continuity and sustains that continuity until full information system restoration at primary processing and/or storage sites. + + + Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. Primary processing and/or storage sites defined by organizations as part of contingency planning may change depending on the circumstances associated with the contingency (e.g., backup sites may become primary sites). + PE-12 + + + + CP-2 (6) + ALTERNATE PROCESSING / STORAGE SITE + + The organization plans for the transfer of essential missions and business functions to alternate processing and/or storage sites with little or no loss of operational continuity and sustains that continuity through information system restoration to primary processing and/or storage sites. + + + Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. Primary processing and/or storage sites defined by organizations as part of contingency planning may change depending on the circumstances associated with the contingency (e.g., backup sites may become primary sites). + PE-12 + + + + CP-2 (7) + COORDINATE WITH EXTERNAL SERVICE PROVIDERS + + The organization coordinates its contingency plan with the contingency plans of external service providers to ensure that contingency requirements can be satisfied. + + + When the capability of an organization to successfully carry out its core missions/business functions is dependent on external service providers, developing a timely and comprehensive contingency plan may become more challenging. In this situation, organizations coordinate contingency planning activities with the external entities to ensure that the individual plans reflect the overall contingency needs of the organization. + SA-9 + + + + CP-2 (8) + IDENTIFY CRITICAL ASSETS + MODERATE + HIGH + + The organization identifies critical information system assets supporting essential missions and business functions. + + + Organizations may choose to carry out the contingency planning activities in this control enhancement as part of organizational business continuity planning including, for example, as part of business impact analyses. Organizations identify critical information system assets so that additional safeguards and countermeasures can be employed (above and beyond those safeguards and countermeasures routinely implemented) to help ensure that organizational missions/business functions can continue to be conducted during contingency operations. In addition, the identification of critical information assets facilitates the prioritization of organizational resources. Critical information system assets include technical and operational aspects. Technical aspects include, for example, information technology services, information system components, information technology products, and mechanisms. Operational aspects include, for example, procedures (manually executed operations) and personnel (individuals operating technical safeguards and/or executing manual procedures). Organizational program protection plans can provide assistance in identifying critical assets. + SA-14 + SA-15 + + + + + + Federal Continuity Directive 1 + + + NIST Special Publication 800-34 + + + + + CONTINGENCY PLANNING + CP-3 + CONTINGENCY TRAINING + P2 + LOW + MODERATE + HIGH + + The organization provides contingency training to information system users consistent with assigned roles and responsibilities: + + CP-3a. + Within [Assignment: organization-defined time period] of assuming a contingency role or responsibility; + + + CP-3b. + When required by information system changes; and + + + CP-3c. + [Assignment: organization-defined frequency] thereafter. + + + + Contingency training provided by organizations is linked to the assigned roles and responsibilities of organizational personnel to ensure that the appropriate content and level of detail is included in such training. For example, regular users may only need to know when and where to report for duty during contingency operations and if normal duties are affected; system administrators may require additional training on how to set up information systems at alternate processing and storage sites; and managers/senior leaders may receive more specific training on how to conduct mission-essential functions in designated off-site locations and how to establish communications with other governmental entities for purposes of coordination on contingency-related activities. Training for contingency roles/responsibilities reflects the specific continuity requirements in the contingency plan. + AT-2 + AT-3 + CP-2 + IR-2 + + + + CP-3 (1) + SIMULATED EVENTS + HIGH + + The organization incorporates simulated events into contingency training to facilitate effective response by personnel in crisis situations. + + + + CP-3 (2) + AUTOMATED TRAINING ENVIRONMENTS + + The organization employs automated mechanisms to provide a more thorough and realistic contingency training environment. + + + + + + Federal Continuity Directive 1 + + + NIST Special Publication 800-16 + + + NIST Special Publication 800-50 + + + + + CONTINGENCY PLANNING + CP-4 + CONTINGENCY PLAN TESTING + P2 + LOW + MODERATE + HIGH + + The organization: + + CP-4a. + Tests the contingency plan for the information system [Assignment: organization-defined frequency] using [Assignment: organization-defined tests] to determine the effectiveness of the plan and the organizational readiness to execute the plan; + + + CP-4b. + Reviews the contingency plan test results; and + + + CP-4c. + Initiates corrective actions, if needed. + + + + Methods for testing contingency plans to determine the effectiveness of the plans and to identify potential weaknesses in the plans include, for example, walk-through and tabletop exercises, checklists, simulations (parallel, full interrupt), and comprehensive exercises. Organizations conduct testing based on the continuity requirements in contingency plans and include a determination of the effects on organizational operations, assets, and individuals arising due to contingency operations. Organizations have flexibility and discretion in the breadth, depth, and timelines of corrective actions. + CP-2 + CP-3 + IR-3 + + + + CP-4 (1) + COORDINATE WITH RELATED PLANS + MODERATE + HIGH + + The organization coordinates contingency plan testing with organizational elements responsible for related plans. + + + Plans related to contingency plans for organizational information systems include, for example, Business Continuity Plans, Disaster Recovery Plans, Continuity of Operations Plans, Crisis Communications Plans, Critical Infrastructure Plans, Cyber Incident Response Plans, and Occupant Emergency Plans. This control enhancement does not require organizations to create organizational elements to handle related plans or to align such elements with specific plans. It does require, however, that if such organizational elements are responsible for related plans, organizations should coordinate with those elements. + IR-8 + PM-8 + + + + CP-4 (2) + ALTERNATE PROCESSING SITE + HIGH + + The organization tests the contingency plan at the alternate processing site: + + CP-4 (2)(a) + To familiarize contingency personnel with the facility and available resources; and + + + CP-4 (2)(b) + To evaluate the capabilities of the alternate processing site to support contingency operations. + + + + CP-7 + + + + CP-4 (3) + AUTOMATED TESTING + + The organization employs automated mechanisms to more thoroughly and effectively test the contingency plan. + + + Automated mechanisms provide more thorough and effective testing of contingency plans, for example: (i) by providing more complete coverage of contingency issues; (ii) by selecting more realistic test scenarios and environments; and (iii) by effectively stressing the information system and supported missions. + + + + CP-4 (4) + FULL RECOVERY / RECONSTITUTION + + The organization includes a full recovery and reconstitution of the information system to a known state as part of contingency plan testing. + + + CP-10 + SC-24 + + + + + + Federal Continuity Directive 1 + + + FIPS Publication 199 + + + NIST Special Publication 800-34 + + + NIST Special Publication 800-84 + + + + + CONTINGENCY PLANNING + CP-5 + CONTINGENCY PLAN UPDATE + + CP-2 + + + [Withdrawn: Incorporated into CP-2]. + + + + CONTINGENCY PLANNING + CP-6 + ALTERNATE STORAGE SITE + P1 + MODERATE + HIGH + + The organization: + + CP-6a. + Establishes an alternate storage site including necessary agreements to permit the storage and retrieval of information system backup information; and + + + CP-6b. + Ensures that the alternate storage site provides information security safeguards equivalent to that of the primary site. + + + + Alternate storage sites are sites that are geographically distinct from primary storage sites. An alternate storage site maintains duplicate copies of information and data in the event that the primary storage site is not available. Items covered by alternate storage site agreements include, for example, environmental conditions at alternate sites, access rules, physical and environmental protection requirements, and coordination of delivery/retrieval of backup media. Alternate storage sites reflect the requirements in contingency plans so that organizations can maintain essential missions/business functions despite disruption, compromise, or failure in organizational information systems. + CP-2 + CP-7 + CP-9 + CP-10 + MP-4 + + + + CP-6 (1) + SEPARATION FROM PRIMARY SITE + MODERATE + HIGH + + The organization identifies an alternate storage site that is separated from the primary storage site to reduce susceptibility to the same threats. + + + Threats that affect alternate storage sites are typically defined in organizational assessments of risk and include, for example, natural disasters, structural failures, hostile cyber attacks, and errors of omission/commission. Organizations determine what is considered a sufficient degree of separation between primary and alternate storage sites based on the types of threats that are of concern. For one particular type of threat (i.e., hostile cyber attack), the degree of separation between sites is less relevant. + RA-3 + + + + CP-6 (2) + RECOVERY TIME / POINT OBJECTIVES + HIGH + + The organization configures the alternate storage site to facilitate recovery operations in accordance with recovery time and recovery point objectives. + + + + CP-6 (3) + ACCESSIBILITY + MODERATE + HIGH + + The organization identifies potential accessibility problems to the alternate storage site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions. + + + Area-wide disruptions refer to those types of disruptions that are broad in geographic scope (e.g., hurricane, regional power outage) with such determinations made by organizations based on organizational assessments of risk. Explicit mitigation actions include, for example: (i) duplicating backup information at other alternate storage sites if access problems occur at originally designated alternate sites; or (ii) planning for physical access to retrieve backup information if electronic accessibility to the alternate site is disrupted. + RA-3 + + + + + + NIST Special Publication 800-34 + + + + + CONTINGENCY PLANNING + CP-7 + ALTERNATE PROCESSING SITE + P1 + MODERATE + HIGH + + The organization: + + CP-7a. + Establishes an alternate processing site including necessary agreements to permit the transfer and resumption of [Assignment: organization-defined information system operations] for essential missions/business functions within [Assignment: organization-defined time period consistent with recovery time and recovery point objectives] when the primary processing capabilities are unavailable; + + + CP-7b. + Ensures that equipment and supplies required to transfer and resume operations are available at the alternate processing site or contracts are in place to support delivery to the site within the organization-defined time period for transfer/resumption; and + + + CP-7c. + Ensures that the alternate processing site provides information security safeguards equivalent to those of the primary site. + + + + Alternate processing sites are sites that are geographically distinct from primary processing sites. An alternate processing site provides processing capability in the event that the primary processing site is not available. Items covered by alternate processing site agreements include, for example, environmental conditions at alternate sites, access rules, physical and environmental protection requirements, and coordination for the transfer/assignment of personnel. Requirements are specifically allocated to alternate processing sites that reflect the requirements in contingency plans to maintain essential missions/business functions despite disruption, compromise, or failure in organizational information systems. + CP-2 + CP-6 + CP-8 + CP-9 + CP-10 + MA-6 + + + + CP-7 (1) + SEPARATION FROM PRIMARY SITE + MODERATE + HIGH + + The organization identifies an alternate processing site that is separated from the primary processing site to reduce susceptibility to the same threats. + + + Threats that affect alternate processing sites are typically defined in organizational assessments of risk and include, for example, natural disasters, structural failures, hostile cyber attacks, and errors of omission/commission. Organizations determine what is considered a sufficient degree of separation between primary and alternate processing sites based on the types of threats that are of concern. For one particular type of threat (i.e., hostile cyber attack), the degree of separation between sites is less relevant. + RA-3 + + + + CP-7 (2) + ACCESSIBILITY + MODERATE + HIGH + + The organization identifies potential accessibility problems to the alternate processing site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions. + + + Area-wide disruptions refer to those types of disruptions that are broad in geographic scope (e.g., hurricane, regional power outage) with such determinations made by organizations based on organizational assessments of risk. + RA-3 + + + + CP-7 (3) + PRIORITY OF SERVICE + MODERATE + HIGH + + The organization develops alternate processing site agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives). + + + Priority-of-service agreements refer to negotiated agreements with service providers that ensure that organizations receive priority treatment consistent with their availability requirements and the availability of information resources at the alternate processing site. + + + + CP-7 (4) + PREPARATION FOR USE + HIGH + + The organization prepares the alternate processing site so that the site is ready to be used as the operational site supporting essential missions and business functions. + + + Site preparation includes, for example, establishing configuration settings for information system components at the alternate processing site consistent with the requirements for such settings at the primary site and ensuring that essential supplies and other logistical considerations are in place. + CM-2 + CM-6 + + + + CP-7 (5) + EQUIVALENT INFORMATION SECURITY SAFEGUARDS + + CP-7 + + + [Withdrawn: Incorporated into CP-7]. + + + + CP-7 (6) + INABILITY TO RETURN TO PRIMARY SITE + + The organization plans and prepares for circumstances that preclude returning to the primary processing site. + + + + + + NIST Special Publication 800-34 + + + + + CONTINGENCY PLANNING + CP-8 + TELECOMMUNICATIONS SERVICES + P1 + MODERATE + HIGH + + The organization establishes alternate telecommunications services including necessary agreements to permit the resumption of [Assignment: organization-defined information system operations] for essential missions and business functions within [Assignment: organization-defined time period] when the primary telecommunications capabilities are unavailable at either the primary or alternate processing or storage sites. + + + This control applies to telecommunications services (data and voice) for primary and alternate processing and storage sites. Alternate telecommunications services reflect the continuity requirements in contingency plans to maintain essential missions/business functions despite the loss of primary telecommunications services. Organizations may specify different time periods for primary/alternate sites. Alternate telecommunications services include, for example, additional organizational or commercial ground-based circuits/lines or satellites in lieu of ground-based communications. Organizations consider factors such as availability, quality of service, and access when entering into alternate telecommunications agreements. + CP-2 + CP-6 + CP-7 + + + + CP-8 (1) + PRIORITY OF SERVICE PROVISIONS + MODERATE + HIGH + + The organization: + + CP-8 (1)(a) + Develops primary and alternate telecommunications service agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives); and + + + CP-8 (1)(b) + Requests Telecommunications Service Priority for all telecommunications services used for national security emergency preparedness in the event that the primary and/or alternate telecommunications services are provided by a common carrier. + + + + Organizations consider the potential mission/business impact in situations where telecommunications service providers are servicing other organizations with similar priority-of-service provisions. + + + + CP-8 (2) + SINGLE POINTS OF FAILURE + MODERATE + HIGH + + The organization obtains alternate telecommunications services to reduce the likelihood of sharing a single point of failure with primary telecommunications services. + + + + CP-8 (3) + SEPARATION OF PRIMARY / ALTERNATE PROVIDERS + HIGH + + The organization obtains alternate telecommunications services from providers that are separated from primary service providers to reduce susceptibility to the same threats. + + + Threats that affect telecommunications services are typically defined in organizational assessments of risk and include, for example, natural disasters, structural failures, hostile cyber/physical attacks, and errors of omission/commission. Organizations seek to reduce common susceptibilities by, for example, minimizing shared infrastructure among telecommunications service providers and achieving sufficient geographic separation between services. Organizations may consider using a single service provider in situations where the service provider can provide alternate telecommunications services meeting the separation needs addressed in the risk assessment. + + + + CP-8 (4) + PROVIDER CONTINGENCY PLAN + HIGH + + The organization: + + CP-8 (4)(a) + Requires primary and alternate telecommunications service providers to have contingency plans; + + + CP-8 (4)(b) + Reviews provider contingency plans to ensure that the plans meet organizational contingency requirements; and + + + CP-8 (4)(c) + Obtains evidence of contingency testing/training by providers [Assignment: organization-defined frequency]. + + + + Reviews of provider contingency plans consider the proprietary nature of such plans. In some situations, a summary of provider contingency plans may be sufficient evidence for organizations to satisfy the review requirement. Telecommunications service providers may also participate in ongoing disaster recovery exercises in coordination with the Department of Homeland Security, state, and local governments. Organizations may use these types of activities to satisfy evidentiary requirements related to service provider contingency plan reviews, testing, and training. + + + + CP-8 (5) + ALTERNATE TELECOMMUNICATION SERVICE TESTING + + The organization tests alternate telecommunication services [Assignment: organization-defined frequency]. + + + + + + NIST Special Publication 800-34 + + + National Communications Systems Directive 3-10 + + + http://www.dhs.gov/telecommunications-service-priority-tsp + + + + + CONTINGENCY PLANNING + CP-9 + INFORMATION SYSTEM BACKUP + P1 + LOW + MODERATE + HIGH + + The organization: + + CP-9a. + Conducts backups of user-level information contained in the information system [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives]; + + + CP-9b. + Conducts backups of system-level information contained in the information system [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives]; + + + CP-9c. + Conducts backups of information system documentation including security-related documentation [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives]; and + + + CP-9d. + Protects the confidentiality, integrity, and availability of backup information at storage locations. + + + + System-level information includes, for example, system-state information, operating system and application software, and licenses. User-level information includes any information other than system-level information. Mechanisms employed by organizations to protect the integrity of information system backups include, for example, digital signatures and cryptographic hashes. Protection of system backup information while in transit is beyond the scope of this control. Information system backups reflect the requirements in contingency plans as well as other organizational requirements for backing up information. + CP-2 + CP-6 + MP-4 + MP-5 + SC-13 + + + + CP-9 (1) + TESTING FOR RELIABILITY / INTEGRITY + MODERATE + HIGH + + The organization tests backup information [Assignment: organization-defined frequency] to verify media reliability and information integrity. + + + CP-4 + + + + CP-9 (2) + TEST RESTORATION USING SAMPLING + HIGH + + The organization uses a sample of backup information in the restoration of selected information system functions as part of contingency plan testing. + + + CP-4 + + + + CP-9 (3) + SEPARATE STORAGE FOR CRITICAL INFORMATION + HIGH + + The organization stores backup copies of [Assignment: organization-defined critical information system software and other security-related information] in a separate facility or in a fire-rated container that is not collocated with the operational system. + + + Critical information system software includes, for example, operating systems, cryptographic key management systems, and intrusion detection/prevention systems. Security-related information includes, for example, organizational inventories of hardware, software, and firmware components. Alternate storage sites typically serve as separate storage facilities for organizations. + CM-2 + CM-8 + + + + CP-9 (4) + PROTECTION FROM UNAUTHORIZED MODIFICATION + + CP-9 + + + [Withdrawn: Incorporated into CP-9]. + + + + CP-9 (5) + TRANSFER TO ALTERNATE STORAGE SITE + HIGH + + The organization transfers information system backup information to the alternate storage site [Assignment: organization-defined time period and transfer rate consistent with the recovery time and recovery point objectives]. + + + Information system backup information can be transferred to alternate storage sites either electronically or by physical shipment of storage media. + + + + CP-9 (6) + REDUNDANT SECONDARY SYSTEM + + The organization accomplishes information system backup by maintaining a redundant secondary system that is not collocated with the primary system and that can be activated without loss of information or disruption to operations. + + + CP-7 + CP-10 + + + + CP-9 (7) + DUAL AUTHORIZATION + + The organization enforces dual authorization for the deletion or destruction of [Assignment: organization-defined backup information]. + + + Dual authorization ensures that the deletion or destruction of backup information cannot occur unless two qualified individuals carry out the task. Individuals deleting/destroying backup information possess sufficient skills/expertise to determine if the proposed deletion/destruction of backup information reflects organizational policies and procedures. Dual authorization may also be known as two-person control. + AC-3 + MP-2 + + + + + + NIST Special Publication 800-34 + + + + + CONTINGENCY PLANNING + CP-10 + INFORMATION SYSTEM RECOVERY AND RECONSTITUTION + P1 + LOW + MODERATE + HIGH + + The organization provides for the recovery and reconstitution of the information system to a known state after a disruption, compromise, or failure. + + + Recovery is executing information system contingency plan activities to restore organizational missions/business functions. Reconstitution takes place following recovery and includes activities for returning organizational information systems to fully operational states. Recovery and reconstitution operations reflect mission and business priorities, recovery point/time and reconstitution objectives, and established organizational metrics consistent with contingency plan requirements. Reconstitution includes the deactivation of any interim information system capabilities that may have been needed during recovery operations. Reconstitution also includes assessments of fully restored information system capabilities, reestablishment of continuous monitoring activities, potential information system reauthorizations, and activities to prepare the systems against future disruptions, compromises, or failures. Recovery/reconstitution capabilities employed by organizations can include both automated mechanisms and manual procedures. + CA-2 + CA-6 + CA-7 + CP-2 + CP-6 + CP-7 + CP-9 + SC-24 + + + + CP-10 (1) + CONTINGENCY PLAN TESTING + + CP-4 + + + [Withdrawn: Incorporated into CP-4]. + + + + CP-10 (2) + TRANSACTION RECOVERY + MODERATE + HIGH + + The information system implements transaction recovery for systems that are transaction-based. + + + Transaction-based information systems include, for example, database management systems and transaction processing systems. Mechanisms supporting transaction recovery include, for example, transaction rollback and transaction journaling. + + + + CP-10 (3) + COMPENSATING SECURITY CONTROLS + + Chapter 3 + + + [Withdrawn: Addressed through tailoring procedures]. + + + + CP-10 (4) + RESTORE WITHIN TIME PERIOD + HIGH + + The organization provides the capability to restore information system components within [Assignment: organization-defined restoration time-periods] from configuration-controlled and integrity-protected information representing a known, operational state for the components. + + + Restoration of information system components includes, for example, reimaging which restores components to known, operational states. + CM-2 + + + + CP-10 (5) + FAILOVER CAPABILITY + + SI-13 + + + [Withdrawn: Incorporated into SI-13]. + + + + CP-10 (6) + COMPONENT PROTECTION + + The organization protects backup and restoration hardware, firmware, and software. + + + Protection of backup and restoration hardware, firmware, and software components includes both physical and technical safeguards. Backup and restoration software includes, for example, router tables, compilers, and other security-relevant system software. + AC-3 + AC-6 + PE-3 + + + + + + Federal Continuity Directive 1 + + + NIST Special Publication 800-34 + + + + + CONTINGENCY PLANNING + CP-11 + ALTERNATE COMMUNICATIONS PROTOCOLS + P0 + + The information system provides the capability to employ [Assignment: organization-defined alternative communications protocols] in support of maintaining continuity of operations. + + + Contingency plans and the associated training and testing for those plans, incorporate an alternate communications protocol capability as part of increasing the resilience of organizational information systems. Alternate communications protocols include, for example, switching from Transmission Control Protocol/Internet Protocol (TCP/IP) Version 4 to TCP/IP Version 6. Switching communications protocols may affect software applications and therefore, the potential side effects of introducing alternate communications protocols are analyzed prior to implementation. + + + + CONTINGENCY PLANNING + CP-12 + SAFE MODE + P0 + + The information system, when [Assignment: organization-defined conditions] are detected, enters a safe mode of operation with [Assignment: organization-defined restrictions of safe mode of operation]. + + + For information systems supporting critical missions/business functions including, for example, military operations and weapons systems, civilian space operations, nuclear power plant operations, and air traffic control operations (especially real-time operational environments), organizations may choose to identify certain conditions under which those systems revert to a predefined safe mode of operation. The safe mode of operation, which can be activated automatically or manually, restricts the types of activities or operations information systems could execute when those conditions are encountered. Restriction includes, for example, allowing only certain functions that could be carried out under limited power or with reduced communications bandwidth. + + + + CONTINGENCY PLANNING + CP-13 + ALTERNATIVE SECURITY MECHANISMS + P0 + + The organization employs [Assignment: organization-defined alternative or supplemental security mechanisms] for satisfying [Assignment: organization-defined security functions] when the primary means of implementing the security function is unavailable or compromised. + + + This control supports information system resiliency and contingency planning/continuity of operations. To ensure mission/business continuity, organizations can implement alternative or supplemental security mechanisms. These mechanisms may be less effective than the primary mechanisms (e.g., not as easy to use, not as scalable, or not as secure). However, having the capability to readily employ these alternative/supplemental mechanisms enhances overall mission/business continuity that might otherwise be adversely impacted if organizational operations had to be curtailed until the primary means of implementing the functions was restored. Given the cost and level of effort required to provide such alternative capabilities, this control would typically be applied only to critical security capabilities provided by information systems, system components, or information system services. For example, an organization may issue to senior executives and system administrators one-time pads in case multifactor tokens, the organization�s standard means for secure remote authentication, is compromised. + CP-2 + + + + IDENTIFICATION AND AUTHENTICATION + IA-1 + IDENTIFICATION AND AUTHENTICATION POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + IA-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + IA-1a.1. + An identification and authentication policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + IA-1a.2. + Procedures to facilitate the implementation of the identification and authentication policy and associated identification and authentication controls; and + + + + IA-1b. + Reviews and updates the current: + + IA-1b.1. + Identification and authentication policy [Assignment: organization-defined frequency]; and + + + IA-1b.2. + Identification and authentication procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the IA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + FIPS Publication 201 + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-63 + + + NIST Special Publication 800-73 + + + NIST Special Publication 800-76 + + + NIST Special Publication 800-78 + + + NIST Special Publication 800-100 + + + + + IDENTIFICATION AND AUTHENTICATION + IA-2 + IDENTIFICATION AND AUTHENTICATION (ORGANIZATIONAL USERS) + P1 + LOW + MODERATE + HIGH + + The information system uniquely identifies and authenticates organizational users (or processes acting on behalf of organizational users). + + + Organizational users include employees or individuals that organizations deem to have equivalent status of employees (e.g., contractors, guest researchers). This control applies to all accesses other than: (i) accesses that are explicitly identified and documented in AC-14; and (ii) accesses that occur through authorized use of group authenticators without individual authentication. Organizations may require unique identification of individuals in group accounts (e.g., shared privilege accounts) or for detailed accountability of individual activity. Organizations employ passwords, tokens, or biometrics to authenticate user identities, or in the case multifactor authentication, or some combination thereof. Access to organizational information systems is defined as either local access or network access. Local access is any access to organizational information systems by users (or processes acting on behalf of users) where such access is obtained by direct connections without the use of networks. Network access is access to organizational information systems by users (or processes acting on behalf of users) where such access is obtained through network connections (i.e., nonlocal accesses). Remote access is a type of network access that involves communication through external networks (e.g., the Internet). Internal networks include local area networks and wide area networks. In addition, the use of encrypted virtual private networks (VPNs) for network connections between organization-controlled endpoints and non-organization controlled endpoints may be treated as internal networks from the perspective of protecting the confidentiality and integrity of information traversing the network. +Organizations can satisfy the identification and authentication requirements in this control by complying with the requirements in Homeland Security Presidential Directive 12 consistent with the specific organizational implementation plans. Multifactor authentication requires the use of two or more different factors to achieve authentication. The factors are defined as: (i) something you know (e.g., password, personal identification number [PIN]); (ii) something you have (e.g., cryptographic identification device, token); or (iii) something you are (e.g., biometric). Multifactor solutions that require devices separate from information systems gaining access include, for example, hardware tokens providing time-based or challenge-response authenticators and smart cards such as the U.S. Government Personal Identity Verification card and the DoD common access card. In addition to identifying and authenticating users at the information system level (i.e., at logon), organizations also employ identification and authentication mechanisms at the application level, when necessary, to provide increased information security. Identification and authentication requirements for other than organizational users are described in IA-8. + AC-2 + AC-3 + AC-14 + AC-17 + AC-18 + IA-4 + IA-5 + IA-8 + + + + IA-2 (1) + NETWORK ACCESS TO PRIVILEGED ACCOUNTS + LOW + MODERATE + HIGH + + The information system implements multifactor authentication for network access to privileged accounts. + + + AC-6 + + + + IA-2 (2) + NETWORK ACCESS TO NON-PRIVILEGED ACCOUNTS + MODERATE + HIGH + + The information system implements multifactor authentication for network access to non-privileged accounts. + + + + IA-2 (3) + LOCAL ACCESS TO PRIVILEGED ACCOUNTS + MODERATE + HIGH + + The information system implements multifactor authentication for local access to privileged accounts. + + + AC-6 + + + + IA-2 (4) + LOCAL ACCESS TO NON-PRIVILEGED ACCOUNTS + HIGH + + The information system implements multifactor authentication for local access to non-privileged accounts. + + + + IA-2 (5) + GROUP AUTHENTICATION + + The organization requires individuals to be authenticated with an individual authenticator when a group authenticator is employed. + + + Requiring individuals to use individual authenticators as a second level of authentication helps organizations to mitigate the risk of using group authenticators. + + + + IA-2 (6) + NETWORK ACCESS TO PRIVILEGED ACCOUNTS - SEPARATE DEVICE + + The information system implements multifactor authentication for network access to privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. + + + AC-6 + + + + IA-2 (7) + NETWORK ACCESS TO NON-PRIVILEGED ACCOUNTS - SEPARATE DEVICE + + The information system implements multifactor authentication for network access to non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. + + + + IA-2 (8) + NETWORK ACCESS TO PRIVILEGED ACCOUNTS - REPLAY RESISTANT + MODERATE + HIGH + + The information system implements replay-resistant authentication mechanisms for network access to privileged accounts. + + + Authentication processes resist replay attacks if it is impractical to achieve successful authentications by replaying previous authentication messages. Replay-resistant techniques include, for example, protocols that use nonces or challenges such as Transport Layer Security (TLS) and time synchronous or challenge-response one-time authenticators. + + + + IA-2 (9) + NETWORK ACCESS TO NON-PRIVILEGED ACCOUNTS - REPLAY RESISTANT + HIGH + + The information system implements replay-resistant authentication mechanisms for network access to non-privileged accounts. + + + Authentication processes resist replay attacks if it is impractical to achieve successful authentications by recording/replaying previous authentication messages. Replay-resistant techniques include, for example, protocols that use nonces or challenges such as Transport Layer Security (TLS) and time synchronous or challenge-response one-time authenticators. + + + + IA-2 (10) + SINGLE SIGN-ON + + The information system provides a single sign-on capability for [Assignment: organization-defined information system accounts and services]. + + + Single sign-on enables users to log in once and gain access to multiple information system resources. Organizations consider the operational efficiencies provided by single sign-on capabilities with the increased risk from disclosures of single authenticators providing access to multiple system resources. + + + + IA-2 (11) + REMOTE ACCESS - SEPARATE DEVICE + MODERATE + HIGH + + The information system implements multifactor authentication for remote access to privileged and non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. + + + For remote access to privileged/non-privileged accounts, the purpose of requiring a device that is separate from the information system gaining access for one of the factors during multifactor authentication is to reduce the likelihood of compromising authentication credentials stored on the system. For example, adversaries deploying malicious code on organizational information systems can potentially compromise such credentials resident on the system and subsequently impersonate authorized users. + AC-6 + + + + IA-2 (12) + ACCEPTANCE OF PIV CREDENTIALS + LOW + MODERATE + HIGH + + The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials. + + + This control enhancement applies to organizations implementing logical access control systems (LACS) and physical access control systems (PACS). Personal Identity Verification (PIV) credentials are those credentials issued by federal agencies that conform to FIPS Publication 201 and supporting guidance documents. OMB Memorandum 11-11 requires federal agencies to continue implementing the requirements specified in HSPD-12 to enable agency-wide use of PIV credentials. + AU-2 + PE-3 + SA-4 + + + + IA-2 (13) + OUT-OF-BAND AUTHENTICATION + + The information system implements [Assignment: organization-defined out-of-band authentication] under [Assignment: organization-defined conditions]. + + + Out-of-band authentication (OOBA) refers to the use of two separate communication paths to identify and authenticate users or devices to an information system. The first path (i.e., the in-band path), is used to identify and authenticate users or devices, and generally is the path through which information flows. The second path (i.e., the out-of-band path) is used to independently verify the authentication and/or requested action. For example, a user authenticates via a notebook computer to a remote server to which the user desires access, and requests some action of the server via that communication path. Subsequently, the server contacts the user via the user�s cell phone to verify that the requested action originated from the user. The user may either confirm the intended action to an individual on the telephone or provide an authentication code via the telephone. This type of authentication can be employed by organizations to mitigate actual or suspected man-in the-middle attacks. The conditions for activation can include, for example, suspicious activities, new threat indicators or elevated threat levels, or the impact level or classification level of information in requested transactions. + IA-10 + IA-11 + SC-37 + + + + + + HSPD-12 + + + OMB Memorandum 04-04 + + + OMB Memorandum 06-16 + + + OMB Memorandum 11-11 + + + FIPS Publication 201 + + + NIST Special Publication 800-63 + + + NIST Special Publication 800-73 + + + NIST Special Publication 800-76 + + + NIST Special Publication 800-78 + + + FICAM Roadmap and Implementation Guidance + + + http://idmanagement.gov + + + + + IDENTIFICATION AND AUTHENTICATION + IA-3 + DEVICE IDENTIFICATION AND AUTHENTICATION + P1 + MODERATE + HIGH + + The information system uniquely identifies and authenticates [Assignment: organization-defined specific and/or types of devices] before establishing a [Selection (one or more): local; remote; network] connection. + + + Organizational devices requiring unique device-to-device identification and authentication may be defined by type, by device, or by a combination of type/device. Information systems typically use either shared known information (e.g., Media Access Control [MAC] or Transmission Control Protocol/Internet Protocol [TCP/IP] addresses) for device identification or organizational authentication solutions (e.g., IEEE 802.1x and Extensible Authentication Protocol [EAP], Radius server with EAP-Transport Layer Security [TLS] authentication, Kerberos) to identify/authenticate devices on local and/or wide area networks. Organizations determine the required strength of authentication mechanisms by the security categories of information systems. Because of the challenges of applying this control on large scale, organizations are encouraged to only apply the control to those limited number (and type) of devices that truly need to support this capability. + AC-17 + AC-18 + AC-19 + CA-3 + IA-4 + IA-5 + + + + IA-3 (1) + CRYPTOGRAPHIC BIDIRECTIONAL AUTHENTICATION + + The information system authenticates [Assignment: organization-defined specific devices and/or types of devices] before establishing [Selection (one or more): local; remote; network] connection using bidirectional authentication that is cryptographically based. + + + A local connection is any connection with a device communicating without the use of a network. A network connection is any connection with a device that communicates through a network (e.g., local area or wide area network, Internet). A remote connection is any connection with a device communicating through an external network (e.g., the Internet). Bidirectional authentication provides stronger safeguards to validate the identity of other devices for connections that are of greater risk (e.g., remote connections). + SC-8 + SC-12 + SC-13 + + + + IA-3 (2) + CRYPTOGRAPHIC BIDIRECTIONAL NETWORK AUTHENTICATION + + IA-3 (1) + + + [Withdrawn: Incorporated into IA-3 (1)]. + + + + IA-3 (3) + DYNAMIC ADDRESS ALLOCATION + + The organization: + + IA-3 (3)(a) + Standardizes dynamic address allocation lease information and the lease duration assigned to devices in accordance with [Assignment: organization-defined lease information and lease duration]; and + + + IA-3 (3)(b) + Audits lease information when assigned to a device. + + + + DHCP-enabled clients obtaining leases for IP addresses from DHCP servers, is a typical example of dynamic address allocation for devices. + AU-2 + AU-3 + AU-6 + AU-12 + + + + IA-3 (4) + DEVICE ATTESTATION + + The organization ensures that device identification and authentication based on attestation is handled by [Assignment: organization-defined configuration management process]. + + + Device attestation refers to the identification and authentication of a device based on its configuration and known operating state. This might be determined via some cryptographic hash of the device. If device attestation is the means of identification and authentication, then it is important that patches and updates to the device are handled via a configuration management process such that the those patches/updates are done securely and at the same time do not disrupt the identification and authentication to other devices. + + + + + + IDENTIFICATION AND AUTHENTICATION + IA-4 + IDENTIFIER MANAGEMENT + P1 + LOW + MODERATE + HIGH + + The organization manages information system identifiers by: + + IA-4a. + Receiving authorization from [Assignment: organization-defined personnel or roles] to assign an individual, group, role, or device identifier; + + + IA-4b. + Selecting an identifier that identifies an individual, group, role, or device; + + + IA-4c. + Assigning the identifier to the intended individual, group, role, or device; + + + IA-4d. + Preventing reuse of identifiers for [Assignment: organization-defined time period]; and + + + IA-4e. + Disabling the identifier after [Assignment: organization-defined time period of inactivity]. + + + + Common device identifiers include, for example, media access control (MAC), Internet protocol (IP) addresses, or device-unique token identifiers. Management of individual identifiers is not applicable to shared information system accounts (e.g., guest and anonymous accounts). Typically, individual identifiers are the user names of the information system accounts assigned to those individuals. In such instances, the account management activities of AC-2 use account names provided by IA-4. This control also addresses individual identifiers not necessarily associated with information system accounts (e.g., identifiers used in physical security control databases accessed by badge reader systems for access to information systems). Preventing reuse of identifiers implies preventing the assignment of previously used individual, group, role, or device identifiers to different individuals, groups, roles, or devices. + AC-2 + IA-2 + IA-3 + IA-5 + IA-8 + SC-37 + + + + IA-4 (1) + PROHIBIT ACCOUNT IDENTIFIERS AS PUBLIC IDENTIFIERS + + The organization prohibits the use of information system account identifiers that are the same as public identifiers for individual electronic mail accounts. + + + Prohibiting the use of information systems account identifiers that are the same as some public identifier such as the individual identifier section of an electronic mail address, makes it more difficult for adversaries to guess user identifiers on organizational information systems. + AT-2 + + + + IA-4 (2) + SUPERVISOR AUTHORIZATION + + The organization requires that the registration process to receive an individual identifier includes supervisor authorization. + + + + IA-4 (3) + MULTIPLE FORMS OF CERTIFICATION + + The organization requires multiple forms of certification of individual identification be presented to the registration authority. + + + Requiring multiple forms of identification, such as documentary evidence or a combination of documents and biometrics, reduces the likelihood of individuals using fraudulent identification to establish an identity, or at least increases the work factor of potential adversaries. + + + + IA-4 (4) + IDENTIFY USER STATUS + + The organization manages individual identifiers by uniquely identifying each individual as [Assignment: organization-defined characteristic identifying individual status]. + + + Characteristics identifying the status of individuals include, for example, contractors and foreign nationals. Identifying the status of individuals by specific characteristics provides additional information about the people with whom organizational personnel are communicating. For example, it might be useful for a government employee to know that one of the individuals on an email message is a contractor. + AT-2 + + + + IA-4 (5) + DYNAMIC MANAGEMENT + + The information system dynamically manages identifiers. + + + In contrast to conventional approaches to identification which presume static accounts for preregistered users, many distributed information systems including, for example, service-oriented architectures, rely on establishing identifiers at run time for entities that were previously unknown. In these situations, organizations anticipate and provision for the dynamic establishment of identifiers. Preestablished trust relationships and mechanisms with appropriate authorities to validate identities and related credentials are essential. + AC-16 + + + + IA-4 (6) + CROSS-ORGANIZATION MANAGEMENT + + The organization coordinates with [Assignment: organization-defined external organizations] for cross-organization management of identifiers. + + + Cross-organization identifier management provides the capability for organizations to appropriately identify individuals, groups, roles, or devices when conducting cross-organization activities involving the processing, storage, or transmission of information. + + + + IA-4 (7) + IN-PERSON REGISTRATION + + The organization requires that the registration process to receive an individual identifier be conducted in person before a designated registration authority. + + + In-person registration reduces the likelihood of fraudulent identifiers being issued because it requires the physical presence of individuals and actual face-to-face interactions with designated registration authorities. + + + + + + FIPS Publication 201 + + + NIST Special Publication 800-73 + + + NIST Special Publication 800-76 + + + NIST Special Publication 800-78 + + + + + IDENTIFICATION AND AUTHENTICATION + IA-5 + AUTHENTICATOR MANAGEMENT + P1 + LOW + MODERATE + HIGH + + The organization manages information system authenticators by: + + IA-5a. + Verifying, as part of the initial authenticator distribution, the identity of the individual, group, role, or device receiving the authenticator; + + + IA-5b. + Establishing initial authenticator content for authenticators defined by the organization; + + + IA-5c. + Ensuring that authenticators have sufficient strength of mechanism for their intended use; + + + IA-5d. + Establishing and implementing administrative procedures for initial authenticator distribution, for lost/compromised or damaged authenticators, and for revoking authenticators; + + + IA-5e. + Changing default content of authenticators prior to information system installation; + + + IA-5f. + Establishing minimum and maximum lifetime restrictions and reuse conditions for authenticators; + + + IA-5g. + Changing/refreshing authenticators [Assignment: organization-defined time period by authenticator type]; + + + IA-5h. + Protecting authenticator content from unauthorized disclosure and modification; + + + IA-5i. + Requiring individuals to take, and having devices implement, specific security safeguards to protect authenticators; and + + + IA-5j. + Changing authenticators for group/role accounts when membership to those accounts changes. + + + + Individual authenticators include, for example, passwords, tokens, biometrics, PKI certificates, and key cards. Initial authenticator content is the actual content (e.g., the initial password) as opposed to requirements about authenticator content (e.g., minimum password length). In many cases, developers ship information system components with factory default authentication credentials to allow for initial installation and configuration. Default authentication credentials are often well known, easily discoverable, and present a significant security risk. The requirement to protect individual authenticators may be implemented via control PL-4 or PS-6 for authenticators in the possession of individuals and by controls AC-3, AC-6, and SC-28 for authenticators stored within organizational information systems (e.g., passwords stored in hashed or encrypted formats, files containing encrypted or hashed passwords accessible with administrator privileges). Information systems support individual authenticator management by organization-defined settings and restrictions for various authenticator characteristics including, for example, minimum password length, password composition, validation time window for time synchronous one-time tokens, and number of allowed rejections during the verification stage of biometric authentication. Specific actions that can be taken to safeguard authenticators include, for example, maintaining possession of individual authenticators, not loaning or sharing individual authenticators with others, and reporting lost, stolen, or compromised authenticators immediately. Authenticator management includes issuing and revoking, when no longer needed, authenticators for temporary access such as that required for remote maintenance. Device authenticators include, for example, certificates and passwords. + AC-2 + AC-3 + AC-6 + CM-6 + IA-2 + IA-4 + IA-8 + PL-4 + PS-5 + PS-6 + SC-12 + SC-13 + SC-17 + SC-28 + + + + IA-5 (1) + PASSWORD-BASED AUTHENTICATION + LOW + MODERATE + HIGH + + The information system, for password-based authentication: + + IA-5 (1)(a) + Enforces minimum password complexity of [Assignment: organization-defined requirements for case sensitivity, number of characters, mix of upper-case letters, lower-case letters, numbers, and special characters, including minimum requirements for each type]; + + + IA-5 (1)(b) + Enforces at least the following number of changed characters when new passwords are created: [Assignment: organization-defined number]; + + + IA-5 (1)(c) + Stores and transmits only cryptographically-protected passwords; + + + IA-5 (1)(d) + Enforces password minimum and maximum lifetime restrictions of [Assignment: organization-defined numbers for lifetime minimum, lifetime maximum]; + + + IA-5 (1)(e) + Prohibits password reuse for [Assignment: organization-defined number] generations; and + + + IA-5 (1)(f) + Allows the use of a temporary password for system logons with an immediate change to a permanent password. + + + + This control enhancement applies to single-factor authentication of individuals using passwords as individual or group authenticators, and in a similar manner, when passwords are part of multifactor authenticators. This control enhancement does not apply when passwords are used to unlock hardware authenticators (e.g., Personal Identity Verification cards). The implementation of such password mechanisms may not meet all of the requirements in the enhancement. Cryptographically-protected passwords include, for example, encrypted versions of passwords and one-way cryptographic hashes of passwords. The number of changed characters refers to the number of changes required with respect to the total number of positions in the current password. Password lifetime restrictions do not apply to temporary passwords. To mitigate certain brute force attacks against passwords, organizations may also consider salting passwords. + IA-6 + + + + IA-5 (2) + PKI-BASED AUTHENTICATION + MODERATE + HIGH + + The information system, for PKI-based authentication: + + IA-5 (2)(a) + Validates certifications by constructing and verifying a certification path to an accepted trust anchor including checking certificate status information; + + + IA-5 (2)(b) + Enforces authorized access to the corresponding private key; + + + IA-5 (2)(c) + Maps the authenticated identity to the account of the individual or group; and + + + IA-5 (2)(d) + Implements a local cache of revocation data to support path discovery and validation in case of inability to access revocation information via the network. + + + + Status information for certification paths includes, for example, certificate revocation lists or certificate status protocol responses. For PIV cards, validation of certifications involves the construction and verification of a certification path to the Common Policy Root trust anchor including certificate policy processing. + IA-6 + + + + IA-5 (3) + IN-PERSON OR TRUSTED THIRD-PARTY REGISTRATION + MODERATE + HIGH + + The organization requires that the registration process to receive [Assignment: organization-defined types of and/or specific authenticators] be conducted [Selection: in person; by a trusted third party] before [Assignment: organization-defined registration authority] with authorization by [Assignment: organization-defined personnel or roles]. + + + + IA-5 (4) + AUTOMATED SUPPORT FOR PASSWORD STRENGTH DETERMINATION + + The organization employs automated tools to determine if password authenticators are sufficiently strong to satisfy [Assignment: organization-defined requirements]. + + + This control enhancement focuses on the creation of strong passwords and the characteristics of such passwords (e.g., complexity) prior to use, the enforcement of which is carried out by organizational information systems in IA-5 (1). + CA-2 + CA-7 + RA-5 + + + + IA-5 (5) + CHANGE AUTHENTICATORS PRIOR TO DELIVERY + + The organization requires developers/installers of information system components to provide unique authenticators or change default authenticators prior to delivery/installation. + + + This control enhancement extends the requirement for organizations to change default authenticators upon information system installation, by requiring developers and/or installers to provide unique authenticators or change default authenticators for system components prior to delivery and/or installation. However, it typically does not apply to the developers of commercial off-the-shelve information technology products. Requirements for unique authenticators can be included in acquisition documents prepared by organizations when procuring information systems or system components. + + + + IA-5 (6) + PROTECTION OF AUTHENTICATORS + + The organization protects authenticators commensurate with the security category of the information to which use of the authenticator permits access. + + + For information systems containing multiple security categories of information without reliable physical or logical separation between categories, authenticators used to grant access to the systems are protected commensurate with the highest security category of information on the systems. + + + + IA-5 (7) + NO EMBEDDED UNENCRYPTED STATIC AUTHENTICATORS + + The organization ensures that unencrypted static authenticators are not embedded in applications or access scripts or stored on function keys. + + + Organizations exercise caution in determining whether embedded or stored authenticators are in encrypted or unencrypted form. If authenticators are used in the manner stored, then those representations are considered unencrypted authenticators. This is irrespective of whether that representation is perhaps an encrypted version of something else (e.g., a password). + + + + IA-5 (8) + MULTIPLE INFORMATION SYSTEM ACCOUNTS + + The organization implements [Assignment: organization-defined security safeguards] to manage the risk of compromise due to individuals having accounts on multiple information systems. + + + When individuals have accounts on multiple information systems, there is the risk that the compromise of one account may lead to the compromise of other accounts if individuals use the same authenticators. Possible alternatives include, for example: (i) having different authenticators on all systems; (ii) employing some form of single sign-on mechanism; or (iii) including some form of one-time passwords on all systems. + + + + IA-5 (9) + CROSS-ORGANIZATION CREDENTIAL MANAGEMENT + + The organization coordinates with [Assignment: organization-defined external organizations] for cross-organization management of credentials. + + + Cross-organization management of credentials provides the capability for organizations to appropriately authenticate individuals, groups, roles, or devices when conducting cross-organization activities involving the processing, storage, or transmission of information. + + + + IA-5 (10) + DYNAMIC CREDENTIAL ASSOCIATION + + The information system dynamically provisions identities. + + + Authentication requires some form of binding between an identity and the authenticator used to confirm the identity. In conventional approaches, this binding is established by pre-provisioning both the identity and the authenticator to the information system. For example, the binding between a username (i.e., identity) and a password (i.e., authenticator) is accomplished by provisioning the identity and authenticator as a pair in the information system. New authentication techniques allow the binding between the identity and the authenticator to be implemented outside an information system. For example, with smartcard credentials, the identity and the authenticator are bound together on the card. Using these credentials, information systems can authenticate identities that have not been pre-provisioned, dynamically provisioning the identity after authentication. In these situations, organizations can anticipate the dynamic provisioning of identities. Preestablished trust relationships and mechanisms with appropriate authorities to validate identities and related credentials are essential. + + + + IA-5 (11) + HARDWARE TOKEN-BASED AUTHENTICATION + LOW + MODERATE + HIGH + + The information system, for hardware token-based authentication, employs mechanisms that satisfy [Assignment: organization-defined token quality requirements]. + + + Hardware token-based authentication typically refers to the use of PKI-based tokens, such as the U.S. Government Personal Identity Verification (PIV) card. Organizations define specific requirements for tokens, such as working with a particular PKI. + + + + IA-5 (12) + BIOMETRIC-BASED AUTHENTICATION + + The information system, for biometric-based authentication, employs mechanisms that satisfy [Assignment: organization-defined biometric quality requirements]. + + + Unlike password-based authentication which provides exact matches of user-input passwords to stored passwords, biometric authentication does not provide such exact matches. Depending upon the type of biometric and the type of collection mechanism, there is likely to be some divergence from the presented biometric and stored biometric which serves as the basis of comparison. There will likely be both false positives and false negatives when making such comparisons. The rate at which the false accept and false reject rates are equal is known as the crossover rate. Biometric quality requirements include, for example, acceptable crossover rates, as that essentially reflects the accuracy of the biometric. + + + + IA-5 (13) + EXPIRATION OF CACHED AUTHENTICATORS + + The information system prohibits the use of cached authenticators after [Assignment: organization-defined time period]. + + + + IA-5 (14) + MANAGING CONTENT OF PKI TRUST STORES + + The organization, for PKI-based authentication, employs a deliberate organization-wide methodology for managing the content of PKI trust stores installed across all platforms including networks, operating systems, browsers, and applications. + + + + IA-5 (15) + FICAM-APPROVED PRODUCTS AND SERVICES + + The organization uses only FICAM-approved path discovery and validation products and services. + + + Federal Identity, Credential, and Access Management (FICAM)-approved path discovery and validation products and services are those products and services that have been approved through the FICAM conformance program, where applicable. + + + + + + OMB Memorandum 04-04 + + + OMB Memorandum 11-11 + + + FIPS Publication 201 + + + NIST Special Publication 800-73 + + + NIST Special Publication 800-63 + + + NIST Special Publication 800-76 + + + NIST Special Publication 800-78 + + + FICAM Roadmap and Implementation Guidance + + + http://idmanagement.gov + + + + + IDENTIFICATION AND AUTHENTICATION + IA-6 + AUTHENTICATOR FEEDBACK + P2 + LOW + MODERATE + HIGH + + The information system obscures feedback of authentication information during the authentication process to protect the information from possible exploitation/use by unauthorized individuals. + + + The feedback from information systems does not provide information that would allow unauthorized individuals to compromise authentication mechanisms. For some types of information systems or system components, for example, desktops/notebooks with relatively large monitors, the threat (often referred to as shoulder surfing) may be significant. For other types of systems or components, for example, mobile devices with 2-4 inch screens, this threat may be less significant, and may need to be balanced against the increased likelihood of typographic input errors due to the small keyboards. Therefore, the means for obscuring the authenticator feedback is selected accordingly. Obscuring the feedback of authentication information includes, for example, displaying asterisks when users type passwords into input devices, or displaying feedback for a very limited time before fully obscuring it. + PE-18 + + + + IDENTIFICATION AND AUTHENTICATION + IA-7 + CRYPTOGRAPHIC MODULE AUTHENTICATION + P1 + LOW + MODERATE + HIGH + + The information system implements mechanisms for authentication to a cryptographic module that meet the requirements of applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance for such authentication. + + + Authentication mechanisms may be required within a cryptographic module to authenticate an operator accessing the module and to verify that the operator is authorized to assume the requested role and perform services within that role. + SC-12 + SC-13 + + + + FIPS Publication 140 + + + http://csrc.nist.gov/groups/STM/cmvp/index.html + + + + + IDENTIFICATION AND AUTHENTICATION + IA-8 + IDENTIFICATION AND AUTHENTICATION (NON-ORGANIZATIONAL USERS) + P1 + LOW + MODERATE + HIGH + + The information system uniquely identifies and authenticates non-organizational users (or processes acting on behalf of non-organizational users). + + + Non-organizational users include information system users other than organizational users explicitly covered by IA-2. These individuals are uniquely identified and authenticated for accesses other than those accesses explicitly identified and documented in AC-14. In accordance with the E-Authentication E-Government initiative, authentication of non-organizational users accessing federal information systems may be required to protect federal, proprietary, or privacy-related information (with exceptions noted for national security systems). Organizations use risk assessments to determine authentication needs and consider scalability, practicality, and security in balancing the need to ensure ease of use for access to federal information and information systems with the need to protect and adequately mitigate risk. IA-2 addresses identification and authentication requirements for access to information systems by organizational users. + AC-2 + AC-14 + AC-17 + AC-18 + IA-2 + IA-4 + IA-5 + MA-4 + RA-3 + SA-12 + SC-8 + + + + IA-8 (1) + ACCEPTANCE OF PIV CREDENTIALS FROM OTHER AGENCIES + LOW + MODERATE + HIGH + + The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials from other federal agencies. + + + This control enhancement applies to logical access control systems (LACS) and physical access control systems (PACS). Personal Identity Verification (PIV) credentials are those credentials issued by federal agencies that conform to FIPS Publication 201 and supporting guidance documents. OMB Memorandum 11-11 requires federal agencies to continue implementing the requirements specified in HSPD-12 to enable agency-wide use of PIV credentials. + AU-2 + PE-3 + SA-4 + + + + IA-8 (2) + ACCEPTANCE OF THIRD-PARTY CREDENTIALS + LOW + MODERATE + HIGH + + The information system accepts only FICAM-approved third-party credentials. + + + This control enhancement typically applies to organizational information systems that are accessible to the general public, for example, public-facing websites. Third-party credentials are those credentials issued by nonfederal government entities approved by the Federal Identity, Credential, and Access Management (FICAM) Trust Framework Solutions initiative. Approved third-party credentials meet or exceed the set of minimum federal government-wide technical, security, privacy, and organizational maturity requirements. This allows federal government relying parties to trust such credentials at their approved assurance levels. + AU-2 + + + + IA-8 (3) + USE OF FICAM-APPROVED PRODUCTS + LOW + MODERATE + HIGH + + The organization employs only FICAM-approved information system components in [Assignment: organization-defined information systems] to accept third-party credentials. + + + This control enhancement typically applies to information systems that are accessible to the general public, for example, public-facing websites. FICAM-approved information system components include, for example, information technology products and software libraries that have been approved by the Federal Identity, Credential, and Access Management conformance program. + SA-4 + + + + IA-8 (4) + USE OF FICAM-ISSUED PROFILES + LOW + MODERATE + HIGH + + The information system conforms to FICAM-issued profiles. + + + This control enhancement addresses open identity management standards. To ensure that these standards are viable, robust, reliable, sustainable (e.g., available in commercial information technology products), and interoperable as documented, the United States Government assesses and scopes identity management standards and technology implementations against applicable federal legislation, directives, policies, and requirements. The result is FICAM-issued implementation profiles of approved protocols (e.g., FICAM authentication protocols such as SAML 2.0 and OpenID 2.0, as well as other protocols such as the FICAM Backend Attribute Exchange). + SA-4 + + + + IA-8 (5) + ACCEPTANCE OF PIV-I CREDENTIALS + + The information system accepts and electronically verifies Personal Identity Verification-I (PIV-I) credentials. + + + This control enhancement: (i) applies to logical and physical access control systems; and (ii) addresses Non-Federal Issuers (NFIs) of identity cards that desire to interoperate with United States Government Personal Identity Verification (PIV) information systems and that can be trusted by federal government-relying parties. The X.509 certificate policy for the Federal Bridge Certification Authority (FBCA) addresses PIV-I requirements. The PIV-I card is suitable for Assurance Level 4 as defined in OMB Memorandum 04-04 and NIST Special Publication 800-63, and multifactor authentication as defined in NIST Special Publication 800-116. PIV-I credentials are those credentials issued by a PIV-I provider whose PIV-I certificate policy maps to the Federal Bridge PIV-I Certificate Policy. A PIV-I provider is cross-certified (directly or through another PKI bridge) with the FBCA with policies that have been mapped and approved as meeting the requirements of the PIV-I policies defined in the FBCA certificate policy. + AU-2 + + + + + + OMB Memorandum 04-04 + + + OMB Memorandum 11-11 + + + OMB Memorandum 10-06-2011 + + + FICAM Roadmap and Implementation Guidance + + + FIPS Publication 201 + + + NIST Special Publication 800-63 + + + NIST Special Publication 800-116 + + + National Strategy for Trusted Identities in Cyberspace + + + http://idmanagement.gov + + + + + IDENTIFICATION AND AUTHENTICATION + IA-9 + SERVICE IDENTIFICATION AND AUTHENTICATION + P0 + + The organization identifies and authenticates [Assignment: organization-defined information system services] using [Assignment: organization-defined security safeguards]. + + + This control supports service-oriented architectures and other distributed architectural approaches requiring the identification and authentication of information system services. In such architectures, external services often appear dynamically. Therefore, information systems should be able to determine in a dynamic manner, if external providers and associated services are authentic. Safeguards implemented by organizational information systems to validate provider and service authenticity include, for example, information or code signing, provenance graphs, and/or electronic signatures indicating or including the sources of services. + + + + IA-9 (1) + INFORMATION EXCHANGE + + The organization ensures that service providers receive, validate, and transmit identification and authentication information. + + + + IA-9 (2) + TRANSMISSION OF DECISIONS + + The organization ensures that identification and authentication decisions are transmitted between [Assignment: organization-defined services] consistent with organizational policies. + + + For distributed architectures (e.g., service-oriented architectures), the decisions regarding the validation of identification and authentication claims may be made by services separate from the services acting on those decisions. In such situations, it is necessary to provide the identification and authentication decisions (as opposed to the actual identifiers and authenticators) to the services that need to act on those decisions. + SC-8 + + + + + + IDENTIFICATION AND AUTHENTICATION + IA-10 + ADAPTIVE IDENTIFICATION AND AUTHENTICATION + P0 + + The organization requires that individuals accessing the information system employ [Assignment: organization-defined supplemental authentication techniques or mechanisms] under specific [Assignment: organization-defined circumstances or situations]. + + + Adversaries may compromise individual authentication mechanisms and subsequently attempt to impersonate legitimate users. This situation can potentially occur with any authentication mechanisms employed by organizations. To address this threat, organizations may employ specific techniques/mechanisms and establish protocols to assess suspicious behavior (e.g., individuals accessing information that they do not typically access as part of their normal duties, roles, or responsibilities, accessing greater quantities of information than the individuals would routinely access, or attempting to access information from suspicious network addresses). In these situations when certain preestablished conditions or triggers occur, organizations can require selected individuals to provide additional authentication information. Another potential use for adaptive identification and authentication is to increase the strength of mechanism based on the number and/or types of records being accessed. + AU-6 + SI-4 + + + + IDENTIFICATION AND AUTHENTICATION + IA-11 + RE-AUTHENTICATION + P0 + + The organization requires users and devices to re-authenticate when [Assignment: organization-defined circumstances or situations requiring re-authentication]. + + + In addition to the re-authentication requirements associated with session locks, organizations may require re-authentication of individuals and/or devices in other situations including, for example: (i) when authenticators change; (ii), when roles change; (iii) when security categories of information systems change; (iv), when the execution of privileged functions occurs; (v) after a fixed period of time; or (vi) periodically. + AC-11 + + + + INCIDENT RESPONSE + IR-1 + INCIDENT RESPONSE POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + IR-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + IR-1a.1. + An incident response policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + IR-1a.2. + Procedures to facilitate the implementation of the incident response policy and associated incident response controls; and + + + + IR-1b. + Reviews and updates the current: + + IR-1b.1. + Incident response policy [Assignment: organization-defined frequency]; and + + + IR-1b.2. + Incident response procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the IR family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-61 + + + NIST Special Publication 800-83 + + + NIST Special Publication 800-100 + + + + + INCIDENT RESPONSE + IR-2 + INCIDENT RESPONSE TRAINING + P2 + LOW + MODERATE + HIGH + + The organization provides incident response training to information system users consistent with assigned roles and responsibilities: + + IR-2a. + Within [Assignment: organization-defined time period] of assuming an incident response role or responsibility; + + + IR-2b. + When required by information system changes; and + + + IR-2c. + [Assignment: organization-defined frequency] thereafter. + + + + Incident response training provided by organizations is linked to the assigned roles and responsibilities of organizational personnel to ensure the appropriate content and level of detail is included in such training. For example, regular users may only need to know who to call or how to recognize an incident on the information system; system administrators may require additional training on how to handle/remediate incidents; and incident responders may receive more specific training on forensics, reporting, system recovery, and restoration. Incident response training includes user training in the identification and reporting of suspicious activities, both from external and internal sources. + AT-3 + CP-3 + IR-8 + + + + IR-2 (1) + SIMULATED EVENTS + HIGH + + The organization incorporates simulated events into incident response training to facilitate effective response by personnel in crisis situations. + + + + IR-2 (2) + AUTOMATED TRAINING ENVIRONMENTS + HIGH + + The organization employs automated mechanisms to provide a more thorough and realistic incident response training environment. + + + + + + NIST Special Publication 800-16 + + + NIST Special Publication 800-50 + + + + + INCIDENT RESPONSE + IR-3 + INCIDENT RESPONSE TESTING + P2 + MODERATE + HIGH + + The organization tests the incident response capability for the information system [Assignment: organization-defined frequency] using [Assignment: organization-defined tests] to determine the incident response effectiveness and documents the results. + + + Organizations test incident response capabilities to determine the overall effectiveness of the capabilities and to identify potential weaknesses or deficiencies. Incident response testing includes, for example, the use of checklists, walk-through or tabletop exercises, simulations (parallel/full interrupt), and comprehensive exercises. Incident response testing can also include a determination of the effects on organizational operations (e.g., reduction in mission capabilities), organizational assets, and individuals due to incident response. + CP-4 + IR-8 + + + + IR-3 (1) + AUTOMATED TESTING + + The organization employs automated mechanisms to more thoroughly and effectively test the incident response capability. + + + Organizations use automated mechanisms to more thoroughly and effectively test incident response capabilities, for example: (i) by providing more complete coverage of incident response issues; (ii) by selecting more realistic test scenarios and test environments; and (iii) by stressing the response capability. + AT-2 + + + + IR-3 (2) + COORDINATION WITH RELATED PLANS + MODERATE + HIGH + + The organization coordinates incident response testing with organizational elements responsible for related plans. + + + Organizational plans related to incident response testing include, for example, Business Continuity Plans, Contingency Plans, Disaster Recovery Plans, Continuity of Operations Plans, Crisis Communications Plans, Critical Infrastructure Plans, and Occupant Emergency Plans. + + + + + + NIST Special Publication 800-84 + + + NIST Special Publication 800-115 + + + + + INCIDENT RESPONSE + IR-4 + INCIDENT HANDLING + P1 + LOW + MODERATE + HIGH + + The organization: + + IR-4a. + Implements an incident handling capability for security incidents that includes preparation, detection and analysis, containment, eradication, and recovery; + + + IR-4b. + Coordinates incident handling activities with contingency planning activities; and + + + IR-4c. + Incorporates lessons learned from ongoing incident handling activities into incident response procedures, training, and testing, and implements the resulting changes accordingly. + + + + Organizations recognize that incident response capability is dependent on the capabilities of organizational information systems and the mission/business processes being supported by those systems. Therefore, organizations consider incident response as part of the definition, design, and development of mission/business processes and information systems. Incident-related information can be obtained from a variety of sources including, for example, audit monitoring, network monitoring, physical access monitoring, user/administrator reports, and reported supply chain events. Effective incident handling capability includes coordination among many organizational entities including, for example, mission/business owners, information system owners, authorizing officials, human resources offices, physical and personnel security offices, legal departments, operations personnel, procurement offices, and the risk executive (function). + AU-6 + CM-6 + CP-2 + CP-4 + IR-2 + IR-3 + IR-8 + PE-6 + SC-5 + SC-7 + SI-3 + SI-4 + SI-7 + + + + IR-4 (1) + AUTOMATED INCIDENT HANDLING PROCESSES + MODERATE + HIGH + + The organization employs automated mechanisms to support the incident handling process. + + + Automated mechanisms supporting incident handling processes include, for example, online incident management systems. + + + + IR-4 (2) + DYNAMIC RECONFIGURATION + + The organization includes dynamic reconfiguration of [Assignment: organization-defined information system components] as part of the incident response capability. + + + Dynamic reconfiguration includes, for example, changes to router rules, access control lists, intrusion detection/prevention system parameters, and filter rules for firewalls and gateways. Organizations perform dynamic reconfiguration of information systems, for example, to stop attacks, to misdirect attackers, and to isolate components of systems, thus limiting the extent of the damage from breaches or compromises. Organizations include time frames for achieving the reconfiguration of information systems in the definition of the reconfiguration capability, considering the potential need for rapid response in order to effectively address sophisticated cyber threats. + AC-2 + AC-4 + AC-16 + CM-2 + CM-3 + CM-4 + + + + IR-4 (3) + CONTINUITY OF OPERATIONS + + The organization identifies [Assignment: organization-defined classes of incidents] and [Assignment: organization-defined actions to take in response to classes of incidents] to ensure continuation of organizational missions and business functions. + + + Classes of incidents include, for example, malfunctions due to design/implementation errors and omissions, targeted malicious attacks, and untargeted malicious attacks. Appropriate incident response actions include, for example, graceful degradation, information system shutdown, fall back to manual mode/alternative technology whereby the system operates differently, employing deceptive measures, alternate information flows, or operating in a mode that is reserved solely for when systems are under attack. + + + + IR-4 (4) + INFORMATION CORRELATION + HIGH + + The organization correlates incident information and individual incident responses to achieve an organization-wide perspective on incident awareness and response. + + + Sometimes the nature of a threat event, for example, a hostile cyber attack, is such that it can only be observed by bringing together information from different sources including various reports and reporting procedures established by organizations. + + + + IR-4 (5) + AUTOMATIC DISABLING OF INFORMATION SYSTEM + + The organization implements a configurable capability to automatically disable the information system if [Assignment: organization-defined security violations] are detected. + + + + IR-4 (6) + INSIDER THREATS - SPECIFIC CAPABILITIES + + The organization implements incident handling capability for insider threats. + + + While many organizations address insider threat incidents as an inherent part of their organizational incident response capability, this control enhancement provides additional emphasis on this type of threat and the need for specific incident handling capabilities (as defined within organizations) to provide appropriate and timely responses. + + + + IR-4 (7) + INSIDER THREATS - INTRA-ORGANIZATION COORDINATION + + The organization coordinates incident handling capability for insider threats across [Assignment: organization-defined components or elements of the organization]. + + + Incident handling for insider threat incidents (including preparation, detection and analysis, containment, eradication, and recovery) requires close coordination among a variety of organizational components or elements to be effective. These components or elements include, for example, mission/business owners, information system owners, human resources offices, procurement offices, personnel/physical security offices, operations personnel, and risk executive (function). In addition, organizations may require external support from federal, state, and local law enforcement agencies. + + + + IR-4 (8) + CORRELATION WITH EXTERNAL ORGANIZATIONS + + The organization coordinates with [Assignment: organization-defined external organizations] to correlate and share [Assignment: organization-defined incident information] to achieve a cross-organization perspective on incident awareness and more effective incident responses. + + + The coordination of incident information with external organizations including, for example, mission/business partners, military/coalition partners, customers, and multitiered developers, can provide significant benefits. Cross-organizational coordination with respect to incident handling can serve as an important risk management capability. This capability allows organizations to leverage critical information from a variety of sources to effectively respond to information security-related incidents potentially affecting the organization�s operations, assets, and individuals. + + + + IR-4 (9) + DYNAMIC RESPONSE CAPABILITY + + The organization employs [Assignment: organization-defined dynamic response capabilities] to effectively respond to security incidents. + + + This control enhancement addresses the deployment of replacement or new capabilities in a timely manner in response to security incidents (e.g., adversary actions during hostile cyber attacks). This includes capabilities implemented at the mission/business process level (e.g., activating alternative mission/business processes) and at the information system level. + CP-10 + + + + IR-4 (10) + SUPPLY CHAIN COORDINATION + + The organization coordinates incident handling activities involving supply chain events with other organizations involved in the supply chain. + + + Organizations involved in supply chain activities include, for example, system/product developers, integrators, manufacturers, packagers, assemblers, distributors, vendors, and resellers. Supply chain incidents include, for example, compromises/breaches involving information system components, information technology products, development processes or personnel, and distribution processes or warehousing facilities. + + + + + + Executive Order 13587 + + + NIST Special Publication 800-61 + + + + + INCIDENT RESPONSE + IR-5 + INCIDENT MONITORING + P1 + LOW + MODERATE + HIGH + + The organization tracks and documents information system security incidents. + + + Documenting information system security incidents includes, for example, maintaining records about each incident, the status of the incident, and other pertinent information necessary for forensics, evaluating incident details, trends, and handling. Incident information can be obtained from a variety of sources including, for example, incident reports, incident response teams, audit monitoring, network monitoring, physical access monitoring, and user/administrator reports. + AU-6 + IR-8 + PE-6 + SC-5 + SC-7 + SI-3 + SI-4 + SI-7 + + + + IR-5 (1) + AUTOMATED TRACKING / DATA COLLECTION / ANALYSIS + HIGH + + The organization employs automated mechanisms to assist in the tracking of security incidents and in the collection and analysis of incident information. + + + Automated mechanisms for tracking security incidents and collecting/analyzing incident information include, for example, the Einstein network monitoring device and monitoring online Computer Incident Response Centers (CIRCs) or other electronic databases of incidents. + AU-7 + IR-4 + + + + + + NIST Special Publication 800-61 + + + + + INCIDENT RESPONSE + IR-6 + INCIDENT REPORTING + P1 + LOW + MODERATE + HIGH + + The organization: + + IR-6a. + Requires personnel to report suspected security incidents to the organizational incident response capability within [Assignment: organization-defined time period]; and + + + IR-6b. + Reports security incident information to [Assignment: organization-defined authorities]. + + + + The intent of this control is to address both specific incident reporting requirements within an organization and the formal incident reporting requirements for federal agencies and their subordinate organizations. Suspected security incidents include, for example, the receipt of suspicious email communications that can potentially contain malicious code. The types of security incidents reported, the content and timeliness of the reports, and the designated reporting authorities reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Current federal policy requires that all federal agencies (unless specifically exempted from such requirements) report security incidents to the United States Computer Emergency Readiness Team (US-CERT) within specified time frames designated in the US-CERT Concept of Operations for Federal Cyber Security Incident Handling. + IR-4 + IR-5 + IR-8 + + + + IR-6 (1) + AUTOMATED REPORTING + MODERATE + HIGH + + The organization employs automated mechanisms to assist in the reporting of security incidents. + + + IR-7 + + + + IR-6 (2) + VULNERABILITIES RELATED TO INCIDENTS + + The organization reports information system vulnerabilities associated with reported security incidents to [Assignment: organization-defined personnel or roles]. + + + + IR-6 (3) + COORDINATION WITH SUPPLY CHAIN + + The organization provides security incident information to other organizations involved in the supply chain for information systems or information system components related to the incident. + + + Organizations involved in supply chain activities include, for example, system/product developers, integrators, manufacturers, packagers, assemblers, distributors, vendors, and resellers. Supply chain incidents include, for example, compromises/breaches involving information system components, information technology products, development processes or personnel, and distribution processes or warehousing facilities. Organizations determine the appropriate information to share considering the value gained from support by external organizations with the potential for harm due to sensitive information being released to outside organizations of perhaps questionable trustworthiness. + + + + + + NIST Special Publication 800-61 + + + http://www.us-cert.gov + + + + + INCIDENT RESPONSE + IR-7 + INCIDENT RESPONSE ASSISTANCE + P2 + LOW + MODERATE + HIGH + + The organization provides an incident response support resource, integral to the organizational incident response capability that offers advice and assistance to users of the information system for the handling and reporting of security incidents. + + + Incident response support resources provided by organizations include, for example, help desks, assistance groups, and access to forensics services, when required. + AT-2 + IR-4 + IR-6 + IR-8 + SA-9 + + + + IR-7 (1) + AUTOMATION SUPPORT FOR AVAILABILITY OF INFORMATION / SUPPORT + MODERATE + HIGH + + The organization employs automated mechanisms to increase the availability of incident response-related information and support. + + + Automated mechanisms can provide a push and/or pull capability for users to obtain incident response assistance. For example, individuals might have access to a website to query the assistance capability, or conversely, the assistance capability may have the ability to proactively send information to users (general distribution or targeted) as part of increasing understanding of current response capabilities and support. + + + + IR-7 (2) + COORDINATION WITH EXTERNAL PROVIDERS + + The organization: + + IR-7 (2)(a) + Establishes a direct, cooperative relationship between its incident response capability and external providers of information system protection capability; and + + + IR-7 (2)(b) + Identifies organizational incident response team members to the external providers. + + + + External providers of information system protection capability include, for example, the Computer Network Defense program within the U.S. Department of Defense. External providers help to protect, monitor, analyze, detect, and respond to unauthorized activity within organizational information systems and networks. + + + + + + INCIDENT RESPONSE + IR-8 + INCIDENT RESPONSE PLAN + P1 + LOW + MODERATE + HIGH + + The organization: + + IR-8a. + Develops an incident response plan that: + + IR-8a.1. + Provides the organization with a roadmap for implementing its incident response capability; + + + IR-8a.2. + Describes the structure and organization of the incident response capability; + + + IR-8a.3. + Provides a high-level approach for how the incident response capability fits into the overall organization; + + + IR-8a.4. + Meets the unique requirements of the organization, which relate to mission, size, structure, and functions; + + + IR-8a.5. + Defines reportable incidents; + + + IR-8a.6. + Provides metrics for measuring the incident response capability within the organization; + + + IR-8a.7. + Defines the resources and management support needed to effectively maintain and mature an incident response capability; and + + + IR-8a.8. + Is reviewed and approved by [Assignment: organization-defined personnel or roles]; + + + + IR-8b. + Distributes copies of the incident response plan to [Assignment: organization-defined incident response personnel (identified by name and/or by role) and organizational elements]; + + + IR-8c. + Reviews the incident response plan [Assignment: organization-defined frequency]; + + + IR-8d. + Updates the incident response plan to address system/organizational changes or problems encountered during plan implementation, execution, or testing; + + + IR-8e. + Communicates incident response plan changes to [Assignment: organization-defined incident response personnel (identified by name and/or by role) and organizational elements]; and + + + IR-8f. + Protects the incident response plan from unauthorized disclosure and modification. + + + + It is important that organizations develop and implement a coordinated approach to incident response. Organizational missions, business functions, strategies, goals, and objectives for incident response help to determine the structure of incident response capabilities. As part of a comprehensive incident response capability, organizations consider the coordination and sharing of information with external organizations, including, for example, external service providers and organizations involved in the supply chain for organizational information systems. + MP-2 + MP-4 + MP-5 + + + + NIST Special Publication 800-61 + + + + + INCIDENT RESPONSE + IR-9 + INFORMATION SPILLAGE RESPONSE + P0 + + The organization responds to information spills by: + + IR-9a. + Identifying the specific information involved in the information system contamination; + + + IR-9b. + Alerting [Assignment: organization-defined personnel or roles] of the information spill using a method of communication not associated with the spill; + + + IR-9c. + Isolating the contaminated information system or system component; + + + IR-9d. + Eradicating the information from the contaminated information system or component; + + + IR-9e. + Identifying other information systems or system components that may have been subsequently contaminated; and + + + IR-9f. + Performing other [Assignment: organization-defined actions]. + + + + Information spillage refers to instances where either classified or sensitive information is inadvertently placed on information systems that are not authorized to process such information. Such information spills often occur when information that is initially thought to be of lower sensitivity is transmitted to an information system and then is subsequently determined to be of higher sensitivity. At that point, corrective action is required. The nature of the organizational response is generally based upon the degree of sensitivity of the spilled information (e.g., security category or classification level), the security capabilities of the information system, the specific nature of contaminated storage media, and the access authorizations (e.g., security clearances) of individuals with authorized access to the contaminated system. The methods used to communicate information about the spill after the fact do not involve methods directly associated with the actual spill to minimize the risk of further spreading the contamination before such contamination is isolated and eradicated. + + + + IR-9 (1) + RESPONSIBLE PERSONNEL + + The organization assigns [Assignment: organization-defined personnel or roles] with responsibility for responding to information spills. + + + + IR-9 (2) + TRAINING + + The organization provides information spillage response training [Assignment: organization-defined frequency]. + + + + IR-9 (3) + POST-SPILL OPERATIONS + + The organization implements [Assignment: organization-defined procedures] to ensure that organizational personnel impacted by information spills can continue to carry out assigned tasks while contaminated systems are undergoing corrective actions. + + + Correction actions for information systems contaminated due to information spillages may be very time-consuming. During those periods, personnel may not have access to the contaminated systems, which may potentially affect their ability to conduct organizational business. + + + + IR-9 (4) + EXPOSURE TO UNAUTHORIZED PERSONNEL + + The organization employs [Assignment: organization-defined security safeguards] for personnel exposed to information not within assigned access authorizations. + + + Security safeguards include, for example, making personnel exposed to spilled information aware of the federal laws, directives, policies, and/or regulations regarding the information and the restrictions imposed based on exposure to such information. + + + + + + INCIDENT RESPONSE + IR-10 + INTEGRATED INFORMATION SECURITY ANALYSIS TEAM + P0 + + The organization establishes an integrated team of forensic/malicious code analysts, tool developers, and real-time operations personnel. + + + Having an integrated team for incident response facilitates information sharing. Such capability allows organizational personnel, including developers, implementers, and operators, to leverage the team knowledge of the threat in order to implement defensive measures that will enable organizations to deter intrusions more effectively. Moreover, it promotes the rapid detection of intrusions, development of appropriate mitigations, and the deployment of effective defensive measures. For example, when an intrusion is detected, the integrated security analysis team can rapidly develop an appropriate response for operators to implement, correlate the new incident with information on past intrusions, and augment ongoing intelligence development. This enables the team to identify adversary TTPs that are linked to the operations tempo or to specific missions/business functions, and to define responsive actions in a way that does not disrupt the mission/business operations. Ideally, information security analysis teams are distributed within organizations to make the capability more resilient. + + + + MAINTENANCE + MA-1 + SYSTEM MAINTENANCE POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + MA-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + MA-1a.1. + A system maintenance policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + MA-1a.2. + Procedures to facilitate the implementation of the system maintenance policy and associated system maintenance controls; and + + + + MA-1b. + Reviews and updates the current: + + MA-1b.1. + System maintenance policy [Assignment: organization-defined frequency]; and + + + MA-1b.2. + System maintenance procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the MA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + MAINTENANCE + MA-2 + CONTROLLED MAINTENANCE + P2 + LOW + MODERATE + HIGH + + The organization: + + MA-2a. + Schedules, performs, documents, and reviews records of maintenance and repairs on information system components in accordance with manufacturer or vendor specifications and/or organizational requirements; + + + MA-2b. + Approves and monitors all maintenance activities, whether performed on site or remotely and whether the equipment is serviced on site or removed to another location; + + + MA-2c. + Requires that [Assignment: organization-defined personnel or roles] explicitly approve the removal of the information system or system components from organizational facilities for off-site maintenance or repairs; + + + MA-2d. + Sanitizes equipment to remove all information from associated media prior to removal from organizational facilities for off-site maintenance or repairs; + + + MA-2e. + Checks all potentially impacted security controls to verify that the controls are still functioning properly following maintenance or repair actions; and + + + MA-2f. + Includes [Assignment: organization-defined maintenance-related information] in organizational maintenance records. + + + + This control addresses the information security aspects of the information system maintenance program and applies to all types of maintenance to any system component (including applications) conducted by any local or nonlocal entity (e.g., in-contract, warranty, in-house, software maintenance agreement). System maintenance also includes those components not directly associated with information processing and/or data/information retention such as scanners, copiers, and printers. Information necessary for creating effective maintenance records includes, for example: (i) date and time of maintenance; (ii) name of individuals or group performing the maintenance; (iii) name of escort, if necessary; (iv) a description of the maintenance performed; and (v) information system components/equipment removed or replaced (including identification numbers, if applicable). The level of detail included in maintenance records can be informed by the security categories of organizational information systems. Organizations consider supply chain issues associated with replacement components for information systems. + CM-3 + CM-4 + MA-4 + MP-6 + PE-16 + SA-12 + SI-2 + + + + MA-2 (1) + RECORD CONTENT + + MA-2 + + + [Withdrawn: Incorporated into MA-2]. + + + + MA-2 (2) + AUTOMATED MAINTENANCE ACTIVITIES + HIGH + + The organization: + + MA-2 (2)(a) + Employs automated mechanisms to schedule, conduct, and document maintenance and repairs; and + + + MA-2 (2)(b) + Produces up-to date, accurate, and complete records of all maintenance and repair actions requested, scheduled, in process, and completed. + + + + CA-7 + MA-3 + + + + + + MAINTENANCE + MA-3 + MAINTENANCE TOOLS + P3 + MODERATE + HIGH + + The organization approves, controls, and monitors information system maintenance tools. + + + This control addresses security-related issues associated with maintenance tools used specifically for diagnostic and repair actions on organizational information systems. Maintenance tools can include hardware, software, and firmware items. Maintenance tools are potential vehicles for transporting malicious code, either intentionally or unintentionally, into a facility and subsequently into organizational information systems. Maintenance tools can include, for example, hardware/software diagnostic test equipment and hardware/software packet sniffers. This control does not cover hardware/software components that may support information system maintenance, yet are a part of the system, for example, the software implementing �ping,� �ls,� �ipconfig,� or the hardware and software implementing the monitoring port of an Ethernet switch. + MA-2 + MA-5 + MP-6 + + + + MA-3 (1) + INSPECT TOOLS + MODERATE + HIGH + + The organization inspects the maintenance tools carried into a facility by maintenance personnel for improper or unauthorized modifications. + + + If, upon inspection of maintenance tools, organizations determine that the tools have been modified in an improper/unauthorized manner or contain malicious code, the incident is handled consistent with organizational policies and procedures for incident handling. + SI-7 + + + + MA-3 (2) + INSPECT MEDIA + MODERATE + HIGH + + The organization checks media containing diagnostic and test programs for malicious code before the media are used in the information system. + + + If, upon inspection of media containing maintenance diagnostic and test programs, organizations determine that the media contain malicious code, the incident is handled consistent with organizational incident handling policies and procedures. + SI-3 + + + + MA-3 (3) + PREVENT UNAUTHORIZED REMOVAL + HIGH + + The organization prevents the unauthorized removal of maintenance equipment containing organizational information by: + + MA-3 (3)(a) + Verifying that there is no organizational information contained on the equipment; + + + MA-3 (3)(b) + Sanitizing or destroying the equipment; + + + MA-3 (3)(c) + Retaining the equipment within the facility; or + + + MA-3 (3)(d) + Obtaining an exemption from [Assignment: organization-defined personnel or roles] explicitly authorizing removal of the equipment from the facility. + + + + Organizational information includes all information specifically owned by organizations and information provided to organizations in which organizations serve as information stewards. + + + + MA-3 (4) + RESTRICTED TOOL USE + + The information system restricts the use of maintenance tools to authorized personnel only. + + + This control enhancement applies to information systems that are used to carry out maintenance functions. + AC-2 + AC-3 + AC-5 + AC-6 + + + + + + NIST Special Publication 800-88 + + + + + MAINTENANCE + MA-4 + NONLOCAL MAINTENANCE + P2 + LOW + MODERATE + HIGH + + The organization: + + MA-4a. + Approves and monitors nonlocal maintenance and diagnostic activities; + + + MA-4b. + Allows the use of nonlocal maintenance and diagnostic tools only as consistent with organizational policy and documented in the security plan for the information system; + + + MA-4c. + Employs strong authenticators in the establishment of nonlocal maintenance and diagnostic sessions; + + + MA-4d. + Maintains records for nonlocal maintenance and diagnostic activities; and + + + MA-4e. + Terminates session and network connections when nonlocal maintenance is completed. + + + + Nonlocal maintenance and diagnostic activities are those activities conducted by individuals communicating through a network, either an external network (e.g., the Internet) or an internal network. Local maintenance and diagnostic activities are those activities carried out by individuals physically present at the information system or information system component and not communicating across a network connection. Authentication techniques used in the establishment of nonlocal maintenance and diagnostic sessions reflect the network access requirements in IA-2. Typically, strong authentication requires authenticators that are resistant to replay attacks and employ multifactor authentication. Strong authenticators include, for example, PKI where certificates are stored on a token protected by a password, passphrase, or biometric. Enforcing requirements in MA-4 is accomplished in part by other controls. + AC-2 + AC-3 + AC-6 + AC-17 + AU-2 + AU-3 + IA-2 + IA-4 + IA-5 + IA-8 + MA-2 + MA-5 + MP-6 + PL-2 + SC-7 + SC-10 + SC-17 + + + + MA-4 (1) + AUDITING AND REVIEW + + The organization: + + MA-4 (1)(a) + Audits nonlocal maintenance and diagnostic sessions [Assignment: organization-defined audit events]; and + + + MA-4 (1)(b) + Reviews the records of the maintenance and diagnostic sessions. + + + + AU-2 + AU-6 + AU-12 + + + + MA-4 (2) + DOCUMENT NONLOCAL MAINTENANCE + MODERATE + HIGH + + The organization documents in the security plan for the information system, the policies and procedures for the establishment and use of nonlocal maintenance and diagnostic connections. + + + + MA-4 (3) + COMPARABLE SECURITY / SANITIZATION + HIGH + + The organization: + + MA-4 (3)(a) + Requires that nonlocal maintenance and diagnostic services be performed from an information system that implements a security capability comparable to the capability implemented on the system being serviced; or + + + MA-4 (3)(b) + Removes the component to be serviced from the information system prior to nonlocal maintenance or diagnostic services, sanitizes the component (with regard to organizational information) before removal from organizational facilities, and after the service is performed, inspects and sanitizes the component (with regard to potentially malicious software) before reconnecting the component to the information system. + + + + Comparable security capability on information systems, diagnostic tools, and equipment providing maintenance services implies that the implemented security controls on those systems, tools, and equipment are at least as comprehensive as the controls on the information system being serviced. + MA-3 + SA-12 + SI-3 + SI-7 + + + + MA-4 (4) + AUTHENTICATION / SEPARATION OF MAINTENANCE SESSIONS + + The organization protects nonlocal maintenance sessions by: + + MA-4 (4)(a) + Employing [Assignment: organization-defined authenticators that are replay resistant]; and + + + MA-4 (4)(b) + Separating the maintenance sessions from other network sessions with the information system by either: + + MA-4 (4)(b)(1) + Physically separated communications paths; or + + + MA-4 (4)(b)(2) + Logically separated communications paths based upon encryption. + + + + + SC-13 + + + + MA-4 (5) + APPROVALS AND NOTIFICATIONS + + The organization: + + MA-4 (5)(a) + Requires the approval of each nonlocal maintenance session by [Assignment: organization-defined personnel or roles]; and + + + MA-4 (5)(b) + Notifies [Assignment: organization-defined personnel or roles] of the date and time of planned nonlocal maintenance. + + + + Notification may be performed by maintenance personnel. Approval of nonlocal maintenance sessions is accomplished by organizational personnel with sufficient information security and information system knowledge to determine the appropriateness of the proposed maintenance. + + + + MA-4 (6) + CRYPTOGRAPHIC PROTECTION + + The information system implements cryptographic mechanisms to protect the integrity and confidentiality of nonlocal maintenance and diagnostic communications. + + + SC-8 + SC-13 + + + + MA-4 (7) + REMOTE DISCONNECT VERIFICATION + + The information system implements remote disconnect verification at the termination of nonlocal maintenance and diagnostic sessions. + + + Remote disconnect verification ensures that remote connections from nonlocal maintenance sessions have been terminated and are no longer available for use. + SC-13 + + + + + + FIPS Publication 140-2 + + + FIPS Publication 197 + + + FIPS Publication 201 + + + NIST Special Publication 800-63 + + + NIST Special Publication 800-88 + + + CNSS Policy 15 + + + + + MAINTENANCE + MA-5 + MAINTENANCE PERSONNEL + P2 + LOW + MODERATE + HIGH + + The organization: + + MA-5a. + Establishes a process for maintenance personnel authorization and maintains a list of authorized maintenance organizations or personnel; + + + MA-5b. + Ensures that non-escorted personnel performing maintenance on the information system have required access authorizations; and + + + MA-5c. + Designates organizational personnel with required access authorizations and technical competence to supervise the maintenance activities of personnel who do not possess the required access authorizations. + + + + This control applies to individuals performing hardware or software maintenance on organizational information systems, while PE-2 addresses physical access for individuals whose maintenance duties place them within the physical protection perimeter of the systems (e.g., custodial staff, physical plant maintenance personnel). Technical competence of supervising individuals relates to the maintenance performed on the information systems while having required access authorizations refers to maintenance on and near the systems. Individuals not previously identified as authorized maintenance personnel, such as information technology manufacturers, vendors, systems integrators, and consultants, may require privileged access to organizational information systems, for example, when required to conduct maintenance activities with little or no notice. Based on organizational assessments of risk, organizations may issue temporary credentials to these individuals. Temporary credentials may be for one-time use or for very limited time periods. + AC-2 + IA-8 + MP-2 + PE-2 + PE-3 + PE-4 + RA-3 + + + + MA-5 (1) + INDIVIDUALS WITHOUT APPROPRIATE ACCESS + HIGH + + The organization: + + MA-5 (1)(a) + Implements procedures for the use of maintenance personnel that lack appropriate security clearances or are not U.S. citizens, that include the following requirements: + + MA-5 (1)(a)(1) + Maintenance personnel who do not have needed access authorizations, clearances, or formal access approvals are escorted and supervised during the performance of maintenance and diagnostic activities on the information system by approved organizational personnel who are fully cleared, have appropriate access authorizations, and are technically qualified; + + + MA-5 (1)(a)(2) + Prior to initiating maintenance or diagnostic activities by personnel who do not have needed access authorizations, clearances or formal access approvals, all volatile information storage components within the information system are sanitized and all nonvolatile storage media are removed or physically disconnected from the system and secured; and + + + + MA-5 (1)(b) + Develops and implements alternate security safeguards in the event an information system component cannot be sanitized, removed, or disconnected from the system. + + + + This control enhancement denies individuals who lack appropriate security clearances (i.e., individuals who do not possess security clearances or possess security clearances at a lower level than required) or who are not U.S. citizens, visual and electronic access to any classified information, Controlled Unclassified Information (CUI), or any other sensitive information contained on organizational information systems. Procedures for the use of maintenance personnel can be documented in security plans for the information systems. + MP-6 + PL-2 + + + + MA-5 (2) + SECURITY CLEARANCES FOR CLASSIFIED SYSTEMS + + The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information possess security clearances and formal access approvals for at least the highest classification level and for all compartments of information on the system. + + + PS-3 + + + + MA-5 (3) + CITIZENSHIP REQUIREMENTS FOR CLASSIFIED SYSTEMS + + The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information are U.S. citizens. + + + PS-3 + + + + MA-5 (4) + FOREIGN NATIONALS + + The organization ensures that: + + MA-5 (4)(a) + Cleared foreign nationals (i.e., foreign nationals with appropriate security clearances), are used to conduct maintenance and diagnostic activities on classified information systems only when the systems are jointly owned and operated by the United States and foreign allied governments, or owned and operated solely by foreign allied governments; and + + + MA-5 (4)(b) + Approvals, consents, and detailed operational conditions regarding the use of foreign nationals to conduct maintenance and diagnostic activities on classified information systems are fully documented within Memoranda of Agreements. + + + + PS-3 + + + + MA-5 (5) + NONSYSTEM-RELATED MAINTENANCE + + The organization ensures that non-escorted personnel performing maintenance activities not directly associated with the information system but in the physical proximity of the system, have required access authorizations. + + + Personnel performing maintenance activities in other capacities not directly related to the information system include, for example, physical plant personnel and janitorial personnel. + + + + + + MAINTENANCE + MA-6 + TIMELY MAINTENANCE + P2 + MODERATE + HIGH + + The organization obtains maintenance support and/or spare parts for [Assignment: organization-defined information system components] within [Assignment: organization-defined time period] of failure. + + + Organizations specify the information system components that result in increased risk to organizational operations and assets, individuals, other organizations, or the Nation when the functionality provided by those components is not operational. Organizational actions to obtain maintenance support typically include having appropriate contracts in place. + CM-8 + CP-2 + CP-7 + SA-14 + SA-15 + + + + MA-6 (1) + PREVENTIVE MAINTENANCE + + The organization performs preventive maintenance on [Assignment: organization-defined information system components] at [Assignment: organization-defined time intervals]. + + + Preventive maintenance includes proactive care and servicing of organizational information systems components for the purpose of maintaining equipment and facilities in satisfactory operating condition. Such maintenance provides for the systematic inspection, tests, measurements, adjustments, parts replacement, detection, and correction of incipient failures either before they occur or before they develop into major defects. The primary goal of preventive maintenance is to avoid/mitigate the consequences of equipment failures. Preventive maintenance is designed to preserve and restore equipment reliability by replacing worn components before they actually fail. Methods of determining what preventive (or other) failure management policies to apply include, for example, original equipment manufacturer (OEM) recommendations, statistical failure records, requirements of codes, legislation, or regulations within a jurisdiction, expert opinion, maintenance that has already been conducted on similar equipment, or measured values and performance indications. + + + + MA-6 (2) + PREDICTIVE MAINTENANCE + + The organization performs predictive maintenance on [Assignment: organization-defined information system components] at [Assignment: organization-defined time intervals]. + + + Predictive maintenance, or condition-based maintenance, attempts to evaluate the condition of equipment by performing periodic or continuous (online) equipment condition monitoring. The goal of predictive maintenance is to perform maintenance at a scheduled point in time when the maintenance activity is most cost-effective and before the equipment loses performance within a threshold. The predictive component of predictive maintenance stems from the goal of predicting the future trend of the equipment's condition. This approach uses principles of statistical process control to determine at what point in the future maintenance activities will be appropriate. Most predictive maintenance inspections are performed while equipment is in service, thereby minimizing disruption of normal system operations. Predictive maintenance can result in substantial cost savings and higher system reliability. Predictive maintenance tends to include measurement of the item. To evaluate equipment condition, predictive maintenance utilizes nondestructive testing technologies such as infrared, acoustic (partial discharge and airborne ultrasonic), corona detection, vibration analysis, sound level measurements, oil analysis, and other specific online tests. + + + + MA-6 (3) + AUTOMATED SUPPORT FOR PREDICTIVE MAINTENANCE + + The organization employs automated mechanisms to transfer predictive maintenance data to a computerized maintenance management system. + + + A computerized maintenance management system maintains a computer database of information about the maintenance operations of organizations and automates processing equipment condition data in order to trigger maintenance planning, execution, and reporting. + + + + + + MEDIA PROTECTION + MP-1 + MEDIA PROTECTION POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + MP-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + MP-1a.1. + A media protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + MP-1a.2. + Procedures to facilitate the implementation of the media protection policy and associated media protection controls; and + + + + MP-1b. + Reviews and updates the current: + + MP-1b.1. + Media protection policy [Assignment: organization-defined frequency]; and + + + MP-1b.2. + Media protection procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the MP family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + MEDIA PROTECTION + MP-2 + MEDIA ACCESS + P1 + LOW + MODERATE + HIGH + + The organization restricts access to [Assignment: organization-defined types of digital and/or non-digital media] to [Assignment: organization-defined personnel or roles]. + + + Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. Restricting non-digital media access includes, for example, denying access to patient medical records in a community hospital unless the individuals seeking access to such records are authorized healthcare providers. Restricting access to digital media includes, for example, limiting access to design specifications stored on compact disks in the media library to the project leader and the individuals on the development team. + AC-3 + IA-2 + MP-4 + PE-2 + PE-3 + PL-2 + + + + MP-2 (1) + AUTOMATED RESTRICTED ACCESS + + MP-4 (2) + + + [Withdrawn: Incorporated into MP-4 (2)]. + + + + MP-2 (2) + CRYPTOGRAPHIC PROTECTION + + SC-28 (1) + + + [Withdrawn: Incorporated into SC-28 (1)]. + + + + + + FIPS Publication 199 + + + NIST Special Publication 800-111 + + + + + MEDIA PROTECTION + MP-3 + MEDIA MARKING + P2 + MODERATE + HIGH + + The organization: + + MP-3a. + Marks information system media indicating the distribution limitations, handling caveats, and applicable security markings (if any) of the information; and + + + MP-3b. + Exempts [Assignment: organization-defined types of information system media] from marking as long as the media remain within [Assignment: organization-defined controlled areas]. + + + + The term security marking refers to the application/use of human-readable security attributes. The term security labeling refers to the application/use of security attributes with regard to internal data structures within information systems (see AC-16). Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. Security marking is generally not required for media containing information determined by organizations to be in the public domain or to be publicly releasable. However, some organizations may require markings for public information indicating that the information is publicly releasable. Marking of information system media reflects applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance. + AC-16 + PL-2 + RA-3 + + + + FIPS Publication 199 + + + + + MEDIA PROTECTION + MP-4 + MEDIA STORAGE + P1 + MODERATE + HIGH + + The organization: + + MP-4a. + Physically controls and securely stores [Assignment: organization-defined types of digital and/or non-digital media] within [Assignment: organization-defined controlled areas]; and + + + MP-4b. + Protects information system media until the media are destroyed or sanitized using approved equipment, techniques, and procedures. + + + + Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. Physically controlling information system media includes, for example, conducting inventories, ensuring procedures are in place to allow individuals to check out and return media to the media library, and maintaining accountability for all stored media. Secure storage includes, for example, a locked drawer, desk, or cabinet, or a controlled media library. The type of media storage is commensurate with the security category and/or classification of the information residing on the media. Controlled areas are areas for which organizations provide sufficient physical and procedural safeguards to meet the requirements established for protecting information and/or information systems. For media containing information determined by organizations to be in the public domain, to be publicly releasable, or to have limited or no adverse impact on organizations or individuals if accessed by other than authorized personnel, fewer safeguards may be needed. In these situations, physical access controls provide adequate protection. + CP-6 + CP-9 + MP-2 + MP-7 + PE-3 + + + + MP-4 (1) + CRYPTOGRAPHIC PROTECTION + + SC-28 (1) + + + [Withdrawn: Incorporated into SC-28 (1)]. + + + + MP-4 (2) + AUTOMATED RESTRICTED ACCESS + + The organization employs automated mechanisms to restrict access to media storage areas and to audit access attempts and access granted. + + + Automated mechanisms can include, for example, keypads on the external entries to media storage areas. + AU-2 + AU-9 + AU-6 + AU-12 + + + + + + FIPS Publication 199 + + + NIST Special Publication 800-56 + + + NIST Special Publication 800-57 + + + NIST Special Publication 800-111 + + + + + MEDIA PROTECTION + MP-5 + MEDIA TRANSPORT + P1 + MODERATE + HIGH + + The organization: + + MP-5a. + Protects and controls [Assignment: organization-defined types of information system media] during transport outside of controlled areas using [Assignment: organization-defined security safeguards]; + + + MP-5b. + Maintains accountability for information system media during transport outside of controlled areas; + + + MP-5c. + Documents activities associated with the transport of information system media; and + + + MP-5d. + Restricts the activities associated with the transport of information system media to authorized personnel. + + + + Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. This control also applies to mobile devices with information storage capability (e.g., smart phones, tablets, E-readers), that are transported outside of controlled areas. Controlled areas are areas or spaces for which organizations provide sufficient physical and/or procedural safeguards to meet the requirements established for protecting information and/or information systems. +Physical and technical safeguards for media are commensurate with the security category or classification of the information residing on the media. Safeguards to protect media during transport include, for example, locked containers and cryptography. Cryptographic mechanisms can provide confidentiality and integrity protections depending upon the mechanisms used. Activities associated with transport include the actual transport as well as those activities such as releasing media for transport and ensuring that media enters the appropriate transport processes. For the actual transport, authorized transport and courier personnel may include individuals from outside the organization (e.g., U.S. Postal Service or a commercial transport or delivery service). Maintaining accountability of media during transport includes, for example, restricting transport activities to authorized personnel, and tracking and/or obtaining explicit records of transport activities as the media moves through the transportation system to prevent and detect loss, destruction, or tampering. Organizations establish documentation requirements for activities associated with the transport of information system media in accordance with organizational assessments of risk to include the flexibility to define different record-keeping methods for the different types of media transport as part of an overall system of transport-related records. + AC-19 + CP-9 + MP-3 + MP-4 + RA-3 + SC-8 + SC-13 + SC-28 + + + + MP-5 (1) + PROTECTION OUTSIDE OF CONTROLLED AREAS + + MP-5 + + + [Withdrawn: Incorporated into MP-5]. + + + + MP-5 (2) + DOCUMENTATION OF ACTIVITIES + + MP-5 + + + [Withdrawn: Incorporated into MP-5]. + + + + MP-5 (3) + CUSTODIANS + + The organization employs an identified custodian during transport of information system media outside of controlled areas. + + + Identified custodians provide organizations with specific points of contact during the media transport process and facilitate individual accountability. Custodial responsibilities can be transferred from one individual to another as long as an unambiguous custodian is identified at all times. + + + + MP-5 (4) + CRYPTOGRAPHIC PROTECTION + MODERATE + HIGH + + The information system implements cryptographic mechanisms to protect the confidentiality and integrity of information stored on digital media during transport outside of controlled areas. + + + This control enhancement applies to both portable storage devices (e.g., USB memory sticks, compact disks, digital video disks, external/removable hard disk drives) and mobile devices with storage capability (e.g., smart phones, tablets, E-readers). + MP-2 + + + + + + FIPS Publication 199 + + + NIST Special Publication 800-60 + + + + + MEDIA PROTECTION + MP-6 + MEDIA SANITIZATION + P1 + LOW + MODERATE + HIGH + + The organization: + + MP-6a. + Sanitizes [Assignment: organization-defined information system media] prior to disposal, release out of organizational control, or release for reuse using [Assignment: organization-defined sanitization techniques and procedures] in accordance with applicable federal and organizational standards and policies; and + + + MP-6b. + Employs sanitization mechanisms with the strength and integrity commensurate with the security category or classification of the information. + + + + This control applies to all information system media, both digital and non-digital, subject to disposal or reuse, whether or not the media is considered removable. Examples include media found in scanners, copiers, printers, notebook computers, workstations, network components, and mobile devices. The sanitization process removes information from the media such that the information cannot be retrieved or reconstructed. Sanitization techniques, including clearing, purging, cryptographic erase, and destruction, prevent the disclosure of information to unauthorized individuals when such media is reused or released for disposal. Organizations determine the appropriate sanitization methods recognizing that destruction is sometimes necessary when other methods cannot be applied to media requiring sanitization. Organizations use discretion on the employment of approved sanitization techniques and procedures for media containing information deemed to be in the public domain or publicly releasable, or deemed to have no adverse impact on organizations or individuals if released for reuse or disposal. Sanitization of non-digital media includes, for example, removing a classified appendix from an otherwise unclassified document, or redacting selected sections or words from a document by obscuring the redacted sections/words in a manner equivalent in effectiveness to removing them from the document. NSA standards and policies control the sanitization process for media containing classified information. + MA-2 + MA-4 + RA-3 + SC-4 + + + + MP-6 (1) + REVIEW / APPROVE / TRACK / DOCUMENT / VERIFY + HIGH + + The organization reviews, approves, tracks, documents, and verifies media sanitization and disposal actions. + + + Organizations review and approve media to be sanitized to ensure compliance with records-retention policies. Tracking/documenting actions include, for example, listing personnel who reviewed and approved sanitization and disposal actions, types of media sanitized, specific files stored on the media, sanitization methods used, date and time of the sanitization actions, personnel who performed the sanitization, verification actions taken, personnel who performed the verification, and disposal action taken. Organizations verify that the sanitization of the media was effective prior to disposal. + SI-12 + + + + MP-6 (2) + EQUIPMENT TESTING + HIGH + + The organization tests sanitization equipment and procedures [Assignment: organization-defined frequency] to verify that the intended sanitization is being achieved. + + + Testing of sanitization equipment and procedures may be conducted by qualified and authorized external entities (e.g., other federal agencies or external service providers). + + + + MP-6 (3) + NONDESTRUCTIVE TECHNIQUES + HIGH + + The organization applies nondestructive sanitization techniques to portable storage devices prior to connecting such devices to the information system under the following circumstances: [Assignment: organization-defined circumstances requiring sanitization of portable storage devices]. + + + This control enhancement applies to digital media containing classified information and Controlled Unclassified Information (CUI). Portable storage devices can be the source of malicious code insertions into organizational information systems. Many of these devices are obtained from unknown and potentially untrustworthy sources and may contain malicious code that can be readily transferred to information systems through USB ports or other entry portals. While scanning such storage devices is always recommended, sanitization provides additional assurance that the devices are free of malicious code to include code capable of initiating zero-day attacks. Organizations consider nondestructive sanitization of portable storage devices when such devices are first purchased from the manufacturer or vendor prior to initial use or when organizations lose a positive chain of custody for the devices. + SI-3 + + + + MP-6 (4) + CONTROLLED UNCLASSIFIED INFORMATION + + MP-6 + + + [Withdrawn: Incorporated into MP-6]. + + + + MP-6 (5) + CLASSIFIED INFORMATION + + MP-6 + + + [Withdrawn: Incorporated into MP-6]. + + + + MP-6 (6) + MEDIA DESTRUCTION + + MP-6 + + + [Withdrawn: Incorporated into MP-6]. + + + + MP-6 (7) + DUAL AUTHORIZATION + + The organization enforces dual authorization for the sanitization of [Assignment: organization-defined information system media]. + + + Organizations employ dual authorization to ensure that information system media sanitization cannot occur unless two technically qualified individuals conduct the task. Individuals sanitizing information system media possess sufficient skills/expertise to determine if the proposed sanitization reflects applicable federal/organizational standards, policies, and procedures. Dual authorization also helps to ensure that sanitization occurs as intended, both protecting against errors and false claims of having performed the sanitization actions. Dual authorization may also be known as two-person control. + AC-3 + MP-2 + + + + MP-6 (8) + REMOTE PURGING / WIPING OF INFORMATION + + The organization provides the capability to purge/wipe information from [Assignment: organization-defined information systems, system components, or devices] either remotely or under the following conditions: [Assignment: organization-defined conditions]. + + + This control enhancement protects data/information on organizational information systems, system components, or devices (e.g., mobile devices) if such systems, components, or devices are obtained by unauthorized individuals. Remote purge/wipe commands require strong authentication to mitigate the risk of unauthorized individuals purging/wiping the system/component/device. The purge/wipe function can be implemented in a variety of ways including, for example, by overwriting data/information multiple times or by destroying the key necessary to decrypt encrypted data. + + + + + + FIPS Publication 199 + + + NIST Special Publication 800-60 + + + NIST Special Publication 800-88 + + + http://www.nsa.gov/ia/mitigation_guidance/media_destruction_guidance/index.shtml + + + + + MEDIA PROTECTION + MP-7 + MEDIA USE + P1 + LOW + MODERATE + HIGH + + The organization [Selection: restricts; prohibits] the use of [Assignment: organization-defined types of information system media] on [Assignment: organization-defined information systems or system components] using [Assignment: organization-defined security safeguards]. + + + Information system media includes both digital and non-digital media. Digital media includes, for example, diskettes, magnetic tapes, external/removable hard disk drives, flash drives, compact disks, and digital video disks. Non-digital media includes, for example, paper and microfilm. This control also applies to mobile devices with information storage capability (e.g., smart phones, tablets, E-readers). In contrast to MP-2, which restricts user access to media, this control restricts the use of certain types of media on information systems, for example, restricting/prohibiting the use of flash drives or external hard disk drives. Organizations can employ technical and nontechnical safeguards (e.g., policies, procedures, rules of behavior) to restrict the use of information system media. Organizations may restrict the use of portable storage devices, for example, by using physical cages on workstations to prohibit access to certain external ports, or disabling/removing the ability to insert, read or write to such devices. Organizations may also limit the use of portable storage devices to only approved devices including, for example, devices provided by the organization, devices provided by other approved organizations, and devices that are not personally owned. Finally, organizations may restrict the use of portable storage devices based on the type of device, for example, prohibiting the use of writeable, portable storage devices, and implementing this restriction by disabling or removing the capability to write to such devices. + AC-19 + PL-4 + + + + MP-7 (1) + PROHIBIT USE WITHOUT OWNER + MODERATE + HIGH + + The organization prohibits the use of portable storage devices in organizational information systems when such devices have no identifiable owner. + + + Requiring identifiable owners (e.g., individuals, organizations, or projects) for portable storage devices reduces the risk of using such technologies by allowing organizations to assign responsibility and accountability for addressing known vulnerabilities in the devices (e.g., malicious code insertion). + PL-4 + + + + MP-7 (2) + PROHIBIT USE OF SANITIZATION-RESISTANT MEDIA + + The organization prohibits the use of sanitization-resistant media in organizational information systems. + + + Sanitization-resistance applies to the capability to purge information from media. Certain types of media do not support sanitize commands, or if supported, the interfaces are not supported in a standardized way across these devices. Sanitization-resistant media include, for example, compact flash, embedded flash on boards and devices, solid state drives, and USB removable media. + MP-6 + + + + + + FIPS Publication 199 + + + NIST Special Publication 800-111 + + + + + MEDIA PROTECTION + MP-8 + MEDIA DOWNGRADING + P0 + + The organization: + + MP-8a. + Establishes [Assignment: organization-defined information system media downgrading process] that includes employing downgrading mechanisms with [Assignment: organization-defined strength and integrity]; + + + MP-8b. + Ensures that the information system media downgrading process is commensurate with the security category and/or classification level of the information to be removed and the access authorizations of the potential recipients of the downgraded information; + + + MP-8c. + Identifies [Assignment: organization-defined information system media requiring downgrading]; and + + + MP-8d. + Downgrades the identified information system media using the established process. + + + + This control applies to all information system media, digital and non-digital, subject to release outside of the organization, whether or not the media is considered removable. The downgrading process, when applied to system media, removes information from the media, typically by security category or classification level, such that the information cannot be retrieved or reconstructed. Downgrading of media includes redacting information to enable wider release and distribution. Downgrading of media also ensures that empty space on the media (e.g., slack space within files) is devoid of information. + + + + MP-8 (1) + DOCUMENTATION OF PROCESS + + The organization documents information system media downgrading actions. + + + Organizations can document the media downgrading process by providing information such as the downgrading technique employed, the identification number of the downgraded media, and the identity of the individual that authorized and/or performed the downgrading action. + + + + MP-8 (2) + EQUIPMENT TESTING + + The organization employs [Assignment: organization-defined tests] of downgrading equipment and procedures to verify correct performance [Assignment: organization-defined frequency]. + + + + MP-8 (3) + CONTROLLED UNCLASSIFIED INFORMATION + + The organization downgrades information system media containing [Assignment: organization-defined Controlled Unclassified Information (CUI)] prior to public release in accordance with applicable federal and organizational standards and policies. + + + + MP-8 (4) + CLASSIFIED INFORMATION + + The organization downgrades information system media containing classified information prior to release to individuals without required access authorizations in accordance with NSA standards and policies. + + + Downgrading of classified information uses approved sanitization tools, techniques, and procedures to transfer information confirmed to be unclassified from classified information systems to unclassified media. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-1 + PHYSICAL AND ENVIRONMENTAL PROTECTION POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + PE-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + PE-1a.1. + A physical and environmental protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + PE-1a.2. + Procedures to facilitate the implementation of the physical and environmental protection policy and associated physical and environmental protection controls; and + + + + PE-1b. + Reviews and updates the current: + + PE-1b.1. + Physical and environmental protection policy [Assignment: organization-defined frequency]; and + + + PE-1b.2. + Physical and environmental protection procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the PE family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-2 + PHYSICAL ACCESS AUTHORIZATIONS + P1 + LOW + MODERATE + HIGH + + The organization: + + PE-2a. + Develops, approves, and maintains a list of individuals with authorized access to the facility where the information system resides; + + + PE-2b. + Issues authorization credentials for facility access; + + + PE-2c. + Reviews the access list detailing authorized facility access by individuals [Assignment: organization-defined frequency]; and + + + PE-2d. + Removes individuals from the facility access list when access is no longer required. + + + + This control applies to organizational employees and visitors. Individuals (e.g., employees, contractors, and others) with permanent physical access authorization credentials are not considered visitors. Authorization credentials include, for example, badges, identification cards, and smart cards. Organizations determine the strength of authorization credentials needed (including level of forge-proof badges, smart cards, or identification cards) consistent with federal standards, policies, and procedures. This control only applies to areas within facilities that have not been designated as publicly accessible. + PE-3 + PE-4 + PS-3 + + + + PE-2 (1) + ACCESS BY POSITION / ROLE + + The organization authorizes physical access to the facility where the information system resides based on position or role. + + + AC-2 + AC-3 + AC-6 + + + + PE-2 (2) + TWO FORMS OF IDENTIFICATION + + The organization requires two forms of identification from [Assignment: organization-defined list of acceptable forms of identification] for visitor access to the facility where the information system resides. + + + Acceptable forms of government photo identification include, for example, passports, Personal Identity Verification (PIV) cards, and drivers� licenses. In the case of gaining access to facilities using automated mechanisms, organizations may use PIV cards, key cards, PINs, and biometrics. + IA-2 + IA-4 + IA-5 + + + + PE-2 (3) + RESTRICT UNESCORTED ACCESS + + The organization restricts unescorted access to the facility where the information system resides to personnel with [Selection (one or more): security clearances for all information contained within the system; formal access authorizations for all information contained within the system; need for access to all information contained within the system; [Assignment: organization-defined credentials]]. + + + Due to the highly sensitive nature of classified information stored within certain facilities, it is important that individuals lacking sufficient security clearances, access approvals, or need to know, be escorted by individuals with appropriate credentials to ensure that such information is not exposed or otherwise compromised. + PS-2 + PS-6 + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-3 + PHYSICAL ACCESS CONTROL + P1 + LOW + MODERATE + HIGH + + The organization: + + PE-3a. + Enforces physical access authorizations at [Assignment: organization-defined entry/exit points to the facility where the information system resides] by; + + PE-3a.1. + Verifying individual access authorizations before granting access to the facility; and + + + PE-3a.2. + Controlling ingress/egress to the facility using [Selection (one or more): [Assignment: organization-defined physical access control systems/devices]; guards]; + + + + PE-3b. + Maintains physical access audit logs for [Assignment: organization-defined entry/exit points]; + + + PE-3c. + Provides [Assignment: organization-defined security safeguards] to control access to areas within the facility officially designated as publicly accessible; + + + PE-3d. + Escorts visitors and monitors visitor activity [Assignment: organization-defined circumstances requiring visitor escorts and monitoring]; + + + PE-3e. + Secures keys, combinations, and other physical access devices; + + + PE-3f. + Inventories [Assignment: organization-defined physical access devices] every [Assignment: organization-defined frequency]; and + + + PE-3g. + Changes combinations and keys [Assignment: organization-defined frequency] and/or when keys are lost, combinations are compromised, or individuals are transferred or terminated. + + + + This control applies to organizational employees and visitors. Individuals (e.g., employees, contractors, and others) with permanent physical access authorization credentials are not considered visitors. Organizations determine the types of facility guards needed including, for example, professional physical security staff or other personnel such as administrative staff or information system users. Physical access devices include, for example, keys, locks, combinations, and card readers. Safeguards for publicly accessible areas within organizational facilities include, for example, cameras, monitoring by guards, and isolating selected information systems and/or system components in secured areas. Physical access control systems comply with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance. The Federal Identity, Credential, and Access Management Program provides implementation guidance for identity, credential, and access management capabilities for physical access control systems. Organizations have flexibility in the types of audit logs employed. Audit logs can be procedural (e.g., a written log of individuals accessing the facility and when such access occurred), automated (e.g., capturing ID provided by a PIV card), or some combination thereof. Physical access points can include facility access points, interior access points to information systems and/or components requiring supplemental access controls, or both. Components of organizational information systems (e.g., workstations, terminals) may be located in areas designated as publicly accessible with organizations safeguarding access to such devices. + AU-2 + AU-6 + MP-2 + MP-4 + PE-2 + PE-4 + PE-5 + PS-3 + RA-3 + + + + PE-3 (1) + INFORMATION SYSTEM ACCESS + HIGH + + The organization enforces physical access authorizations to the information system in addition to the physical access controls for the facility at [Assignment: organization-defined physical spaces containing one or more components of the information system]. + + + This control enhancement provides additional physical security for those areas within facilities where there is a concentration of information system components (e.g., server rooms, media storage areas, data and communications centers). + PS-2 + + + + PE-3 (2) + FACILITY / INFORMATION SYSTEM BOUNDARIES + + The organization performs security checks [Assignment: organization-defined frequency] at the physical boundary of the facility or information system for unauthorized exfiltration of information or removal of information system components. + + + Organizations determine the extent, frequency, and/or randomness of security checks to adequately mitigate risk associated with exfiltration. + AC-4 + SC-7 + + + + PE-3 (3) + CONTINUOUS GUARDS / ALARMS / MONITORING + + The organization employs guards and/or alarms to monitor every physical access point to the facility where the information system resides 24 hours per day, 7 days per week. + + + CP-6 + CP-7 + + + + PE-3 (4) + LOCKABLE CASINGS + + The organization uses lockable physical casings to protect [Assignment: organization-defined information system components] from unauthorized physical access. + + + + PE-3 (5) + TAMPER PROTECTION + + The organization employs [Assignment: organization-defined security safeguards] to [Selection (one or more): detect; prevent] physical tampering or alteration of [Assignment: organization-defined hardware components] within the information system. + + + Organizations may implement tamper detection/prevention at selected hardware components or tamper detection at some components and tamper prevention at other components. Tamper detection/prevention activities can employ many types of anti-tamper technologies including, for example, tamper-detection seals and anti-tamper coatings. Anti-tamper programs help to detect hardware alterations through counterfeiting and other supply chain-related risks. + SA-12 + + + + PE-3 (6) + FACILITY PENETRATION TESTING + + The organization employs a penetration testing process that includes [Assignment: organization-defined frequency], unannounced attempts to bypass or circumvent security controls associated with physical access points to the facility. + + + CA-2 + CA-7 + + + + + + FIPS Publication 201 + + + NIST Special Publication 800-73 + + + NIST Special Publication 800-76 + + + NIST Special Publication 800-78 + + + NIST Special Publication 800-116 + + + ICD 704 + + + ICD 705 + + + DoD Instruction 5200.39 + + + Personal Identity Verification (PIV) in Enterprise Physical Access Control System (E-PACS) + + + http://idmanagement.gov + + + http://fips201ep.cio.gov + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-4 + ACCESS CONTROL FOR TRANSMISSION MEDIUM + P1 + MODERATE + HIGH + + The organization controls physical access to [Assignment: organization-defined information system distribution and transmission lines] within organizational facilities using [Assignment: organization-defined security safeguards]. + + + Physical security safeguards applied to information system distribution and transmission lines help to prevent accidental damage, disruption, and physical tampering. In addition, physical safeguards may be necessary to help prevent eavesdropping or in transit modification of unencrypted transmissions. Security safeguards to control physical access to system distribution and transmission lines include, for example: (i) locked wiring closets; (ii) disconnected or locked spare jacks; and/or (iii) protection of cabling by conduit or cable trays. + MP-2 + MP-4 + PE-2 + PE-3 + PE-5 + SC-7 + SC-8 + + + + NSTISSI No. 7003 + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-5 + ACCESS CONTROL FOR OUTPUT DEVICES + P2 + MODERATE + HIGH + + The organization controls physical access to information system output devices to prevent unauthorized individuals from obtaining the output. + + + Controlling physical access to output devices includes, for example, placing output devices in locked rooms or other secured areas and allowing access to authorized individuals only, and placing output devices in locations that can be monitored by organizational personnel. Monitors, printers, copiers, scanners, facsimile machines, and audio devices are examples of information system output devices. + PE-2 + PE-3 + PE-4 + PE-18 + + + + PE-5 (1) + ACCESS TO OUTPUT BY AUTHORIZED INDIVIDUALS + + The organization: + + PE-5 (1)(a) + Controls physical access to output from [Assignment: organization-defined output devices]; and + + + PE-5 (1)(b) + Ensures that only authorized individuals receive output from the device. + + + + Controlling physical access to selected output devices includes, for example, placing printers, copiers, and facsimile machines in controlled areas with keypad access controls or limiting access to individuals with certain types of badges. + + + + PE-5 (2) + ACCESS TO OUTPUT BY INDIVIDUAL IDENTITY + + The information system: + + PE-5 (2)(a) + Controls physical access to output from [Assignment: organization-defined output devices]; and + + + PE-5 (2)(b) + Links individual identity to receipt of the output from the device. + + + + Controlling physical access to selected output devices includes, for example, installing security functionality on printers, copiers, and facsimile machines that allows organizations to implement authentication (e.g., using a PIN or hardware token) on output devices prior to the release of output to individuals. + + + + PE-5 (3) + MARKING OUTPUT DEVICES + + The organization marks [Assignment: organization-defined information system output devices] indicating the appropriate security marking of the information permitted to be output from the device. + + + Outputs devices include, for example, printers, monitors, facsimile machines, scanners, copiers, and audio devices. This control enhancement is generally applicable to information system output devices other than mobiles devices. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-6 + MONITORING PHYSICAL ACCESS + P1 + LOW + MODERATE + HIGH + + The organization: + + PE-6a. + Monitors physical access to the facility where the information system resides to detect and respond to physical security incidents; + + + PE-6b. + Reviews physical access logs [Assignment: organization-defined frequency] and upon occurrence of [Assignment: organization-defined events or potential indications of events]; and + + + PE-6c. + Coordinates results of reviews and investigations with the organizational incident response capability. + + + + Organizational incident response capabilities include investigations of and responses to detected physical security incidents. Security incidents include, for example, apparent security violations or suspicious physical access activities. Suspicious physical access activities include, for example: (i) accesses outside of normal work hours; (ii) repeated accesses to areas not normally accessed; (iii) accesses for unusual lengths of time; and (iv) out-of-sequence accesses. + CA-7 + IR-4 + IR-8 + + + + PE-6 (1) + INTRUSION ALARMS / SURVEILLANCE EQUIPMENT + MODERATE + HIGH + + The organization monitors physical intrusion alarms and surveillance equipment. + + + + PE-6 (2) + AUTOMATED INTRUSION RECOGNITION / RESPONSES + + The organization employs automated mechanisms to recognize [Assignment: organization-defined classes/types of intrusions] and initiate [Assignment: organization-defined response actions]. + + + SI-4 + + + + PE-6 (3) + VIDEO SURVEILLANCE + + The organization employs video surveillance of [Assignment: organization-defined operational areas] and retains video recordings for [Assignment: organization-defined time period]. + + + This control enhancement focuses on recording surveillance video for purposes of subsequent review, if circumstances so warrant (e.g., a break-in detected by other means). It does not require monitoring surveillance video although organizations may choose to do so. Note that there may be legal considerations when performing and retaining video surveillance, especially if such surveillance is in a public location. + + + + PE-6 (4) + MONITORING PHYSICAL ACCESS TO INFORMATION SYSTEMS + HIGH + + The organization monitors physical access to the information system in addition to the physical access monitoring of the facility as [Assignment: organization-defined physical spaces containing one or more components of the information system]. + + + This control enhancement provides additional monitoring for those areas within facilities where there is a concentration of information system components (e.g., server rooms, media storage areas, communications centers). + PS-2 + PS-3 + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-7 + VISITOR CONTROL + + PE-2 + PE-3 + + + [Withdrawn: Incorporated into PE-2 and PE-3]. + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-8 + VISITOR ACCESS RECORDS + P3 + LOW + MODERATE + HIGH + + The organization: + + PE-8a. + Maintains visitor access records to the facility where the information system resides for [Assignment: organization-defined time period]; and + + + PE-8b. + Reviews visitor access records [Assignment: organization-defined frequency]. + + + + Visitor access records include, for example, names and organizations of persons visiting, visitor signatures, forms of identification, dates of access, entry and departure times, purposes of visits, and names and organizations of persons visited. Visitor access records are not required for publicly accessible areas. + + + + PE-8 (1) + AUTOMATED RECORDS MAINTENANCE / REVIEW + HIGH + + The organization employs automated mechanisms to facilitate the maintenance and review of visitor access records. + + + + PE-8 (2) + PHYSICAL ACCESS RECORDS + + PE-2 + + + [Withdrawn: Incorporated into PE-2]. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-9 + POWER EQUIPMENT AND CABLING + P1 + MODERATE + HIGH + + The organization protects power equipment and power cabling for the information system from damage and destruction. + + + Organizations determine the types of protection necessary for power equipment and cabling employed at different locations both internal and external to organizational facilities and environments of operation. This includes, for example, generators and power cabling outside of buildings, internal cabling and uninterruptable power sources within an office or data center, and power sources for self-contained entities such as vehicles and satellites. + PE-4 + + + + PE-9 (1) + REDUNDANT CABLING + + The organization employs redundant power cabling paths that are physically separated by [Assignment: organization-defined distance]. + + + Physically separate, redundant power cables help to ensure that power continues to flow in the event one of the cables is cut or otherwise damaged. + + + + PE-9 (2) + AUTOMATIC VOLTAGE CONTROLS + + The organization employs automatic voltage controls for [Assignment: organization-defined critical information system components]. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-10 + EMERGENCY SHUTOFF + P1 + MODERATE + HIGH + + The organization: + + PE-10a. + Provides the capability of shutting off power to the information system or individual system components in emergency situations; + + + PE-10b. + Places emergency shutoff switches or devices in [Assignment: organization-defined location by information system or system component] to facilitate safe and easy access for personnel; and + + + PE-10c. + Protects emergency power shutoff capability from unauthorized activation. + + + + This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms. + PE-15 + + + + PE-10 (1) + ACCIDENTAL / UNAUTHORIZED ACTIVATION + + PE-10 + + + [Withdrawn: Incorporated into PE-10]. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-11 + EMERGENCY POWER + P1 + MODERATE + HIGH + + The organization provides a short-term uninterruptible power supply to facilitate [Selection (one or more): an orderly shutdown of the information system; transition of the information system to long-term alternate power] in the event of a primary power source loss. + + + AT-3 + CP-2 + CP-7 + + + + PE-11 (1) + LONG-TERM ALTERNATE POWER SUPPLY - MINIMAL OPERATIONAL CAPABILITY + HIGH + + The organization provides a long-term alternate power supply for the information system that is capable of maintaining minimally required operational capability in the event of an extended loss of the primary power source. + + + This control enhancement can be satisfied, for example, by the use of a secondary commercial power supply or other external power supply. Long-term alternate power supplies for the information system can be either manually or automatically activated. + + + + PE-11 (2) + LONG-TERM ALTERNATE POWER SUPPLY - SELF-CONTAINED + + The organization provides a long-term alternate power supply for the information system that is: + + PE-11 (2)(a) + Self-contained; + + + PE-11 (2)(b) + Not reliant on external power generation; and + + + PE-11 (2)(c) + Capable of maintaining [Selection: minimally required operational capability; full operational capability] in the event of an extended loss of the primary power source. + + + + This control enhancement can be satisfied, for example, by the use of one or more generators with sufficient capacity to meet the needs of the organization. Long-term alternate power supplies for organizational information systems are either manually or automatically activated. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-12 + EMERGENCY LIGHTING + P1 + LOW + MODERATE + HIGH + + The organization employs and maintains automatic emergency lighting for the information system that activates in the event of a power outage or disruption and that covers emergency exits and evacuation routes within the facility. + + + This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms. + CP-2 + CP-7 + + + + PE-12 (1) + ESSENTIAL MISSIONS / BUSINESS FUNCTIONS + + The organization provides emergency lighting for all areas within the facility supporting essential missions and business functions. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-13 + FIRE PROTECTION + P1 + LOW + MODERATE + HIGH + + The organization employs and maintains fire suppression and detection devices/systems for the information system that are supported by an independent energy source. + + + This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms. Fire suppression and detection devices/systems include, for example, sprinkler systems, handheld fire extinguishers, fixed fire hoses, and smoke detectors. + + + + PE-13 (1) + DETECTION DEVICES / SYSTEMS + HIGH + + The organization employs fire detection devices/systems for the information system that activate automatically and notify [Assignment: organization-defined personnel or roles] and [Assignment: organization-defined emergency responders] in the event of a fire. + + + Organizations can identify specific personnel, roles, and emergency responders in the event that individuals on the notification list must have appropriate access authorizations and/or clearances, for example, to obtain access to facilities where classified operations are taking place or where there are information systems containing classified information. + + + + PE-13 (2) + SUPPRESSION DEVICES / SYSTEMS + HIGH + + The organization employs fire suppression devices/systems for the information system that provide automatic notification of any activation to Assignment: organization-defined personnel or roles] and [Assignment: organization-defined emergency responders]. + + + Organizations can identify specific personnel, roles, and emergency responders in the event that individuals on the notification list must have appropriate access authorizations and/or clearances, for example, to obtain access to facilities where classified operations are taking place or where there are information systems containing classified information. + + + + PE-13 (3) + AUTOMATIC FIRE SUPPRESSION + MODERATE + HIGH + + The organization employs an automatic fire suppression capability for the information system when the facility is not staffed on a continuous basis. + + + + PE-13 (4) + INSPECTIONS + + The organization ensures that the facility undergoes [Assignment: organization-defined frequency] inspections by authorized and qualified inspectors and resolves identified deficiencies within [Assignment: organization-defined time period]. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-14 + TEMPERATURE AND HUMIDITY CONTROLS + P1 + LOW + MODERATE + HIGH + + The organization: + + PE-14a. + Maintains temperature and humidity levels within the facility where the information system resides at [Assignment: organization-defined acceptable levels]; and + + + PE-14b. + Monitors temperature and humidity levels [Assignment: organization-defined frequency]. + + + + This control applies primarily to facilities containing concentrations of information system resources, for example, data centers, server rooms, and mainframe computer rooms. + AT-3 + + + + PE-14 (1) + AUTOMATIC CONTROLS + + The organization employs automatic temperature and humidity controls in the facility to prevent fluctuations potentially harmful to the information system. + + + + PE-14 (2) + MONITORING WITH ALARMS / NOTIFICATIONS + + The organization employs temperature and humidity monitoring that provides an alarm or notification of changes potentially harmful to personnel or equipment. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-15 + WATER DAMAGE PROTECTION + P1 + LOW + MODERATE + HIGH + + The organization protects the information system from damage resulting from water leakage by providing master shutoff or isolation valves that are accessible, working properly, and known to key personnel. + + + This control applies primarily to facilities containing concentrations of information system resources including, for example, data centers, server rooms, and mainframe computer rooms. Isolation valves can be employed in addition to or in lieu of master shutoff valves to shut off water supplies in specific areas of concern, without affecting entire organizations. + AT-3 + + + + PE-15 (1) + AUTOMATION SUPPORT + HIGH + + The organization employs automated mechanisms to detect the presence of water in the vicinity of the information system and alerts [Assignment: organization-defined personnel or roles]. + + + Automated mechanisms can include, for example, water detection sensors, alarms, and notification systems. + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-16 + DELIVERY AND REMOVAL + P2 + LOW + MODERATE + HIGH + + The organization authorizes, monitors, and controls [Assignment: organization-defined types of information system components] entering and exiting the facility and maintains records of those items. + + + Effectively enforcing authorizations for entry and exit of information system components may require restricting access to delivery areas and possibly isolating the areas from the information system and media libraries. + CM-3 + MA-2 + MA-3 + MP-5 + SA-12 + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-17 + ALTERNATE WORK SITE + P2 + MODERATE + HIGH + + The organization: + + PE-17a. + Employs [Assignment: organization-defined security controls] at alternate work sites; + + + PE-17b. + Assesses as feasible, the effectiveness of security controls at alternate work sites; and + + + PE-17c. + Provides a means for employees to communicate with information security personnel in case of security incidents or problems. + + + + Alternate work sites may include, for example, government facilities or private residences of employees. While commonly distinct from alternative processing sites, alternate work sites may provide readily available alternate locations as part of contingency operations. Organizations may define different sets of security controls for specific alternate work sites or types of sites depending on the work-related activities conducted at those sites. This control supports the contingency planning activities of organizations and the federal telework initiative. + AC-17 + CP-7 + + + + NIST Special Publication 800-46 + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-18 + LOCATION OF INFORMATION SYSTEM COMPONENTS + P3 + HIGH + + The organization positions information system components within the facility to minimize potential damage from [Assignment: organization-defined physical and environmental hazards] and to minimize the opportunity for unauthorized access. + + + Physical and environmental hazards include, for example, flooding, fire, tornados, earthquakes, hurricanes, acts of terrorism, vandalism, electromagnetic pulse, electrical interference, and other forms of incoming electromagnetic radiation. In addition, organizations consider the location of physical entry points where unauthorized individuals, while not being granted access, might nonetheless be in close proximity to information systems and therefore increase the potential for unauthorized access to organizational communications (e.g., through the use of wireless sniffers or microphones). + CP-2 + PE-19 + RA-3 + + + + PE-18 (1) + FACILITY SITE + + The organization plans the location or site of the facility where the information system resides with regard to physical and environmental hazards and for existing facilities, considers the physical and environmental hazards in its risk mitigation strategy. + + + PM-8 + + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-19 + INFORMATION LEAKAGE + P0 + + The organization protects the information system from information leakage due to electromagnetic signals emanations. + + + Information leakage is the intentional or unintentional release of information to an untrusted environment from electromagnetic signals emanations. Security categories or classifications of information systems (with respect to confidentiality) and organizational security policies guide the selection of security controls employed to protect systems against information leakage due to electromagnetic signals emanations. + + + + PE-19 (1) + NATIONAL EMISSIONS / TEMPEST POLICIES AND PROCEDURES + + The organization ensures that information system components, associated data communications, and networks are protected in accordance with national emissions and TEMPEST policies and procedures based on the security category or classification of the information. + + + + + + FIPS Publication 199 + + + + + PHYSICAL AND ENVIRONMENTAL PROTECTION + PE-20 + ASSET MONITORING AND TRACKING + P0 + + The organization: + + PE-20a. + Employs [Assignment: organization-defined asset location technologies] to track and monitor the location and movement of [Assignment: organization-defined assets] within [Assignment: organization-defined controlled areas]; and + + + PE-20b. + Ensures that asset location technologies are employed in accordance with applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. + + + + Asset location technologies can help organizations ensure that critical assets such as vehicles or essential information system components remain in authorized locations. Organizations consult with the Office of the General Counsel and the Senior Agency Official for Privacy (SAOP)/Chief Privacy Officer (CPO) regarding the deployment and use of asset location technologies to address potential privacy concerns. + CM-8 + + + + PLANNING + PL-1 + SECURITY PLANNING POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + PL-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + PL-1a.1. + A security planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + PL-1a.2. + Procedures to facilitate the implementation of the security planning policy and associated security planning controls; and + + + + PL-1b. + Reviews and updates the current: + + PL-1b.1. + Security planning policy [Assignment: organization-defined frequency]; and + + + PL-1b.2. + Security planning procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the PL family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-18 + + + NIST Special Publication 800-100 + + + + + PLANNING + PL-2 + SYSTEM SECURITY PLAN + P1 + LOW + MODERATE + HIGH + + The organization: + + PL-2a. + Develops a security plan for the information system that: + + PL-2a.1. + Is consistent with the organization�s enterprise architecture; + + + PL-2a.2. + Explicitly defines the authorization boundary for the system; + + + PL-2a.3. + Describes the operational context of the information system in terms of missions and business processes; + + + PL-2a.4. + Provides the security categorization of the information system including supporting rationale; + + + PL-2a.5. + Describes the operational environment for the information system and relationships with or connections to other information systems; + + + PL-2a.6. + Provides an overview of the security requirements for the system; + + + PL-2a.7. + Identifies any relevant overlays, if applicable; + + + PL-2a.8. + Describes the security controls in place or planned for meeting those requirements including a rationale for the tailoring decisions; and + + + PL-2a.9. + Is reviewed and approved by the authorizing official or designated representative prior to plan implementation; + + + + PL-2b. + Distributes copies of the security plan and communicates subsequent changes to the plan to [Assignment: organization-defined personnel or roles]; + + + PL-2c. + Reviews the security plan for the information system [Assignment: organization-defined frequency]; + + + PL-2d. + Updates the plan to address changes to the information system/environment of operation or problems identified during plan implementation or security control assessments; and + + + PL-2e. + Protects the security plan from unauthorized disclosure and modification. + + + + Security plans relate security requirements to a set of security controls and control enhancements. Security plans also describe, at a high level, how the security controls and control enhancements meet those security requirements, but do not provide detailed, technical descriptions of the specific design or implementation of the controls/enhancements. Security plans contain sufficient information (including the specification of parameter values for assignment and selection statements either explicitly or by reference) to enable a design and implementation that is unambiguously compliant with the intent of the plans and subsequent determinations of risk to organizational operations and assets, individuals, other organizations, and the Nation if the plan is implemented as intended. Organizations can also apply tailoring guidance to the security control baselines in Appendix D and CNSS Instruction 1253 to develop overlays for community-wide use or to address specialized requirements, technologies, or missions/environments of operation (e.g., DoD-tactical, Federal Public Key Infrastructure, or Federal Identity, Credential, and Access Management, space operations). Appendix I provides guidance on developing overlays. +Security plans need not be single documents; the plans can be a collection of various documents including documents that already exist. Effective security plans make extensive use of references to policies, procedures, and additional documents (e.g., design and implementation specifications) where more detailed information can be obtained. This reduces the documentation requirements associated with security programs and maintains security-related information in other established management/operational areas related to enterprise architecture, system development life cycle, systems engineering, and acquisition. For example, security plans do not contain detailed contingency plan or incident response plan information but instead provide explicitly or by reference, sufficient information to define what needs to be accomplished by those plans. + AC-2 + AC-6 + AC-14 + AC-17 + AC-20 + CA-2 + CA-3 + CA-7 + CM-9 + CP-2 + IR-8 + MA-4 + MA-5 + MP-2 + MP-4 + MP-5 + PL-7 + PM-1 + PM-7 + PM-8 + PM-9 + PM-11 + SA-5 + SA-17 + + + + PL-2 (1) + CONCEPT OF OPERATIONS + + PL-7 + + + [Withdrawn: Incorporated into PL-7]. + + + + PL-2 (2) + FUNCTIONAL ARCHITECTURE + + PL-8 + + + [Withdrawn: Incorporated into PL-8]. + + + + PL-2 (3) + PLAN / COORDINATE WITH OTHER ORGANIZATIONAL ENTITIES + MODERATE + HIGH + + The organization plans and coordinates security-related activities affecting the information system with [Assignment: organization-defined individuals or groups] before conducting such activities in order to reduce the impact on other organizational entities. + + + Security-related activities include, for example, security assessments, audits, hardware and software maintenance, patch management, and contingency plan testing. Advance planning and coordination includes emergency and nonemergency (i.e., planned or nonurgent unplanned) situations. The process defined by organizations to plan and coordinate security-related activities can be included in security plans for information systems or other documents, as appropriate. + CP-4 + IR-4 + + + + + + NIST Special Publication 800-18 + + + + + PLANNING + PL-3 + SYSTEM SECURITY PLAN UPDATE + + PL-2 + + + [Withdrawn: Incorporated into PL-2]. + + + + PLANNING + PL-4 + RULES OF BEHAVIOR + P2 + LOW + MODERATE + HIGH + + The organization: + + PL-4a. + Establishes and makes readily available to individuals requiring access to the information system, the rules that describe their responsibilities and expected behavior with regard to information and information system usage; + + + PL-4b. + Receives a signed acknowledgment from such individuals, indicating that they have read, understand, and agree to abide by the rules of behavior, before authorizing access to information and the information system; + + + PL-4c. + Reviews and updates the rules of behavior [Assignment: organization-defined frequency]; and + + + PL-4d. + Requires individuals who have signed a previous version of the rules of behavior to read and re-sign when the rules of behavior are revised/updated. + + + + This control enhancement applies to organizational users. Organizations consider rules of behavior based on individual user roles and responsibilities, differentiating, for example, between rules that apply to privileged users and rules that apply to general users. Establishing rules of behavior for some types of non-organizational users including, for example, individuals who simply receive data/information from federal information systems, is often not feasible given the large number of such users and the limited nature of their interactions with the systems. Rules of behavior for both organizational and non-organizational users can also be established in AC-8, System Use Notification. PL-4 b. (the signed acknowledgment portion of this control) may be satisfied by the security awareness training and role-based security training programs conducted by organizations if such training includes rules of behavior. Organizations can use electronic signatures for acknowledging rules of behavior. + AC-2 + AC-6 + AC-8 + AC-9 + AC-17 + AC-18 + AC-19 + AC-20 + AT-2 + AT-3 + CM-11 + IA-2 + IA-4 + IA-5 + MP-7 + PS-6 + PS-8 + SA-5 + + + + PL-4 (1) + SOCIAL MEDIA AND NETWORKING RESTRICTIONS + MODERATE + HIGH + + The organization includes in the rules of behavior, explicit restrictions on the use of social media/networking sites and posting organizational information on public websites. + + + This control enhancement addresses rules of behavior related to the use of social media/networking sites: (i) when organizational personnel are using such sites for official duties or in the conduct of official business; (ii) when organizational information is involved in social media/networking transactions; and (iii) when personnel are accessing social media/networking sites from organizational information systems. Organizations also address specific rules that prevent unauthorized entities from obtaining and/or inferring non-public organizational information (e.g., system account information, personally identifiable information) from social media/networking sites. + + + + + + NIST Special Publication 800-18 + + + + + PLANNING + PL-5 + PRIVACY IMPACT ASSESSMENT + + Appendix J + AR-2 + + + [Withdrawn: Incorporated into Appendix J, AR-2]. + + + + PLANNING + PL-6 + SECURITY-RELATED ACTIVITY PLANNING + + PL-2 + + + [Withdrawn: Incorporated into PL-2]. + + + + PLANNING + PL-7 + SECURITY CONCEPT OF OPERATIONS + P0 + + The organization: + + PL-7a. + Develops a security Concept of Operations (CONOPS) for the information system containing at a minimum, how the organization intends to operate the system from the perspective of information security; and + + + PL-7b. + Reviews and updates the CONOPS [Assignment: organization-defined frequency]. + + + + The security CONOPS may be included in the security plan for the information system or in other system development life cycle-related documents, as appropriate. Changes to the CONOPS are reflected in ongoing updates to the security plan, the information security architecture, and other appropriate organizational documents (e.g., security specifications for procurements/acquisitions, system development life cycle documents, and systems/security engineering documents). + PL-2 + + + + PLANNING + PL-8 + INFORMATION SECURITY ARCHITECTURE + P1 + MODERATE + HIGH + + The organization: + + PL-8a. + Develops an information security architecture for the information system that: + + PL-8a.1. + Describes the overall philosophy, requirements, and approach to be taken with regard to protecting the confidentiality, integrity, and availability of organizational information; + + + PL-8a.2. + Describes how the information security architecture is integrated into and supports the enterprise architecture; and + + + PL-8a.3. + Describes any information security assumptions about, and dependencies on, external services; + + + + PL-8b. + Reviews and updates the information security architecture [Assignment: organization-defined frequency] to reflect updates in the enterprise architecture; and + + + PL-8c. + Ensures that planned information security architecture changes are reflected in the security plan, the security Concept of Operations (CONOPS), and organizational procurements/acquisitions. + + + + This control addresses actions taken by organizations in the design and development of information systems. The information security architecture at the individual information system level is consistent with and complements the more global, organization-wide information security architecture described in PM-7 that is integral to and developed as part of the enterprise architecture. The information security architecture includes an architectural description, the placement/allocation of security functionality (including security controls), security-related information for external interfaces, information being exchanged across the interfaces, and the protection mechanisms associated with each interface. In addition, the security architecture can include other important security-related information, for example, user roles and access privileges assigned to each role, unique security requirements, the types of information processed, stored, and transmitted by the information system, restoration priorities of information and information system services, and any other specific protection needs. +In today�s modern architecture, it is becoming less common for organizations to control all information resources. There are going to be key dependencies on external information services and service providers. Describing such dependencies in the information security architecture is important to developing a comprehensive mission/business protection strategy. Establishing, developing, documenting, and maintaining under configuration control, a baseline configuration for organizational information systems is critical to implementing and maintaining an effective information security architecture. The development of the information security architecture is coordinated with the Senior Agency Official for Privacy (SAOP)/Chief Privacy Officer (CPO) to ensure that security controls needed to support privacy requirements are identified and effectively implemented. PL-8 is primarily directed at organizations (i.e., internally focused) to help ensure that organizations develop an information security architecture for the information system, and that the security architecture is integrated with or tightly coupled to the enterprise architecture through the organization-wide information security architecture. In contrast, SA-17 is primarily directed at external information technology product/system developers and integrators (although SA-17 could be used internally within organizations for in-house system development). SA-17, which is complementary to PL-8, is selected when organizations outsource the development of information systems or information system components to external entities, and there is a need to demonstrate/show consistency with the organization�s enterprise architecture and information security architecture. + CM-2 + CM-6 + PL-2 + PM-7 + SA-5 + SA-17 + Appendix J + + + + PL-8 (1) + DEFENSE-IN-DEPTH + + The organization designs its security architecture using a defense-in-depth approach that: + + PL-8 (1)(a) + Allocates [Assignment: organization-defined security safeguards] to [Assignment: organization-defined locations and architectural layers]; and + + + PL-8 (1)(b) + Ensures that the allocated security safeguards operate in a coordinated and mutually reinforcing manner. + + + + Organizations strategically allocate security safeguards (procedural, technical, or both) in the security architecture so that adversaries have to overcome multiple safeguards to achieve their objective. Requiring adversaries to defeat multiple mechanisms makes it more difficult to successfully attack critical information resources (i.e., increases adversary work factor) and also increases the likelihood of detection. The coordination of allocated safeguards is essential to ensure that an attack that involves one safeguard does not create adverse unintended consequences (e.g., lockout, cascading alarms) by interfering with another safeguard. Placement of security safeguards is a key activity. Greater asset criticality or information value merits additional layering. Thus, an organization may choose to place anti-virus software at organizational boundary layers, email/web servers, notebook computers, and workstations to maximize the number of related safeguards adversaries must penetrate before compromising the information and information systems. + SC-29 + SC-36 + + + + PL-8 (2) + SUPPLIER DIVERSITY + + The organization requires that [Assignment: organization-defined security safeguards] allocated to [Assignment: organization-defined locations and architectural layers] are obtained from different suppliers. + + + Different information technology products have different strengths and weaknesses. Providing a broad spectrum of products complements the individual offerings. For example, vendors offering malicious code protection typically update their products at different times, often developing solutions for known viruses, Trojans, or worms according to their priorities and development schedules. By having different products at different locations (e.g., server, boundary, desktop) there is an increased likelihood that at least one will detect the malicious code. + SA-12 + + + + + + PLANNING + PL-9 + CENTRAL MANAGEMENT + P0 + + The organization centrally manages [Assignment: organization-defined security controls and related processes]. + + + Central management refers to the organization-wide management and implementation of selected security controls and related processes. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed security controls and processes. As central management of security controls is generally associated with common controls, such management promotes and facilitates standardization of security control implementations and management and judicious use of organizational resources. Centrally-managed security controls and processes may also meet independence requirements for assessments in support of initial and ongoing authorizations to operate as part of organizational continuous monitoring. As part of the security control selection process, organizations determine which controls may be suitable for central management based on organizational resources and capabilities. Organizations consider that it may not always be possible to centrally manage every aspect of a security control. In such cases, the security control is treated as a hybrid control with the control managed and implemented either centrally or at the information system level. Controls and control enhancements that are candidates for full or partial central management include, but are not limited to: AC-2 (1) (2) (3) (4); AC-17 (1) (2) (3) (9); AC-18 (1) (3) (4) (5); AC-19 (4); AC-22; AC-23; AT-2 (1) (2); AT-3 (1) (2) (3); AT-4; AU-6 (1) (3) (5) (6) (9); AU-7 (1) (2); AU-11, AU-13, AU-16, CA-2 (1) (2) (3); CA-3 (1) (2) (3); CA-7 (1); CA-9; CM-2 (1) (2); CM-3 (1) (4); CM-4; CM-6 (1); CM-7 (4) (5); CM-8 (all); CM-9 (1); CM-10; CM-11; CP-7 (all); CP-8 (all); SC-43; SI-2; SI-3; SI-7; and SI-8. + + + + NIST Special Publication 800-37 + + + + + PERSONNEL SECURITY + PS-1 + PERSONNEL SECURITY POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + PS-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + PS-1a.1. + A personnel security policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + PS-1a.2. + Procedures to facilitate the implementation of the personnel security policy and associated personnel security controls; and + + + + PS-1b. + Reviews and updates the current: + + PS-1b.1. + Personnel security policy [Assignment: organization-defined frequency]; and + + + PS-1b.2. + Personnel security procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the PS family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + PERSONNEL SECURITY + PS-2 + POSITION RISK DESIGNATION + P1 + LOW + MODERATE + HIGH + + The organization: + + PS-2a. + Assigns a risk designation to all organizational positions; + + + PS-2b. + Establishes screening criteria for individuals filling those positions; and + + + PS-2c. + Reviews and updates position risk designations [Assignment: organization-defined frequency]. + + + + Position risk designations reflect Office of Personnel Management policy and guidance. Risk designations can guide and inform the types of authorizations individuals receive when accessing organizational information and information systems. Position screening criteria include explicit information security role appointment requirements (e.g., training, security clearances). + AT-3 + PL-2 + PS-3 + + + + 5 C.F.R. 731.106 + + + + + PERSONNEL SECURITY + PS-3 + PERSONNEL SCREENING + P1 + LOW + MODERATE + HIGH + + The organization: + + PS-3a. + Screens individuals prior to authorizing access to the information system; and + + + PS-3b. + Rescreens individuals according to [Assignment: organization-defined conditions requiring rescreening and, where rescreening is so indicated, the frequency of such rescreening]. + + + + Personnel screening and rescreening activities reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, guidance, and specific criteria established for the risk designations of assigned positions. Organizations may define different rescreening conditions and frequencies for personnel accessing information systems based on types of information processed, stored, or transmitted by the systems. + AC-2 + IA-4 + PE-2 + PS-2 + + + + PS-3 (1) + CLASSIFIED INFORMATION + + The organization ensures that individuals accessing an information system processing, storing, or transmitting classified information are cleared and indoctrinated to the highest classification level of the information to which they have access on the system. + + + AC-3 + AC-4 + + + + PS-3 (2) + FORMAL INDOCTRINATION + + The organization ensures that individuals accessing an information system processing, storing, or transmitting types of classified information which require formal indoctrination, are formally indoctrinated for all of the relevant types of information to which they have access on the system. + + + Types of classified information requiring formal indoctrination include, for example, Special Access Program (SAP), Restricted Data (RD), and Sensitive Compartment Information (SCI). + AC-3 + AC-4 + + + + PS-3 (3) + INFORMATION WITH SPECIAL PROTECTION MEASURES + + The organization ensures that individuals accessing an information system processing, storing, or transmitting information requiring special protection: + + PS-3 (3)(a) + Have valid access authorizations that are demonstrated by assigned official government duties; and + + + PS-3 (3)(b) + Satisfy [Assignment: organization-defined additional personnel screening criteria]. + + + + Organizational information requiring special protection includes, for example, Controlled Unclassified Information (CUI) and Sources and Methods Information (SAMI). Personnel security criteria include, for example, position sensitivity background screening requirements. + + + + + + 5 C.F.R. 731.106 + + + FIPS Publication 199 + + + FIPS Publication 201 + + + NIST Special Publication 800-60 + + + NIST Special Publication 800-73 + + + NIST Special Publication 800-76 + + + NIST Special Publication 800-78 + + + ICD 704 + + + + + PERSONNEL SECURITY + PS-4 + PERSONNEL TERMINATION + P1 + LOW + MODERATE + HIGH + + The organization, upon termination of individual employment: + + PS-4a. + Disables information system access within [Assignment: organization-defined time period]; + + + PS-4b. + Terminates/revokes any authenticators/credentials associated with the individual; + + + PS-4c. + Conducts exit interviews that include a discussion of [Assignment: organization-defined information security topics]; + + + PS-4d. + Retrieves all security-related organizational information system-related property; + + + PS-4e. + Retains access to organizational information and information systems formerly controlled by terminated individual; and + + + PS-4f. + Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period]. + + + + Information system-related property includes, for example, hardware authentication tokens, system administration technical manuals, keys, identification cards, and building passes. Exit interviews ensure that terminated individuals understand the security constraints imposed by being former employees and that proper accountability is achieved for information system-related property. Security topics of interest at exit interviews can include, for example, reminding terminated individuals of nondisclosure agreements and potential limitations on future employment. Exit interviews may not be possible for some terminated individuals, for example, in cases related to job abandonment, illnesses, and nonavailability of supervisors. Exit interviews are important for individuals with security clearances. Timely execution of termination actions is essential for individuals terminated for cause. In certain situations, organizations consider disabling the information system accounts of individuals that are being terminated prior to the individuals being notified. + AC-2 + IA-4 + PE-2 + PS-5 + PS-6 + + + + PS-4 (1) + POST-EMPLOYMENT REQUIREMENTS + + The organization: + + PS-4 (1)(a) + Notifies terminated individuals of applicable, legally binding post-employment requirements for the protection of organizational information; and + + + PS-4 (1)(b) + Requires terminated individuals to sign an acknowledgment of post-employment requirements as part of the organizational termination process. + + + + Organizations consult with the Office of the General Counsel regarding matters of post-employment requirements on terminated individuals. + + + + PS-4 (2) + AUTOMATED NOTIFICATION + HIGH + + The organization employs automated mechanisms to notify [Assignment: organization-defined personnel or roles] upon termination of an individual. + + + In organizations with a large number of employees, not all personnel who need to know about termination actions receive the appropriate notifications�or, if such notifications are received, they may not occur in a timely manner. Automated mechanisms can be used to send automatic alerts or notifications to specific organizational personnel or roles (e.g., management personnel, supervisors, personnel security officers, information security officers, systems administrators, or information technology administrators) when individuals are terminated. Such automatic alerts or notifications can be conveyed in a variety of ways, including, for example, telephonically, via electronic mail, via text message, or via websites. + + + + + + PERSONNEL SECURITY + PS-5 + PERSONNEL TRANSFER + P2 + LOW + MODERATE + HIGH + + The organization: + + PS-5a. + Reviews and confirms ongoing operational need for current logical and physical access authorizations to information systems/facilities when individuals are reassigned or transferred to other positions within the organization; + + + PS-5b. + Initiates [Assignment: organization-defined transfer or reassignment actions] within [Assignment: organization-defined time period following the formal transfer action]; + + + PS-5c. + Modifies access authorization as needed to correspond with any changes in operational need due to reassignment or transfer; and + + + PS-5d. + Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period]. + + + + This control applies when reassignments or transfers of individuals are permanent or of such extended durations as to make the actions warranted. Organizations define actions appropriate for the types of reassignments or transfers, whether permanent or extended. Actions that may be required for personnel transfers or reassignments to other positions within organizations include, for example: (i) returning old and issuing new keys, identification cards, and building passes; (ii) closing information system accounts and establishing new accounts; (iii) changing information system access authorizations (i.e., privileges); and (iv) providing for access to official records to which individuals had access at previous work locations and in previous information system accounts. + AC-2 + IA-4 + PE-2 + PS-4 + + + + PERSONNEL SECURITY + PS-6 + ACCESS AGREEMENTS + P3 + LOW + MODERATE + HIGH + + The organization: + + PS-6a. + Develops and documents access agreements for organizational information systems; + + + PS-6b. + Reviews and updates the access agreements [Assignment: organization-defined frequency]; and + + + PS-6c. + Ensures that individuals requiring access to organizational information and information systems: + + PS-6c.1. + Sign appropriate access agreements prior to being granted access; and + + + PS-6c.2. + Re-sign access agreements to maintain access to organizational information systems when access agreements have been updated or [Assignment: organization-defined frequency]. + + + + + Access agreements include, for example, nondisclosure agreements, acceptable use agreements, rules of behavior, and conflict-of-interest agreements. Signed access agreements include an acknowledgement that individuals have read, understand, and agree to abide by the constraints associated with organizational information systems to which access is authorized. Organizations can use electronic signatures to acknowledge access agreements unless specifically prohibited by organizational policy. + PL-4 + PS-2 + PS-3 + PS-4 + PS-8 + + + + PS-6 (1) + INFORMATION REQUIRING SPECIAL PROTECTION + + PS-3 + + + [Withdrawn: Incorporated into PS-3]. + + + + PS-6 (2) + CLASSIFIED INFORMATION REQUIRING SPECIAL PROTECTION + + The organization ensures that access to classified information requiring special protection is granted only to individuals who: + + PS-6 (2)(a) + Have a valid access authorization that is demonstrated by assigned official government duties; + + + PS-6 (2)(b) + Satisfy associated personnel security criteria; and + + + PS-6 (2)(c) + Have read, understood, and signed a nondisclosure agreement. + + + + Classified information requiring special protection includes, for example, collateral information, Special Access Program (SAP) information, and Sensitive Compartmented Information (SCI). Personnel security criteria reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. + + + + PS-6 (3) + POST-EMPLOYMENT REQUIREMENTS + + The organization: + + PS-6 (3)(a) + Notifies individuals of applicable, legally binding post-employment requirements for protection of organizational information; and + + + PS-6 (3)(b) + Requires individuals to sign an acknowledgment of these requirements, if applicable, as part of granting initial access to covered information. + + + + Organizations consult with the Office of the General Counsel regarding matters of post-employment requirements on terminated individuals. + + + + + + PERSONNEL SECURITY + PS-7 + THIRD-PARTY PERSONNEL SECURITY + P1 + LOW + MODERATE + HIGH + + The organization: + + PS-7a. + Establishes personnel security requirements including security roles and responsibilities for third-party providers; + + + PS-7b. + Requires third-party providers to comply with personnel security policies and procedures established by the organization; + + + PS-7c. + Documents personnel security requirements; + + + PS-7d. + Requires third-party providers to notify [Assignment: organization-defined personnel or roles] of any personnel transfers or terminations of third-party personnel who possess organizational credentials and/or badges, or who have information system privileges within [Assignment: organization-defined time period]; and + + + PS-7e. + Monitors provider compliance. + + + + Third-party providers include, for example, service bureaus, contractors, and other organizations providing information system development, information technology services, outsourced applications, and network and security management. Organizations explicitly include personnel security requirements in acquisition-related documents. Third-party providers may have personnel working at organizational facilities with credentials, badges, or information system privileges issued by organizations. Notifications of third-party personnel changes ensure appropriate termination of privileges and credentials. Organizations define the transfers and terminations deemed reportable by security-related characteristics that include, for example, functions, roles, and nature of credentials/privileges associated with individuals transferred or terminated. + PS-2 + PS-3 + PS-4 + PS-5 + PS-6 + SA-9 + SA-21 + + + + NIST Special Publication 800-35 + + + + + PERSONNEL SECURITY + PS-8 + PERSONNEL SANCTIONS + P3 + LOW + MODERATE + HIGH + + The organization: + + PS-8a. + Employs a formal sanctions process for individuals failing to comply with established information security policies and procedures; and + + + PS-8b. + Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period] when a formal employee sanctions process is initiated, identifying the individual sanctioned and the reason for the sanction. + + + + Organizational sanctions processes reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Sanctions processes are described in access agreements and can be included as part of general personnel policies and procedures for organizations. Organizations consult with the Office of the General Counsel regarding matters of employee sanctions. + PL-4 + PS-6 + + + + RISK ASSESSMENT + RA-1 + RISK ASSESSMENT POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + RA-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + RA-1a.1. + A risk assessment policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + RA-1a.2. + Procedures to facilitate the implementation of the risk assessment policy and associated risk assessment controls; and + + + + RA-1b. + Reviews and updates the current: + + RA-1b.1. + Risk assessment policy [Assignment: organization-defined frequency]; and + + + RA-1b.2. + Risk assessment procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the RA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-30 + + + NIST Special Publication 800-100 + + + + + RISK ASSESSMENT + RA-2 + SECURITY CATEGORIZATION + P1 + LOW + MODERATE + HIGH + + The organization: + + RA-2a. + Categorizes information and the information system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance; + + + RA-2b. + Documents the security categorization results (including supporting rationale) in the security plan for the information system; and + + + RA-2c. + Ensures that the authorizing official or authorizing official designated representative reviews and approves the security categorization decision. + + + + Clearly defined authorization boundaries are a prerequisite for effective security categorization decisions. Security categories describe the potential adverse impacts to organizational operations, organizational assets, and individuals if organizational information and information systems are comprised through a loss of confidentiality, integrity, or availability. Organizations conduct the security categorization process as an organization-wide activity with the involvement of chief information officers, senior information security officers, information system owners, mission/business owners, and information owners/stewards. Organizations also consider the potential adverse impacts to other organizations and, in accordance with the USA PATRIOT Act of 2001 and Homeland Security Presidential Directives, potential national-level adverse impacts. Security categorization processes carried out by organizations facilitate the development of inventories of information assets, and along with CM-8, mappings to specific information system components where information is processed, stored, or transmitted. + CM-8 + MP-4 + RA-3 + SC-7 + + + + FIPS Publication 199 + + + NIST Special Publication 800-30 + + + NIST Special Publication 800-39 + + + NIST Special Publication 800-60 + + + + + RISK ASSESSMENT + RA-3 + RISK ASSESSMENT + P1 + LOW + MODERATE + HIGH + + The organization: + + RA-3a. + Conducts an assessment of risk, including the likelihood and magnitude of harm, from the unauthorized access, use, disclosure, disruption, modification, or destruction of the information system and the information it processes, stores, or transmits; + + + RA-3b. + Documents risk assessment results in [Selection: security plan; risk assessment report; [Assignment: organization-defined document]]; + + + RA-3c. + Reviews risk assessment results [Assignment: organization-defined frequency]; + + + RA-3d. + Disseminates risk assessment results to [Assignment: organization-defined personnel or roles]; and + + + RA-3e. + Updates the risk assessment [Assignment: organization-defined frequency] or whenever there are significant changes to the information system or environment of operation (including the identification of new threats and vulnerabilities), or other conditions that may impact the security state of the system. + + + + Clearly defined authorization boundaries are a prerequisite for effective risk assessments. Risk assessments take into account threats, vulnerabilities, likelihood, and impact to organizational operations and assets, individuals, other organizations, and the Nation based on the operation and use of information systems. Risk assessments also take into account risk from external parties (e.g., service providers, contractors operating information systems on behalf of the organization, individuals accessing organizational information systems, outsourcing entities). In accordance with OMB policy and related E-authentication initiatives, authentication of public users accessing federal information systems may also be required to protect nonpublic or privacy-related information. As such, organizational assessments of risk also address public access to federal information systems. +Risk assessments (either formal or informal) can be conducted at all three tiers in the risk management hierarchy (i.e., organization level, mission/business process level, or information system level) and at any phase in the system development life cycle. Risk assessments can also be conducted at various steps in the Risk Management Framework, including categorization, security control selection, security control implementation, security control assessment, information system authorization, and security control monitoring. RA-3 is noteworthy in that the control must be partially implemented prior to the implementation of other controls in order to complete the first two steps in the Risk Management Framework. Risk assessments can play an important role in security control selection processes, particularly during the application of tailoring guidance, which includes security control supplementation. + RA-2 + PM-9 + + + + OMB Memorandum 04-04 + + + NIST Special Publication 800-30 + + + NIST Special Publication 800-39 + + + http://idmanagement.gov + + + + + RISK ASSESSMENT + RA-4 + RISK ASSESSMENT UPDATE + + RA-3 + + + [Withdrawn: Incorporated into RA-3]. + + + + RISK ASSESSMENT + RA-5 + VULNERABILITY SCANNING + P1 + LOW + MODERATE + HIGH + + The organization: + + RA-5a. + Scans for vulnerabilities in the information system and hosted applications [Assignment: organization-defined frequency and/or randomly in accordance with organization-defined process] and when new vulnerabilities potentially affecting the system/applications are identified and reported; + + + RA-5b. + Employs vulnerability scanning tools and techniques that facilitate interoperability among tools and automate parts of the vulnerability management process by using standards for: + + RA-5b.1. + Enumerating platforms, software flaws, and improper configurations; + + + RA-5b.2. + Formatting checklists and test procedures; and + + + RA-5b.3. + Measuring vulnerability impact; + + + + RA-5c. + Analyzes vulnerability scan reports and results from security control assessments; + + + RA-5d. + Remediates legitimate vulnerabilities [Assignment: organization-defined response times] in accordance with an organizational assessment of risk; and + + + RA-5e. + Shares information obtained from the vulnerability scanning process and security control assessments with [Assignment: organization-defined personnel or roles] to help eliminate similar vulnerabilities in other information systems (i.e., systemic weaknesses or deficiencies). + + + + Security categorization of information systems guides the frequency and comprehensiveness of vulnerability scans. Organizations determine the required vulnerability scanning for all information system components, ensuring that potential sources of vulnerabilities such as networked printers, scanners, and copiers are not overlooked. Vulnerability analyses for custom software applications may require additional approaches such as static analysis, dynamic analysis, binary analysis, or a hybrid of the three approaches. Organizations can employ these analysis approaches in a variety of tools (e.g., web-based application scanners, static analysis tools, binary analyzers) and in source code reviews. Vulnerability scanning includes, for example: (i) scanning for patch levels; (ii) scanning for functions, ports, protocols, and services that should not be accessible to users or devices; and (iii) scanning for improperly configured or incorrectly operating information flow control mechanisms. Organizations consider using tools that express vulnerabilities in the Common Vulnerabilities and Exposures (CVE) naming convention and that use the Open Vulnerability Assessment Language (OVAL) to determine/test for the presence of vulnerabilities. Suggested sources for vulnerability information include the Common Weakness Enumeration (CWE) listing and the National Vulnerability Database (NVD). In addition, security control assessments such as red team exercises provide other sources of potential vulnerabilities for which to scan. Organizations also consider using tools that express vulnerability impact by the Common Vulnerability Scoring System (CVSS). + CA-2 + CA-7 + CM-4 + CM-6 + RA-2 + RA-3 + SA-11 + SI-2 + + + + RA-5 (1) + UPDATE TOOL CAPABILITY + MODERATE + HIGH + + The organization employs vulnerability scanning tools that include the capability to readily update the information system vulnerabilities to be scanned. + + + The vulnerabilities to be scanned need to be readily updated as new vulnerabilities are discovered, announced, and scanning methods developed. This updating process helps to ensure that potential vulnerabilities in the information system are identified and addressed as quickly as possible. + SI-3 + SI-7 + + + + RA-5 (2) + UPDATE BY FREQUENCY / PRIOR TO NEW SCAN / WHEN IDENTIFIED + MODERATE + HIGH + + The organization updates the information system vulnerabilities scanned [Selection (one or more): [Assignment: organization-defined frequency]; prior to a new scan; when new vulnerabilities are identified and reported]. + + + SI-3 + SI-5 + + + + RA-5 (3) + BREADTH / DEPTH OF COVERAGE + + The organization employs vulnerability scanning procedures that can identify the breadth and depth of coverage (i.e., information system components scanned and vulnerabilities checked). + + + + RA-5 (4) + DISCOVERABLE INFORMATION + HIGH + + The organization determines what information about the information system is discoverable by adversaries and subsequently takes [Assignment: organization-defined corrective actions]. + + + Discoverable information includes information that adversaries could obtain without directly compromising or breaching the information system, for example, by collecting information the system is exposing or by conducting extensive searches of the web. Corrective actions can include, for example, notifying appropriate organizational personnel, removing designated information, or changing the information system to make designated information less relevant or attractive to adversaries. + AU-13 + + + + RA-5 (5) + PRIVILEGED ACCESS + MODERATE + HIGH + + The information system implements privileged access authorization to [Assignment: organization-identified information system components] for selected [Assignment: organization-defined vulnerability scanning activities]. + + + In certain situations, the nature of the vulnerability scanning may be more intrusive or the information system component that is the subject of the scanning may contain highly sensitive information. Privileged access authorization to selected system components facilitates more thorough vulnerability scanning and also protects the sensitive nature of such scanning. + + + + RA-5 (6) + AUTOMATED TREND ANALYSES + + The organization employs automated mechanisms to compare the results of vulnerability scans over time to determine trends in information system vulnerabilities. + + + IR-4 + IR-5 + SI-4 + + + + RA-5 (7) + AUTOMATED DETECTION AND NOTIFICATION OF UNAUTHORIZED COMPONENTS + + CM-8 + + + [Withdrawn: Incorporated into CM-8]. + + + + RA-5 (8) + REVIEW HISTORIC AUDIT LOGS + + The organization reviews historic audit logs to determine if a vulnerability identified in the information system has been previously exploited. + + + AU-6 + + + + RA-5 (9) + PENETRATION TESTING AND ANALYSES + + CA-8 + + + [Withdrawn: Incorporated into CA-8]. + + + + RA-5 (10) + CORRELATE SCANNING INFORMATION + + The organization correlates the output from vulnerability scanning tools to determine the presence of multi-vulnerability/multi-hop attack vectors. + + + + + + NIST Special Publication 800-40 + + + NIST Special Publication 800-70 + + + NIST Special Publication 800-115 + + + http://cwe.mitre.org + + + http://nvd.nist.gov + + + + + RISK ASSESSMENT + RA-6 + TECHNICAL SURVEILLANCE COUNTERMEASURES SURVEY + P0 + + The organization employs a technical surveillance countermeasures survey at [Assignment: organization-defined locations] [Selection (one or more): [Assignment: organization-defined frequency]; [Assignment: organization-defined events or indicators occur]]. + + + Technical surveillance countermeasures surveys are performed by qualified personnel to detect the presence of technical surveillance devices/hazards and to identify technical security weaknesses that could aid in the conduct of technical penetrations of surveyed facilities. Such surveys provide evaluations of the technical security postures of organizations and facilities and typically include thorough visual, electronic, and physical examinations in and about surveyed facilities. The surveys also provide useful input into risk assessments and organizational exposure to potential adversaries. + + + + SYSTEM AND SERVICES ACQUISITION + SA-1 + SYSTEM AND SERVICES ACQUISITION POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + SA-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + SA-1a.1. + A system and services acquisition policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + SA-1a.2. + Procedures to facilitate the implementation of the system and services acquisition policy and associated system and services acquisition controls; and + + + + SA-1b. + Reviews and updates the current: + + SA-1b.1. + System and services acquisition policy [Assignment: organization-defined frequency]; and + + + SA-1b.2. + System and services acquisition procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the SA family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-2 + ALLOCATION OF RESOURCES + P1 + LOW + MODERATE + HIGH + + The organization: + + SA-2a. + Determines information security requirements for the information system or information system service in mission/business process planning; + + + SA-2b. + Determines, documents, and allocates the resources required to protect the information system or information system service as part of its capital planning and investment control process; and + + + SA-2c. + Establishes a discrete line item for information security in organizational programming and budgeting documentation. + + + + Resource allocation for information security includes funding for the initial information system or information system service acquisition and funding for the sustainment of the system/service. + PM-3 + PM-11 + + + + NIST Special Publication 800-65 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-3 + SYSTEM DEVELOPMENT LIFE CYCLE + P1 + LOW + MODERATE + HIGH + + The organization: + + SA-3a. + Manages the information system using [Assignment: organization-defined system development life cycle] that incorporates information security considerations; + + + SA-3b. + Defines and documents information security roles and responsibilities throughout the system development life cycle; + + + SA-3c. + Identifies individuals having information security roles and responsibilities; and + + + SA-3d. + Integrates the organizational information security risk management process into system development life cycle activities. + + + + A well-defined system development life cycle provides the foundation for the successful development, implementation, and operation of organizational information systems. To apply the required security controls within the system development life cycle requires a basic understanding of information security, threats, vulnerabilities, adverse impacts, and risk to critical missions/business functions. The security engineering principles in SA-8 cannot be properly applied if individuals that design, code, and test information systems and system components (including information technology products) do not understand security. Therefore, organizations include qualified personnel, for example, chief information security officers, security architects, security engineers, and information system security officers in system development life cycle activities to ensure that security requirements are incorporated into organizational information systems. It is equally important that developers include individuals on the development team that possess the requisite security expertise and skills to ensure that needed security capabilities are effectively integrated into the information system. Security awareness and training programs can help ensure that individuals having key security roles and responsibilities have the appropriate experience, skills, and expertise to conduct assigned system development life cycle activities. The effective integration of security requirements into enterprise architecture also helps to ensure that important security considerations are addressed early in the system development life cycle and that those considerations are directly related to the organizational mission/business processes. This process also facilitates the integration of the information security architecture into the enterprise architecture, consistent with organizational risk management and information security strategies. + AT-3 + PM-7 + SA-8 + + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-64 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-4 + ACQUISITION PROCESS + P1 + LOW + MODERATE + HIGH + + The organization includes the following requirements, descriptions, and criteria, explicitly or by reference, in the acquisition contract for the information system, system component, or information system service in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, guidelines, and organizational mission/business needs: + + SA-4a. + Security functional requirements; + + + SA-4b. + Security strength requirements; + + + SA-4c. + Security assurance requirements; + + + SA-4d. + Security-related documentation requirements; + + + SA-4e. + Requirements for protecting security-related documentation; + + + SA-4f. + Description of the information system development environment and environment in which the system is intended to operate; and + + + SA-4g. + Acceptance criteria. + + + + Information system components are discrete, identifiable information technology assets (e.g., hardware, software, or firmware) that represent the building blocks of an information system. Information system components include commercial information technology products. Security functional requirements include security capabilities, security functions, and security mechanisms. Security strength requirements associated with such capabilities, functions, and mechanisms include degree of correctness, completeness, resistance to direct attack, and resistance to tampering or bypass. Security assurance requirements include: (i) development processes, procedures, practices, and methodologies; and (ii) evidence from development and assessment activities providing grounds for confidence that the required security functionality has been implemented and the required security strength has been achieved. Security documentation requirements address all phases of the system development life cycle. +Security functionality, assurance, and documentation requirements are expressed in terms of security controls and control enhancements that have been selected through the tailoring process. The security control tailoring process includes, for example, the specification of parameter values through the use of assignment and selection statements and the specification of platform dependencies and implementation information. Security documentation provides user and administrator guidance regarding the implementation and operation of security controls. The level of detail required in security documentation is based on the security category or classification level of the information system and the degree to which organizations depend on the stated security capability, functions, or mechanisms to meet overall risk response expectations (as defined in the organizational risk management strategy). Security requirements can also include organizationally mandated configuration settings specifying allowed functions, ports, protocols, and services. Acceptance criteria for information systems, information system components, and information system services are defined in the same manner as such criteria for any organizational acquisition or procurement. The Federal Acquisition Regulation (FAR) Section 7.103 contains information security requirements from FISMA. + CM-6 + PL-2 + PS-7 + SA-3 + SA-5 + SA-8 + SA-11 + SA-12 + + + + SA-4 (1) + FUNCTIONAL PROPERTIES OF SECURITY CONTROLS + MODERATE + HIGH + + The organization requires the developer of the information system, system component, or information system service to provide a description of the functional properties of the security controls to be employed. + + + Functional properties of security controls describe the functionality (i.e., security capability, functions, or mechanisms) visible at the interfaces of the controls and specifically exclude functionality and data structures internal to the operation of the controls. + SA-5 + + + + SA-4 (2) + DESIGN / IMPLEMENTATION INFORMATION FOR SECURITY CONTROLS + MODERATE + HIGH + + The organization requires the developer of the information system, system component, or information system service to provide design and implementation information for the security controls to be employed that includes: [Selection (one or more): security-relevant external system interfaces; high-level design; low-level design; source code or hardware schematics; [Assignment: organization-defined design/implementation information]] at [Assignment: organization-defined level of detail]. + + + Organizations may require different levels of detail in design and implementation documentation for security controls employed in organizational information systems, system components, or information system services based on mission/business requirements, requirements for trustworthiness/resiliency, and requirements for analysis and testing. Information systems can be partitioned into multiple subsystems. Each subsystem within the system can contain one or more modules. The high-level design for the system is expressed in terms of multiple subsystems and the interfaces between subsystems providing security-relevant functionality. The low-level design for the system is expressed in terms of modules with particular emphasis on software and firmware (but not excluding hardware) and the interfaces between modules providing security-relevant functionality. Source code and hardware schematics are typically referred to as the implementation representation of the information system. + SA-5 + + + + SA-4 (3) + DEVELOPMENT METHODS / TECHNIQUES / PRACTICES + + The organization requires the developer of the information system, system component, or information system service to demonstrate the use of a system development life cycle that includes [Assignment: organization-defined state-of-the-practice system/security engineering methods, software development methods, testing/evaluation/validation techniques, and quality control processes]. + + + Following a well-defined system development life cycle that includes state-of-the-practice software development methods, systems/security engineering methods, quality control processes, and testing, evaluation, and validation techniques helps to reduce the number and severity of latent errors within information systems, system components, and information system services. Reducing the number/severity of such errors reduces the number of vulnerabilities in those systems, components, and services. + SA-12 + + + + SA-4 (4) + ASSIGNMENT OF COMPONENTS TO SYSTEMS + + CM-8 (9) + + + [Withdrawn: Incorporated into CM-8 (9)]. + + + + SA-4 (5) + SYSTEM / COMPONENT / SERVICE CONFIGURATIONS + + The organization requires the developer of the information system, system component, or information system service to: + + SA-4 (5)(a) + Deliver the system, component, or service with [Assignment: organization-defined security configurations] implemented; and + + + SA-4 (5)(b) + Use the configurations as the default for any subsequent system, component, or service reinstallation or upgrade. + + + + Security configurations include, for example, the U.S. Government Configuration Baseline (USGCB) and any limitations on functions, ports, protocols, and services. Security characteristics include, for example, requiring that all default passwords have been changed. + CM-8 + + + + SA-4 (6) + USE OF INFORMATION ASSURANCE PRODUCTS + + The organization: + + SA-4 (6)(a) + Employs only government off-the-shelf (GOTS) or commercial off-the-shelf (COTS) information assurance (IA) and IA-enabled information technology products that compose an NSA-approved solution to protect classified information when the networks used to transmit the information are at a lower classification level than the information being transmitted; and + + + SA-4 (6)(b) + Ensures that these products have been evaluated and/or validated by NSA or in accordance with NSA-approved procedures. + + + + COTS IA or IA-enabled information technology products used to protect classified information by cryptographic means may be required to use NSA-approved key management. + SC-8 + SC-12 + SC-13 + + + + SA-4 (7) + NIAP-APPROVED PROTECTION PROFILES + + The organization: + + SA-4 (7)(a) + Limits the use of commercially provided information assurance (IA) and IA-enabled information technology products to those products that have been successfully evaluated against a National Information Assurance partnership (NIAP)-approved Protection Profile for a specific technology type, if such a profile exists; and + + + SA-4 (7)(b) + Requires, if no NIAP-approved Protection Profile exists for a specific technology type but a commercially provided information technology product relies on cryptographic functionality to enforce its security policy, that the cryptographic module is FIPS-validated. + + + + SC-12 + SC-13 + + + + SA-4 (8) + CONTINUOUS MONITORING PLAN + + The organization requires the developer of the information system, system component, or information system service to produce a plan for the continuous monitoring of security control effectiveness that contains [Assignment: organization-defined level of detail]. + + + The objective of continuous monitoring plans is to determine if the complete set of planned, required, and deployed security controls within the information system, system component, or information system service continue to be effective over time based on the inevitable changes that occur. Developer continuous monitoring plans include a sufficient level of detail such that the information can be incorporated into the continuous monitoring strategies and programs implemented by organizations. + CA-7 + + + + SA-4 (9) + FUNCTIONS / PORTS / PROTOCOLS / SERVICES IN USE + MODERATE + HIGH + + The organization requires the developer of the information system, system component, or information system service to identify early in the system development life cycle, the functions, ports, protocols, and services intended for organizational use. + + + The identification of functions, ports, protocols, and services early in the system development life cycle (e.g., during the initial requirements definition and design phases) allows organizations to influence the design of the information system, information system component, or information system service. This early involvement in the life cycle helps organizations to avoid or minimize the use of functions, ports, protocols, or services that pose unnecessarily high risks and understand the trade-offs involved in blocking specific ports, protocols, or services (or when requiring information system service providers to do so). Early identification of functions, ports, protocols, and services avoids costly retrofitting of security controls after the information system, system component, or information system service has been implemented. SA-9 describes requirements for external information system services with organizations identifying which functions, ports, protocols, and services are provided from external sources. + CM-7 + SA-9 + + + + SA-4 (10) + USE OF APPROVED PIV PRODUCTS + LOW + MODERATE + HIGH + + The organization employs only information technology products on the FIPS 201-approved products list for Personal Identity Verification (PIV) capability implemented within organizational information systems. + + + IA-2 + IA-8 + + + + + + HSPD-12 + + + ISO/IEC 15408 + + + FIPS Publication 140-2 + + + FIPS Publication 201 + + + NIST Special Publication 800-23 + + + NIST Special Publication 800-35 + + + NIST Special Publication 800-36 + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-64 + + + NIST Special Publication 800-70 + + + NIST Special Publication 800-137 + + + Federal Acquisition Regulation + + + http://www.niap-ccevs.org + + + http://fips201ep.cio.gov + + + http://www.acquisition.gov/far + + + + + SYSTEM AND SERVICES ACQUISITION + SA-5 + INFORMATION SYSTEM DOCUMENTATION + P2 + LOW + MODERATE + HIGH + + The organization: + + SA-5a. + Obtains administrator documentation for the information system, system component, or information system service that describes: + + SA-5a.1. + Secure configuration, installation, and operation of the system, component, or service; + + + SA-5a.2. + Effective use and maintenance of security functions/mechanisms; and + + + SA-5a.3. + Known vulnerabilities regarding configuration and use of administrative (i.e., privileged) functions; + + + + SA-5b. + Obtains user documentation for the information system, system component, or information system service that describes: + + SA-5b.1. + User-accessible security functions/mechanisms and how to effectively use those security functions/mechanisms; + + + SA-5b.2. + Methods for user interaction, which enables individuals to use the system, component, or service in a more secure manner; and + + + SA-5b.3. + User responsibilities in maintaining the security of the system, component, or service; + + + + SA-5c. + Documents attempts to obtain information system, system component, or information system service documentation when such documentation is either unavailable or nonexistent and takes [Assignment: organization-defined actions] in response; + + + SA-5d. + Protects documentation as required, in accordance with the risk management strategy; and + + + SA-5e. + Distributes documentation to [Assignment: organization-defined personnel or roles]. + + + + This control helps organizational personnel understand the implementation and operation of security controls associated with information systems, system components, and information system services. Organizations consider establishing specific measures to determine the quality/completeness of the content provided. The inability to obtain needed documentation may occur, for example, due to the age of the information system/component or lack of support from developers and contractors. In those situations, organizations may need to recreate selected documentation if such documentation is essential to the effective implementation or operation of security controls. The level of protection provided for selected information system, component, or service documentation is commensurate with the security category or classification of the system. For example, documentation associated with a key DoD weapons system or command and control system would typically require a higher level of protection than a routine administrative system. Documentation that addresses information system vulnerabilities may also require an increased level of protection. Secure operation of the information system, includes, for example, initially starting the system and resuming secure system operation after any lapse in system operation. + CM-6 + CM-8 + PL-2 + PL-4 + PS-2 + SA-3 + SA-4 + + + + SA-5 (1) + FUNCTIONAL PROPERTIES OF SECURITY CONTROLS + + SA-4 (1) + + + [Withdrawn: Incorporated into SA-4 (1)]. + + + + SA-5 (2) + SECURITY-RELEVANT EXTERNAL SYSTEM INTERFACES + + SA-4 (2) + + + [Withdrawn: Incorporated into SA-4 (2)]. + + + + SA-5 (3) + HIGH-LEVEL DESIGN + + SA-4 (2) + + + [Withdrawn: Incorporated into SA-4 (2)]. + + + + SA-5 (4) + LOW-LEVEL DESIGN + + SA-4 (2) + + + [Withdrawn: Incorporated into SA-4 (2)]. + + + + SA-5 (5) + SOURCE CODE + + SA-4 (2) + + + [Withdrawn: Incorporated into SA-4 (2)]. + + + + + + SYSTEM AND SERVICES ACQUISITION + SA-6 + SOFTWARE USAGE RESTRICTIONS + + CM-10 + SI-7 + + + [Withdrawn: Incorporated into CM-10 and SI-7]. + + + + SYSTEM AND SERVICES ACQUISITION + SA-7 + USER-INSTALLED SOFTWARE + + CM-11 + SI-7 + + + [Withdrawn: Incorporated into CM-11 and SI-7]. + + + + SYSTEM AND SERVICES ACQUISITION + SA-8 + SECURITY ENGINEERING PRINCIPLES + P1 + MODERATE + HIGH + + The organization applies information system security engineering principles in the specification, design, development, implementation, and modification of the information system. + + + Organizations apply security engineering principles primarily to new development information systems or systems undergoing major upgrades. For legacy systems, organizations apply security engineering principles to system upgrades and modifications to the extent feasible, given the current state of hardware, software, and firmware within those systems. Security engineering principles include, for example: (i) developing layered protections; (ii) establishing sound security policy, architecture, and controls as the foundation for design; (iii) incorporating security requirements into the system development life cycle; (iv) delineating physical and logical security boundaries; (v) ensuring that system developers are trained on how to build secure software; (vi) tailoring security controls to meet organizational and operational needs; (vii) performing threat modeling to identify use cases, threat agents, attack vectors, and attack patterns as well as compensating controls and design patterns needed to mitigate risk; and (viii) reducing risk to acceptable levels, thus enabling informed risk management decisions. + PM-7 + SA-3 + SA-4 + SA-17 + SC-2 + SC-3 + + + + NIST Special Publication 800-27 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-9 + EXTERNAL INFORMATION SYSTEM SERVICES + P1 + LOW + MODERATE + HIGH + + The organization: + + SA-9a. + Requires that providers of external information system services comply with organizational information security requirements and employ [Assignment: organization-defined security controls] in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance; + + + SA-9b. + Defines and documents government oversight and user roles and responsibilities with regard to external information system services; and + + + SA-9c. + Employs [Assignment: organization-defined processes, methods, and techniques] to monitor security control compliance by external service providers on an ongoing basis. + + + + External information system services are services that are implemented outside of the authorization boundaries of organizational information systems. This includes services that are used by, but not a part of, organizational information systems. FISMA and OMB policy require that organizations using external service providers that are processing, storing, or transmitting federal information or operating information systems on behalf of the federal government ensure that such providers meet the same security requirements that federal agencies are required to meet. Organizations establish relationships with external service providers in a variety of ways including, for example, through joint ventures, business partnerships, contracts, interagency agreements, lines of business arrangements, licensing agreements, and supply chain exchanges. The responsibility for managing risks from the use of external information system services remains with authorizing officials. For services external to organizations, a chain of trust requires that organizations establish and retain a level of confidence that each participating provider in the potentially complex consumer-provider relationship provides adequate protection for the services rendered. The extent and nature of this chain of trust varies based on the relationships between organizations and the external providers. Organizations document the basis for trust relationships so the relationships can be monitored over time. External information system services documentation includes government, service providers, end user security roles and responsibilities, and service-level agreements. Service-level agreements define expectations of performance for security controls, describe measurable outcomes, and identify remedies and response requirements for identified instances of noncompliance. + CA-3 + IR-7 + PS-7 + + + + SA-9 (1) + RISK ASSESSMENTS / ORGANIZATIONAL APPROVALS + + The organization: + + SA-9 (1)(a) + Conducts an organizational assessment of risk prior to the acquisition or outsourcing of dedicated information security services; and + + + SA-9 (1)(b) + Ensures that the acquisition or outsourcing of dedicated information security services is approved by [Assignment: organization-defined personnel or roles]. + + + + Dedicated information security services include, for example, incident monitoring, analysis and response, operation of information security-related devices such as firewalls, or key management services. + CA-6 + RA-3 + + + + SA-9 (2) + IDENTIFICATION OF FUNCTIONS / PORTS / PROTOCOLS / SERVICES + MODERATE + HIGH + + The organization requires providers of [Assignment: organization-defined external information system services] to identify the functions, ports, protocols, and other services required for the use of such services. + + + Information from external service providers regarding the specific functions, ports, protocols, and services used in the provision of such services can be particularly useful when the need arises to understand the trade-offs involved in restricting certain functions/services or blocking certain ports/protocols. + CM-7 + + + + SA-9 (3) + ESTABLISH / MAINTAIN TRUST RELATIONSHIP WITH PROVIDERS + + The organization establishes, documents, and maintains trust relationships with external service providers based on [Assignment: organization-defined security requirements, properties, factors, or conditions defining acceptable trust relationships]. + + + The degree of confidence that the risk from using external services is at an acceptable level depends on the trust that organizations place in the external providers, individually or in combination. Trust relationships can help organization to gain increased levels of confidence that participating service providers are providing adequate protection for the services rendered. Such relationships can be complicated due to the number of potential entities participating in the consumer-provider interactions, subordinate relationships and levels of trust, and the types of interactions between the parties. In some cases, the degree of trust is based on the amount of direct control organizations are able to exert on external service providers with regard to employment of security controls necessary for the protection of the service/information and the evidence brought forth as to the effectiveness of those controls. The level of control is typically established by the terms and conditions of the contracts or service-level agreements and can range from extensive control (e.g., negotiating contracts or agreements that specify security requirements for the providers) to very limited control (e.g., using contracts or service-level agreements to obtain commodity services such as commercial telecommunications services). In other cases, levels of trust are based on factors that convince organizations that required security controls have been employed and that determinations of control effectiveness exist. For example, separately authorized external information system services provided to organizations through well-established business relationships may provide degrees of trust in such services within the tolerable risk range of the organizations using the services. External service providers may also outsource selected services to other external entities, making the trust relationship more difficult and complicated to manage. Depending on the nature of the services, organizations may find it very difficult to place significant trust in external providers. This is not due to any inherent untrustworthiness on the part of providers, but to the intrinsic level of risk in the services. + + + + SA-9 (4) + CONSISTENT INTERESTS OF CONSUMERS AND PROVIDERS + + The organization employs [Assignment: organization-defined security safeguards] to ensure that the interests of [Assignment: organization-defined external service providers] are consistent with and reflect organizational interests. + + + As organizations increasingly use external service providers, the possibility exists that the interests of the service providers may diverge from organizational interests. In such situations, simply having the correct technical, procedural, or operational safeguards in place may not be sufficient if the service providers that implement and control those safeguards are not operating in a manner consistent with the interests of the consuming organizations. Possible actions that organizations might take to address such concerns include, for example, requiring background checks for selected service provider personnel, examining ownership records, employing only trustworthy service providers (i.e., providers with which organizations have had positive experiences), and conducting periodic/unscheduled visits to service provider facilities. + + + + SA-9 (5) + PROCESSING, STORAGE, AND SERVICE LOCATION + + The organization restricts the location of [Selection (one or more): information processing; information/data; information system services] to [Assignment: organization-defined locations] based on [Assignment: organization-defined requirements or conditions]. + + + The location of information processing, information/data storage, or information system services that are critical to organizations can have a direct impact on the ability of those organizations to successfully execute their missions/business functions. This situation exists when external providers control the location of processing, storage or services. The criteria external providers use for the selection of processing, storage, or service locations may be different from organizational criteria. For example, organizations may want to ensure that data/information storage locations are restricted to certain locations to facilitate incident response activities (e.g., forensic analyses, after-the-fact investigations) in case of information security breaches/compromises. Such incident response activities may be adversely affected by the governing laws or protocols in the locations where processing and storage occur and/or the locations from which information system services emanate. + + + + + + NIST Special Publication 800-35 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-10 + DEVELOPER CONFIGURATION MANAGEMENT + P1 + MODERATE + HIGH + + The organization requires the developer of the information system, system component, or information system service to: + + SA-10a. + Perform configuration management during system, component, or service [Selection (one or more): design; development; implementation; operation]; + + + SA-10b. + Document, manage, and control the integrity of changes to [Assignment: organization-defined configuration items under configuration management]; + + + SA-10c. + Implement only organization-approved changes to the system, component, or service; + + + SA-10d. + Document approved changes to the system, component, or service and the potential security impacts of such changes; and + + + SA-10e. + Track security flaws and flaw resolution within the system, component, or service and report findings to [Assignment: organization-defined personnel]. + + + + This control also applies to organizations conducting internal information systems development and integration. Organizations consider the quality and completeness of the configuration management activities conducted by developers as evidence of applying effective security safeguards. Safeguards include, for example, protecting from unauthorized modification or destruction, the master copies of all material used to generate security-relevant portions of the system hardware, software, and firmware. Maintaining the integrity of changes to the information system, information system component, or information system service requires configuration control throughout the system development life cycle to track authorized changes and prevent unauthorized changes. Configuration items that are placed under configuration management (if existence/use is required by other security controls) include: the formal model; the functional, high-level, and low-level design specifications; other design data; implementation documentation; source code and hardware schematics; the running version of the object code; tools for comparing new versions of security-relevant hardware descriptions and software/firmware source code with previous versions; and test fixtures and documentation. Depending on the mission/business needs of organizations and the nature of the contractual relationships in place, developers may provide configuration management support during the operations and maintenance phases of the life cycle. + CM-3 + CM-4 + CM-9 + SA-12 + SI-2 + + + + SA-10 (1) + SOFTWARE / FIRMWARE INTEGRITY VERIFICATION + + The organization requires the developer of the information system, system component, or information system service to enable integrity verification of software and firmware components. + + + This control enhancement allows organizations to detect unauthorized changes to software and firmware components through the use of tools, techniques, and/or mechanisms provided by developers. Integrity checking mechanisms can also address counterfeiting of software and firmware components. Organizations verify the integrity of software and firmware components, for example, through secure one-way hashes provided by developers. Delivered software and firmware components also include any updates to such components. + SI-7 + + + + SA-10 (2) + ALTERNATIVE CONFIGURATION MANAGEMENT PROCESSES + + The organization provides an alternate configuration management process using organizational personnel in the absence of a dedicated developer configuration management team. + + + Alternate configuration management processes may be required, for example, when organizations use commercial off-the-shelf (COTS) information technology products. Alternate configuration management processes include organizational personnel that: (i) are responsible for reviewing/approving proposed changes to information systems, system components, and information system services; and (ii) conduct security impact analyses prior to the implementation of any changes to systems, components, or services (e.g., a configuration control board that considers security impacts of changes during development and includes representatives of both the organization and the developer, when applicable). + + + + SA-10 (3) + HARDWARE INTEGRITY VERIFICATION + + The organization requires the developer of the information system, system component, or information system service to enable integrity verification of hardware components. + + + This control enhancement allows organizations to detect unauthorized changes to hardware components through the use of tools, techniques, and/or mechanisms provided by developers. Organizations verify the integrity of hardware components, for example, with hard-to-copy labels and verifiable serial numbers provided by developers, and by requiring the implementation of anti-tamper technologies. Delivered hardware components also include updates to such components. + SI-7 + + + + SA-10 (4) + TRUSTED GENERATION + + The organization requires the developer of the information system, system component, or information system service to employ tools for comparing newly generated versions of security-relevant hardware descriptions and software/firmware source and object code with previous versions. + + + This control enhancement addresses changes to hardware, software, and firmware components between versions during development. In contrast, SA-10 (1) and SA-10 (3) allow organizations to detect unauthorized changes to hardware, software, and firmware components through the use of tools, techniques, and/or mechanisms provided by developers. + + + + SA-10 (5) + MAPPING INTEGRITY FOR VERSION CONTROL + + The organization requires the developer of the information system, system component, or information system service to maintain the integrity of the mapping between the master build data (hardware drawings and software/firmware code) describing the current version of security-relevant hardware, software, and firmware and the on-site master copy of the data for the current version. + + + This control enhancement addresses changes to hardware, software, and firmware components during initial development and during system life cycle updates. Maintaining the integrity between the master copies of security-relevant hardware, software, and firmware (including designs and source code) and the equivalent data in master copies on-site in operational environments is essential to ensure the availability of organizational information systems supporting critical missions and/or business functions. + + + + SA-10 (6) + TRUSTED DISTRIBUTION + + The organization requires the developer of the information system, system component, or information system service to execute procedures for ensuring that security-relevant hardware, software, and firmware updates distributed to the organization are exactly as specified by the master copies. + + + The trusted distribution of security-relevant hardware, software, and firmware updates helps to ensure that such updates are faithful representations of the master copies maintained by the developer and have not been tampered with during distribution. + + + + + + NIST Special Publication 800-128 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-11 + DEVELOPER SECURITY TESTING AND EVALUATION + P1 + MODERATE + HIGH + + The organization requires the developer of the information system, system component, or information system service to: + + SA-11a. + Create and implement a security assessment plan; + + + SA-11b. + Perform [Selection (one or more): unit; integration; system; regression] testing/evaluation at [Assignment: organization-defined depth and coverage]; + + + SA-11c. + Produce evidence of the execution of the security assessment plan and the results of the security testing/evaluation; + + + SA-11d. + Implement a verifiable flaw remediation process; and + + + SA-11e. + Correct flaws identified during security testing/evaluation. + + + + Developmental security testing/evaluation occurs at all post-design phases of the system development life cycle. Such testing/evaluation confirms that the required security controls are implemented correctly, operating as intended, enforcing the desired security policy, and meeting established security requirements. Security properties of information systems may be affected by the interconnection of system components or changes to those components. These interconnections or changes (e.g., upgrading or replacing applications and operating systems) may adversely affect previously implemented security controls. This control provides additional types of security testing/evaluation that developers can conduct to reduce or eliminate potential flaws. Testing custom software applications may require approaches such as static analysis, dynamic analysis, binary analysis, or a hybrid of the three approaches. Developers can employ these analysis approaches in a variety of tools (e.g., web-based application scanners, static analysis tools, binary analyzers) and in source code reviews. Security assessment plans provide the specific activities that developers plan to carry out including the types of analyses, testing, evaluation, and reviews of software and firmware components, the degree of rigor to be applied, and the types of artifacts produced during those processes. The depth of security testing/evaluation refers to the rigor and level of detail associated with the assessment process (e.g., black box, gray box, or white box testing). The coverage of security testing/evaluation refers to the scope (i.e., number and type) of the artifacts included in the assessment process. Contracts specify the acceptance criteria for security assessment plans, flaw remediation processes, and the evidence that the plans/processes have been diligently applied. Methods for reviewing and protecting assessment plans, evidence, and documentation are commensurate with the security category or classification level of the information system. Contracts may specify documentation protection requirements. + CA-2 + CM-4 + SA-3 + SA-4 + SA-5 + SI-2 + + + + SA-11 (1) + STATIC CODE ANALYSIS + + The organization requires the developer of the information system, system component, or information system service to employ static code analysis tools to identify common flaws and document the results of the analysis. + + + Static code analysis provides a technology and methodology for security reviews. Such analysis can be used to identify security vulnerabilities and enforce security coding practices. Static code analysis is most effective when used early in the development process, when each code change can be automatically scanned for potential weaknesses. Static analysis can provide clear remediation guidance along with defects to enable developers to fix such defects. Evidence of correct implementation of static analysis can include, for example, aggregate defect density for critical defect types, evidence that defects were inspected by developers or security professionals, and evidence that defects were fixed. An excessively high density of ignored findings (commonly referred to as ignored or false positives) indicates a potential problem with the analysis process or tool. In such cases, organizations weigh the validity of the evidence against evidence from other sources. + + + + SA-11 (2) + THREAT AND VULNERABILITY ANALYSES + + The organization requires the developer of the information system, system component, or information system service to perform threat and vulnerability analyses and subsequent testing/evaluation of the as-built system, component, or service. + + + Applications may deviate significantly from the functional and design specifications created during the requirements and design phases of the system development life cycle. Therefore, threat and vulnerability analyses of information systems, system components, and information system services prior to delivery are critical to the effective operation of those systems, components, and services. Threat and vulnerability analyses at this phase of the life cycle help to ensure that design or implementation changes have been accounted for, and that any new vulnerabilities created as a result of those changes have been reviewed and mitigated. + PM-15 + RA-5 + + + + SA-11 (3) + INDEPENDENT VERIFICATION OF ASSESSMENT PLANS / EVIDENCE + + The organization: + + SA-11 (3)(a) + Requires an independent agent satisfying [Assignment: organization-defined independence criteria] to verify the correct implementation of the developer security assessment plan and the evidence produced during security testing/evaluation; and + + + SA-11 (3)(b) + Ensures that the independent agent is either provided with sufficient information to complete the verification process or granted the authority to obtain such information. + + + + Independent agents have the necessary qualifications (i.e., expertise, skills, training, and experience) to verify the correct implementation of developer security assessment plans. + AT-3 + CA-7 + RA-5 + SA-12 + + + + SA-11 (4) + MANUAL CODE REVIEWS + + The organization requires the developer of the information system, system component, or information system service to perform a manual code review of [Assignment: organization-defined specific code] using [Assignment: organization-defined processes, procedures, and/or techniques]. + + + Manual code reviews are usually reserved for the critical software and firmware components of information systems. Such code reviews are uniquely effective at identifying weaknesses that require knowledge of the application�s requirements or context which are generally unavailable to more automated analytic tools and techniques such as static or dynamic analysis. Components benefiting from manual review include for example, verifying access control matrices against application controls and reviewing more detailed aspects of cryptographic implementations and controls. + + + + SA-11 (5) + PENETRATION TESTING + + The organization requires the developer of the information system, system component, or information system service to perform penetration testing at [Assignment: organization-defined breadth/depth] and with [Assignment: organization-defined constraints]. + + + Penetration testing is an assessment methodology in which assessors, using all available information technology product and/or information system documentation (e.g., product/system design specifications, source code, and administrator/operator manuals) and working under specific constraints, attempt to circumvent implemented security features of information technology products and information systems. Penetration testing can include, for example, white, gray, or black box testing with analyses performed by skilled security professionals simulating adversary actions. The objective of penetration testing is to uncover potential vulnerabilities in information technology products and information systems resulting from implementation errors, configuration faults, or other operational deployment weaknesses or deficiencies. Penetration tests can be performed in conjunction with automated and manual code reviews to provide greater levels of analysis than would ordinarily be possible. + + + + SA-11 (6) + ATTACK SURFACE REVIEWS + + The organization requires the developer of the information system, system component, or information system service to perform attack surface reviews. + + + Attack surfaces of information systems are exposed areas that make those systems more vulnerable to cyber attacks. This includes any accessible areas where weaknesses or deficiencies in information systems (including the hardware, software, and firmware components) provide opportunities for adversaries to exploit vulnerabilities. Attack surface reviews ensure that developers: (i) analyze both design and implementation changes to information systems; and (ii) mitigate attack vectors generated as a result of the changes. Correction of identified flaws includes, for example, deprecation of unsafe functions. + + + + SA-11 (7) + VERIFY SCOPE OF TESTING / EVALUATION + + The organization requires the developer of the information system, system component, or information system service to verify that the scope of security testing/evaluation provides complete coverage of required security controls at [Assignment: organization-defined depth of testing/evaluation]. + + + Verifying that security testing/evaluation provides complete coverage of required security controls can be accomplished by a variety of analytic techniques ranging from informal to formal. Each of these techniques provides an increasing level of assurance corresponding to the degree of formality of the analysis. Rigorously demonstrating security control coverage at the highest levels of assurance can be provided by the use of formal modeling and analysis techniques including correlation between control implementation and corresponding test cases. + + + + SA-11 (8) + DYNAMIC CODE ANALYSIS + + The organization requires the developer of the information system, system component, or information system service to employ dynamic code analysis tools to identify common flaws and document the results of the analysis. + + + Dynamic code analysis provides run-time verification of software programs, using tools capable of monitoring programs for memory corruption, user privilege issues, and other potential security problems. Dynamic code analysis employs run-time tools to help to ensure that security functionality performs in the manner in which it was designed. A specialized type of dynamic analysis, known as fuzz testing, induces program failures by deliberately introducing malformed or random data into software programs. Fuzz testing strategies derive from the intended use of applications and the functional and design specifications for the applications. To understand the scope of dynamic code analysis and hence the assurance provided, organizations may also consider conducting code coverage analysis (checking the degree to which the code has been tested using metrics such as percent of subroutines tested or percent of program statements called during execution of the test suite) and/or concordance analysis (checking for words that are out of place in software code such as non-English language words or derogatory terms). + + + + + + ISO/IEC 15408 + + + NIST Special Publication 800-53A + + + http://nvd.nist.gov + + + http://cwe.mitre.org + + + http://cve.mitre.org + + + http://capec.mitre.org + + + + + SYSTEM AND SERVICES ACQUISITION + SA-12 + SUPPLY CHAIN PROTECTION + P1 + HIGH + + The organization protects against supply chain threats to the information system, system component, or information system service by employing [Assignment: organization-defined security safeguards] as part of a comprehensive, defense-in-breadth information security strategy. + + + Information systems (including system components that compose those systems) need to be protected throughout the system development life cycle (i.e., during design, development, manufacturing, packaging, assembly, distribution, system integration, operations, maintenance, and retirement). Protection of organizational information systems is accomplished through threat awareness, by the identification, management, and reduction of vulnerabilities at each phase of the life cycle and the use of complementary, mutually reinforcing strategies to respond to risk. Organizations consider implementing a standardized process to address supply chain risk with respect to information systems and system components, and to educate the acquisition workforce on threats, risk, and required security controls. Organizations use the acquisition/procurement processes to require supply chain entities to implement necessary security safeguards to: (i) reduce the likelihood of unauthorized modifications at each stage in the supply chain; and (ii) protect information systems and information system components, prior to taking delivery of such systems/components. This control also applies to information system services. Security safeguards include, for example: (i) security controls for development systems, development facilities, and external connections to development systems; (ii) vetting development personnel; and (iii) use of tamper-evident packaging during shipping/warehousing. Methods for reviewing and protecting development plans, evidence, and documentation are commensurate with the security category or classification level of the information system. Contracts may specify documentation protection requirements. + AT-3 + CM-8 + IR-4 + PE-16 + PL-8 + SA-3 + SA-4 + SA-8 + SA-10 + SA-14 + SA-15 + SA-18 + SA-19 + SC-29 + SC-30 + SC-38 + SI-7 + + + + SA-12 (1) + ACQUISITION STRATEGIES / TOOLS / METHODS + + The organization employs [Assignment: organization-defined tailored acquisition strategies, contract tools, and procurement methods] for the purchase of the information system, system component, or information system service from suppliers. + + + The use of acquisition and procurement processes by organizations early in the system development life cycle provides an important vehicle to protect the supply chain. Organizations use available all-source intelligence analysis to inform the tailoring of acquisition strategies, tools, and methods. There are a number of different tools and techniques available (e.g., obscuring the end use of an information system or system component, using blind or filtered buys). Organizations also consider creating incentives for suppliers who: (i) implement required security safeguards; (ii) promote transparency into their organizational processes and security practices; (iii) provide additional vetting of the processes and security practices of subordinate suppliers, critical information system components, and services; (iv) restrict purchases from specific suppliers or countries; and (v) provide contract language regarding the prohibition of tainted or counterfeit components. In addition, organizations consider minimizing the time between purchase decisions and required delivery to limit opportunities for adversaries to corrupt information system components or products. Finally, organizations can use trusted/controlled distribution, delivery, and warehousing options to reduce supply chain risk (e.g., requiring tamper-evident packaging of information system components during shipping and warehousing). + SA-19 + + + + SA-12 (2) + SUPPLIER REVIEWS + + The organization conducts a supplier review prior to entering into a contractual agreement to acquire the information system, system component, or information system service. + + + Supplier reviews include, for example: (i) analysis of supplier processes used to design, develop, test, implement, verify, deliver, and support information systems, system components, and information system services; and (ii) assessment of supplier training and experience in developing systems, components, or services with the required security capability. These reviews provide organizations with increased levels of visibility into supplier activities during the system development life cycle to promote more effective supply chain risk management. Supplier reviews can also help to determine whether primary suppliers have security safeguards in place and a practice for vetting subordinate suppliers, for example, second- and third-tier suppliers, and any subcontractors. + + + + SA-12 (3) + TRUSTED SHIPPING AND WAREHOUSING + + SA-12 (1) + + + [Withdrawn: Incorporated into SA-12 (1)]. + + + + SA-12 (4) + DIVERSITY OF SUPPLIERS + + SA-12 (13) + + + [Withdrawn: Incorporated into SA-12 (13)]. + + + + SA-12 (5) + LIMITATION OF HARM + + The organization employs [Assignment: organization-defined security safeguards] to limit harm from potential adversaries identifying and targeting the organizational supply chain. + + + Supply chain risk is part of the advanced persistent threat (APT). Security safeguards and countermeasures to reduce the probability of adversaries successfully identifying and targeting the supply chain include, for example: (i) avoiding the purchase of custom configurations to reduce the risk of acquiring information systems, components, or products that have been corrupted via supply chain actions targeted at specific organizations; (ii) employing a diverse set of suppliers to limit the potential harm from any given supplier in the supply chain; (iii) employing approved vendor lists with standing reputations in industry, and (iv) using procurement carve outs (i.e., exclusions to commitments or obligations). + + + + SA-12 (6) + MINIMIZING PROCUREMENT TIME + + SA-12 (1) + + + [Withdrawn: Incorporated into SA-12 (1)]. + + + + SA-12 (7) + ASSESSMENTS PRIOR TO SELECTION / ACCEPTANCE / UPDATE + + The organization conducts an assessment of the information system, system component, or information system service prior to selection, acceptance, or update. + + + Assessments include, for example, testing, evaluations, reviews, and analyses. Independent, third-party entities or organizational personnel conduct assessments of systems, components, products, tools, and services. Organizations conduct assessments to uncover unintentional vulnerabilities and intentional vulnerabilities including, for example, malicious code, malicious processes, defective software, and counterfeits. Assessments can include, for example, static analyses, dynamic analyses, simulations, white, gray, and black box testing, fuzz testing, penetration testing, and ensuring that components or services are genuine (e.g., using tags, cryptographic hash verifications, or digital signatures). Evidence generated during security assessments is documented for follow-on actions carried out by organizations. + CA-2 + SA-11 + + + + SA-12 (8) + USE OF ALL-SOURCE INTELLIGENCE + + The organization uses all-source intelligence analysis of suppliers and potential suppliers of the information system, system component, or information system service. + + + All-source intelligence analysis is employed by organizations to inform engineering, acquisition, and risk management decisions. All-source intelligence consists of intelligence products and/or organizations and activities that incorporate all sources of information, most frequently including human intelligence, imagery intelligence, measurement and signature intelligence, signals intelligence, and open source data in the production of finished intelligence. Where available, such information is used to analyze the risk of both intentional and unintentional vulnerabilities from development, manufacturing, and delivery processes, people, and the environment. This review is performed on suppliers at multiple tiers in the supply chain sufficient to manage risks. + SA-15 + + + + SA-12 (9) + OPERATIONS SECURITY + + The organization employs [Assignment: organization-defined Operations Security (OPSEC) safeguards] in accordance with classification guides to protect supply chain-related information for the information system, system component, or information system service. + + + Supply chain information includes, for example: user identities; uses for information systems, information system components, and information system services; supplier identities; supplier processes; security requirements; design specifications; testing and evaluation results; and system/component configurations. This control enhancement expands the scope of OPSEC to include suppliers and potential suppliers. OPSEC is a process of identifying critical information and subsequently analyzing friendly actions attendant to operations and other activities to: (i) identify those actions that can be observed by potential adversaries; (ii) determine indicators that adversaries might obtain that could be interpreted or pieced together to derive critical information in sufficient time to cause harm to organizations; (iii) implement safeguards or countermeasures to eliminate or reduce to an acceptable level, exploitable vulnerabilities; and (iv) consider how aggregated information may compromise the confidentiality of users or uses of the supply chain. OPSEC may require organizations to withhold critical mission/business information from suppliers and may include the use of intermediaries to hide the end use, or users, of information systems, system components, or information system services. + + + + SA-12 (10) + VALIDATE AS GENUINE AND NOT ALTERED + + The organization employs [Assignment: organization-defined security safeguards] to validate that the information system or system component received is genuine and has not been altered. + + + For some information system components, especially hardware, there are technical means to help determine if the components are genuine or have been altered. Security safeguards used to validate the authenticity of information systems and information system components include, for example, optical/nanotechnology tagging and side-channel analysis. For hardware, detailed bill of material information can highlight the elements with embedded logic complete with component and production location. + + + + SA-12 (11) + PENETRATION TESTING / ANALYSIS OF ELEMENTS, PROCESSES, AND ACTORS + + The organization employs [Selection (one or more): organizational analysis, independent third-party analysis, organizational penetration testing, independent third-party penetration testing] of [Assignment: organization-defined supply chain elements, processes, and actors] associated with the information system, system component, or information system service. + + + This control enhancement addresses analysis and/or testing of the supply chain, not just delivered items. Supply chain elements are information technology products or product components that contain programmable logic and that are critically important to information system functions. Supply chain processes include, for example: (i) hardware, software, and firmware development processes; (ii) shipping/handling procedures; (iii) personnel and physical security programs; (iv) configuration management tools/measures to maintain provenance; or (v) any other programs, processes, or procedures associated with the production/distribution of supply chain elements. Supply chain actors are individuals with specific roles and responsibilities in the supply chain. The evidence generated during analyses and testing of supply chain elements, processes, and actors is documented and used to inform organizational risk management activities and decisions. + RA-5 + + + + SA-12 (12) + INTER-ORGANIZATIONAL AGREEMENTS + + The organization establishes inter-organizational agreements and procedures with entities involved in the supply chain for the information system, system component, or information system service. + + + The establishment of inter-organizational agreements and procedures provides for notification of supply chain compromises. Early notification of supply chain compromises that can potentially adversely affect or have adversely affected organizational information systems, including critical system components, is essential for organizations to provide appropriate responses to such incidents. + + + + SA-12 (13) + CRITICAL INFORMATION SYSTEM COMPONENTS + + The organization employs [Assignment: organization-defined security safeguards] to ensure an adequate supply of [Assignment: organization-defined critical information system components]. + + + Adversaries can attempt to impede organizational operations by disrupting the supply of critical information system components or corrupting supplier operations. Safeguards to ensure adequate supplies of critical information system components include, for example: (i) the use of multiple suppliers throughout the supply chain for the identified critical components; and (ii) stockpiling of spare components to ensure operation during mission-critical times. + + + + SA-12 (14) + IDENTITY AND TRACEABILITY + + The organization establishes and retains unique identification of [Assignment: organization-defined supply chain elements, processes, and actors] for the information system, system component, or information system service. + + + Knowing who and what is in the supply chains of organizations is critical to gaining visibility into what is happening within such supply chains, as well as monitoring and identifying high-risk events and activities. Without reasonable visibility and traceability into supply chains (i.e., elements, processes, and actors), it is very difficult for organizations to understand and therefore manage risk, and to reduce the likelihood of adverse events. Uniquely identifying acquirer and integrator roles, organizations, personnel, mission and element processes, testing and evaluation procedures, delivery mechanisms, support mechanisms, communications/delivery paths, and disposal/final disposition activities as well as the components and tools used, establishes a foundational identity structure for assessment of supply chain activities. For example, labeling (using serial numbers) and tagging (using radio-frequency identification [RFID] tags) individual supply chain elements including software packages, modules, and hardware devices, and processes associated with those elements can be used for this purpose. Identification methods are sufficient to support the provenance in the event of a supply chain issue or adverse supply chain event. + + + + SA-12 (15) + PROCESSES TO ADDRESS WEAKNESSES OR DEFICIENCIES + + The organization establishes a process to address weaknesses or deficiencies in supply chain elements identified during independent or organizational assessments of such elements. + + + Evidence generated during independent or organizational assessments of supply chain elements (e.g., penetration testing, audits, verification/validation activities) is documented and used in follow-on processes implemented by organizations to respond to the risks related to the identified weaknesses and deficiencies. Supply chain elements include, for example, supplier development processes and supplier distribution systems. + + + + + + NIST Special Publication 800-161 + + + NIST Interagency Report 7622 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-13 + TRUSTWORTHINESS + P0 + + The organization: + + SA-13a. + Describes the trustworthiness required in the [Assignment: organization-defined information system, information system component, or information system service] supporting its critical missions/business functions; and + + + SA-13b. + Implements [Assignment: organization-defined assurance overlay] to achieve such trustworthiness. + + + + This control helps organizations to make explicit trustworthiness decisions when designing, developing, and implementing information systems that are needed to conduct critical organizational missions/business functions. Trustworthiness is a characteristic/property of an information system that expresses the degree to which the system can be expected to preserve the confidentiality, integrity, and availability of the information it processes, stores, or transmits. Trustworthy information systems are systems that are capable of being trusted to operate within defined levels of risk despite the environmental disruptions, human errors, and purposeful attacks that are expected to occur in the specified environments of operation. Trustworthy systems are important to mission/business success. Two factors affecting the trustworthiness of information systems include: (i) security functionality (i.e., the security features, functions, and/or mechanisms employed within the system and its environment of operation); and (ii) security assurance (i.e., the grounds for confidence that the security functionality is effective in its application). Developers, implementers, operators, and maintainers of organizational information systems can increase the level of assurance (and trustworthiness), for example, by employing well-defined security policy models, structured and rigorous hardware, software, and firmware development techniques, sound system/security engineering principles, and secure configuration settings (defined by a set of assurance-related security controls in Appendix E). +Assurance is also based on the assessment of evidence produced during the system development life cycle. Critical missions/business functions are supported by high-impact systems and the associated assurance requirements for such systems. The additional assurance controls in Table E-4 in Appendix E (designated as optional) can be used to develop and implement high-assurance solutions for specific information systems and system components using the concept of overlays described in Appendix I. Organizations select assurance overlays that have been developed, validated, and approved for community adoption (e.g., cross-organization, governmentwide), limiting the development of such overlays on an organization-by-organization basis. Organizations can conduct criticality analyses as described in SA-14, to determine the information systems, system components, or information system services that require high-assurance solutions. Trustworthiness requirements and assurance overlays can be described in the security plans for organizational information systems. + RA-2 + SA-4 + SA-8 + SA-14 + SC-3 + + + + FIPS Publication 199 + + + FIPS Publication 200 + + + NIST Special Publication 800-53 + + + NIST Special Publication 800-53A + + + NIST Special Publication 800-60 + + + NIST Special Publication 800-64 + + + + + SYSTEM AND SERVICES ACQUISITION + SA-14 + CRITICALITY ANALYSIS + P0 + + The organization identifies critical information system components and functions by performing a criticality analysis for [Assignment: organization-defined information systems, information system components, or information system services] at [Assignment: organization-defined decision points in the system development life cycle]. + + + Criticality analysis is a key tenet of supply chain risk management and informs the prioritization of supply chain protection activities such as attack surface reduction, use of all-source intelligence, and tailored acquisition strategies. Information system engineers can conduct an end-to-end functional decomposition of an information system to identify mission-critical functions and components. The functional decomposition includes the identification of core organizational missions supported by the system, decomposition into the specific functions to perform those missions, and traceability to the hardware, software, and firmware components that implement those functions, including when the functions are shared by many components within and beyond the information system boundary. Information system components that allow for unmediated access to critical components or functions are considered critical due to the inherent vulnerabilities such components create. Criticality is assessed in terms of the impact of the function or component failure on the ability of the component to complete the organizational missions supported by the information system. A criticality analysis is performed whenever an architecture or design is being developed or modified, including upgrades. + CP-2 + PL-2 + PL-8 + PM-1 + SA-8 + SA-12 + SA-13 + SA-15 + SA-20 + + + + SA-14 (1) + CRITICAL COMPONENTS WITH NO VIABLE ALTERNATIVE SOURCING + + SA-20 + + + [Withdrawn: Incorporated into SA-20]. + + + + + + SYSTEM AND SERVICES ACQUISITION + SA-15 + DEVELOPMENT PROCESS, STANDARDS, AND TOOLS + P2 + HIGH + + The organization: + + SA-15a. + Requires the developer of the information system, system component, or information system service to follow a documented development process that: + + SA-15a.1. + Explicitly addresses security requirements; + + + SA-15a.2. + Identifies the standards and tools used in the development process; + + + SA-15a.3. + Documents the specific tool options and tool configurations used in the development process; and + + + SA-15a.4. + Documents, manages, and ensures the integrity of changes to the process and/or tools used in development; and + + + + SA-15b. + Reviews the development process, standards, tools, and tool options/configurations [Assignment: organization-defined frequency] to determine if the process, standards, tools, and tool options/configurations selected and employed can satisfy [Assignment: organization-defined security requirements]. + + + + Development tools include, for example, programming languages and computer-aided design (CAD) systems. Reviews of development processes can include, for example, the use of maturity models to determine the potential effectiveness of such processes. Maintaining the integrity of changes to tools and processes enables accurate supply chain risk assessment and mitigation, and requires robust configuration control throughout the life cycle (including design, development, transport, delivery, integration, and maintenance) to track authorized changes and prevent unauthorized changes. + SA-3 + SA-8 + + + + SA-15 (1) + QUALITY METRICS + + The organization requires the developer of the information system, system component, or information system service to: + + SA-15 (1)(a) + Define quality metrics at the beginning of the development process; and + + + SA-15 (1)(b) + Provide evidence of meeting the quality metrics [Selection (one or more): [Assignment: organization-defined frequency]; [Assignment: organization-defined program review milestones]; upon delivery]. + + + + Organizations use quality metrics to establish minimum acceptable levels of information system quality. Metrics may include quality gates which are collections of completion criteria or sufficiency standards representing the satisfactory execution of particular phases of the system development project. A quality gate, for example, may require the elimination of all compiler warnings or an explicit determination that the warnings have no impact on the effectiveness of required security capabilities. During the execution phases of development projects, quality gates provide clear, unambiguous indications of progress. Other metrics apply to the entire development project. These metrics can include defining the severity thresholds of vulnerabilities, for example, requiring no known vulnerabilities in the delivered information system with a Common Vulnerability Scoring System (CVSS) severity of Medium or High. + + + + SA-15 (2) + SECURITY TRACKING TOOLS + + The organization requires the developer of the information system, system component, or information system service to select and employ a security tracking tool for use during the development process. + + + Information system development teams select and deploy security tracking tools, including, for example, vulnerability/work item tracking systems that facilitate assignment, sorting, filtering, and tracking of completed work items or tasks associated with system development processes. + + + + SA-15 (3) + CRITICALITY ANALYSIS + + The organization requires the developer of the information system, system component, or information system service to perform a criticality analysis at [Assignment: organization-defined breadth/depth] and at [Assignment: organization-defined decision points in the system development life cycle]. + + + This control enhancement provides developer input to the criticality analysis performed by organizations in SA-14. Developer input is essential to such analysis because organizations may not have access to detailed design documentation for information system components that are developed as commercial off-the-shelf (COTS) information technology products (e.g., functional specifications, high-level designs, low-level designs, and source code/hardware schematics). + SA-4 + SA-14 + + + + SA-15 (4) + THREAT MODELING / VULNERABILITY ANALYSIS + + The organization requires that developers perform threat modeling and a vulnerability analysis for the information system at [Assignment: organization-defined breadth/depth] that: + + SA-15 (4)(a) + Uses [Assignment: organization-defined information concerning impact, environment of operations, known or assumed threats, and acceptable risk levels]; + + + SA-15 (4)(b) + Employs [Assignment: organization-defined tools and methods]; and + + + SA-15 (4)(c) + Produces evidence that meets [Assignment: organization-defined acceptance criteria]. + + + + SA-4 + + + + SA-15 (5) + ATTACK SURFACE REDUCTION + + The organization requires the developer of the information system, system component, or information system service to reduce attack surfaces to [Assignment: organization-defined thresholds]. + + + Attack surface reduction is closely aligned with developer threat and vulnerability analyses and information system architecture and design. Attack surface reduction is a means of reducing risk to organizations by giving attackers less opportunity to exploit weaknesses or deficiencies (i.e., potential vulnerabilities) within information systems, information system components, and information system services. Attack surface reduction includes, for example, applying the principle of least privilege, employing layered defenses, applying the principle of least functionality (i.e., restricting ports, protocols, functions, and services), deprecating unsafe functions, and eliminating application programming interfaces (APIs) that are vulnerable to cyber attacks. + CM-7 + + + + SA-15 (6) + CONTINUOUS IMPROVEMENT + + The organization requires the developer of the information system, system component, or information system service to implement an explicit process to continuously improve the development process. + + + Developers of information systems, information system components, and information system services consider the effectiveness/efficiency of current development processes for meeting quality objectives and addressing security capabilities in current threat environments. + + + + SA-15 (7) + AUTOMATED VULNERABILITY ANALYSIS + + The organization requires the developer of the information system, system component, or information system service to: + + SA-15 (7)(a) + Perform an automated vulnerability analysis using [Assignment: organization-defined tools]; + + + SA-15 (7)(b) + Determine the exploitation potential for discovered vulnerabilities; + + + SA-15 (7)(c) + Determine potential risk mitigations for delivered vulnerabilities; and + + + SA-15 (7)(d) + Deliver the outputs of the tools and results of the analysis to [Assignment: organization-defined personnel or roles]. + + + + RA-5 + + + + SA-15 (8) + REUSE OF THREAT / VULNERABILITY INFORMATION + + The organization requires the developer of the information system, system component, or information system service to use threat modeling and vulnerability analyses from similar systems, components, or services to inform the current development process. + + + Analysis of vulnerabilities found in similar software applications can inform potential design or implementation issues for information systems under development. Similar information systems or system components may exist within developer organizations. Authoritative vulnerability information is available from a variety of public and private sector sources including, for example, the National Vulnerability Database. + + + + SA-15 (9) + USE OF LIVE DATA + + The organization approves, documents, and controls the use of live data in development and test environments for the information system, system component, or information system service. + + + The use of live data in preproduction environments can result in significant risk to organizations. Organizations can minimize such risk by using test or dummy data during the development and testing of information systems, information system components, and information system services. + + + + SA-15 (10) + INCIDENT RESPONSE PLAN + + The organization requires the developer of the information system, system component, or information system service to provide an incident response plan. + + + The incident response plan for developers of information systems, system components, and information system services is incorporated into organizational incident response plans to provide the type of incident response information not readily available to organizations. Such information may be extremely helpful, for example, when organizations respond to vulnerabilities in commercial off-the-shelf (COTS) information technology products. + IR-8 + + + + SA-15 (11) + ARCHIVE INFORMATION SYSTEM / COMPONENT + + The organization requires the developer of the information system or system component to archive the system or component to be released or delivered together with the corresponding evidence supporting the final security review. + + + Archiving relevant documentation from the development process can provide a readily available baseline of information that can be helpful during information system/component upgrades or modifications. + + + + + + SYSTEM AND SERVICES ACQUISITION + SA-16 + DEVELOPER-PROVIDED TRAINING + P2 + HIGH + + The organization requires the developer of the information system, system component, or information system service to provide [Assignment: organization-defined training] on the correct use and operation of the implemented security functions, controls, and/or mechanisms. + + + This control applies to external and internal (in-house) developers. Training of personnel is an essential element to ensure the effectiveness of security controls implemented within organizational information systems. Training options include, for example, classroom-style training, web-based/computer-based training, and hands-on training. Organizations can also request sufficient training materials from developers to conduct in-house training or offer self-training to organizational personnel. Organizations determine the type of training necessary and may require different types of training for different security functions, controls, or mechanisms. + AT-2 + AT-3 + SA-5 + + + + SYSTEM AND SERVICES ACQUISITION + SA-17 + DEVELOPER SECURITY ARCHITECTURE AND DESIGN + P1 + HIGH + + The organization requires the developer of the information system, system component, or information system service to produce a design specification and security architecture that: + + SA-17a. + Is consistent with and supportive of the organization�s security architecture which is established within and is an integrated part of the organization�s enterprise architecture; + + + SA-17b. + Accurately and completely describes the required security functionality, and the allocation of security controls among physical and logical components; and + + + SA-17c. + Expresses how individual security functions, mechanisms, and services work together to provide required security capabilities and a unified approach to protection. + + + + This control is primarily directed at external developers, although it could also be used for internal (in-house) development. In contrast, PL-8 is primarily directed at internal developers to help ensure that organizations develop an information security architecture and such security architecture is integrated or tightly coupled to the enterprise architecture. This distinction is important if/when organizations outsource the development of information systems, information system components, or information system services to external entities, and there is a requirement to demonstrate consistency with the organization�s enterprise architecture and information security architecture. + PL-8 + PM-7 + SA-3 + SA-8 + + + + SA-17 (1) + FORMAL POLICY MODEL + + The organization requires the developer of the information system, system component, or information system service to: + + SA-17 (1)(a) + Produce, as an integral part of the development process, a formal policy model describing the [Assignment: organization-defined elements of organizational security policy] to be enforced; and + + + SA-17 (1)(b) + Prove that the formal policy model is internally consistent and sufficient to enforce the defined elements of the organizational security policy when implemented. + + + + Formal models describe specific behaviors or security policies using formal languages, thus enabling the correctness of those behaviors/policies to be formally proven. Not all components of information systems can be modeled, and generally, formal specifications are scoped to specific behaviors or policies of interest (e.g., nondiscretionary access control policies). Organizations choose the particular formal modeling language and approach based on the nature of the behaviors/policies to be described and the available tools. Formal modeling tools include, for example, Gypsy and Zed. + + + + SA-17 (2) + SECURITY-RELEVANT COMPONENTS + + The organization requires the developer of the information system, system component, or information system service to: + + SA-17 (2)(a) + Define security-relevant hardware, software, and firmware; and + + + SA-17 (2)(b) + Provide a rationale that the definition for security-relevant hardware, software, and firmware is complete. + + + + Security-relevant hardware, software, and firmware represent the portion of the information system, component, or service that must be trusted to perform correctly in order to maintain required security properties. + SA-5 + + + + SA-17 (3) + FORMAL CORRESPONDENCE + + The organization requires the developer of the information system, system component, or information system service to: + + SA-17 (3)(a) + Produce, as an integral part of the development process, a formal top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of exceptions, error messages, and effects; + + + SA-17 (3)(b) + Show via proof to the extent feasible with additional informal demonstration as necessary, that the formal top-level specification is consistent with the formal policy model; + + + SA-17 (3)(c) + Show via informal demonstration, that the formal top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware; + + + SA-17 (3)(d) + Show that the formal top-level specification is an accurate description of the implemented security-relevant hardware, software, and firmware; and + + + SA-17 (3)(e) + Describe the security-relevant hardware, software, and firmware mechanisms not addressed in the formal top-level specification but strictly internal to the security-relevant hardware, software, and firmware. + + + + Correspondence is an important part of the assurance gained through modeling. It demonstrates that the implementation is an accurate transformation of the model, and that any additional code or implementation details present have no impact on the behaviors or policies being modeled. Formal methods can be used to show that the high-level security properties are satisfied by the formal information system description, and that the formal system description is correctly implemented by a description of some lower level, for example a hardware description. Consistency between the formal top-level specification and the formal policy models is generally not amenable to being fully proven. Therefore, a combination of formal/informal methods may be needed to show such consistency. Consistency between the formal top-level specification and the implementation may require the use of an informal demonstration due to limitations in the applicability of formal methods to prove that the specification accurately reflects the implementation. Hardware, software, and firmware mechanisms strictly internal to security-relevant hardware, software, and firmware include, for example, mapping registers and direct memory input/output. + SA-5 + + + + SA-17 (4) + INFORMAL CORRESPONDENCE + + The organization requires the developer of the information system, system component, or information system service to: + + SA-17 (4)(a) + Produce, as an integral part of the development process, an informal descriptive top-level specification that specifies the interfaces to security-relevant hardware, software, and firmware in terms of exceptions, error messages, and effects; + + + SA-17 (4)(b) + Show via [Selection: informal demonstration, convincing argument with formal methods as feasible] that the descriptive top-level specification is consistent with the formal policy model; + + + SA-17 (4)(c) + Show via informal demonstration, that the descriptive top-level specification completely covers the interfaces to security-relevant hardware, software, and firmware; + + + SA-17 (4)(d) + Show that the descriptive top-level specification is an accurate description of the interfaces to security-relevant hardware, software, and firmware; and + + + SA-17 (4)(e) + Describe the security-relevant hardware, software, and firmware mechanisms not addressed in the descriptive top-level specification but strictly internal to the security-relevant hardware, software, and firmware. + + + + Correspondence is an important part of the assurance gained through modeling. It demonstrates that the implementation is an accurate transformation of the model, and that any additional code or implementation details present has no impact on the behaviors or policies being modeled. Consistency between the descriptive top-level specification (i.e., high-level/low-level design) and the formal policy model is generally not amenable to being fully proven. Therefore, a combination of formal/informal methods may be needed to show such consistency. Hardware, software, and firmware mechanisms strictly internal to security-relevant hardware, software, and firmware include, for example, mapping registers and direct memory input/output. + SA-5 + + + + SA-17 (5) + CONCEPTUALLY SIMPLE DESIGN + + The organization requires the developer of the information system, system component, or information system service to: + + SA-17 (5)(a) + Design and structure the security-relevant hardware, software, and firmware to use a complete, conceptually simple protection mechanism with precisely defined semantics; and + + + SA-17 (5)(b) + Internally structure the security-relevant hardware, software, and firmware with specific regard for this mechanism. + + + + SC-3 + + + + SA-17 (6) + STRUCTURE FOR TESTING + + The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate testing. + + + SA-11 + + + + SA-17 (7) + STRUCTURE FOR LEAST PRIVILEGE + + The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate controlling access with least privilege. + + + AC-5 + AC-6 + + + + + + SYSTEM AND SERVICES ACQUISITION + SA-18 + TAMPER RESISTANCE AND DETECTION + P0 + + The organization implements a tamper protection program for the information system, system component, or information system service. + + + Anti-tamper technologies and techniques provide a level of protection for critical information systems, system components, and information technology products against a number of related threats including modification, reverse engineering, and substitution. Strong identification combined with tamper resistance and/or tamper detection is essential to protecting information systems, components, and products during distribution and when in use. + PE-3 + SA-12 + SI-7 + + + + SA-18 (1) + MULTIPLE PHASES OF SDLC + + The organization employs anti-tamper technologies and techniques during multiple phases in the system development life cycle including design, development, integration, operations, and maintenance. + + + Organizations use a combination of hardware and software techniques for tamper resistance and detection. Organizations employ obfuscation and self-checking, for example, to make reverse engineering and modifications more difficult, time-consuming, and expensive for adversaries. Customization of information systems and system components can make substitutions easier to detect and therefore limit damage. + SA-3 + + + + SA-18 (2) + INSPECTION OF INFORMATION SYSTEMS, COMPONENTS, OR DEVICES + + The organization inspects [Assignment: organization-defined information systems, system components, or devices] [Selection (one or more): at random; at [Assignment: organization-defined frequency], upon [Assignment: organization-defined indications of need for inspection]] to detect tampering. + + + This control enhancement addresses both physical and logical tampering and is typically applied to mobile devices, notebook computers, or other system components taken out of organization-controlled areas. Indications of need for inspection include, for example, when individuals return from travel to high-risk locations. + SI-4 + + + + + + SYSTEM AND SERVICES ACQUISITION + SA-19 + COMPONENT AUTHENTICITY + P0 + + The organization: + + SA-19a. + Develops and implements anti-counterfeit policy and procedures that include the means to detect and prevent counterfeit components from entering the information system; and + + + SA-19b. + Reports counterfeit information system components to [Selection (one or more): source of counterfeit component; [Assignment: organization-defined external reporting organizations]; [Assignment: organization-defined personnel or roles]]. + + + + Sources of counterfeit components include, for example, manufacturers, developers, vendors, and contractors. Anti-counterfeiting policy and procedures support tamper resistance and provide a level of protection against the introduction of malicious code. External reporting organizations include, for example, US-CERT. + PE-3 + SA-12 + SI-7 + + + + SA-19 (1) + ANTI-COUNTERFEIT TRAINING + + The organization trains [Assignment: organization-defined personnel or roles] to detect counterfeit information system components (including hardware, software, and firmware). + + + + SA-19 (2) + CONFIGURATION CONTROL FOR COMPONENT SERVICE / REPAIR + + The organization maintains configuration control over [Assignment: organization-defined information system components] awaiting service/repair and serviced/repaired components awaiting return to service. + + + + SA-19 (3) + COMPONENT DISPOSAL + + The organization disposes of information system components using [Assignment: organization-defined techniques and methods]. + + + Proper disposal of information system components helps to prevent such components from entering the gray market. + + + + SA-19 (4) + ANTI-COUNTERFEIT SCANNING + + The organization scans for counterfeit information system components [Assignment: organization-defined frequency]. + + + + + + SYSTEM AND SERVICES ACQUISITION + SA-20 + CUSTOMIZED DEVELOPMENT OF CRITICAL COMPONENTS + P0 + + The organization re-implements or custom develops [Assignment: organization-defined critical information system components]. + + + Organizations determine that certain information system components likely cannot be trusted due to specific threats to and vulnerabilities in those components, and for which there are no viable security controls to adequately mitigate the resulting risk. Re-implementation or custom development of such components helps to satisfy requirements for higher assurance. This is accomplished by initiating changes to system components (including hardware, software, and firmware) such that the standard attacks by adversaries are less likely to succeed. In situations where no alternative sourcing is available and organizations choose not to re-implement or custom develop critical information system components, additional safeguards can be employed (e.g., enhanced auditing, restrictions on source code and system utility access, and protection from deletion of system and application files. + CP-2 + SA-8 + SA-14 + + + + SYSTEM AND SERVICES ACQUISITION + SA-21 + DEVELOPER SCREENING + P0 + + The organization requires that the developer of [Assignment: organization-defined information system, system component, or information system service]: + + SA-21a. + Have appropriate access authorizations as determined by assigned [Assignment: organization-defined official government duties]; and + + + SA-21b. + Satisfy [Assignment: organization-defined additional personnel screening criteria]. + + + + Because the information system, system component, or information system service may be employed in critical activities essential to the national and/or economic security interests of the United States, organizations have a strong interest in ensuring that the developer is trustworthy. The degree of trust required of the developer may need to be consistent with that of the individuals accessing the information system/component/service once deployed. Examples of authorization and personnel screening criteria include clearance, satisfactory background checks, citizenship, and nationality. Trustworthiness of developers may also include a review and analysis of company ownership and any relationships the company has with entities potentially affecting the quality/reliability of the systems, components, or services being developed. + PS-3 + PS-7 + + + + SA-21 (1) + VALIDATION OF SCREENING + + The organization requires the developer of the information system, system component, or information system service take [Assignment: organization-defined actions] to ensure that the required access authorizations and screening criteria are satisfied. + + + Satisfying required access authorizations and personnel screening criteria includes, for example, providing a listing of all the individuals authorized to perform development activities on the selected information system, system component, or information system service so that organizations can validate that the developer has satisfied the necessary authorization and screening requirements. + + + + + + SYSTEM AND SERVICES ACQUISITION + SA-22 + UNSUPPORTED SYSTEM COMPONENTS + P0 + + The organization: + + SA-22a. + Replaces information system components when support for the components is no longer available from the developer, vendor, or manufacturer; and + + + SA-22b. + Provides justification and documents approval for the continued use of unsupported system components required to satisfy mission/business needs. + + + + Support for information system components includes, for example, software patches, firmware updates, replacement parts, and maintenance contracts. Unsupported components (e.g., when vendors are no longer providing critical software patches), provide a substantial opportunity for adversaries to exploit new weaknesses discovered in the currently installed components. Exceptions to replacing unsupported system components may include, for example, systems that provide critical mission/business capability where newer technologies are not available or where the systems are so isolated that installing replacement components is not an option. + PL-2 + SA-3 + + + + SA-22 (1) + ALTERNATIVE SOURCES FOR CONTINUED SUPPORT + + The organization provides [Selection (one or more): in-house support; [Assignment: organization-defined support from external providers]] for unsupported information system components. + + + This control enhancement addresses the need to provide continued support for selected information system components that are no longer supported by the original developers, vendors, or manufacturers when such components remain essential to mission/business operations. Organizations can establish in-house support, for example, by developing customized patches for critical software components or secure the services of external providers who through contractual relationships, provide ongoing support for the designated unsupported components. Such contractual relationships can include, for example, Open Source Software value-added vendors. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-1 + SYSTEM AND COMMUNICATIONS PROTECTION POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + SC-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + SC-1a.1. + A system and communications protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + SC-1a.2. + Procedures to facilitate the implementation of the system and communications protection policy and associated system and communications protection controls; and + + + + SC-1b. + Reviews and updates the current: + + SC-1b.1. + System and communications protection policy [Assignment: organization-defined frequency]; and + + + SC-1b.2. + System and communications protection procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the SC family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-2 + APPLICATION PARTITIONING + P1 + MODERATE + HIGH + + The information system separates user functionality (including user interface services) from information system management functionality. + + + Information system management functionality includes, for example, functions necessary to administer databases, network components, workstations, or servers, and typically requires privileged user access. The separation of user functionality from information system management functionality is either physical or logical. Organizations implement separation of system management-related functionality from user functionality by using different computers, different central processing units, different instances of operating systems, different network addresses, virtualization techniques, or combinations of these or other methods, as appropriate. This type of separation includes, for example, web administrative interfaces that use separate authentication methods for users of any other information system resources. Separation of system and user functionality may include isolating administrative interfaces on different domains and with additional access controls. + SA-4 + SA-8 + SC-3 + + + + SC-2 (1) + INTERFACES FOR NON-PRIVILEGED USERS + + The information system prevents the presentation of information system management-related functionality at an interface for non-privileged users. + + + This control enhancement ensures that administration options (e.g., administrator privileges) are not available to general users (including prohibiting the use of the grey-out option commonly used to eliminate accessibility to such information). Such restrictions include, for example, not presenting administration options until users establish sessions with administrator privileges. + AC-3 + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-3 + SECURITY FUNCTION ISOLATION + P1 + HIGH + + The information system isolates security functions from nonsecurity functions. + + + The information system isolates security functions from nonsecurity functions by means of an isolation boundary (implemented via partitions and domains). Such isolation controls access to and protects the integrity of the hardware, software, and firmware that perform those security functions. Information systems implement code separation (i.e., separation of security functions from nonsecurity functions) in a number of ways, including, for example, through the provision of security kernels via processor rings or processor modes. For non-kernel code, security function isolation is often achieved through file system protections that serve to protect the code on disk, and address space protections that protect executing code. Information systems restrict access to security functions through the use of access control mechanisms and by implementing least privilege capabilities. While the ideal is for all of the code within the security function isolation boundary to only contain security-relevant code, it is sometimes necessary to include nonsecurity functions within the isolation boundary as an exception. + AC-3 + AC-6 + SA-4 + SA-5 + SA-8 + SA-13 + SC-2 + SC-7 + SC-39 + + + + SC-3 (1) + HARDWARE SEPARATION + + The information system utilizes underlying hardware separation mechanisms to implement security function isolation. + + + Underlying hardware separation mechanisms include, for example, hardware ring architectures, commonly implemented within microprocessors, and hardware-enforced address segmentation used to support logically distinct storage objects with separate attributes (i.e., readable, writeable). + + + + SC-3 (2) + ACCESS / FLOW CONTROL FUNCTIONS + + The information system isolates security functions enforcing access and information flow control from nonsecurity functions and from other security functions. + + + Security function isolation occurs as a result of implementation; the functions can still be scanned and monitored. Security functions that are potentially isolated from access and flow control enforcement functions include, for example, auditing, intrusion detection, and anti-virus functions. + + + + SC-3 (3) + MINIMIZE NONSECURITY FUNCTIONALITY + + The organization minimizes the number of nonsecurity functions included within the isolation boundary containing security functions. + + + In those instances where it is not feasible to achieve strict isolation of nonsecurity functions from security functions, it is necessary to take actions to minimize the nonsecurity-relevant functions within the security function boundary. Nonsecurity functions contained within the isolation boundary are considered security-relevant because errors or maliciousness in such software, by virtue of being within the boundary, can impact the security functions of organizational information systems. The design objective is that the specific portions of information systems providing information security are of minimal size/complexity. Minimizing the number of nonsecurity functions in the security-relevant components of information systems allows designers and implementers to focus only on those functions which are necessary to provide the desired security capability (typically access enforcement). By minimizing nonsecurity functions within the isolation boundaries, the amount of code that must be trusted to enforce security policies is reduced, thus contributing to understandability. + + + + SC-3 (4) + MODULE COUPLING AND COHESIVENESS + + The organization implements security functions as largely independent modules that maximize internal cohesiveness within modules and minimize coupling between modules. + + + The reduction in inter-module interactions helps to constrain security functions and to manage complexity. The concepts of coupling and cohesion are important with respect to modularity in software design. Coupling refers to the dependencies that one module has on other modules. Cohesion refers to the relationship between the different functions within a particular module. Good software engineering practices rely on modular decomposition, layering, and minimization to reduce and manage complexity, thus producing software modules that are highly cohesive and loosely coupled. + + + + SC-3 (5) + LAYERED STRUCTURES + + The organization implements security functions as a layered structure minimizing interactions between layers of the design and avoiding any dependence by lower layers on the functionality or correctness of higher layers. + + + The implementation of layered structures with minimized interactions among security functions and non-looping layers (i.e., lower-layer functions do not depend on higher-layer functions) further enables the isolation of security functions and management of complexity. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-4 + INFORMATION IN SHARED RESOURCES + P1 + MODERATE + HIGH + + The information system prevents unauthorized and unintended information transfer via shared system resources. + + + This control prevents information, including encrypted representations of information, produced by the actions of prior users/roles (or the actions of processes acting on behalf of prior users/roles) from being available to any current users/roles (or current processes) that obtain access to shared system resources (e.g., registers, main memory, hard disks) after those resources have been released back to information systems. The control of information in shared resources is also commonly referred to as object reuse and residual information protection. This control does not address: (i) information remanence which refers to residual representation of data that has been nominally erased or removed; (ii) covert channels (including storage and/or timing channels) where shared resources are manipulated to violate information flow restrictions; or (iii) components within information systems for which there are only single users/roles. + AC-3 + AC-4 + MP-6 + + + + SC-4 (1) + SECURITY LEVELS + + SC-4 + + + [Withdrawn: Incorporated into SC-4]. + + + + SC-4 (2) + PERIODS PROCESSING + + The information system prevents unauthorized information transfer via shared resources in accordance with [Assignment: organization-defined procedures] when system processing explicitly switches between different information classification levels or security categories. + + + This control enhancement applies when there are explicit changes in information processing levels during information system operations, for example, during multilevel processing and periods processing with information at different classification levels or security categories. Organization-defined procedures may include, for example, approved sanitization processes for electronically stored information. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-5 + DENIAL OF SERVICE PROTECTION + P1 + LOW + MODERATE + HIGH + + The information system protects against or limits the effects of the following types of denial of service attacks: [Assignment: organization-defined types of denial of service attacks or references to sources for such information] by employing [Assignment: organization-defined security safeguards]. + + + A variety of technologies exist to limit, or in some cases, eliminate the effects of denial of service attacks. For example, boundary protection devices can filter certain types of packets to protect information system components on internal organizational networks from being directly affected by denial of service attacks. Employing increased capacity and bandwidth combined with service redundancy may also reduce the susceptibility to denial of service attacks. + SC-6 + SC-7 + + + + SC-5 (1) + RESTRICT INTERNAL USERS + + The information system restricts the ability of individuals to launch [Assignment: organization-defined denial of service attacks] against other information systems. + + + Restricting the ability of individuals to launch denial of service attacks requires that the mechanisms used for such attacks are unavailable. Individuals of concern can include, for example, hostile insiders or external adversaries that have successfully breached the information system and are using the system as a platform to launch cyber attacks on third parties. Organizations can restrict the ability of individuals to connect and transmit arbitrary information on the transport medium (i.e., network, wireless spectrum). Organizations can also limit the ability of individuals to use excessive information system resources. Protection against individuals having the ability to launch denial of service attacks may be implemented on specific information systems or on boundary devices prohibiting egress to potential target systems. + + + + SC-5 (2) + EXCESS CAPACITY / BANDWIDTH / REDUNDANCY + + The information system manages excess capacity, bandwidth, or other redundancy to limit the effects of information flooding denial of service attacks. + + + Managing excess capacity ensures that sufficient capacity is available to counter flooding attacks. Managing excess capacity may include, for example, establishing selected usage priorities, quotas, or partitioning. + + + + SC-5 (3) + DETECTION / MONITORING + + The organization: + + SC-5 (3)(a) + Employs [Assignment: organization-defined monitoring tools] to detect indicators of denial of service attacks against the information system; and + + + SC-5 (3)(b) + Monitors [Assignment: organization-defined information system resources] to determine if sufficient resources exist to prevent effective denial of service attacks. + + + + Organizations consider utilization and capacity of information system resources when managing risk from denial of service due to malicious attacks. Denial of service attacks can originate from external or internal sources. Information system resources sensitive to denial of service include, for example, physical disk storage, memory, and CPU cycles. Common safeguards to prevent denial of service attacks related to storage utilization and capacity include, for example, instituting disk quotas, configuring information systems to automatically alert administrators when specific storage capacity thresholds are reached, using file compression technologies to maximize available storage space, and imposing separate partitions for system and user data. + CA-7 + SI-4 + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-6 + RESOURCE AVAILABILITY + P0 + + The information system protects the availability of resources by allocating [Assignment: organization-defined resources] by [Selection (one or more); priority; quota; [Assignment: organization-defined security safeguards]]. + + + Priority protection helps prevent lower-priority processes from delaying or interfering with the information system servicing any higher-priority processes. Quotas prevent users or processes from obtaining more than predetermined amounts of resources. This control does not apply to information system components for which there are only single users/roles. + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-7 + BOUNDARY PROTECTION + P1 + LOW + MODERATE + HIGH + + The information system: + + SC-7a. + Monitors and controls communications at the external boundary of the system and at key internal boundaries within the system; + + + SC-7b. + Implements subnetworks for publicly accessible system components that are [Selection: physically; logically] separated from internal organizational networks; and + + + SC-7c. + Connects to external networks or information systems only through managed interfaces consisting of boundary protection devices arranged in accordance with an organizational security architecture. + + + + Managed interfaces include, for example, gateways, routers, firewalls, guards, network-based malicious code analysis and virtualization systems, or encrypted tunnels implemented within a security architecture (e.g., routers protecting firewalls or application gateways residing on protected subnetworks). Subnetworks that are physically or logically separated from internal networks are referred to as demilitarized zones or DMZs. Restricting or prohibiting interfaces within organizational information systems includes, for example, restricting external web traffic to designated web servers within managed interfaces and prohibiting external traffic that appears to be spoofing internal addresses. Organizations consider the shared nature of commercial telecommunications services in the implementation of security controls associated with the use of such services. Commercial telecommunications services are commonly based on network components and consolidated management systems shared by all attached commercial customers, and may also include third party-provided access lines and other service elements. Such transmission services may represent sources of increased risk despite contract security provisions. + AC-4 + AC-17 + CA-3 + CM-7 + CP-8 + IR-4 + RA-3 + SC-5 + SC-13 + + + + SC-7 (1) + PHYSICALLY SEPARATED SUBNETWORKS + + SC-7 + + + [Withdrawn: Incorporated into SC-7]. + + + + SC-7 (2) + PUBLIC ACCESS + + SC-7 + + + [Withdrawn: Incorporated into SC-7]. + + + + SC-7 (3) + ACCESS POINTS + MODERATE + HIGH + + The organization limits the number of external network connections to the information system. + + + Limiting the number of external network connections facilitates more comprehensive monitoring of inbound and outbound communications traffic. The Trusted Internet Connection (TIC) initiative is an example of limiting the number of external network connections. + + + + SC-7 (4) + EXTERNAL TELECOMMUNICATIONS SERVICES + MODERATE + HIGH + + The organization: + + SC-7 (4)(a) + Implements a managed interface for each external telecommunication service; + + + SC-7 (4)(b) + Establishes a traffic flow policy for each managed interface; + + + SC-7 (4)(c) + Protects the confidentiality and integrity of the information being transmitted across each interface; + + + SC-7 (4)(d) + Documents each exception to the traffic flow policy with a supporting mission/business need and duration of that need; and + + + SC-7 (4)(e) + Reviews exceptions to the traffic flow policy [Assignment: organization-defined frequency] and removes exceptions that are no longer supported by an explicit mission/business need. + + + + SC-8 + + + + SC-7 (5) + DENY BY DEFAULT / ALLOW BY EXCEPTION + MODERATE + HIGH + + The information system at managed interfaces denies network communications traffic by default and allows network communications traffic by exception (i.e., deny all, permit by exception). + + + This control enhancement applies to both inbound and outbound network communications traffic. A deny-all, permit-by-exception network communications traffic policy ensures that only those connections which are essential and approved are allowed. + + + + SC-7 (6) + RESPONSE TO RECOGNIZED FAILURES + + SC-7 (18) + + + [Withdrawn: Incorporated into SC-7 (18)]. + + + + SC-7 (7) + PREVENT SPLIT TUNNELING FOR REMOTE DEVICES + MODERATE + HIGH + + The information system, in conjunction with a remote device, prevents the device from simultaneously establishing non-remote connections with the system and communicating via some other connection to resources in external networks. + + + This control enhancement is implemented within remote devices (e.g., notebook computers) through configuration settings to disable split tunneling in those devices, and by preventing those configuration settings from being readily configurable by users. This control enhancement is implemented within the information system by the detection of split tunneling (or of configuration settings that allow split tunneling) in the remote device, and by prohibiting the connection if the remote device is using split tunneling. Split tunneling might be desirable by remote users to communicate with local information system resources such as printers/file servers. However, split tunneling would in effect allow unauthorized external connections, making the system more vulnerable to attack and to exfiltration of organizational information. The use of VPNs for remote connections, when adequately provisioned with appropriate security controls, may provide the organization with sufficient assurance that it can effectively treat such connections as non-remote connections from the confidentiality and integrity perspective. VPNs thus provide a means for allowing non-remote communications paths from remote devices. The use of an adequately provisioned VPN does not eliminate the need for preventing split tunneling. + + + + SC-7 (8) + ROUTE TRAFFIC TO AUTHENTICATED PROXY SERVERS + HIGH + + The information system routes [Assignment: organization-defined internal communications traffic] to [Assignment: organization-defined external networks] through authenticated proxy servers at managed interfaces. + + + External networks are networks outside of organizational control. A proxy server is a server (i.e., information system or application) that acts as an intermediary for clients requesting information system resources (e.g., files, connections, web pages, or services) from other organizational servers. Client requests established through an initial connection to the proxy server are evaluated to manage complexity and to provide additional protection by limiting direct connectivity. Web content filtering devices are one of the most common proxy servers providing access to the Internet. Proxy servers support logging individual Transmission Control Protocol (TCP) sessions and blocking specific Uniform Resource Locators (URLs), domain names, and Internet Protocol (IP) addresses. Web proxies can be configured with organization-defined lists of authorized and unauthorized websites. + AC-3 + AU-2 + + + + SC-7 (9) + RESTRICT THREATENING OUTGOING COMMUNICATIONS TRAFFIC + + The information system: + + SC-7 (9)(a) + Detects and denies outgoing communications traffic posing a threat to external information systems; and + + + SC-7 (9)(b) + Audits the identity of internal users associated with denied communications. + + + + Detecting outgoing communications traffic from internal actions that may pose threats to external information systems is sometimes termed extrusion detection. Extrusion detection at information system boundaries as part of managed interfaces includes the analysis of incoming and outgoing communications traffic searching for indications of internal threats to the security of external systems. Such threats include, for example, traffic indicative of denial of service attacks and traffic containing malicious code. + AU-2 + AU-6 + SC-38 + SC-44 + SI-3 + SI-4 + + + + SC-7 (10) + PREVENT UNAUTHORIZED EXFILTRATION + + The organization prevents the unauthorized exfiltration of information across managed interfaces. + + + Safeguards implemented by organizations to prevent unauthorized exfiltration of information from information systems include, for example: (i) strict adherence to protocol formats; (ii) monitoring for beaconing from information systems; (iii) monitoring for steganography; (iv) disconnecting external network interfaces except when explicitly needed; (v) disassembling and reassembling packet headers; and (vi) employing traffic profile analysis to detect deviations from the volume/types of traffic expected within organizations or call backs to command and control centers. Devices enforcing strict adherence to protocol formats include, for example, deep packet inspection firewalls and XML gateways. These devices verify adherence to protocol formats and specification at the application layer and serve to identify vulnerabilities that cannot be detected by devices operating at the network or transport layers. This control enhancement is closely associated with cross-domain solutions and system guards enforcing information flow requirements. + SI-3 + + + + SC-7 (11) + RESTRICT INCOMING COMMUNICATIONS TRAFFIC + + The information system only allows incoming communications from [Assignment: organization-defined authorized sources] to be routed to [Assignment: organization-defined authorized destinations]. + + + This control enhancement provides determinations that source and destination address pairs represent authorized/allowed communications. Such determinations can be based on several factors including, for example, the presence of source/destination address pairs in lists of authorized/allowed communications, the absence of address pairs in lists of unauthorized/disallowed pairs, or meeting more general rules for authorized/allowed source/destination pairs. + AC-3 + + + + SC-7 (12) + HOST-BASED PROTECTION + + The organization implements [Assignment: organization-defined host-based boundary protection mechanisms] at [Assignment: organization-defined information system components]. + + + Host-based boundary protection mechanisms include, for example, host-based firewalls. Information system components employing host-based boundary protection mechanisms include, for example, servers, workstations, and mobile devices. + + + + SC-7 (13) + ISOLATION OF SECURITY TOOLS / MECHANISMS / SUPPORT COMPONENTS + + The organization isolates [Assignment: organization-defined information security tools, mechanisms, and support components] from other internal information system components by implementing physically separate subnetworks with managed interfaces to other components of the system. + + + Physically separate subnetworks with managed interfaces are useful, for example, in isolating computer network defenses from critical operational processing networks to prevent adversaries from discovering the analysis and forensics techniques of organizations. + SA-8 + SC-2 + SC-3 + + + + SC-7 (14) + PROTECTS AGAINST UNAUTHORIZED PHYSICAL CONNECTIONS + + The organization protects against unauthorized physical connections at [Assignment: organization-defined managed interfaces]. + + + Information systems operating at different security categories or classification levels may share common physical and environmental controls, since the systems may share space within organizational facilities. In practice, it is possible that these separate information systems may share common equipment rooms, wiring closets, and cable distribution paths. Protection against unauthorized physical connections can be achieved, for example, by employing clearly identified and physically separated cable trays, connection frames, and patch panels for each side of managed interfaces with physical access controls enforcing limited authorized access to these items. + PE-4 + PE-19 + + + + SC-7 (15) + ROUTE PRIVILEGED NETWORK ACCESSES + + The information system routes all networked, privileged accesses through a dedicated, managed interface for purposes of access control and auditing. + + + AC-2 + AC-3 + AU-2 + SI-4 + + + + SC-7 (16) + PREVENT DISCOVERY OF COMPONENTS / DEVICES + + The information system prevents discovery of specific system components composing a managed interface. + + + This control enhancement protects network addresses of information system components that are part of managed interfaces from discovery through common tools and techniques used to identify devices on networks. Network addresses are not available for discovery (e.g., network address not published or entered in domain name systems), requiring prior knowledge for access. Another obfuscation technique is to periodically change network addresses. + + + + SC-7 (17) + AUTOMATED ENFORCEMENT OF PROTOCOL FORMATS + + The information system enforces adherence to protocol formats. + + + Information system components that enforce protocol formats include, for example, deep packet inspection firewalls and XML gateways. Such system components verify adherence to protocol formats/specifications (e.g., IEEE) at the application layer and identify significant vulnerabilities that cannot be detected by devices operating at the network or transport layers. + SC-4 + + + + SC-7 (18) + FAIL SECURE + HIGH + + The information system fails securely in the event of an operational failure of a boundary protection device. + + + Fail secure is a condition achieved by employing information system mechanisms to ensure that in the event of operational failures of boundary protection devices at managed interfaces (e.g., routers, firewalls, guards, and application gateways residing on protected subnetworks commonly referred to as demilitarized zones), information systems do not enter into unsecure states where intended security properties no longer hold. Failures of boundary protection devices cannot lead to, or cause information external to the devices to enter the devices, nor can failures permit unauthorized information releases. + CP-2 + SC-24 + + + + SC-7 (19) + BLOCKS COMMUNICATION FROM NON-ORGANIZATIONALLY CONFIGURED HOSTS + + The information system blocks both inbound and outbound communications traffic between [Assignment: organization-defined communication clients] that are independently configured by end users and external service providers. + + + Communication clients independently configured by end users and external service providers include, for example, instant messaging clients. Traffic blocking does not apply to communication clients that are configured by organizations to perform authorized functions. + + + + SC-7 (20) + DYNAMIC ISOLATION / SEGREGATION + + The information system provides the capability to dynamically isolate/segregate [Assignment: organization-defined information system components] from other components of the system. + + + The capability to dynamically isolate or segregate certain internal components of organizational information systems is useful when it is necessary to partition or separate certain components of dubious origin from those components possessing greater trustworthiness. Component isolation reduces the attack surface of organizational information systems. Isolation of selected information system components is also a means of limiting the damage from successful cyber attacks when those attacks occur. + + + + SC-7 (21) + ISOLATION OF INFORMATION SYSTEM COMPONENTS + HIGH + + The organization employs boundary protection mechanisms to separate [Assignment: organization-defined information system components] supporting [Assignment: organization-defined missions and/or business functions]. + + + Organizations can isolate information system components performing different missions and/or business functions. Such isolation limits unauthorized information flows among system components and also provides the opportunity to deploy greater levels of protection for selected components. Separating system components with boundary protection mechanisms provides the capability for increased protection of individual components and to more effectively control information flows between those components. This type of enhanced protection limits the potential harm from cyber attacks and errors. The degree of separation provided varies depending upon the mechanisms chosen. Boundary protection mechanisms include, for example, routers, gateways, and firewalls separating system components into physically separate networks or subnetworks, cross-domain devices separating subnetworks, virtualization techniques, and encrypting information flows among system components using distinct encryption keys. + CA-9 + SC-3 + + + + SC-7 (22) + SEPARATE SUBNETS FOR CONNECTING TO DIFFERENT SECURITY DOMAINS + + The information system implements separate network addresses (i.e., different subnets) to connect to systems in different security domains. + + + Decomposition of information systems into subnets helps to provide the appropriate level of protection for network connections to different security domains containing information with different security categories or classification levels. + + + + SC-7 (23) + DISABLE SENDER FEEDBACK ON PROTOCOL VALIDATION FAILURE + + The information system disables feedback to senders on protocol format validation failure. + + + Disabling feedback to senders when there is a failure in protocol validation format prevents adversaries from obtaining information which would otherwise be unavailable. + + + + + + FIPS Publication 199 + + + NIST Special Publication 800-41 + + + NIST Special Publication 800-77 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-8 + TRANSMISSION CONFIDENTIALITY AND INTEGRITY + P1 + MODERATE + HIGH + + The information system protects the [Selection (one or more): confidentiality; integrity] of transmitted information. + + + This control applies to both internal and external networks and all types of information system components from which information can be transmitted (e.g., servers, mobile devices, notebook computers, printers, copiers, scanners, facsimile machines). Communication paths outside the physical protection of a controlled boundary are exposed to the possibility of interception and modification. Protecting the confidentiality and/or integrity of organizational information can be accomplished by physical means (e.g., by employing protected distribution systems) or by logical means (e.g., employing encryption techniques). Organizations relying on commercial providers offering transmission services as commodity services rather than as fully dedicated services (i.e., services which can be highly specialized to individual customer needs), may find it difficult to obtain the necessary assurances regarding the implementation of needed security controls for transmission confidentiality/integrity. In such situations, organizations determine what types of confidentiality/integrity services are available in standard, commercial telecommunication service packages. If it is infeasible or impractical to obtain the necessary security controls and assurances of control effectiveness through appropriate contracting vehicles, organizations implement appropriate compensating security controls or explicitly accept the additional risk. + AC-17 + PE-4 + + + + SC-8 (1) + CRYPTOGRAPHIC OR ALTERNATE PHYSICAL PROTECTION + MODERATE + HIGH + + The information system implements cryptographic mechanisms to [Selection (one or more): prevent unauthorized disclosure of information; detect changes to information] during transmission unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. + + + Encrypting information for transmission protects information from unauthorized disclosure and modification. Cryptographic mechanisms implemented to protect information integrity include, for example, cryptographic hash functions which have common application in digital signatures, checksums, and message authentication codes. Alternative physical security safeguards include, for example, protected distribution systems. + SC-13 + + + + SC-8 (2) + PRE / POST TRANSMISSION HANDLING + + The information system maintains the [Selection (one or more): confidentiality; integrity] of information during preparation for transmission and during reception. + + + Information can be either unintentionally or maliciously disclosed or modified during preparation for transmission or during reception including, for example, during aggregation, at protocol transformation points, and during packing/unpacking. These unauthorized disclosures or modifications compromise the confidentiality or integrity of the information. + AU-10 + + + + SC-8 (3) + CRYPTOGRAPHIC PROTECTION FOR MESSAGE EXTERNALS + + The information system implements cryptographic mechanisms to protect message externals unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. + + + This control enhancement addresses protection against unauthorized disclosure of information. Message externals include, for example, message headers/routing information. This control enhancement prevents the exploitation of message externals and applies to both internal and external networks or links that may be visible to individuals who are not authorized users. Header/routing information is sometimes transmitted unencrypted because the information is not properly identified by organizations as having significant value or because encrypting the information can result in lower network performance and/or higher costs. Alternative physical safeguards include, for example, protected distribution systems. + SC-12 + SC-13 + + + + SC-8 (4) + CONCEAL / RANDOMIZE COMMUNICATIONS + + The information system implements cryptographic mechanisms to conceal or randomize communication patterns unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. + + + This control enhancement addresses protection against unauthorized disclosure of information. Communication patterns include, for example, frequency, periods, amount, and predictability. Changes to communications patterns can reveal information having intelligence value especially when combined with other available information related to missions/business functions supported by organizational information systems. This control enhancement prevents the derivation of intelligence based on communications patterns and applies to both internal and external networks or links that may be visible to individuals who are not authorized users. Encrypting the links and transmitting in continuous, fixed/random patterns prevents the derivation of intelligence from the system communications patterns. Alternative physical safeguards include, for example, protected distribution systems. + SC-12 + SC-13 + + + + + + FIPS Publication 140-2 + + + FIPS Publication 197 + + + NIST Special Publication 800-52 + + + NIST Special Publication 800-77 + + + NIST Special Publication 800-81 + + + NIST Special Publication 800-113 + + + CNSS Policy 15 + + + NSTISSI No. 7003 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-9 + TRANSMISSION CONFIDENTIALITY + + SC-8 + + + [Withdrawn: Incorporated into SC-8]. + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-10 + NETWORK DISCONNECT + P2 + MODERATE + HIGH + + The information system terminates the network connection associated with a communications session at the end of the session or after [Assignment: organization-defined time period] of inactivity. + + + This control applies to both internal and external networks. Terminating network connections associated with communications sessions include, for example, de-allocating associated TCP/IP address/port pairs at the operating system level, or de-allocating networking assignments at the application level if multiple application sessions are using a single, operating system-level network connection. Time periods of inactivity may be established by organizations and include, for example, time periods by type of network access or for specific network accesses. + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-11 + TRUSTED PATH + P0 + + The information system establishes a trusted communications path between the user and the following security functions of the system: [Assignment: organization-defined security functions to include at a minimum, information system authentication and re-authentication]. + + + Trusted paths are mechanisms by which users (through input devices) can communicate directly with security functions of information systems with the requisite assurance to support information security policies. The mechanisms can be activated only by users or the security functions of organizational information systems. User responses via trusted paths are protected from modifications by or disclosure to untrusted applications. Organizations employ trusted paths for high-assurance connections between security functions of information systems and users (e.g., during system logons). Enforcement of trusted communications paths is typically provided via an implementation that meets the reference monitor concept. + AC-16 + AC-25 + + + + SC-11 (1) + LOGICAL ISOLATION + + The information system provides a trusted communications path that is logically isolated and distinguishable from other paths. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-12 + CRYPTOGRAPHIC KEY ESTABLISHMENT AND MANAGEMENT + P1 + LOW + MODERATE + HIGH + + The organization establishes and manages cryptographic keys for required cryptography employed within the information system in accordance with [Assignment: organization-defined requirements for key generation, distribution, storage, access, and destruction]. + + + Cryptographic key management and establishment can be performed using manual procedures or automated mechanisms with supporting manual procedures. Organizations define key management requirements in accordance with applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance, specifying appropriate options, levels, and parameters. Organizations manage trust stores to ensure that only approved trust anchors are in such trust stores. This includes certificates with visibility external to organizational information systems and certificates related to the internal operations of systems. + SC-13 + SC-17 + + + + SC-12 (1) + AVAILABILITY + HIGH + + The organization maintains availability of information in the event of the loss of cryptographic keys by users. + + + Escrowing of encryption keys is a common practice for ensuring availability in the event of loss of keys (e.g., due to forgotten passphrase). + + + + SC-12 (2) + SYMMETRIC KEYS + + The organization produces, controls, and distributes symmetric cryptographic keys using [Selection: NIST FIPS-compliant; NSA-approved] key management technology and processes. + + + + SC-12 (3) + ASYMMETRIC KEYS + + The organization produces, controls, and distributes asymmetric cryptographic keys using [Selection: NSA-approved key management technology and processes; approved PKI Class 3 certificates or prepositioned keying material; approved PKI Class 3 or Class 4 certificates and hardware security tokens that protect the user�s private key]. + + + + SC-12 (4) + PKI CERTIFICATES + + SC-12 + + + [Withdrawn: Incorporated into SC-12]. + + + + SC-12 (5) + PKI CERTIFICATES / HARDWARE TOKENS + + SC-12 + + + [Withdrawn: Incorporated into SC-12]. + + + + + + NIST Special Publication 800-56 + + + NIST Special Publication 800-57 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-13 + CRYPTOGRAPHIC PROTECTION + P1 + LOW + MODERATE + HIGH + + The information system implements [Assignment: organization-defined cryptographic uses and type of cryptography required for each use] in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards. + + + Cryptography can be employed to support a variety of security solutions including, for example, the protection of classified and Controlled Unclassified Information, the provision of digital signatures, and the enforcement of information separation when authorized individuals have the necessary clearances for such information but lack the necessary formal access approvals. Cryptography can also be used to support random number generation and hash generation. Generally applicable cryptographic standards include FIPS-validated cryptography and NSA-approved cryptography. This control does not impose any requirements on organizations to use cryptography. However, if cryptography is required based on the selection of other security controls, organizations define each type of cryptographic use and the type of cryptography required (e.g., protection of classified information: NSA-approved cryptography; provision of digital signatures: FIPS-validated cryptography). + AC-2 + AC-3 + AC-7 + AC-17 + AC-18 + AU-9 + AU-10 + CM-11 + CP-9 + IA-3 + IA-7 + MA-4 + MP-2 + MP-4 + MP-5 + SA-4 + SC-8 + SC-12 + SC-28 + SI-7 + + + + SC-13 (1) + FIPS-VALIDATED CRYPTOGRAPHY + + SC-13 + + + [Withdrawn: Incorporated into SC-13]. + + + + SC-13 (2) + NSA-APPROVED CRYPTOGRAPHY + + SC-13 + + + [Withdrawn: Incorporated into SC-13]. + + + + SC-13 (3) + INDIVIDUALS WITHOUT FORMAL ACCESS APPROVALS + + SC-13 + + + [Withdrawn: Incorporated into SC-13]. + + + + SC-13 (4) + DIGITAL SIGNATURES + + SC-13 + + + [Withdrawn: Incorporated into SC-13]. + + + + + + FIPS Publication 140 + + + http://csrc.nist.gov/cryptval + + + http://www.cnss.gov + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-14 + PUBLIC ACCESS PROTECTIONS + + AC-2 + AC-3 + AC-5 + AC-6 + SI-3 + SI-4 + SI-5 + SI-7 + SI-10 + + + [Withdrawn: Capability provided by AC-2, AC-3, AC-5, AC-6, SI-3, SI-4, SI-5, SI-7, SI-10]. + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-15 + COLLABORATIVE COMPUTING DEVICES + P1 + LOW + MODERATE + HIGH + + The information system: + + SC-15a. + Prohibits remote activation of collaborative computing devices with the following exceptions: [Assignment: organization-defined exceptions where remote activation is to be allowed]; and + + + SC-15b. + Provides an explicit indication of use to users physically present at the devices. + + + + Collaborative computing devices include, for example, networked white boards, cameras, and microphones. Explicit indication of use includes, for example, signals to users when collaborative computing devices are activated. + AC-21 + + + + SC-15 (1) + PHYSICAL DISCONNECT + + The information system provides physical disconnect of collaborative computing devices in a manner that supports ease of use. + + + Failing to physically disconnect from collaborative computing devices can result in subsequent compromises of organizational information. Providing easy methods to physically disconnect from such devices after a collaborative computing session helps to ensure that participants actually carry out the disconnect activity without having to go through complex and tedious procedures. + + + + SC-15 (2) + BLOCKING INBOUND / OUTBOUND COMMUNICATIONS TRAFFIC + + SC-7 + + + [Withdrawn: Incorporated into SC-7]. + + + + SC-15 (3) + DISABLING / REMOVAL IN SECURE WORK AREAS + + The organization disables or removes collaborative computing devices from [Assignment: organization-defined information systems or information system components] in [Assignment: organization-defined secure work areas]. + + + Failing to disable or remove collaborative computing devices from information systems or information system components can result in subsequent compromises of organizational information including, for example, eavesdropping on conversations. + + + + SC-15 (4) + EXPLICITLY INDICATE CURRENT PARTICIPANTS + + The information system provides an explicit indication of current participants in [Assignment: organization-defined online meetings and teleconferences]. + + + This control enhancement helps to prevent unauthorized individuals from participating in collaborative computing sessions without the explicit knowledge of other participants. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-16 + TRANSMISSION OF SECURITY ATTRIBUTES + P0 + + The information system associates [Assignment: organization-defined security attributes] with information exchanged between information systems and between system components. + + + Security attributes can be explicitly or implicitly associated with the information contained in organizational information systems or system components. + AC-3 + AC-4 + AC-16 + + + + SC-16 (1) + INTEGRITY VALIDATION + + The information system validates the integrity of transmitted security attributes. + + + This control enhancement ensures that the verification of the integrity of transmitted information includes security attributes. + AU-10 + SC-8 + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-17 + PUBLIC KEY INFRASTRUCTURE CERTIFICATES + P1 + MODERATE + HIGH + + The organization issues public key certificates under an [Assignment: organization-defined certificate policy] or obtains public key certificates from an approved service provider. + + + For all certificates, organizations manage information system trust stores to ensure only approved trust anchors are in the trust stores. This control addresses both certificates with visibility external to organizational information systems and certificates related to the internal operations of systems, for example, application-specific time services. + SC-12 + + + + OMB Memorandum 05-24 + + + NIST Special Publication 800-32 + + + NIST Special Publication 800-63 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-18 + MOBILE CODE + P2 + MODERATE + HIGH + + The organization: + + SC-18a. + Defines acceptable and unacceptable mobile code and mobile code technologies; + + + SC-18b. + Establishes usage restrictions and implementation guidance for acceptable mobile code and mobile code technologies; and + + + SC-18c. + Authorizes, monitors, and controls the use of mobile code within the information system. + + + + Decisions regarding the employment of mobile code within organizational information systems are based on the potential for the code to cause damage to the systems if used maliciously. Mobile code technologies include, for example, Java, JavaScript, ActiveX, Postscript, PDF, Shockwave movies, Flash animations, and VBScript. Usage restrictions and implementation guidance apply to both the selection and use of mobile code installed on servers and mobile code downloaded and executed on individual workstations and devices (e.g., smart phones). Mobile code policy and procedures address preventing the development, acquisition, or introduction of unacceptable mobile code within organizational information systems. + AU-2 + AU-12 + CM-2 + CM-6 + SI-3 + + + + SC-18 (1) + IDENTIFY UNACCEPTABLE CODE / TAKE CORRECTIVE ACTIONS + + The information system identifies [Assignment: organization-defined unacceptable mobile code] and takes [Assignment: organization-defined corrective actions]. + + + Corrective actions when unacceptable mobile code is detected include, for example, blocking, quarantine, or alerting administrators. Blocking includes, for example, preventing transmission of word processing files with embedded macros when such macros have been defined to be unacceptable mobile code. + + + + SC-18 (2) + ACQUISITION / DEVELOPMENT / USE + + The organization ensures that the acquisition, development, and use of mobile code to be deployed in the information system meets [Assignment: organization-defined mobile code requirements]. + + + + SC-18 (3) + PREVENT DOWNLOADING / EXECUTION + + The information system prevents the download and execution of [Assignment: organization-defined unacceptable mobile code]. + + + + SC-18 (4) + PREVENT AUTOMATIC EXECUTION + + The information system prevents the automatic execution of mobile code in [Assignment: organization-defined software applications] and enforces [Assignment: organization-defined actions] prior to executing the code. + + + Actions enforced before executing mobile code, include, for example, prompting users prior to opening electronic mail attachments. Preventing automatic execution of mobile code includes, for example, disabling auto execute features on information system components employing portable storage devices such as Compact Disks (CDs), Digital Video Disks (DVDs), and Universal Serial Bus (USB) devices. + + + + SC-18 (5) + ALLOW EXECUTION ONLY IN CONFINED ENVIRONMENTS + + The organization allows execution of permitted mobile code only in confined virtual machine environments. + + + + + + NIST Special Publication 800-28 + + + DoD Instruction 8552.01 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-19 + VOICE OVER INTERNET PROTOCOL + P1 + MODERATE + HIGH + + The organization: + + SC-19a. + Establishes usage restrictions and implementation guidance for Voice over Internet Protocol (VoIP) technologies based on the potential to cause damage to the information system if used maliciously; and + + + SC-19b. + Authorizes, monitors, and controls the use of VoIP within the information system. + + + + CM-6 + SC-7 + SC-15 + + + + NIST Special Publication 800-58 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-20 + SECURE NAME / ADDRESS RESOLUTION SERVICE (AUTHORITATIVE SOURCE) + P1 + LOW + MODERATE + HIGH + + The information system: + + SC-20a. + Provides additional data origin authentication and integrity verification artifacts along with the authoritative name resolution data the system returns in response to external name/address resolution queries; and + + + SC-20b. + Provides the means to indicate the security status of child zones and (if the child supports secure resolution services) to enable verification of a chain of trust among parent and child domains, when operating as part of a distributed, hierarchical namespace. + + + + This control enables external clients including, for example, remote Internet clients, to obtain origin authentication and integrity verification assurances for the host/service name to network address resolution information obtained through the service. Information systems that provide name and address resolution services include, for example, domain name system (DNS) servers. Additional artifacts include, for example, DNS Security (DNSSEC) digital signatures and cryptographic keys. DNS resource records are examples of authoritative data. The means to indicate the security status of child zones includes, for example, the use of delegation signer resource records in the DNS. The DNS security controls reflect (and are referenced from) OMB Memorandum 08-23. Information systems that use technologies other than the DNS to map between host/service names and network addresses provide other means to assure the authenticity and integrity of response data. + AU-10 + SC-8 + SC-12 + SC-13 + SC-21 + SC-22 + + + + SC-20 (1) + CHILD SUBSPACES + + SC-20 + + + [Withdrawn: Incorporated into SC-20]. + + + + SC-20 (2) + DATA ORIGIN / INTEGRITY + + The information system provides data origin and integrity protection artifacts for internal name/address resolution queries. + + + + + + OMB Memorandum 08-23 + + + NIST Special Publication 800-81 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-21 + SECURE NAME / ADDRESS RESOLUTION SERVICE (RECURSIVE OR CACHING RESOLVER) + P1 + LOW + MODERATE + HIGH + + The information system requests and performs data origin authentication and data integrity verification on the name/address resolution responses the system receives from authoritative sources. + + + Each client of name resolution services either performs this validation on its own, or has authenticated channels to trusted validation providers. Information systems that provide name and address resolution services for local clients include, for example, recursive resolving or caching domain name system (DNS) servers. DNS client resolvers either perform validation of DNSSEC signatures, or clients use authenticated channels to recursive resolvers that perform such validations. Information systems that use technologies other than the DNS to map between host/service names and network addresses provide other means to enable clients to verify the authenticity and integrity of response data. + SC-20 + SC-22 + + + + SC-21 (1) + DATA ORIGIN / INTEGRITY + + SC-21 + + + [Withdrawn: Incorporated into SC-21]. + + + + + + NIST Special Publication 800-81 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-22 + ARCHITECTURE AND PROVISIONING FOR NAME / ADDRESS RESOLUTION SERVICE + P1 + LOW + MODERATE + HIGH + + The information systems that collectively provide name/address resolution service for an organization are fault-tolerant and implement internal/external role separation. + + + Information systems that provide name and address resolution services include, for example, domain name system (DNS) servers. To eliminate single points of failure and to enhance redundancy, organizations employ at least two authoritative domain name system servers, one configured as the primary server and the other configured as the secondary server. Additionally, organizations typically deploy the servers in two geographically separated network subnetworks (i.e., not located in the same physical facility). For role separation, DNS servers with internal roles only process name and address resolution requests from within organizations (i.e., from internal clients). DNS servers with external roles only process name and address resolution information requests from clients external to organizations (i.e., on external networks including the Internet). Organizations specify clients that can access authoritative DNS servers in particular roles (e.g., by address ranges, explicit lists). + SC-2 + SC-20 + SC-21 + SC-24 + + + + NIST Special Publication 800-81 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-23 + SESSION AUTHENTICITY + P1 + MODERATE + HIGH + + The information system protects the authenticity of communications sessions. + + + This control addresses communications protection at the session, versus packet level (e.g., sessions in service-oriented architectures providing web-based services) and establishes grounds for confidence at both ends of communications sessions in ongoing identities of other parties and in the validity of information transmitted. Authenticity protection includes, for example, protecting against man-in-the-middle attacks/session hijacking and the insertion of false information into sessions. + SC-8 + SC-10 + SC-11 + + + + SC-23 (1) + INVALIDATE SESSION IDENTIFIERS AT LOGOUT + + The information system invalidates session identifiers upon user logout or other session termination. + + + This control enhancement curtails the ability of adversaries from capturing and continuing to employ previously valid session IDs. + + + + SC-23 (2) + USER-INITIATED LOGOUTS / MESSAGE DISPLAYS + + AC-12 (1) + + + [Withdrawn: Incorporated into AC-12 (1)]. + + + + SC-23 (3) + UNIQUE SESSION IDENTIFIERS WITH RANDOMIZATION + + The information system generates a unique session identifier for each session with [Assignment: organization-defined randomness requirements] and recognizes only session identifiers that are system-generated. + + + This control enhancement curtails the ability of adversaries from reusing previously valid session IDs. Employing the concept of randomness in the generation of unique session identifiers helps to protect against brute-force attacks to determine future session identifiers. + SC-13 + + + + SC-23 (4) + UNIQUE SESSION IDENTIFIERS WITH RANDOMIZATION + + SC-23 (3) + + + [Withdrawn: Incorporated into SC-23 (3)]. + + + + SC-23 (5) + ALLOWED CERTIFICATE AUTHORITIES + + The information system only allows the use of [Assignment: organization-defined certificate authorities] for verification of the establishment of protected sessions. + + + Reliance on certificate authorities (CAs) for the establishment of secure sessions includes, for example, the use of Secure Socket Layer (SSL) and/or Transport Layer Security (TLS) certificates. These certificates, after verification by the respective certificate authorities, facilitate the establishment of protected sessions between web clients and web servers. + SC-13 + + + + + + NIST Special Publication 800-52 + + + NIST Special Publication 800-77 + + + NIST Special Publication 800-95 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-24 + FAIL IN KNOWN STATE + P1 + HIGH + + The information system fails to a [Assignment: organization-defined known-state] for [Assignment: organization-defined types of failures] preserving [Assignment: organization-defined system state information] in failure. + + + Failure in a known state addresses security concerns in accordance with the mission/business needs of organizations. Failure in a known secure state helps to prevent the loss of confidentiality, integrity, or availability of information in the event of failures of organizational information systems or system components. Failure in a known safe state helps to prevent systems from failing to a state that may cause injury to individuals or destruction to property. Preserving information system state information facilitates system restart and return to the operational mode of organizations with less disruption of mission/business processes. + CP-2 + CP-10 + CP-12 + SC-7 + SC-22 + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-25 + THIN NODES + P0 + + The organization employs [Assignment: organization-defined information system components] with minimal functionality and information storage. + + + The deployment of information system components with reduced/minimal functionality (e.g., diskless nodes and thin client technologies) reduces the need to secure every user endpoint, and may reduce the exposure of information, information systems, and services to cyber attacks. + SC-30 + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-26 + HONEYPOTS + P0 + + The information system includes components specifically designed to be the target of malicious attacks for the purpose of detecting, deflecting, and analyzing such attacks. + + + A honeypot is set up as a decoy to attract adversaries and to deflect their attacks away from the operational systems supporting organizational missions/business function. Depending upon the specific usage of the honeypot, consultation with the Office of the General Counsel before deployment may be needed. + SC-30 + SC-44 + SI-3 + SI-4 + + + + SC-26 (1) + DETECTION OF MALICIOUS CODE + + SC-35 + + + [Withdrawn: Incorporated into SC-35]. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-27 + PLATFORM-INDEPENDENT APPLICATIONS + P0 + + The information system includes: [Assignment: organization-defined platform-independent applications]. + + + Platforms are combinations of hardware and software used to run software applications. Platforms include: (i) operating systems; (ii) the underlying computer architectures, or (iii) both. Platform-independent applications are applications that run on multiple platforms. Such applications promote portability and reconstitution on different platforms, increasing the availability of critical functions within organizations while information systems with specific operating systems are under attack. + SC-29 + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-28 + PROTECTION OF INFORMATION AT REST + P1 + MODERATE + HIGH + + The information system protects the [Selection (one or more): confidentiality; integrity] of [Assignment: organization-defined information at rest]. + + + This control addresses the confidentiality and integrity of information at rest and covers user information and system information. Information at rest refers to the state of information when it is located on storage devices as specific components of information systems. System-related information requiring protection includes, for example, configurations or rule sets for firewalls, gateways, intrusion detection/prevention systems, filtering routers, and authenticator content. Organizations may employ different mechanisms to achieve confidentiality and integrity protections, including the use of cryptographic mechanisms and file share scanning. Integrity protection can be achieved, for example, by implementing Write-Once-Read-Many (WORM) technologies. Organizations may also employ other security controls including, for example, secure off-line storage in lieu of online storage when adequate protection of information at rest cannot otherwise be achieved and/or continuous monitoring to identify malicious code at rest. + AC-3 + AC-6 + CA-7 + CM-3 + CM-5 + CM-6 + PE-3 + SC-8 + SC-13 + SI-3 + SI-7 + + + + SC-28 (1) + CRYPTOGRAPHIC PROTECTION + + The information system implements cryptographic mechanisms to prevent unauthorized disclosure and modification of [Assignment: organization-defined information] on [Assignment: organization-defined information system components]. + + + Selection of cryptographic mechanisms is based on the need to protect the confidentiality and integrity of organizational information. The strength of mechanism is commensurate with the security category and/or classification of the information. This control enhancement applies to significant concentrations of digital media in organizational areas designated for media storage and also to limited quantities of media generally associated with information system components in operational environments (e.g., portable storage devices, mobile devices). Organizations have the flexibility to either encrypt all information on storage devices (i.e., full disk encryption) or encrypt specific data structures (e.g., files, records, or fields). Organizations employing cryptographic mechanisms to protect information at rest also consider cryptographic key management solutions. + AC-19 + SC-12 + + + + SC-28 (2) + OFF-LINE STORAGE + + The organization removes from online storage and stores off-line in a secure location [Assignment: organization-defined information]. + + + Removing organizational information from online information system storage to off-line storage eliminates the possibility of individuals gaining unauthorized access to the information through a network. Therefore, organizations may choose to move information to off-line storage in lieu of protecting such information in online storage. + + + + + + NIST Special Publication 800-56 + + + NIST Special Publication 800-57 + + + NIST Special Publication 800-111 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-29 + HETEROGENEITY + P0 + + The organization employs a diverse set of information technologies for [Assignment: organization-defined information system components] in the implementation of the information system. + + + Increasing the diversity of information technologies within organizational information systems reduces the impact of potential exploitations of specific technologies and also defends against common mode failures, including those failures induced by supply chain attacks. Diversity in information technologies also reduces the likelihood that the means adversaries use to compromise one information system component will be equally effective against other system components, thus further increasing the adversary work factor to successfully complete planned cyber attacks. An increase in diversity may add complexity and management overhead which could ultimately lead to mistakes and unauthorized configurations. + SA-12 + SA-14 + SC-27 + + + + SC-29 (1) + VIRTUALIZATION TECHNIQUES + + The organization employs virtualization techniques to support the deployment of a diversity of operating systems and applications that are changed [Assignment: organization-defined frequency]. + + + While frequent changes to operating systems and applications pose configuration management challenges, the changes can result in an increased work factor for adversaries in order to carry out successful cyber attacks. Changing virtual operating systems or applications, as opposed to changing actual operating systems/applications, provide virtual changes that impede attacker success while reducing configuration management efforts. In addition, virtualization techniques can assist organizations in isolating untrustworthy software and/or software of dubious provenance into confined execution environments. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-30 + CONCEALMENT AND MISDIRECTION + P0 + + The organization employs [Assignment: organization-defined concealment and misdirection techniques] for [Assignment: organization-defined information systems] at [Assignment: organization-defined time periods] to confuse and mislead adversaries. + + + Concealment and misdirection techniques can significantly reduce the targeting capability of adversaries (i.e., window of opportunity and available attack surface) to initiate and complete cyber attacks. For example, virtualization techniques provide organizations with the ability to disguise information systems, potentially reducing the likelihood of successful attacks without the cost of having multiple platforms. Increased use of concealment/misdirection techniques including, for example, randomness, uncertainty, and virtualization, may sufficiently confuse and mislead adversaries and subsequently increase the risk of discovery and/or exposing tradecraft. Concealment/misdirection techniques may also provide organizations additional time to successfully perform core missions and business functions. Because of the time and effort required to support concealment/misdirection techniques, it is anticipated that such techniques would be used by organizations on a very limited basis. + SC-26 + SC-29 + SI-14 + + + + SC-30 (1) + VIRTUALIZATION TECHNIQUES + + SC-29 (1) + + + [Withdrawn: Incorporated into SC-29 (1)]. + + + + SC-30 (2) + RANDOMNESS + + The organization employs [Assignment: organization-defined techniques] to introduce randomness into organizational operations and assets. + + + Randomness introduces increased levels of uncertainty for adversaries regarding the actions organizations take in defending against cyber attacks. Such actions may impede the ability of adversaries to correctly target information resources of organizations supporting critical missions/business functions. Uncertainty may also cause adversaries to hesitate before initiating or continuing attacks. Misdirection techniques involving randomness include, for example, performing certain routine actions at different times of day, employing different information technologies (e.g., browsers, search engines), using different suppliers, and rotating roles and responsibilities of organizational personnel. + + + + SC-30 (3) + CHANGE PROCESSING / STORAGE LOCATIONS + + The organization changes the location of [Assignment: organization-defined processing and/or storage] [Selection: [Assignment: organization-defined time frequency]; at random time intervals]]. + + + Adversaries target critical organizational missions/business functions and the information resources supporting those missions and functions while at the same time, trying to minimize exposure of their existence and tradecraft. The static, homogeneous, and deterministic nature of organizational information systems targeted by adversaries, make such systems more susceptible to cyber attacks with less adversary cost and effort to be successful. Changing organizational processing and storage locations (sometimes referred to as moving target defense) addresses the advanced persistent threat (APT) using techniques such as virtualization, distributed processing, and replication. This enables organizations to relocate the information resources (i.e., processing and/or storage) supporting critical missions and business functions. Changing locations of processing activities and/or storage sites introduces uncertainty into the targeting activities by adversaries. This uncertainty increases the work factor of adversaries making compromises or breaches to organizational information systems much more difficult and time-consuming, and increases the chances that adversaries may inadvertently disclose aspects of tradecraft while attempting to locate critical organizational resources. + + + + SC-30 (4) + MISLEADING INFORMATION + + The organization employs realistic, but misleading information in [Assignment: organization-defined information system components] with regard to its security state or posture. + + + This control enhancement misleads potential adversaries regarding the nature and extent of security safeguards deployed by organizations. As a result, adversaries may employ incorrect (and as a result ineffective) attack techniques. One way of misleading adversaries is for organizations to place misleading information regarding the specific security controls deployed in external information systems that are known to be accessed or targeted by adversaries. Another technique is the use of deception nets (e.g., honeynets, virtualized environments) that mimic actual aspects of organizational information systems but use, for example, out-of-date software configurations. + + + + SC-30 (5) + CONCEALMENT OF SYSTEM COMPONENTS + + The organization employs [Assignment: organization-defined techniques] to hide or conceal [Assignment: organization-defined information system components]. + + + By hiding, disguising, or otherwise concealing critical information system components, organizations may be able to decrease the probability that adversaries target and successfully compromise those assets. Potential means for organizations to hide and/or conceal information system components include, for example, configuration of routers or the use of honeynets or virtualization techniques. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-31 + COVERT CHANNEL ANALYSIS + P0 + + The organization: + + SC-31a. + Performs a covert channel analysis to identify those aspects of communications within the information system that are potential avenues for covert [Selection (one or more): storage; timing] channels; and + + + SC-31b. + Estimates the maximum bandwidth of those channels. + + + + Developers are in the best position to identify potential areas within systems that might lead to covert channels. Covert channel analysis is a meaningful activity when there is the potential for unauthorized information flows across security domains, for example, in the case of information systems containing export-controlled information and having connections to external networks (i.e., networks not controlled by organizations). Covert channel analysis is also meaningful for multilevel secure (MLS) information systems, multiple security level (MSL) systems, and cross-domain systems. + AC-3 + AC-4 + PL-2 + + + + SC-31 (1) + TEST COVERT CHANNELS FOR EXPLOITABILITY + + The organization tests a subset of the identified covert channels to determine which channels are exploitable. + + + + SC-31 (2) + MAXIMUM BANDWIDTH + + The organization reduces the maximum bandwidth for identified covert [Selection (one or more); storage; timing] channels to [Assignment: organization-defined values]. + + + Information system developers are in the best position to reduce the maximum bandwidth for identified covert storage and timing channels. + + + + SC-31 (3) + MEASURE BANDWIDTH IN OPERATIONAL ENVIRONMENTS + + The organization measures the bandwidth of [Assignment: organization-defined subset of identified covert channels] in the operational environment of the information system. + + + This control enhancement addresses covert channel bandwidth in operational environments versus developmental environments. Measuring covert channel bandwidth in operational environments helps organizations to determine how much information can be covertly leaked before such leakage adversely affects organizational missions/business functions. Covert channel bandwidth may be significantly different when measured in those settings that are independent of the particular environments of operation (e.g., laboratories or development environments). + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-32 + INFORMATION SYSTEM PARTITIONING + P0 + + The organization partitions the information system into [Assignment: organization-defined information system components] residing in separate physical domains or environments based on [Assignment: organization-defined circumstances for physical separation of components]. + + + Information system partitioning is a part of a defense-in-depth protection strategy. Organizations determine the degree of physical separation of system components from physically distinct components in separate racks in the same room, to components in separate rooms for the more critical components, to more significant geographical separation of the most critical components. Security categorization can guide the selection of appropriate candidates for domain partitioning. Managed interfaces restrict or prohibit network access and information flow among partitioned information system components. + AC-4 + SA-8 + SC-2 + SC-3 + SC-7 + + + + FIPS Publication 199 + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-33 + TRANSMISSION PREPARATION INTEGRITY + + SC-8 + + + [Withdrawn: Incorporated into SC-8]. + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-34 + NON-MODIFIABLE EXECUTABLE PROGRAMS + P0 + + The information system at [Assignment: organization-defined information system components]: + + SC-34a. + Loads and executes the operating environment from hardware-enforced, read-only media; and + + + SC-34b. + Loads and executes [Assignment: organization-defined applications] from hardware-enforced, read-only media. + + + + The term operating environment is defined as the specific code that hosts applications, for example, operating systems, executives, or monitors including virtual machine monitors (i.e., hypervisors). It can also include certain applications running directly on hardware platforms. Hardware-enforced, read-only media include, for example, Compact Disk-Recordable (CD-R)/Digital Video Disk-Recordable (DVD-R) disk drives and one-time programmable read-only memory. The use of non-modifiable storage ensures the integrity of software from the point of creation of the read-only image. The use of reprogrammable read-only memory can be accepted as read-only media provided: (i) integrity can be adequately protected from the point of initial writing to the insertion of the memory into the information system; and (ii) there are reliable hardware protections against reprogramming the memory while installed in organizational information systems. + AC-3 + SI-7 + + + + SC-34 (1) + NO WRITABLE STORAGE + + The organization employs [Assignment: organization-defined information system components] with no writeable storage that is persistent across component restart or power on/off. + + + This control enhancement: (i) eliminates the possibility of malicious code insertion via persistent, writeable storage within the designated information system components; and (ii) applies to both fixed and removable storage, with the latter being addressed directly or as specific restrictions imposed through access controls for mobile devices. + AC-19 + MP-7 + + + + SC-34 (2) + INTEGRITY PROTECTION / READ-ONLY MEDIA + + The organization protects the integrity of information prior to storage on read-only media and controls the media after such information has been recorded onto the media. + + + Security safeguards prevent the substitution of media into information systems or the reprogramming of programmable read-only media prior to installation into the systems. Security safeguards include, for example, a combination of prevention, detection, and response. + AC-5 + CM-3 + CM-5 + CM-9 + MP-2 + MP-4 + MP-5 + SA-12 + SC-28 + SI-3 + + + + SC-34 (3) + HARDWARE-BASED PROTECTION + + The organization: + + SC-34 (3)(a) + Employs hardware-based, write-protect for [Assignment: organization-defined information system firmware components]; and + + + SC-34 (3)(b) + Implements specific procedures for [Assignment: organization-defined authorized individuals] to manually disable hardware write-protect for firmware modifications and re-enable the write-protect prior to returning to operational mode. + + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-35 + HONEYCLIENTS + P0 + + The information system includes components that proactively seek to identify malicious websites and/or web-based malicious code. + + + Honeyclients differ from honeypots in that the components actively probe the Internet in search of malicious code (e.g., worms) contained on external websites. As with honeypots, honeyclients require some supporting isolation measures (e.g., virtualization) to ensure that any malicious code discovered during the search and subsequently executed does not infect organizational information systems. + SC-26 + SC-44 + SI-3 + SI-4 + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-36 + DISTRIBUTED PROCESSING AND STORAGE + P0 + + The organization distributes [Assignment: organization-defined processing and storage] across multiple physical locations. + + + Distributing processing and storage across multiple physical locations provides some degree of redundancy or overlap for organizations, and therefore increases the work factor of adversaries to adversely impact organizational operations, assets, and individuals. This control does not assume a single primary processing or storage location, and thus allows for parallel processing and storage. + CP-6 + CP-7 + + + + SC-36 (1) + POLLING TECHNIQUES + + The organization employs polling techniques to identify potential faults, errors, or compromises to [Assignment: organization-defined distributed processing and storage components]. + + + Distributed processing and/or storage may be employed to reduce opportunities for adversaries to successfully compromise the confidentiality, integrity, or availability of information and information systems. However, distribution of processing and/or storage components does not prevent adversaries from compromising one (or more) of the distributed components. Polling compares the processing results and/or storage content from the various distributed components and subsequently voting on the outcomes. Polling identifies potential faults, errors, or compromises in distributed processing and/or storage components. + SI-4 + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-37 + OUT-OF-BAND CHANNELS + P0 + + The organization employs [Assignment: organization-defined out-of-band channels] for the physical delivery or electronic transmission of [Assignment: organization-defined information, information system components, or devices] to [Assignment: organization-defined individuals or information systems]. + + + Out-of-band channels include, for example, local (nonnetwork) accesses to information systems, network paths physically separate from network paths used for operational traffic, or nonelectronic paths such as the US Postal Service. This is in contrast with using the same channels (i.e., in-band channels) that carry routine operational traffic. Out-of-band channels do not have the same vulnerability/exposure as in-band channels, and hence the confidentiality, integrity, or availability compromises of in-band channels will not compromise the out-of-band channels. Organizations may employ out-of-band channels in the delivery or transmission of many organizational items including, for example, identifiers/authenticators, configuration management changes for hardware, firmware, or software, cryptographic key management information, security updates, system/data backups, maintenance information, and malicious code protection updates. + AC-2 + CM-3 + CM-5 + CM-7 + IA-4 + IA-5 + MA-4 + SC-12 + SI-3 + SI-4 + SI-7 + + + + SC-37 (1) + ENSURE DELIVERY / TRANSMISSION + + The organization employs [Assignment: organization-defined security safeguards] to ensure that only [Assignment: organization-defined individuals or information systems] receive the [Assignment: organization-defined information, information system components, or devices]. + + + Techniques and/or methods employed by organizations to ensure that only designated information systems or individuals receive particular information, system components, or devices include, for example, sending authenticators via courier service but requiring recipients to show some form of government-issued photographic identification as a condition of receipt. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-38 + OPERATIONS SECURITY + P0 + + The organization employs [Assignment: organization-defined operations security safeguards] to protect key organizational information throughout the system development life cycle. + + + Operations security (OPSEC) is a systematic process by which potential adversaries can be denied information about the capabilities and intentions of organizations by identifying, controlling, and protecting generally unclassified information that specifically relates to the planning and execution of sensitive organizational activities. The OPSEC process involves five steps: (i) identification of critical information (e.g., the security categorization process); (ii) analysis of threats; (iii) analysis of vulnerabilities; (iv) assessment of risks; and (v) the application of appropriate countermeasures. OPSEC safeguards are applied to both organizational information systems and the environments in which those systems operate. OPSEC safeguards help to protect the confidentiality of key information including, for example, limiting the sharing of information with suppliers and potential suppliers of information system components, information technology products and services, and with other non-organizational elements and individuals. Information critical to mission/business success includes, for example, user identities, element uses, suppliers, supply chain processes, functional and security requirements, system design specifications, testing protocols, and security control implementation details. + RA-2 + RA-5 + SA-12 + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-39 + PROCESS ISOLATION + P1 + LOW + MODERATE + HIGH + + The information system maintains a separate execution domain for each executing process. + + + Information systems can maintain separate execution domains for each executing process by assigning each process a separate address space. Each information system process has a distinct address space so that communication between processes is performed in a manner controlled through the security functions, and one process cannot modify the executing code of another process. Maintaining separate execution domains for executing processes can be achieved, for example, by implementing separate address spaces. This capability is available in most commercial operating systems that employ multi-state processor technologies. + AC-3 + AC-4 + AC-6 + SA-4 + SA-5 + SA-8 + SC-2 + SC-3 + + + + SC-39 (1) + HARDWARE SEPARATION + + The information system implements underlying hardware separation mechanisms to facilitate process separation. + + + Hardware-based separation of information system processes is generally less susceptible to compromise than software-based separation, thus providing greater assurance that the separation will be enforced. Underlying hardware separation mechanisms include, for example, hardware memory management. + + + + SC-39 (2) + THREAD ISOLATION + + The information system maintains a separate execution domain for each thread in [Assignment: organization-defined multi-threaded processing]. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-40 + WIRELESS LINK PROTECTION + P0 + + The information system protects external and internal [Assignment: organization-defined wireless links] from [Assignment: organization-defined types of signal parameter attacks or references to sources for such attacks]. + + + This control applies to internal and external wireless communication links that may be visible to individuals who are not authorized information system users. Adversaries can exploit the signal parameters of wireless links if such links are not adequately protected. There are many ways to exploit the signal parameters of wireless links to gain intelligence, deny service, or to spoof users of organizational information systems. This control reduces the impact of attacks that are unique to wireless systems. If organizations rely on commercial service providers for transmission services as commodity items rather than as fully dedicated services, it may not be possible to implement this control. + AC-18 + SC-5 + + + + SC-40 (1) + ELECTROMAGNETIC INTERFERENCE + + The information system implements cryptographic mechanisms that achieve [Assignment: organization-defined level of protection] against the effects of intentional electromagnetic interference. + + + This control enhancement protects against intentional jamming that might deny or impair communications by ensuring that wireless spread spectrum waveforms used to provide anti-jam protection are not predictable by unauthorized individuals. The control enhancement may also coincidentally help to mitigate the effects of unintentional jamming due to interference from legitimate transmitters sharing the same spectrum. Mission requirements, projected threats, concept of operations, and applicable legislation, directives, regulations, policies, standards, and guidelines determine levels of wireless link availability and performance/cryptography needed. + SC-12 + SC-13 + + + + SC-40 (2) + REDUCE DETECTION POTENTIAL + + The information system implements cryptographic mechanisms to reduce the detection potential of wireless links to [Assignment: organization-defined level of reduction]. + + + This control enhancement is needed for covert communications and protecting wireless transmitters from being geo-located by their transmissions. The control enhancement ensures that spread spectrum waveforms used to achieve low probability of detection are not predictable by unauthorized individuals. Mission requirements, projected threats, concept of operations, and applicable legislation, directives, regulations, policies, standards, and guidelines determine the levels to which wireless links should be undetectable. + SC-12 + SC-13 + + + + SC-40 (3) + IMITATIVE OR MANIPULATIVE COMMUNICATIONS DECEPTION + + The information system implements cryptographic mechanisms to identify and reject wireless transmissions that are deliberate attempts to achieve imitative or manipulative communications deception based on signal parameters. + + + This control enhancement ensures that the signal parameters of wireless transmissions are not predictable by unauthorized individuals. Such unpredictability reduces the probability of imitative or manipulative communications deception based upon signal parameters alone. + SC-12 + SC-13 + + + + SC-40 (4) + SIGNAL PARAMETER IDENTIFICATION + + The information system implements cryptographic mechanisms to prevent the identification of [Assignment: organization-defined wireless transmitters] by using the transmitter signal parameters. + + + Radio fingerprinting techniques identify the unique signal parameters of transmitters to fingerprint such transmitters for purposes of tracking and mission/user identification. This control enhancement protects against the unique identification of wireless transmitters for purposes of intelligence exploitation by ensuring that anti-fingerprinting alterations to signal parameters are not predictable by unauthorized individuals. This control enhancement helps assure mission success when anonymity is required. + SC-12 + SC-13 + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-41 + PORT AND I/O DEVICE ACCESS + P0 + + The organization physically disables or removes [Assignment: organization-defined connection ports or input/output devices] on [Assignment: organization-defined information systems or information system components]. + + + Connection ports include, for example, Universal Serial Bus (USB) and Firewire (IEEE 1394). Input/output (I/O) devices include, for example, Compact Disk (CD) and Digital Video Disk (DVD) drives. Physically disabling or removing such connection ports and I/O devices helps prevent exfiltration of information from information systems and the introduction of malicious code into systems from those ports/devices. + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-42 + SENSOR CAPABILITY AND DATA + P0 + + The information system: + + SC-42a. + Prohibits the remote activation of environmental sensing capabilities with the following exceptions: [Assignment: organization-defined exceptions where remote activation of sensors is allowed]; and + + + SC-42b. + Provides an explicit indication of sensor use to [Assignment: organization-defined class of users]. + + + + This control often applies to types of information systems or system components characterized as mobile devices, for example, smart phones, tablets, and E-readers. These systems often include sensors that can collect and record data regarding the environment where the system is in use. Sensors that are embedded within mobile devices include, for example, cameras, microphones, Global Positioning System (GPS) mechanisms, and accelerometers. While the sensors on mobiles devices provide an important function, if activated covertly, such devices can potentially provide a means for adversaries to learn valuable information about individuals and organizations. For example, remotely activating the GPS function on a mobile device could provide an adversary with the ability to track the specific movements of an individual. + + + + SC-42 (1) + REPORTING TO AUTHORIZED INDIVIDUALS OR ROLES + + The organization ensures that the information system is configured so that data or information collected by the [Assignment: organization-defined sensors] is only reported to authorized individuals or roles. + + + In situations where sensors are activated by authorized individuals (e.g., end users), it is still possible that the data/information collected by the sensors will be sent to unauthorized entities. + + + + SC-42 (2) + AUTHORIZED USE + + The organization employs the following measures: [Assignment: organization-defined measures], so that data or information collected by [Assignment: organization-defined sensors] is only used for authorized purposes. + + + Information collected by sensors for a specific authorized purpose potentially could be misused for some unauthorized purpose. For example, GPS sensors that are used to support traffic navigation could be misused to track movements of individuals. Measures to mitigate such activities include, for example, additional training to ensure that authorized parties do not abuse their authority, or (in the case where sensor data/information is maintained by external parties) contractual restrictions on the use of the data/information. + + + + SC-42 (3) + PROHIBIT USE OF DEVICES + + The organization prohibits the use of devices possessing [Assignment: organization-defined environmental sensing capabilities] in [Assignment: organization-defined facilities, areas, or systems]. + + + For example, organizations may prohibit individuals from bringing cell phones or digital cameras into certain facilities or specific controlled areas within facilities where classified information is stored or sensitive conversations are taking place. + + + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-43 + USAGE RESTRICTIONS + P0 + + The organization: + + SC-43a. + Establishes usage restrictions and implementation guidance for [Assignment: organization-defined information system components] based on the potential to cause damage to the information system if used maliciously; and + + + SC-43b. + Authorizes, monitors, and controls the use of such components within the information system. + + + + Information system components include hardware, software, or firmware components (e.g., Voice Over Internet Protocol, mobile code, digital copiers, printers, scanners, optical devices, wireless technologies, mobile devices). + CM-6 + SC-7 + + + + SYSTEM AND COMMUNICATIONS PROTECTION + SC-44 + DETONATION CHAMBERS + P0 + + The organization employs a detonation chamber capability within [Assignment: organization-defined information system, system component, or location]. + + + Detonation chambers, also known as dynamic execution environments, allow organizations to open email attachments, execute untrusted or suspicious applications, and execute Universal Resource Locator (URL) requests in the safety of an isolated environment or virtualized sandbox. These protected and isolated execution environments provide a means of determining whether the associated attachments/applications contain malicious code. While related to the concept of deception nets, the control is not intended to maintain a long-term environment in which adversaries can operate and their actions can be observed. Rather, it is intended to quickly identify malicious code and reduce the likelihood that the code is propagated to user environments of operation (or prevent such propagation completely). + SC-7 + SC-25 + SC-26 + SC-30 + + + + SYSTEM AND INFORMATION INTEGRITY + SI-1 + SYSTEM AND INFORMATION INTEGRITY POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + The organization: + + SI-1a. + Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + + SI-1a.1. + A system and information integrity policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + + + SI-1a.2. + Procedures to facilitate the implementation of the system and information integrity policy and associated system and information integrity controls; and + + + + SI-1b. + Reviews and updates the current: + + SI-1b.1. + System and information integrity policy [Assignment: organization-defined frequency]; and + + + SI-1b.2. + System and information integrity procedures [Assignment: organization-defined frequency]. + + + + + This control addresses the establishment of policy and procedures for the effective implementation of selected security controls and control enhancements in the SI family. Policy and procedures reflect applicable federal laws, Executive Orders, directives, regulations, policies, standards, and guidance. Security program policies and procedures at the organization level may make the need for system-specific policies and procedures unnecessary. The policy can be included as part of the general information security policy for organizations or conversely, can be represented by multiple policies reflecting the complex nature of certain organizations. The procedures can be established for the security program in general and for particular information systems, if needed. The organizational risk management strategy is a key factor in establishing policy and procedures. + PM-9 + + + + NIST Special Publication 800-12 + + + NIST Special Publication 800-100 + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-2 + FLAW REMEDIATION + P1 + LOW + MODERATE + HIGH + + The organization: + + SI-2a. + Identifies, reports, and corrects information system flaws; + + + SI-2b. + Tests software and firmware updates related to flaw remediation for effectiveness and potential side effects before installation; + + + SI-2c. + Installs security-relevant software and firmware updates within [Assignment: organization-defined time period] of the release of the updates; and + + + SI-2d. + Incorporates flaw remediation into the organizational configuration management process. + + + + Organizations identify information systems affected by announced software flaws including potential vulnerabilities resulting from those flaws, and report this information to designated organizational personnel with information security responsibilities. Security-relevant software updates include, for example, patches, service packs, hot fixes, and anti-virus signatures. Organizations also address flaws discovered during security assessments, continuous monitoring, incident response activities, and system error handling. Organizations take advantage of available resources such as the Common Weakness Enumeration (CWE) or Common Vulnerabilities and Exposures (CVE) databases in remediating flaws discovered in organizational information systems. By incorporating flaw remediation into ongoing configuration management processes, required/anticipated remediation actions can be tracked and verified. Flaw remediation actions that can be tracked and verified include, for example, determining whether organizations follow US-CERT guidance and Information Assurance Vulnerability Alerts. Organization-defined time periods for updating security-relevant software and firmware may vary based on a variety of factors including, for example, the security category of the information system or the criticality of the update (i.e., severity of the vulnerability related to the discovered flaw). Some types of flaw remediation may require more testing than other types. Organizations determine the degree and type of testing needed for the specific type of flaw remediation activity under consideration and also the types of changes that are to be configuration-managed. In some situations, organizations may determine that the testing of software and/or firmware updates is not necessary or practical, for example, when implementing simple anti-virus signature updates. Organizations may also consider in testing decisions, whether security-relevant software or firmware updates are obtained from authorized sources with appropriate digital signatures. + CA-2 + CA-7 + CM-3 + CM-5 + CM-8 + MA-2 + IR-4 + RA-5 + SA-10 + SA-11 + SI-11 + + + + SI-2 (1) + CENTRAL MANAGEMENT + HIGH + + The organization centrally manages the flaw remediation process. + + + Central management is the organization-wide management and implementation of flaw remediation processes. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed flaw remediation security controls. + + + + SI-2 (2) + AUTOMATED FLAW REMEDIATION STATUS + MODERATE + HIGH + + The organization employs automated mechanisms [Assignment: organization-defined frequency] to determine the state of information system components with regard to flaw remediation. + + + CM-6 + SI-4 + + + + SI-2 (3) + TIME TO REMEDIATE FLAWS / BENCHMARKS FOR CORRECTIVE ACTIONS + + The organization: + + SI-2 (3)(a) + Measures the time between flaw identification and flaw remediation; and + + + SI-2 (3)(b) + Establishes [Assignment: organization-defined benchmarks] for taking corrective actions. + + + + This control enhancement requires organizations to determine the current time it takes on the average to correct information system flaws after such flaws have been identified, and subsequently establish organizational benchmarks (i.e., time frames) for taking corrective actions. Benchmarks can be established by type of flaw and/or severity of the potential vulnerability if the flaw can be exploited. + + + + SI-2 (4) + AUTOMATED PATCH MANAGEMENT TOOLS + + SI-2 + + + [Withdrawn: Incorporated into SI-2]. + + + + SI-2 (5) + AUTOMATIC SOFTWARE / FIRMWARE UPDATES + + The organization installs [Assignment: organization-defined security-relevant software and firmware updates] automatically to [Assignment: organization-defined information system components]. + + + Due to information system integrity and availability concerns, organizations give careful consideration to the methodology used to carry out automatic updates. Organizations must balance the need to ensure that the updates are installed as soon as possible with the need to maintain configuration management and with any mission or operational impacts that automatic updates might impose. + + + + SI-2 (6) + REMOVAL OF PREVIOUS VERSIONS OF SOFTWARE / FIRMWARE + + The organization removes [Assignment: organization-defined software and firmware components] after updated versions have been installed. + + + Previous versions of software and/or firmware components that are not removed from the information system after updates have been installed may be exploited by adversaries. Some information technology products may remove older versions of software and/or firmware automatically from the information system. + + + + + + NIST Special Publication 800-40 + + + NIST Special Publication 800-128 + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-3 + MALICIOUS CODE PROTECTION + P1 + LOW + MODERATE + HIGH + + The organization: + + SI-3a. + Employs malicious code protection mechanisms at information system entry and exit points to detect and eradicate malicious code; + + + SI-3b. + Updates malicious code protection mechanisms whenever new releases are available in accordance with organizational configuration management policy and procedures; + + + SI-3c. + Configures malicious code protection mechanisms to: + + SI-3c.1. + Perform periodic scans of the information system [Assignment: organization-defined frequency] and real-time scans of files from external sources at [Selection (one or more); endpoint; network entry/exit points] as the files are downloaded, opened, or executed in accordance with organizational security policy; and + + + SI-3c.2. + [Selection (one or more): block malicious code; quarantine malicious code; send alert to administrator; [Assignment: organization-defined action]] in response to malicious code detection; and + + + + SI-3d. + Addresses the receipt of false positives during malicious code detection and eradication and the resulting potential impact on the availability of the information system. + + + + Information system entry and exit points include, for example, firewalls, electronic mail servers, web servers, proxy servers, remote-access servers, workstations, notebook computers, and mobile devices. Malicious code includes, for example, viruses, worms, Trojan horses, and spyware. Malicious code can also be encoded in various formats (e.g., UUENCODE, Unicode), contained within compressed or hidden files, or hidden in files using steganography. Malicious code can be transported by different means including, for example, web accesses, electronic mail, electronic mail attachments, and portable storage devices. Malicious code insertions occur through the exploitation of information system vulnerabilities. Malicious code protection mechanisms include, for example, anti-virus signature definitions and reputation-based technologies. A variety of technologies and methods exist to limit or eliminate the effects of malicious code. Pervasive configuration management and comprehensive software integrity controls may be effective in preventing execution of unauthorized code. In addition to commercial off-the-shelf software, malicious code may also be present in custom-built software. This could include, for example, logic bombs, back doors, and other types of cyber attacks that could affect organizational missions/business functions. Traditional malicious code protection mechanisms cannot always detect such code. In these situations, organizations rely instead on other safeguards including, for example, secure coding practices, configuration management and control, trusted procurement processes, and monitoring practices to help ensure that software does not perform functions other than the functions intended. Organizations may determine that in response to the detection of malicious code, different actions may be warranted. For example, organizations can define actions in response to malicious code detection during periodic scans, actions in response to detection of malicious downloads, and/or actions in response to detection of maliciousness when attempting to open or execute files. + CM-3 + MP-2 + SA-4 + SA-8 + SA-12 + SA-13 + SC-7 + SC-26 + SC-44 + SI-2 + SI-4 + SI-7 + + + + SI-3 (1) + CENTRAL MANAGEMENT + MODERATE + HIGH + + The organization centrally manages malicious code protection mechanisms. + + + Central management is the organization-wide management and implementation of malicious code protection mechanisms. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed flaw malicious code protection security controls. + AU-2 + SI-8 + + + + SI-3 (2) + AUTOMATIC UPDATES + MODERATE + HIGH + + The information system automatically updates malicious code protection mechanisms. + + + Malicious code protection mechanisms include, for example, signature definitions. Due to information system integrity and availability concerns, organizations give careful consideration to the methodology used to carry out automatic updates. + SI-8 + + + + SI-3 (3) + NON-PRIVILEGED USERS + + AC-6 (10) + + + [Withdrawn: Incorporated into AC-6 (10)]. + + + + SI-3 (4) + UPDATES ONLY BY PRIVILEGED USERS + + The information system updates malicious code protection mechanisms only when directed by a privileged user. + + + This control enhancement may be appropriate for situations where for reasons of security or operational continuity, updates are only applied when selected/approved by designated organizational personnel. + AC-6 + CM-5 + + + + SI-3 (5) + PORTABLE STORAGE DEVICES + + MP-7 + + + [Withdrawn: Incorporated into MP-7]. + + + + SI-3 (6) + TESTING / VERIFICATION + + The organization: + + SI-3 (6)(a) + Tests malicious code protection mechanisms [Assignment: organization-defined frequency] by introducing a known benign, non-spreading test case into the information system; and + + + SI-3 (6)(b) + Verifies that both detection of the test case and associated incident reporting occur. + + + + CA-2 + CA-7 + RA-5 + + + + SI-3 (7) + NONSIGNATURE-BASED DETECTION + + The information system implements nonsignature-based malicious code detection mechanisms. + + + Nonsignature-based detection mechanisms include, for example, the use of heuristics to detect, analyze, and describe the characteristics or behavior of malicious code and to provide safeguards against malicious code for which signatures do not yet exist or for which existing signatures may not be effective. This includes polymorphic malicious code (i.e., code that changes signatures when it replicates). This control enhancement does not preclude the use of signature-based detection mechanisms. + + + + SI-3 (8) + DETECT UNAUTHORIZED COMMANDS + + The information system detects [Assignment: organization-defined unauthorized operating system commands] through the kernel application programming interface at [Assignment: organization-defined information system hardware components] and [Selection (one or more): issues a warning; audits the command execution; prevents the execution of the command]. + + + This control enhancement can also be applied to critical interfaces other than kernel-based interfaces, including for example, interfaces with virtual machines and privileged applications. Unauthorized operating system commands include, for example, commands for kernel functions from information system processes that are not trusted to initiate such commands, or commands for kernel functions that are suspicious even though commands of that type are reasonable for processes to initiate. Organizations can define the malicious commands to be detected by a combination of command types, command classes, or specific instances of commands. Organizations can define hardware components by specific component, component type, location in the network, or combination therein. Organizations may select different actions for different types/classes/specific instances of potentially malicious commands. + AU-6 + + + + SI-3 (9) + AUTHENTICATE REMOTE COMMANDS + + The information system implements [Assignment: organization-defined security safeguards] to authenticate [Assignment: organization-defined remote commands]. + + + This control enhancement protects against unauthorized commands and replay of authorized commands. This capability is important for those remote information systems whose loss, malfunction, misdirection, or exploitation would have immediate and/or serious consequences (e.g., injury or death, property damage, loss of high-valued assets or sensitive information, or failure of important missions/business functions). Authentication safeguards for remote commands help to ensure that information systems accept and execute in the order intended, only authorized commands, and that unauthorized commands are rejected. Cryptographic mechanisms can be employed, for example, to authenticate remote commands. + SC-12 + SC-13 + SC-23 + + + + SI-3 (10) + MALICIOUS CODE ANALYSIS + + The organization: + + SI-3 (10)(a) + Employs [Assignment: organization-defined tools and techniques] to analyze the characteristics and behavior of malicious code; and + + + SI-3 (10)(b) + Incorporates the results from malicious code analysis into organizational incident response and flaw remediation processes. + + + + The application of selected malicious code analysis tools and techniques provides organizations with a more in-depth understanding of adversary tradecraft (i.e., tactics, techniques, and procedures) and the functionality and purpose of specific instances of malicious code. Understanding the characteristics of malicious code facilitates more effective organizational responses to current and future threats. Organizations can conduct malicious code analyses by using reverse engineering techniques or by monitoring the behavior of executing code. + + + + + + NIST Special Publication 800-83 + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-4 + INFORMATION SYSTEM MONITORING + P1 + LOW + MODERATE + HIGH + + The organization: + + SI-4a. + Monitors the information system to detect: + + SI-4a.1. + Attacks and indicators of potential attacks in accordance with [Assignment: organization-defined monitoring objectives]; and + + + SI-4a.2. + Unauthorized local, network, and remote connections; + + + + SI-4b. + Identifies unauthorized use of the information system through [Assignment: organization-defined techniques and methods]; + + + SI-4c. + Deploys monitoring devices: + + SI-4c.1. + Strategically within the information system to collect organization-determined essential information; and + + + SI-4c.2. + At ad hoc locations within the system to track specific types of transactions of interest to the organization; + + + + SI-4d. + Protects information obtained from intrusion-monitoring tools from unauthorized access, modification, and deletion; + + + SI-4e. + Heightens the level of information system monitoring activity whenever there is an indication of increased risk to organizational operations and assets, individuals, other organizations, or the Nation based on law enforcement information, intelligence information, or other credible sources of information; + + + SI-4f. + Obtains legal opinion with regard to information system monitoring activities in accordance with applicable federal laws, Executive Orders, directives, policies, or regulations; and + + + SI-4g. + Provides [Assignment: organization-defined information system monitoring information] to [Assignment: organization-defined personnel or roles] [Selection (one or more): as needed; [Assignment: organization-defined frequency]]. + + + + Information system monitoring includes external and internal monitoring. External monitoring includes the observation of events occurring at the information system boundary (i.e., part of perimeter defense and boundary protection). Internal monitoring includes the observation of events occurring within the information system. Organizations can monitor information systems, for example, by observing audit activities in real time or by observing other system aspects such as access patterns, characteristics of access, and other actions. The monitoring objectives may guide determination of the events. Information system monitoring capability is achieved through a variety of tools and techniques (e.g., intrusion detection systems, intrusion prevention systems, malicious code protection software, scanning tools, audit record monitoring software, network monitoring software). Strategic locations for monitoring devices include, for example, selected perimeter locations and near server farms supporting critical applications, with such devices typically being employed at the managed interfaces associated with controls SC-7 and AC-17. Einstein network monitoring devices from the Department of Homeland Security can also be included as monitoring devices. The granularity of monitoring information collected is based on organizational monitoring objectives and the capability of information systems to support such objectives. Specific types of transactions of interest include, for example, Hyper Text Transfer Protocol (HTTP) traffic that bypasses HTTP proxies. Information system monitoring is an integral part of organizational continuous monitoring and incident response programs. Output from system monitoring serves as input to continuous monitoring and incident response programs. A network connection is any connection with a device that communicates through a network (e.g., local area network, Internet). A remote connection is any connection with a device communicating through an external network (e.g., the Internet). Local, network, and remote connections can be either wired or wireless. + AC-3 + AC-4 + AC-8 + AC-17 + AU-2 + AU-6 + AU-7 + AU-9 + AU-12 + CA-7 + IR-4 + PE-3 + RA-5 + SC-7 + SC-26 + SC-35 + SI-3 + SI-7 + + + + SI-4 (1) + SYSTEM-WIDE INTRUSION DETECTION SYSTEM + + The organization connects and configures individual intrusion detection tools into an information system-wide intrusion detection system. + + + + SI-4 (2) + AUTOMATED TOOLS FOR REAL-TIME ANALYSIS + MODERATE + HIGH + + The organization employs automated tools to support near real-time analysis of events. + + + Automated tools include, for example, host-based, network-based, transport-based, or storage-based event monitoring tools or Security Information and Event Management (SIEM) technologies that provide real time analysis of alerts and/or notifications generated by organizational information systems. + + + + SI-4 (3) + AUTOMATED TOOL INTEGRATION + + The organization employs automated tools to integrate intrusion detection tools into access control and flow control mechanisms for rapid response to attacks by enabling reconfiguration of these mechanisms in support of attack isolation and elimination. + + + + SI-4 (4) + INBOUND AND OUTBOUND COMMUNICATIONS TRAFFIC + MODERATE + HIGH + + The information system monitors inbound and outbound communications traffic [Assignment: organization-defined frequency] for unusual or unauthorized activities or conditions. + + + Unusual/unauthorized activities or conditions related to information system inbound and outbound communications traffic include, for example, internal traffic that indicates the presence of malicious code within organizational information systems or propagating among system components, the unauthorized exporting of information, or signaling to external information systems. Evidence of malicious code is used to identify potentially compromised information systems or information system components. + + + + SI-4 (5) + SYSTEM-GENERATED ALERTS + MODERATE + HIGH + + The information system alerts [Assignment: organization-defined personnel or roles] when the following indications of compromise or potential compromise occur: [Assignment: organization-defined compromise indicators]. + + + Alerts may be generated from a variety of sources, including, for example, audit records or inputs from malicious code protection mechanisms, intrusion detection or prevention mechanisms, or boundary protection devices such as firewalls, gateways, and routers. Alerts can be transmitted, for example, telephonically, by electronic mail messages, or by text messaging. Organizational personnel on the notification list can include, for example, system administrators, mission/business owners, system owners, or information system security officers. + AU-5 + PE-6 + + + + SI-4 (6) + RESTRICT NON-PRIVILEGED USERS + + AC-6 (10) + + + [Withdrawn: Incorporated into AC-6 (10)]. + + + + SI-4 (7) + AUTOMATED RESPONSE TO SUSPICIOUS EVENTS + + The information system notifies [Assignment: organization-defined incident response personnel (identified by name and/or by role)] of detected suspicious events and takes [Assignment: organization-defined least-disruptive actions to terminate suspicious events]. + + + Least-disruptive actions may include, for example, initiating requests for human responses. + + + + SI-4 (8) + PROTECTION OF MONITORING INFORMATION + + SI-4 + + + [Withdrawn: Incorporated into SI-4]. + + + + SI-4 (9) + TESTING OF MONITORING TOOLS + + The organization tests intrusion-monitoring tools [Assignment: organization-defined frequency]. + + + Testing intrusion-monitoring tools is necessary to ensure that the tools are operating correctly and continue to meet the monitoring objectives of organizations. The frequency of testing depends on the types of tools used by organizations and methods of deployment. + CP-9 + + + + SI-4 (10) + VISIBILITY OF ENCRYPTED COMMUNICATIONS + + The organization makes provisions so that [Assignment: organization-defined encrypted communications traffic] is visible to [Assignment: organization-defined information system monitoring tools]. + + + Organizations balance the potentially conflicting needs for encrypting communications traffic and for having insight into such traffic from a monitoring perspective. For some organizations, the need to ensure the confidentiality of communications traffic is paramount; for others, mission-assurance is of greater concern. Organizations determine whether the visibility requirement applies to internal encrypted traffic, encrypted traffic intended for external destinations, or a subset of the traffic types. + + + + SI-4 (11) + ANALYZE COMMUNICATIONS TRAFFIC ANOMALIES + + The organization analyzes outbound communications traffic at the external boundary of the information system and selected [Assignment: organization-defined interior points within the system (e.g., subnetworks, subsystems)] to discover anomalies. + + + Anomalies within organizational information systems include, for example, large file transfers, long-time persistent connections, unusual protocols and ports in use, and attempted communications with suspected malicious external addresses. + + + + SI-4 (12) + AUTOMATED ALERTS + + The organization employs automated mechanisms to alert security personnel of the following inappropriate or unusual activities with security implications: [Assignment: organization-defined activities that trigger alerts]. + + + This control enhancement focuses on the security alerts generated by organizations and transmitted using automated means. In contrast to the alerts generated by information systems in SI-4 (5), which tend to focus on information sources internal to the systems (e.g., audit records), the sources of information for this enhancement can include other entities as well (e.g., suspicious activity reports, reports on potential insider threats). + AC-18 + IA-3 + + + + SI-4 (13) + ANALYZE TRAFFIC / EVENT PATTERNS + + The organization: + + SI-4 (13)(a) + Analyzes communications traffic/event patterns for the information system; + + + SI-4 (13)(b) + Develops profiles representing common traffic patterns and/or events; and + + + SI-4 (13)(c) + Uses the traffic/event profiles in tuning system-monitoring devices to reduce the number of false positives and the number of false negatives. + + + + + SI-4 (14) + WIRELESS INTRUSION DETECTION + + The organization employs a wireless intrusion detection system to identify rogue wireless devices and to detect attack attempts and potential compromises/breaches to the information system. + + + Wireless signals may radiate beyond the confines of organization-controlled facilities. Organizations proactively search for unauthorized wireless connections including the conduct of thorough scans for unauthorized wireless access points. Scans are not limited to those areas within facilities containing information systems, but also include areas outside of facilities as needed, to verify that unauthorized wireless access points are not connected to the systems. + AC-18 + IA-3 + + + + SI-4 (15) + WIRELESS TO WIRELINE COMMUNICATIONS + + The organization employs an intrusion detection system to monitor wireless communications traffic as the traffic passes from wireless to wireline networks. + + + AC-18 + + + + SI-4 (16) + CORRELATE MONITORING INFORMATION + + The organization correlates information from monitoring tools employed throughout the information system. + + + Correlating information from different monitoring tools can provide a more comprehensive view of information system activity. The correlation of monitoring tools that usually work in isolation (e.g., host monitoring, network monitoring, anti-virus software) can provide an organization-wide view and in so doing, may reveal otherwise unseen attack patterns. Understanding the capabilities/limitations of diverse monitoring tools and how to maximize the utility of information generated by those tools can help organizations to build, operate, and maintain effective monitoring programs. + AU-6 + + + + SI-4 (17) + INTEGRATED SITUATIONAL AWARENESS + + The organization correlates information from monitoring physical, cyber, and supply chain activities to achieve integrated, organization-wide situational awareness. + + + This control enhancement correlates monitoring information from a more diverse set of information sources to achieve integrated situational awareness. Integrated situational awareness from a combination of physical, cyber, and supply chain monitoring activities enhances the capability of organizations to more quickly detect sophisticated cyber attacks and investigate the methods and techniques employed to carry out such attacks. In contrast to SI-4 (16) which correlates the various cyber monitoring information, this control enhancement correlates monitoring beyond just the cyber domain. Such monitoring may help reveal attacks on organizations that are operating across multiple attack vectors. + SA-12 + + + + SI-4 (18) + ANALYZE TRAFFIC / COVERT EXFILTRATION + + The organization analyzes outbound communications traffic at the external boundary of the information system (i.e., system perimeter) and at [Assignment: organization-defined interior points within the system (e.g., subsystems, subnetworks)] to detect covert exfiltration of information. + + + Covert means that can be used for the unauthorized exfiltration of organizational information include, for example, steganography. + + + + SI-4 (19) + INDIVIDUALS POSING GREATER RISK + + The organization implements [Assignment: organization-defined additional monitoring] of individuals who have been identified by [Assignment: organization-defined sources] as posing an increased level of risk. + + + Indications of increased risk from individuals can be obtained from a variety of sources including, for example, human resource records, intelligence agencies, law enforcement organizations, and/or other credible sources. The monitoring of individuals is closely coordinated with management, legal, security, and human resources officials within organizations conducting such monitoring and complies with federal legislation, Executive Orders, policies, directives, regulations, and standards. + + + + SI-4 (20) + PRIVILEGED USERS + + The organization implements [Assignment: organization-defined additional monitoring] of privileged users. + + + + SI-4 (21) + PROBATIONARY PERIODS + + The organization implements [Assignment: organization-defined additional monitoring] of individuals during [Assignment: organization-defined probationary period]. + + + + SI-4 (22) + UNAUTHORIZED NETWORK SERVICES + + The information system detects network services that have not been authorized or approved by [Assignment: organization-defined authorization or approval processes] and [Selection (one or more): audits; alerts [Assignment: organization-defined personnel or roles]]. + + + Unauthorized or unapproved network services include, for example, services in service-oriented architectures that lack organizational verification or validation and therefore may be unreliable or serve as malicious rogues for valid services. + AC-6 + CM-7 + SA-5 + SA-9 + + + + SI-4 (23) + HOST-BASED DEVICES + + The organization implements [Assignment: organization-defined host-based monitoring mechanisms] at [Assignment: organization-defined information system components]. + + + Information system components where host-based monitoring can be implemented include, for example, servers, workstations, and mobile devices. Organizations consider employing host-based monitoring mechanisms from multiple information technology product developers. + + + + SI-4 (24) + INDICATORS OF COMPROMISE + + The information system discovers, collects, distributes, and uses indicators of compromise. + + + Indicators of compromise (IOC) are forensic artifacts from intrusions that are identified on organizational information systems (at the host or network level). IOCs provide organizations with valuable information on objects or information systems that have been compromised. IOCs for the discovery of compromised hosts can include for example, the creation of registry key values. IOCs for network traffic include, for example, Universal Resource Locator (URL) or protocol elements that indicate malware command and control servers. The rapid distribution and adoption of IOCs can improve information security by reducing the time that information systems and organizations are vulnerable to the same exploit or attack. + + + + + + NIST Special Publication 800-61 + + + NIST Special Publication 800-83 + + + NIST Special Publication 800-92 + + + NIST Special Publication 800-94 + + + NIST Special Publication 800-137 + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-5 + SECURITY ALERTS, ADVISORIES, AND DIRECTIVES + P1 + LOW + MODERATE + HIGH + + The organization: + + SI-5a. + Receives information system security alerts, advisories, and directives from [Assignment: organization-defined external organizations] on an ongoing basis; + + + SI-5b. + Generates internal security alerts, advisories, and directives as deemed necessary; + + + SI-5c. + Disseminates security alerts, advisories, and directives to: [Selection (one or more): [Assignment: organization-defined personnel or roles]; [Assignment: organization-defined elements within the organization]; [Assignment: organization-defined external organizations]]; and + + + SI-5d. + Implements security directives in accordance with established time frames, or notifies the issuing organization of the degree of noncompliance. + + + + The United States Computer Emergency Readiness Team (US-CERT) generates security alerts and advisories to maintain situational awareness across the federal government. Security directives are issued by OMB or other designated organizations with the responsibility and authority to issue such directives. Compliance to security directives is essential due to the critical nature of many of these directives and the potential immediate adverse effects on organizational operations and assets, individuals, other organizations, and the Nation should the directives not be implemented in a timely manner. External organizations include, for example, external mission/business partners, supply chain partners, external service providers, and other peer/supporting organizations. + SI-2 + + + + SI-5 (1) + AUTOMATED ALERTS AND ADVISORIES + HIGH + + The organization employs automated mechanisms to make security alert and advisory information available throughout the organization. + + + The significant number of changes to organizational information systems and the environments in which those systems operate requires the dissemination of security-related information to a variety of organizational entities that have a direct interest in the success of organizational missions and business functions. Based on the information provided by the security alerts and advisories, changes may be required at one or more of the three tiers related to the management of information security risk including the governance level, mission/business process/enterprise architecture level, and the information system level. + + + + + + NIST Special Publication 800-40 + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-6 + SECURITY FUNCTION VERIFICATION + P1 + HIGH + + The information system: + + SI-6a. + Verifies the correct operation of [Assignment: organization-defined security functions]; + + + SI-6b. + Performs this verification [Selection (one or more): [Assignment: organization-defined system transitional states]; upon command by user with appropriate privilege; [Assignment: organization-defined frequency]]; + + + SI-6c. + Notifies [Assignment: organization-defined personnel or roles] of failed security verification tests; and + + + SI-6d. + [Selection (one or more): shuts the information system down; restarts the information system; [Assignment: organization-defined alternative action(s)]] when anomalies are discovered. + + + + Transitional states for information systems include, for example, system startup, restart, shutdown, and abort. Notifications provided by information systems include, for example, electronic alerts to system administrators, messages to local computer consoles, and/or hardware indications such as lights. + CA-7 + CM-6 + + + + SI-6 (1) + NOTIFICATION OF FAILED SECURITY TESTS + + SI-6 + + + [Withdrawn: Incorporated into SI-6]. + + + + SI-6 (2) + AUTOMATION SUPPORT FOR DISTRIBUTED TESTING + + The information system implements automated mechanisms to support the management of distributed security testing. + + + SI-2 + + + + SI-6 (3) + REPORT VERIFICATION RESULTS + + The organization reports the results of security function verification to [Assignment: organization-defined personnel or roles]. + + + Organizational personnel with potential interest in security function verification results include, for example, senior information security officers, information system security managers, and information systems security officers. + SA-12 + SI-4 + SI-5 + + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-7 + SOFTWARE, FIRMWARE, AND INFORMATION INTEGRITY + P1 + MODERATE + HIGH + + The organization employs integrity verification tools to detect unauthorized changes to [Assignment: organization-defined software, firmware, and information]. + + + Unauthorized changes to software, firmware, and information can occur due to errors or malicious activity (e.g., tampering). Software includes, for example, operating systems (with key internal components such as kernels, drivers), middleware, and applications. Firmware includes, for example, the Basic Input Output System (BIOS). Information includes metadata such as security attributes associated with information. State-of-the-practice integrity-checking mechanisms (e.g., parity checks, cyclical redundancy checks, cryptographic hashes) and associated tools can automatically monitor the integrity of information systems and hosted applications. + SA-12 + SC-8 + SC-13 + SI-3 + + + + SI-7 (1) + INTEGRITY CHECKS + MODERATE + HIGH + + The information system performs an integrity check of [Assignment: organization-defined software, firmware, and information] [Selection (one or more): at startup; at [Assignment: organization-defined transitional states or security-relevant events]; [Assignment: organization-defined frequency]]. + + + Security-relevant events include, for example, the identification of a new threat to which organizational information systems are susceptible, and the installation of new hardware, software, or firmware. Transitional states include, for example, system startup, restart, shutdown, and abort. + + + + SI-7 (2) + AUTOMATED NOTIFICATIONS OF INTEGRITY VIOLATIONS + HIGH + + The organization employs automated tools that provide notification to [Assignment: organization-defined personnel or roles] upon discovering discrepancies during integrity verification. + + + The use of automated tools to report integrity violations and to notify organizational personnel in a timely matter is an essential precursor to effective risk response. Personnel having an interest in integrity violations include, for example, mission/business owners, information system owners, systems administrators, software developers, systems integrators, and information security officers. + + + + SI-7 (3) + CENTRALLY-MANAGED INTEGRITY TOOLS + + The organization employs centrally managed integrity verification tools. + + + AU-3 + SI-2 + SI-8 + + + + SI-7 (4) + TAMPER-EVIDENT PACKAGING + + SA-12 + + + [Withdrawn: Incorporated into SA-12]. + + + + SI-7 (5) + AUTOMATED RESPONSE TO INTEGRITY VIOLATIONS + HIGH + + The information system automatically [Selection (one or more): shuts the information system down; restarts the information system; implements [Assignment: organization-defined security safeguards]] when integrity violations are discovered. + + + Organizations may define different integrity checking and anomaly responses: (i) by type of information (e.g., firmware, software, user data); (ii) by specific information (e.g., boot firmware, boot firmware for a specific types of machines); or (iii) a combination of both. Automatic implementation of specific safeguards within organizational information systems includes, for example, reversing the changes, halting the information system, or triggering audit alerts when unauthorized modifications to critical security files occur. + + + + SI-7 (6) + CRYPTOGRAPHIC PROTECTION + + The information system implements cryptographic mechanisms to detect unauthorized changes to software, firmware, and information. + + + Cryptographic mechanisms used for the protection of integrity include, for example, digital signatures and the computation and application of signed hashes using asymmetric cryptography, protecting the confidentiality of the key used to generate the hash, and using the public key to verify the hash information. + SC-13 + + + + SI-7 (7) + INTEGRATION OF DETECTION AND RESPONSE + MODERATE + HIGH + + The organization incorporates the detection of unauthorized [Assignment: organization-defined security-relevant changes to the information system] into the organizational incident response capability. + + + This control enhancement helps to ensure that detected events are tracked, monitored, corrected, and available for historical purposes. Maintaining historical records is important both for being able to identify and discern adversary actions over an extended period of time and for possible legal actions. Security-relevant changes include, for example, unauthorized changes to established configuration settings or unauthorized elevation of information system privileges. + IR-4 + IR-5 + SI-4 + + + + SI-7 (8) + AUDITING CAPABILITY FOR SIGNIFICANT EVENTS + + The information system, upon detection of a potential integrity violation, provides the capability to audit the event and initiates the following actions: [Selection (one or more): generates an audit record; alerts current user; alerts [Assignment: organization-defined personnel or roles]; [Assignment: organization-defined other actions]]. + + + Organizations select response actions based on types of software, specific software, or information for which there are potential integrity violations. + AU-2 + AU-6 + AU-12 + + + + SI-7 (9) + VERIFY BOOT PROCESS + + The information system verifies the integrity of the boot process of [Assignment: organization-defined devices]. + + + Ensuring the integrity of boot processes is critical to starting devices in known/trustworthy states. Integrity verification mechanisms provide organizational personnel with assurance that only trusted code is executed during boot processes. + + + + SI-7 (10) + PROTECTION OF BOOT FIRMWARE + + The information system implements [Assignment: organization-defined security safeguards] to protect the integrity of boot firmware in [Assignment: organization-defined devices]. + + + Unauthorized modifications to boot firmware may be indicative of a sophisticated, targeted cyber attack. These types of cyber attacks can result in a permanent denial of service (e.g., if the firmware is corrupted) or a persistent malicious code presence (e.g., if code is embedded within the firmware). Devices can protect the integrity of the boot firmware in organizational information systems by: (i) verifying the integrity and authenticity of all updates to the boot firmware prior to applying changes to the boot devices; and (ii) preventing unauthorized processes from modifying the boot firmware. + + + + SI-7 (11) + CONFINED ENVIRONMENTS WITH LIMITED PRIVILEGES + + The organization requires that [Assignment: organization-defined user-installed software] execute in a confined physical or virtual machine environment with limited privileges. + + + Organizations identify software that may be of greater concern with regard to origin or potential for containing malicious code. For this type of software, user installations occur in confined environments of operation to limit or contain damage from malicious code that may be executed. + + + + SI-7 (12) + INTEGRITY VERIFICATION + + The organization requires that the integrity of [Assignment: organization-defined user-installed software] be verified prior to execution. + + + Organizations verify the integrity of user-installed software prior to execution to reduce the likelihood of executing malicious code or code that contains errors from unauthorized modifications. Organizations consider the practicality of approaches to verifying software integrity including, for example, availability of checksums of adequate trustworthiness from software developers or vendors. + + + + SI-7 (13) + CODE EXECUTION IN PROTECTED ENVIRONMENTS + + The organization allows execution of binary or machine-executable code obtained from sources with limited or no warranty and without the provision of source code only in confined physical or virtual machine environments and with the explicit approval of [Assignment: organization-defined personnel or roles]. + + + This control enhancement applies to all sources of binary or machine-executable code including, for example, commercial software/firmware and open source software. + + + + SI-7 (14) + BINARY OR MACHINE EXECUTABLE CODE + HIGH + + The organization: + + SI-7 (14)(a) + Prohibits the use of binary or machine-executable code from sources with limited or no warranty and without the provision of source code; and + + + SI-7 (14)(b) + Provides exceptions to the source code requirement only for compelling mission/operational requirements and with the approval of the authorizing official. + + + + This control enhancement applies to all sources of binary or machine-executable code including, for example, commercial software/firmware and open source software. Organizations assess software products without accompanying source code from sources with limited or no warranty for potential security impacts. The assessments address the fact that these types of software products may be very difficult to review, repair, or extend, given that organizations, in most cases, do not have access to the original source code, and there may be no owners who could make such repairs on behalf of organizations. + SA-5 + + + + SI-7 (15) + CODE AUTHENTICATION + + The information system implements cryptographic mechanisms to authenticate [Assignment: organization-defined software or firmware components] prior to installation. + + + Cryptographic authentication includes, for example, verifying that software or firmware components have been digitally signed using certificates recognized and approved by organizations. Code signing is an effective method to protect against malicious code. + + + + SI-7 (16) + TIME LIMIT ON PROCESS EXECUTION W/O SUPERVISION + + The organization does not allow processes to execute without supervision for more than [Assignment: organization-defined time period]. + + + This control enhancement addresses processes for which normal execution periods can be determined and situations in which organizations exceed such periods. Supervision includes, for example, operating system timers, automated responses, or manual oversight and response when information system process anomalies occur. + + + + + + NIST Special Publication 800-147 + + + NIST Special Publication 800-155 + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-8 + SPAM PROTECTION + P2 + MODERATE + HIGH + + The organization: + + SI-8a. + Employs spam protection mechanisms at information system entry and exit points to detect and take action on unsolicited messages; and + + + SI-8b. + Updates spam protection mechanisms when new releases are available in accordance with organizational configuration management policy and procedures. + + + + Information system entry and exit points include, for example, firewalls, electronic mail servers, web servers, proxy servers, remote-access servers, workstations, mobile devices, and notebook/laptop computers. Spam can be transported by different means including, for example, electronic mail, electronic mail attachments, and web accesses. Spam protection mechanisms include, for example, signature definitions. + AT-2 + AT-3 + SC-5 + SC-7 + SI-3 + + + + SI-8 (1) + CENTRAL MANAGEMENT + MODERATE + HIGH + + The organization centrally manages spam protection mechanisms. + + + Central management is the organization-wide management and implementation of spam protection mechanisms. Central management includes planning, implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed spam protection security controls. + AU-3 + SI-2 + SI-7 + + + + SI-8 (2) + AUTOMATIC UPDATES + MODERATE + HIGH + + The information system automatically updates spam protection mechanisms. + + + + SI-8 (3) + CONTINUOUS LEARNING CAPABILITY + + The information system implements spam protection mechanisms with a learning capability to more effectively identify legitimate communications traffic. + + + Learning mechanisms include, for example, Bayesian filters that respond to user inputs identifying specific traffic as spam or legitimate by updating algorithm parameters and thereby more accurately separating types of traffic. + + + + + + NIST Special Publication 800-45 + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-9 + INFORMATION INPUT RESTRICTIONS + + AC-2 + AC-3 + AC-5 + AC-6 + + + [Withdrawn: Incorporated into AC-2, AC-3, AC-5, AC-6]. + + + + SYSTEM AND INFORMATION INTEGRITY + SI-10 + INFORMATION INPUT VALIDATION + P1 + MODERATE + HIGH + + The information system checks the validity of [Assignment: organization-defined information inputs]. + + + Checking the valid syntax and semantics of information system inputs (e.g., character set, length, numerical range, and acceptable values) verifies that inputs match specified definitions for format and content. Software applications typically follow well-defined protocols that use structured messages (i.e., commands or queries) to communicate between software modules or system components. Structured messages can contain raw or unstructured data interspersed with metadata or control information. If software applications use attacker-supplied inputs to construct structured messages without properly encoding such messages, then the attacker could insert malicious commands or special characters that can cause the data to be interpreted as control information or metadata. Consequently, the module or component that receives the tainted output will perform the wrong operations or otherwise interpret the data incorrectly. Prescreening inputs prior to passing to interpreters prevents the content from being unintentionally interpreted as commands. Input validation helps to ensure accurate and correct inputs and prevent attacks such as cross-site scripting and a variety of injection attacks. + + + + SI-10 (1) + MANUAL OVERRIDE CAPABILITY + + The information system: + + SI-10 (1)(a) + Provides a manual override capability for input validation of [Assignment: organization-defined inputs]; + + + SI-10 (1)(b) + Restricts the use of the manual override capability to only [Assignment: organization-defined authorized individuals]; and + + + SI-10 (1)(c) + Audits the use of the manual override capability. + + + + CM-3 + CM-5 + + + + SI-10 (2) + REVIEW / RESOLUTION OF ERRORS + + The organization ensures that input validation errors are reviewed and resolved within [Assignment: organization-defined time period]. + + + Resolution of input validation errors includes, for example, correcting systemic causes of errors and resubmitting transactions with corrected input. + + + + SI-10 (3) + PREDICTABLE BEHAVIOR + + The information system behaves in a predictable and documented manner that reflects organizational and system objectives when invalid inputs are received. + + + A common vulnerability in organizational information systems is unpredictable behavior when invalid inputs are received. This control enhancement ensures that there is predictable behavior in the face of invalid inputs by specifying information system responses that facilitate transitioning the system to known states without adverse, unintended side effects. + + + + SI-10 (4) + REVIEW / TIMING INTERACTIONS + + The organization accounts for timing interactions among information system components in determining appropriate responses for invalid inputs. + + + In addressing invalid information system inputs received across protocol interfaces, timing interactions become relevant, where one protocol needs to consider the impact of the error response on other protocols within the protocol stack. For example, 802.11 standard wireless network protocols do not interact well with Transmission Control Protocols (TCP) when packets are dropped (which could be due to invalid packet input). TCP assumes packet losses are due to congestion, while packets lost over 802.11 links are typically dropped due to collisions or noise on the link. If TCP makes a congestion response, it takes precisely the wrong action in response to a collision event. Adversaries may be able to use apparently acceptable individual behaviors of the protocols in concert to achieve adverse effects through suitable construction of invalid input. + + + + SI-10 (5) + RESTRICT INPUTS TO TRUSTED SOURCES AND APPROVED FORMATS + + The organization restricts the use of information inputs to [Assignment: organization-defined trusted sources] and/or [Assignment: organization-defined formats]. + + + This control enhancement applies the concept of whitelisting to information inputs. Specifying known trusted sources for information inputs and acceptable formats for such inputs can reduce the probability of malicious activity. + + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-11 + ERROR HANDLING + P2 + MODERATE + HIGH + + The information system: + + SI-11a. + Generates error messages that provide information necessary for corrective actions without revealing information that could be exploited by adversaries; and + + + SI-11b. + Reveals error messages only to [Assignment: organization-defined personnel or roles]. + + + + Organizations carefully consider the structure/content of error messages. The extent to which information systems are able to identify and handle error conditions is guided by organizational policy and operational requirements. Information that could be exploited by adversaries includes, for example, erroneous logon attempts with passwords entered by mistake as the username, mission/business information that can be derived from (if not stated explicitly by) information recorded, and personal information such as account numbers, social security numbers, and credit card numbers. In addition, error messages may provide a covert channel for transmitting information. + AU-2 + AU-3 + SC-31 + + + + SYSTEM AND INFORMATION INTEGRITY + SI-12 + INFORMATION HANDLING AND RETENTION + P2 + LOW + MODERATE + HIGH + + The organization handles and retains information within the information system and information output from the system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and operational requirements. + + + Information handling and retention requirements cover the full life cycle of information, in some cases extending beyond the disposal of information systems. The National Archives and Records Administration provides guidance on records retention. + AC-16 + AU-5 + AU-11 + MP-2 + MP-4 + + + + SYSTEM AND INFORMATION INTEGRITY + SI-13 + PREDICTABLE FAILURE PREVENTION + P0 + + The organization: + + SI-13a. + Determines mean time to failure (MTTF) for [Assignment: organization-defined information system components] in specific environments of operation; and + + + SI-13b. + Provides substitute information system components and a means to exchange active and standby components at [Assignment: organization-defined MTTF substitution criteria]. + + + + While MTTF is primarily a reliability issue, this control addresses potential failures of specific information system components that provide security capability. Failure rates reflect installation-specific consideration, not industry-average. Organizations define criteria for substitution of information system components based on MTTF value with consideration for resulting potential harm from component failures. Transfer of responsibilities between active and standby components does not compromise safety, operational readiness, or security capability (e.g., preservation of state variables). Standby components remain available at all times except for maintenance issues or recovery failures in progress. + CP-2 + CP-10 + MA-6 + + + + SI-13 (1) + TRANSFERRING COMPONENT RESPONSIBILITIES + + The organization takes information system components out of service by transferring component responsibilities to substitute components no later than [Assignment: organization-defined fraction or percentage] of mean time to failure. + + + + SI-13 (2) + TIME LIMIT ON PROCESS EXECUTION WITHOUT SUPERVISION + + SI-7 (16) + + + [Withdrawn: Incorporated into SI-7 (16)]. + + + + SI-13 (3) + MANUAL TRANSFER BETWEEN COMPONENTS + + The organization manually initiates transfers between active and standby information system components [Assignment: organization-defined frequency] if the mean time to failure exceeds [Assignment: organization-defined time period]. + + + + SI-13 (4) + STANDBY COMPONENT INSTALLATION / NOTIFICATION + + The organization, if information system component failures are detected: + + SI-13 (4)(a) + Ensures that the standby components are successfully and transparently installed within [Assignment: organization-defined time period]; and + + + SI-13 (4)(b) + [Selection (one or more): activates [Assignment: organization-defined alarm]; automatically shuts down the information system]. + + + + Automatic or manual transfer of components from standby to active mode can occur, for example, upon detection of component failures. + + + + SI-13 (5) + FAILOVER CAPABILITY + + The organization provides [Selection: real-time; near real-time] [Assignment: organization-defined failover capability] for the information system. + + + Failover refers to the automatic switchover to an alternate information system upon the failure of the primary information system. Failover capability includes, for example, incorporating mirrored information system operations at alternate processing sites or periodic data mirroring at regular intervals defined by recovery time periods of organizations. + + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-14 + NON-PERSISTENCE + P0 + + The organization implements non-persistent [Assignment: organization-defined information system components and services] that are initiated in a known state and terminated [Selection (one or more): upon end of session of use; periodically at [Assignment: organization-defined frequency]]. + + + This control mitigates risk from advanced persistent threats (APTs) by significantly reducing the targeting capability of adversaries (i.e., window of opportunity and available attack surface) to initiate and complete cyber attacks. By implementing the concept of non-persistence for selected information system components, organizations can provide a known state computing resource for a specific period of time that does not give adversaries sufficient time on target to exploit vulnerabilities in organizational information systems and the environments in which those systems operate. Since the advanced persistent threat is a high-end threat with regard to capability, intent, and targeting, organizations assume that over an extended period of time, a percentage of cyber attacks will be successful. Non-persistent information system components and services are activated as required using protected information and terminated periodically or upon the end of sessions. Non-persistence increases the work factor of adversaries in attempting to compromise or breach organizational information systems. +Non-persistent system components can be implemented, for example, by periodically re-imaging components or by using a variety of common virtualization techniques. Non-persistent services can be implemented using virtualization techniques as part of virtual machines or as new instances of processes on physical machines (either persistent or non-persistent).The benefit of periodic refreshes of information system components/services is that it does not require organizations to first determine whether compromises of components or services have occurred (something that may often be difficult for organizations to determine). The refresh of selected information system components and services occurs with sufficient frequency to prevent the spread or intended impact of attacks, but not with such frequency that it makes the information system unstable. In some instances, refreshes of critical components and services may be done periodically in order to hinder the ability of adversaries to exploit optimum windows of vulnerabilities. + SC-30 + SC-34 + + + + SI-14 (1) + REFRESH FROM TRUSTED SOURCES + + The organization ensures that software and data employed during information system component and service refreshes are obtained from [Assignment: organization-defined trusted sources]. + + + Trusted sources include, for example, software/data from write-once, read-only media or from selected off-line secure storage facilities. + + + + + + SYSTEM AND INFORMATION INTEGRITY + SI-15 + INFORMATION OUTPUT FILTERING + P0 + + The information system validates information output from [Assignment: organization-defined software programs and/or applications] to ensure that the information is consistent with the expected content. + + + Certain types of cyber attacks (e.g., SQL injections) produce output results that are unexpected or inconsistent with the output results that would normally be expected from software programs or applications. This control enhancement focuses on detecting extraneous content, preventing such extraneous content from being displayed, and alerting monitoring tools that anomalous behavior has been discovered. + SI-3 + SI-4 + + + + SYSTEM AND INFORMATION INTEGRITY + SI-16 + MEMORY PROTECTION + P1 + MODERATE + HIGH + + The information system implements [Assignment: organization-defined security safeguards] to protect its memory from unauthorized code execution. + + + Some adversaries launch attacks with the intent of executing code in non-executable regions of memory or in memory locations that are prohibited. Security safeguards employed to protect memory include, for example, data execution prevention and address space layout randomization. Data execution prevention safeguards can either be hardware-enforced or software-enforced with hardware providing the greater strength of mechanism. + AC-25 + SC-3 + + + + SYSTEM AND INFORMATION INTEGRITY + SI-17 + FAIL-SAFE PROCEDURES + P0 + + The information system implements [Assignment: organization-defined fail-safe procedures] when [Assignment: organization-defined failure conditions occur]. + + + Failure conditions include, for example, loss of communications among critical system components or between system components and operational facilities. Fail-safe procedures include, for example, alerting operator personnel and providing specific instructions on subsequent steps to take (e.g., do nothing, reestablish system settings, shut down processes, restart the system, or contact designated organizational personnel). + CP-12 + CP-13 + SC-24 + SI-13 + + + + PROGRAM MANAGEMENT + PM-1 + INFORMATION SECURITY PROGRAM PLAN + + The organization: + + PM-1a. + Develops and disseminates an organization-wide information security program plan that: + + PM-1a.1. + Provides an overview of the requirements for the security program and a description of the security program management controls and common controls in place or planned for meeting those requirements; + + + PM-1a.2. + Includes the identification and assignment of roles, responsibilities, management commitment, coordination among organizational entities, and compliance; + + + PM-1a.3. + Reflects coordination among organizational entities responsible for the different aspects of information security (i.e., technical, physical, personnel, cyber-physical); and + + + PM-1a.4. + Is approved by a senior official with responsibility and accountability for the risk being incurred to organizational operations (including mission, functions, image, and reputation), organizational assets, individuals, other organizations, and the Nation; + + + + PM-1b. + Reviews the organization-wide information security program plan [Assignment: organization-defined frequency]; + + + PM-1c. + Updates the plan to address organizational changes and problems identified during plan implementation or security control assessments; and + + + PM-1d. + Protects the information security program plan from unauthorized disclosure and modification. + + + + Information security program plans can be represented in single documents or compilations of documents at the discretion of organizations. The plans document the program management controls and organization-defined common controls. Information security program plans provide sufficient information about the program management controls/common controls (including specification of parameters for any assignment and selection statements either explicitly or by reference) to enable implementations that are unambiguously compliant with the intent of the plans and a determination of the risk to be incurred if the plans are implemented as intended. +The security plans for individual information systems and the organization-wide information security program plan together, provide complete coverage for all security controls employed within the organization. Common controls are documented in an appendix to the organization�s information security program plan unless the controls are included in a separate security plan for an information system (e.g., security controls employed as part of an intrusion detection system providing organization-wide boundary protection inherited by one or more organizational information systems). The organization-wide information security program plan will indicate which separate security plans contain descriptions of common controls. +Organizations have the flexibility to describe common controls in a single document or in multiple documents. In the case of multiple documents, the documents describing common controls are included as attachments to the information security program plan. If the information security program plan contains multiple documents, the organization specifies in each document the organizational official or officials responsible for the development, implementation, assessment, authorization, and monitoring of the respective common controls. For example, the organization may require that the Facilities Management Office develop, implement, assess, authorize, and continuously monitor common physical and environmental protection controls from the PE family when such controls are not associated with a particular information system but instead, support multiple information systems. + PM-8 + + + + PROGRAM MANAGEMENT + PM-2 + SENIOR INFORMATION SECURITY OFFICER + + The organization appoints a senior information security officer with the mission and resources to coordinate, develop, implement, and maintain an organization-wide information security program. + + + The security officer described in this control is an organizational official. For a federal agency (as defined in applicable federal laws, Executive Orders, directives, policies, or regulations) this official is the Senior Agency Information Security Officer. Organizations may also refer to this official as the Senior Information Security Officer or Chief Information Security Officer. + + + + PROGRAM MANAGEMENT + PM-3 + INFORMATION SECURITY RESOURCES + + The organization: + + PM-3a. + Ensures that all capital planning and investment requests include the resources needed to implement the information security program and documents all exceptions to this requirement; + + + PM-3b. + Employs a business case/Exhibit 300/Exhibit 53 to record the resources required; and + + + PM-3c. + Ensures that information security resources are available for expenditure as planned. + + + + Organizations consider establishing champions for information security efforts and as part of including the necessary resources, assign specialized expertise and resources as needed. Organizations may designate and empower an Investment Review Board (or similar group) to manage and provide oversight for the information security-related aspects of the capital planning and investment control process. + PM-4 + SA-2 + + + + NIST Special Publication 800-65 + + + + + PROGRAM MANAGEMENT + PM-4 + PLAN OF ACTION AND MILESTONES PROCESS + + The organization: + + PM-4a. + Implements a process for ensuring that plans of action and milestones for the security program and associated organizational information systems: + + PM-4a.1. + Are developed and maintained; + + + PM-4a.2. + Document the remedial information security actions to adequately respond to risk to organizational operations and assets, individuals, other organizations, and the Nation; and + + + PM-4a.3. + Are reported in accordance with OMB FISMA reporting requirements. + + + + PM-4b. + Reviews plans of action and milestones for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions. + + + + The plan of action and milestones is a key document in the information security program and is subject to federal reporting requirements established by OMB. With the increasing emphasis on organization-wide risk management across all three tiers in the risk management hierarchy (i.e., organization, mission/business process, and information system), organizations view plans of action and milestones from an organizational perspective, prioritizing risk response actions and ensuring consistency with the goals and objectives of the organization. Plan of action and milestones updates are based on findings from security control assessments and continuous monitoring activities. OMB FISMA reporting guidance contains instructions regarding organizational plans of action and milestones. + CA-5 + + + + OMB Memorandum 02-01 + + + NIST Special Publication 800-37 + + + + + PROGRAM MANAGEMENT + PM-5 + INFORMATION SYSTEM INVENTORY + + The organization develops and maintains an inventory of its information systems. + + + This control addresses the inventory requirements in FISMA. OMB provides guidance on developing information systems inventories and associated reporting requirements. For specific information system inventory reporting requirements, organizations consult OMB annual FISMA reporting guidance. + + + + http://www.omb.gov + + + + + PROGRAM MANAGEMENT + PM-6 + INFORMATION SECURITY MEASURES OF PERFORMANCE + + The organization develops, monitors, and reports on the results of information security measures of performance. + + + Measures of performance are outcome-based metrics used by an organization to measure the effectiveness or efficiency of the information security program and the security controls employed in support of the program. + + + + NIST Special Publication 800-55 + + + + + PROGRAM MANAGEMENT + PM-7 + ENTERPRISE ARCHITECTURE + + The organization develops an enterprise architecture with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation. + + + The enterprise architecture developed by the organization is aligned with the Federal Enterprise Architecture. The integration of information security requirements and associated security controls into the organization�s enterprise architecture helps to ensure that security considerations are addressed by organizations early in the system development life cycle and are directly and explicitly related to the organization�s mission/business processes. This process of security requirements integration also embeds into the enterprise architecture, an integral information security architecture consistent with organizational risk management and information security strategies. For PM-7, the information security architecture is developed at a system-of-systems level (organization-wide), representing all of the organizational information systems. For PL-8, the information security architecture is developed at a level representing an individual information system but at the same time, is consistent with the information security architecture defined for the organization. Security requirements and security control integration are most effectively accomplished through the application of the Risk Management Framework and supporting security standards and guidelines. The Federal Segment Architecture Methodology provides guidance on integrating information security requirements and security controls into enterprise architectures. + PL-2 + PL-8 + PM-11 + RA-2 + SA-3 + + + + NIST Special Publication 800-39 + + + + + PROGRAM MANAGEMENT + PM-8 + CRITICAL INFRASTRUCTURE PLAN + + The organization addresses information security issues in the development, documentation, and updating of a critical infrastructure and key resources protection plan. + + + Protection strategies are based on the prioritization of critical assets and resources. The requirement and guidance for defining critical infrastructure and key resources and for preparing an associated critical infrastructure protection plan are found in applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance. + PM-1 + PM-9 + PM-11 + RA-3 + + + + HSPD 7 + + + National Infrastructure Protection Plan + + + + + PROGRAM MANAGEMENT + PM-9 + RISK MANAGEMENT STRATEGY + + The organization: + + PM-9a. + Develops a comprehensive strategy to manage risk to organizational operations and assets, individuals, other organizations, and the Nation associated with the operation and use of information systems; + + + PM-9b. + Implements the risk management strategy consistently across the organization; and + + + PM-9c. + Reviews and updates the risk management strategy [Assignment: organization-defined frequency] or as required, to address organizational changes. + + + + An organization-wide risk management strategy includes, for example, an unambiguous expression of the risk tolerance for the organization, acceptable risk assessment methodologies, risk mitigation strategies, a process for consistently evaluating risk across the organization with respect to the organization�s risk tolerance, and approaches for monitoring risk over time. The use of a risk executive function can facilitate consistent, organization-wide application of the risk management strategy. The organization-wide risk management strategy can be informed by risk-related inputs from other sources both internal and external to the organization to ensure the strategy is both broad-based and comprehensive. + RA-3 + + + + NIST Special Publication 800-30 + + + NIST Special Publication 800-39 + + + + + PROGRAM MANAGEMENT + PM-10 + SECURITY AUTHORIZATION PROCESS + + The organization: + + PM-10a. + Manages (i.e., documents, tracks, and reports) the security state of organizational information systems and the environments in which those systems operate through security authorization processes; + + + PM-10b. + Designates individuals to fulfill specific roles and responsibilities within the organizational risk management process; and + + + PM-10c. + Fully integrates the security authorization processes into an organization-wide risk management program. + + + + Security authorization processes for information systems and environments of operation require the implementation of an organization-wide risk management process, a Risk Management Framework, and associated security standards and guidelines. Specific roles within the risk management process include an organizational risk executive (function) and designated authorizing officials for each organizational information system and common control provider. Security authorization processes are integrated with organizational continuous monitoring processes to facilitate ongoing understanding and acceptance of risk to organizational operations and assets, individuals, other organizations, and the Nation. + CA-6 + + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-39 + + + + + PROGRAM MANAGEMENT + PM-11 + MISSION/BUSINESS PROCESS DEFINITION + + The organization: + + PM-11a. + Defines mission/business processes with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation; and + + + PM-11b. + Determines information protection needs arising from the defined mission/business processes and revises the processes as necessary, until achievable protection needs are obtained. + + + + Information protection needs are technology-independent, required capabilities to counter threats to organizations, individuals, or the Nation through the compromise of information (i.e., loss of confidentiality, integrity, or availability). Information protection needs are derived from the mission/business needs defined by the organization, the mission/business processes selected to meet the stated needs, and the organizational risk management strategy. Information protection needs determine the required security controls for the organization and the associated information systems supporting the mission/business processes. Inherent in defining an organization�s information protection needs is an understanding of the level of adverse impact that could result if a compromise of information occurs. The security categorization process is used to make such potential impact determinations. Mission/business process definitions and associated information protection requirements are documented by the organization in accordance with organizational policy and procedure. + PM-7 + PM-8 + RA-2 + + + + FIPS Publication 199 + + + NIST Special Publication 800-60 + + + + + PROGRAM MANAGEMENT + PM-12 + INSIDER THREAT PROGRAM + + The organization implements an insider threat program that includes a cross-discipline insider threat incident handling team. + + + Organizations handling classified information are required, under Executive Order 13587 and the National Policy on Insider Threat, to establish insider threat programs. The standards and guidelines that apply to insider threat programs in classified environments can also be employed effectively to improve the security of Controlled Unclassified Information in non-national security systems. Insider threat programs include security controls to detect and prevent malicious insider activity through the centralized integration and analysis of both technical and non-technical information to identify potential insider threat concerns. A senior organizational official is designated by the department/agency head as the responsible individual to implement and provide oversight for the program. In addition to the centralized integration and analysis capability, insider threat programs as a minimum, prepare department/agency insider threat policies and implementation plans, conduct host-based user monitoring of individual employee activities on government-owned classified computers, provide insider threat awareness training to employees, receive access to information from all offices within the department/agency (e.g., human resources, legal, physical security, personnel security, information technology, information system security, and law enforcement) for insider threat analysis, and conduct self-assessments of department/agency insider threat posture. +Insider threat programs can leverage the existence of incident handling teams organizations may already have in place, such as computer security incident response teams. Human resources records are especially important in this effort, as there is compelling evidence to show that some types of insider crimes are often preceded by nontechnical behaviors in the workplace (e.g., ongoing patterns of disgruntled behavior and conflicts with coworkers and other colleagues). These precursors can better inform and guide organizational officials in more focused, targeted monitoring efforts. The participation of a legal team is important to ensure that all monitoring activities are performed in accordance with appropriate legislation, directives, regulations, policies, standards, and guidelines. + AC-6 + AT-2 + AU-6 + AU-7 + AU-10 + AU-12 + AU-13 + CA-7 + IA-4 + IR-4 + MP-7 + PE-2 + PS-3 + PS-4 + PS-5 + PS-8 + SC-7 + SC-38 + SI-4 + PM-1 + PM-14 + + + + Executive Order 13587 + + + + + PROGRAM MANAGEMENT + PM-13 + INFORMATION SECURITY WORKFORCE + + The organization establishes an information security workforce development and improvement program. + + + Information security workforce development and improvement programs include, for example: (i) defining the knowledge and skill levels needed to perform information security duties and tasks; (ii) developing role-based training programs for individuals assigned information security roles and responsibilities; and (iii) providing standards for measuring and building individual qualifications for incumbents and applicants for information security-related positions. Such workforce programs can also include associated information security career paths to encourage: (i) information security professionals to advance in the field and fill positions with greater responsibility; and (ii) organizations to fill information security-related positions with qualified personnel. Information security workforce development and improvement programs are complementary to organizational security awareness and training programs. Information security workforce development and improvement programs focus on developing and institutionalizing core information security capabilities of selected personnel needed to protect organizational operations, assets, and individuals. + AT-2 + AT-3 + + + + PROGRAM MANAGEMENT + PM-14 + TESTING, TRAINING, AND MONITORING + + The organization: + + PM-14a. + Implements a process for ensuring that organizational plans for conducting security testing, training, and monitoring activities associated with organizational information systems: + + PM-14a.1. + Are developed and maintained; and + + + PM-14a.2. + Continue to be executed in a timely manner; + + + + PM-14b. + Reviews testing, training, and monitoring plans for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions. + + + + This control ensures that organizations provide oversight for the security testing, training, and monitoring activities conducted organization-wide and that those activities are coordinated. With the importance of continuous monitoring programs, the implementation of information security across the three tiers of the risk management hierarchy, and the widespread use of common controls, organizations coordinate and consolidate the testing and monitoring activities that are routinely conducted as part of ongoing organizational assessments supporting a variety of security controls. Security training activities, while typically focused on individual information systems and specific roles, also necessitate coordination across all organizational elements. Testing, training, and monitoring plans and activities are informed by current threat and vulnerability assessments. + AT-3 + CA-7 + CP-4 + IR-3 + SI-4 + + + + NIST Special Publication 800-16 + + + NIST Special Publication 800-37 + + + NIST Special Publication 800-53A + + + NIST Special Publication 800-137 + + + + + PROGRAM MANAGEMENT + PM-15 + CONTACTS WITH SECURITY GROUPS AND ASSOCIATIONS + + The organization establishes and institutionalizes contact with selected groups and associations within the security community: + + PM-15a. + To facilitate ongoing security education and training for organizational personnel; + + + PM-15b. + To maintain currency with recommended security practices, techniques, and technologies; and + + + PM-15c. + To share current security-related information including threats, vulnerabilities, and incidents. + + + + Ongoing contact with security groups and associations is of paramount importance in an environment of rapidly changing technologies and threats. Security groups and associations include, for example, special interest groups, forums, professional associations, news groups, and/or peer groups of security professionals in similar organizations. Organizations select groups and associations based on organizational missions/business functions. Organizations share threat, vulnerability, and incident information consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance. + SI-5 + + + + PROGRAM MANAGEMENT + PM-16 + THREAT AWARENESS PROGRAM + + The organization implements a threat awareness program that includes a cross-organization information-sharing capability. + + + Because of the constantly changing and increasing sophistication of adversaries, especially the advanced persistent threat (APT), it is becoming more likely that adversaries may successfully breach or compromise organizational information systems. One of the best techniques to address this concern is for organizations to share threat information. This can include, for example, sharing threat events (i.e., tactics, techniques, and procedures) that organizations have experienced, mitigations that organizations have found are effective against certain types of threats, threat intelligence (i.e., indications and warnings about threats that are likely to occur). Threat information sharing may be bilateral (e.g., government-commercial cooperatives, government-government cooperatives), or multilateral (e.g., organizations taking part in threat-sharing consortia). Threat information may be highly sensitive requiring special agreements and protection, or less sensitive and freely shared. + PM-12 + PM-16 + + + diff --git a/docs/generator/generator.go b/docs/generator/generator.go new file mode 100644 index 0000000..df06f21 --- /dev/null +++ b/docs/generator/generator.go @@ -0,0 +1,211 @@ +package main + +import ( + "encoding/xml" + "errors" + "fmt" + "html/template" + "io/ioutil" + "log" + "os" + "path" + "path/filepath" + "strings" + + cmcommon "github.com/opencontrol/compliance-masonry/lib/common" + cmcomponents "github.com/opencontrol/compliance-masonry/lib/components" +) + +const componentPath = "./components" +const xmlStandardPath = "./data/800-53-controls.xml" +const tmplPath = "./tmpl/80053.test.tmpl" +const markdownOutputPath = "./800-53" + +func doesExist(path string) bool { + if _, err := os.Stat(path); err != nil { + if os.IsNotExist(err) { + return false + } + } + + return true +} + +func parseComponents(rootDir string) ([]cmcommon.Component, error) { + var components []cmcommon.Component + var filePaths []string + + componentDirs, _ := ioutil.ReadDir(rootDir) + for _, root := range componentDirs { + if err := filepath.Walk(path.Join(rootDir, root.Name()), func(path string, f os.FileInfo, err error) error { + if err != nil { + return err + } + if f.IsDir() { + filePaths = append(filePaths, path) + } + return nil + }); err != nil { + return nil, err + } + } + + if len(filePaths) == 0 { + return nil, errors.New("No component files were parsed") + } + + for _, file := range filePaths { + component, err := cmcomponents.Load(file) + if err != nil { + return nil, err + } + components = append(components, component) + } + + return components, nil +} + +func parseStandard(standardFilePath string) (XMLStandard, error) { + var standard XMLStandard + + data, err := ioutil.ReadFile(standardFilePath) + if err != nil { + return standard, err + } + + if err := xml.Unmarshal(data, &standard); err != nil { + return standard, err + } + + return standard, nil +} + +func generateMarkdownFiles(standard XMLStandard, components []cmcommon.Component) error { + var families []string + + var currentFamily string + for _, control := range standard.Controls { + if currentFamily != control.Family { + families = append(families, control.Family) + currentFamily = control.Family + } + } + + for _, family := range families { + var markdownTemplateControls []MarkdownTemplateControl + var abbrev string + familyTitle := strings.Title(strings.ToLower(family)) + + for _, control := range standard.Controls { + if control.Family == family && len(control.Withdrawn.IncorporatedInto) <= 0 { + if abbrev == "" { + abbrev = strings.Split(control.Number, "-")[0] + } + + markdownTemplateControl := MarkdownTemplateControl{ + Family: familyTitle, + Number: control.Number, + Title: strings.Title(strings.ToLower(control.Title)), + Statements: control.Statements, + IsControlEnhancement: false, + } + + for _, component := range components { + satisfies := component.GetAllSatisfies() + for _, satisfy := range satisfies { + if satisfy.GetControlKey() == control.Number { + markdownTemplateControl.Components = append(markdownTemplateControl.Components, MarkdownTemplateComponent{ + Name: component.GetName(), + ImplementationStatuses: satisfy.GetImplementationStatuses(), + ControlOrigins: satisfy.GetControlOrigins()}, + ) + + break + } + } + } + + markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControl) + + // Could clean this up with generic function so as not to duplicate + for _, enhancement := range control.ControlEnhancements { + if len(control.Withdrawn.IncorporatedInto) <= 0 { + markdownTemplateControlEnhancement := MarkdownTemplateControl{ + Family: familyTitle, + Number: enhancement.Number, + Title: strings.Title(strings.ToLower(enhancement.Title)), + Statements: enhancement.Statements, + IsControlEnhancement: false, + } + + for _, component := range components { + satisfies := component.GetAllSatisfies() + for _, satisfy := range satisfies { + if satisfy.GetControlKey() == enhancement.Number { + markdownTemplateControlEnhancement.Components = append(markdownTemplateControlEnhancement.Components, MarkdownTemplateComponent{ + Name: component.GetName(), + ImplementationStatuses: satisfy.GetImplementationStatuses(), + ControlOrigins: satisfy.GetControlOrigins()}, + ) + + break + } + } + } + + markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControlEnhancement) + } + } + } + } + + markdownTemplateMap := map[string][]MarkdownTemplateControl{ + familyTitle: markdownTemplateControls, + } + + tmpl, err := template.ParseFiles(tmplPath) + if err != nil { + return err + } + + f, err := os.Create(fmt.Sprintf("./%s/%s.md", markdownOutputPath, abbrev)) + if err != nil { + return err + } + defer f.Close() + + if err := tmpl.Execute(f, markdownTemplateMap); err != nil { + return err + } + + } + + return nil +} + +func main() { + if !doesExist(componentPath) { + log.Fatalf("Component directory path %s does not exist", componentPath) + } else if !doesExist(xmlStandardPath) { + log.Fatalf("Standard file path %s does not exist", xmlStandardPath) + } else if !doesExist(tmplPath) { + log.Fatalf("Template file path %s does not exist", tmplPath) + } else if !doesExist(markdownOutputPath) { + log.Fatalf("Markdown output path %s does not exist", markdownOutputPath) + } + + standard, err := parseStandard(xmlStandardPath) + if err != nil { + log.Fatalf("Error parsing standard: %v", err) + } + + components, err := parseComponents(componentPath) + if err != nil { + log.Fatalf("Error parsing component files: %v", err) + } + + err = generateMarkdownFiles(standard, components) + if err != nil { + log.Fatalf("Error generating markdown files: %v", err) + } +} diff --git a/docs/generator/tmpl/80053.test.tmpl b/docs/generator/tmpl/80053.test.tmpl new file mode 100644 index 0000000..f262744 --- /dev/null +++ b/docs/generator/tmpl/80053.test.tmpl @@ -0,0 +1,64 @@ +{{range $family, $controls := . -}} +--- +title: "{{ $family }}" +description: "{{ $family }} reference" +keywords: "standards, compliance, security, 800-53, {{ $family }}" +--- + + + +{{- range $controls -}} +{{if .IsControlEnhancement -}} +### {{ .Number }} {{ .Title }} +{{else -}} +## {{ .Number }} {{ .Title }} +{{end}} +**Description:** + +{{range .Statements -}} +{{ .Description }} +
    +{{range .Statements -}} +
  1. {{ .Description }}
  2. +{{if .Statements}} +
      +{{range .Statements -}} +
    1. {{ .Description }}
    2. +{{end -}} +
    +{{end -}} +{{end -}} +
+{{end}} +**Control Information:** + +{{if .Components -}} +**Responsible role(s)** - Docker system + + + + + + + +{{range $component := .Components -}} + + + + + +{{end -}} +
ComponentImplementation Status(es)Control Origin(s)
{{ $component.Name }}{{range $component.ImplementationStatuses}}{{ . }}
{{end}}
{{range $component.ControlOrigins}}{{ . }}
{{end}}
+ +{{else}} +**Responsible role(s)** - Organization +{{end -}} +{{end -}} +{{end -}} diff --git a/docs/generator/tmpl/80053.tmpl b/docs/generator/tmpl/80053.tmpl new file mode 100644 index 0000000..ff90ba2 --- /dev/null +++ b/docs/generator/tmpl/80053.tmpl @@ -0,0 +1,192 @@ +--- +layout: docs +--- + +{{if .IsControlEnhancement}} +### {{ .ControlNumber }} {{ .ControlTitle }} +{{else}} +### {{ .ControlNumber }} {{ .ControlTitle }} +{{end}} + + +Description +
+{% for toplevel_statement in control.statements %} +{{ toplevel_statement.description }} +
    + {% for secondlevel_statement in toplevel_statement.statements %} +
  1. {{ secondlevel_statement.description }}
  2. + {% if secondlevel_statement.statements != null %} +
      + {% for thirdlevel_statement in secondlevel_statement.statements %} +
    1. {{ thirdlevel_statement.description }}
    2. + {% endfor %} +
    + {% endif %} + {% endfor %} +
+{% endfor %} + +Control information + + + + + + + + + + + + +
Responsible role(s)Implementation status(es)Control origination(s)
+ {% if control.statements[0].description contains "The organization" %} + Organization + {% elsif control.statements[0].description contains "The information system" %} + Docker EE system + {% endif %} + + {% for component_hash in site.data.compliance.components %} + {% assign component = component_hash[1] %} + {% assign component_name_array = component.name | split: " " | %} + {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% if satisfied_control.implementation_status %} + {{ component_name }} - {{ satisfied_control.implementation_status }}
+ {% elsif satisfied_control.implementation_statuses %} + {{ component_name }} - {{ satisfied_control.implementation_statuses | join: ", " }}
+ {% endif %} + {% break %} + {% endif %} + {% endfor %} + {% endfor %} +
+ {% for component_hash in site.data.compliance.components %} + {% assign component = component_hash[1] %} + {% assign component_name_array = component.name | split: " " | %} + {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% if satisfied_control.control_origin %} + {{ component_name }} - {{ satisfied_control.control_origin }}
+ {% elsif satisfied_control.control_origins %} + {{ component_name }} - {{ satisfied_control.control_origins | join: ", " }}
+ {% endif %} + {% break %} + {% endif %} + {% endfor %} + {% endfor %} +
+ +{{ control.number }} What is the solution and how is it implemented + +{% assign control_id = control.number | replace: " ", "" | replace: "(", "-" | replace: ")", "" %} + + + + +
+ {% for component_hash in site.data.compliance.components %} + {% assign component = component_hash[1] %} + + {% case component.name %} + {% when "Docker Enterprise Edition (Engine)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Docker Engine component. + {% endif %} +
+ + {% when "Docker Trusted Registry (DTR)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Docker Trusted Registry component. + {% endif %} +
+ + {% when "Docker Security Scanning (DSS)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Docker Security Scanning component. + {% endif %} +
+ + {% when "Authentication and Authorization Service (eNZi)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Authentication and Authorization Service (eNZi) component. + {% endif %} +
+ + {% when "Universal Control Plane (UCP)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Universal Control Plane component. + {% endif %} +
+ {% endcase %} + + {% endfor %} +
+ +{% endif %} +{% endfor %} +{% endif %} \ No newline at end of file diff --git a/docs/generator/tmpl/nist80053.html b/docs/generator/tmpl/nist80053.html new file mode 100644 index 0000000..41745e7 --- /dev/null +++ b/docs/generator/tmpl/nist80053.html @@ -0,0 +1,197 @@ +--- +layout: docs +--- + +{% if page.datafile %} + +{% for control in site.data.compliance.standards[page.datafile] %} + +{% if control.family == page.family %} +{% assign header_id = control.number | replace: ".", "" | replace: "(", "-" | replace: ")", "" | replace: " ", "" %} +{% if control.number contains "(" %} +

{{ control.number }} {{ control.title }}

+{% else %} +

{{ control.number }} {{ control.title }}

+{% endif %} + +Description +
+{% for toplevel_statement in control.statements %} +{{ toplevel_statement.description }} +
    + {% for secondlevel_statement in toplevel_statement.statements %} +
  1. {{ secondlevel_statement.description }}
  2. + {% if secondlevel_statement.statements != null %} +
      + {% for thirdlevel_statement in secondlevel_statement.statements %} +
    1. {{ thirdlevel_statement.description }}
    2. + {% endfor %} +
    + {% endif %} + {% endfor %} +
+{% endfor %} + +Control information + + + + + + + + + + + + +
Responsible role(s)Implementation status(es)Control origination(s)
+ {% if control.statements[0].description contains "The organization" %} + Organization + {% elsif control.statements[0].description contains "The information system" %} + Docker EE system + {% endif %} + + {% for component_hash in site.data.compliance.components %} + {% assign component = component_hash[1] %} + {% assign component_name_array = component.name | split: " " | %} + {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% if satisfied_control.implementation_status %} + {{ component_name }} - {{ satisfied_control.implementation_status }}
+ {% elsif satisfied_control.implementation_statuses %} + {{ component_name }} - {{ satisfied_control.implementation_statuses | join: ", " }}
+ {% endif %} + {% break %} + {% endif %} + {% endfor %} + {% endfor %} +
+ {% for component_hash in site.data.compliance.components %} + {% assign component = component_hash[1] %} + {% assign component_name_array = component.name | split: " " | %} + {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% if satisfied_control.control_origin %} + {{ component_name }} - {{ satisfied_control.control_origin }}
+ {% elsif satisfied_control.control_origins %} + {{ component_name }} - {{ satisfied_control.control_origins | join: ", " }}
+ {% endif %} + {% break %} + {% endif %} + {% endfor %} + {% endfor %} +
+ +{{ control.number }} What is the solution and how is it implemented + +{% assign control_id = control.number | replace: " ", "" | replace: "(", "-" | replace: ")", "" %} + + + + +
+ {% for component_hash in site.data.compliance.components %} + {% assign component = component_hash[1] %} + + {% case component.name %} + {% when "Docker Enterprise Edition (Engine)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Docker Engine component. + {% endif %} +
+ + {% when "Docker Trusted Registry (DTR)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Docker Trusted Registry component. + {% endif %} +
+ + {% when "Docker Security Scanning (DSS)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Docker Security Scanning component. + {% endif %} +
+ + {% when "Authentication and Authorization Service (eNZi)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Authentication and Authorization Service (eNZi) component. + {% endif %} +
+ + {% when "Universal Control Plane (UCP)" %} +
+ {% assign narrative_text = "" %} + {% for satisfied_control in component.satisfies %} + {% if satisfied_control.control_key == control.number %} + {% for narrative in satisfied_control.narrative %} + {% assign narrative_text = narrative.text %} + {{ narrative_text }} + {% endfor %} + {% break %} + {% endif %} + {% endfor %} + {% if narrative_text == "" %} + The control is not applicable to the Universal Control Plane component. + {% endif %} +
+ {% endcase %} + + {% endfor %} +
+ +{% endif %} +{% endfor %} +{% endif %} \ No newline at end of file diff --git a/docs/generator/types.go b/docs/generator/types.go new file mode 100644 index 0000000..1ceefdb --- /dev/null +++ b/docs/generator/types.go @@ -0,0 +1,64 @@ +package main + +import "encoding/xml" + +type XMLStandard struct { + Controls []XMLControl `xml:"control"` + XMLName xml.Name `xml:"http://scap.nist.gov/schema/sp800-53/feed/2.0 controls"` +} + +type XMLControl struct { + Family string `xml:"family"` + Number string `xml:"number"` + Title string `yaml:"name" xml:"title"` + Priority string `xml:"priority"` + BaselineImpact []string `xml:"baseline-impact"` + Statements []XMLStatement `xml:"statement"` + SupplementalGuidance []XMLSupplementalGuidance `xml:"supplemental-guidance"` + ControlEnhancements []XMLControlEnhancement `xml:"control-enhancements>control-enhancement"` + References []XMLReference `xml:"references"` + Withdrawn XMLWithdrawn `xml:"withdrawn"` +} + +type XMLWithdrawn struct { + IncorporatedInto []string `xml:"incorporated-into"` +} + +type XMLStatement struct { + Number string `xml:"number"` + Description string `xml:"description"` + Statements []XMLStatement `xml:"statement"` +} + +type XMLSupplementalGuidance struct { + Description string `xml:"description"` + Related []string `xml:"related"` +} + +type XMLControlEnhancement struct { + Number string `xml:"number"` + Title string `xml:"title"` + BaselineImpact []string `xml:"baseline-impact"` + Withdrawn XMLWithdrawn `xml:"withdrawn"` + Statements []XMLStatement `xml:"statement"` +} + +type XMLReference struct { + Item string `xml:"item"` + Link string `xml:"href,attr"` +} + +type MarkdownTemplateControl struct { + Family string + Number string + Title string + Statements []XMLStatement + IsControlEnhancement bool + Components []MarkdownTemplateComponent +} + +type MarkdownTemplateComponent struct { + Name string + ImplementationStatuses []string + ControlOrigins []string +} diff --git a/docs/generator/vendor/github.com/blang/semver/.gx/lastpubver b/docs/generator/vendor/github.com/blang/semver/.gx/lastpubver new file mode 100644 index 0000000..073ce1e --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/.gx/lastpubver @@ -0,0 +1 @@ +3.4.0: QmZTgGMg34JKEvF1hjr7wwYESvFhg9Khv2WFibDAi5dhno diff --git a/docs/generator/vendor/github.com/blang/semver/LICENSE b/docs/generator/vendor/github.com/blang/semver/LICENSE new file mode 100644 index 0000000..5ba5c86 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2014 Benedikt Lang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/docs/generator/vendor/github.com/blang/semver/README.md b/docs/generator/vendor/github.com/blang/semver/README.md new file mode 100644 index 0000000..4399639 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/README.md @@ -0,0 +1,191 @@ +semver for golang [![Build Status](https://drone.io/github.com/blang/semver/status.png)](https://drone.io/github.com/blang/semver/latest) [![GoDoc](https://godoc.org/github.com/blang/semver?status.png)](https://godoc.org/github.com/blang/semver) [![Coverage Status](https://img.shields.io/coveralls/blang/semver.svg)](https://coveralls.io/r/blang/semver?branch=master) +====== + +semver is a [Semantic Versioning](http://semver.org/) library written in golang. It fully covers spec version `2.0.0`. + +Usage +----- +```bash +$ go get github.com/blang/semver +``` +Note: Always vendor your dependencies or fix on a specific version tag. + +```go +import github.com/blang/semver +v1, err := semver.Make("1.0.0-beta") +v2, err := semver.Make("2.0.0-beta") +v1.Compare(v2) +``` + +Also check the [GoDocs](http://godoc.org/github.com/blang/semver). + +Why should I use this lib? +----- + +- Fully spec compatible +- No reflection +- No regex +- Fully tested (Coverage >99%) +- Readable parsing/validation errors +- Fast (See [Benchmarks](#benchmarks)) +- Only Stdlib +- Uses values instead of pointers +- Many features, see below + + +Features +----- + +- Parsing and validation at all levels +- Comparator-like comparisons +- Compare Helper Methods +- InPlace manipulation +- Ranges `>=1.0.0 <2.0.0 || >=3.0.0 !3.0.1-beta.1` +- Sortable (implements sort.Interface) +- database/sql compatible (sql.Scanner/Valuer) +- encoding/json compatible (json.Marshaler/Unmarshaler) + +Ranges +------ + +A `Range` is a set of conditions which specify which versions satisfy the range. + +A condition is composed of an operator and a version. The supported operators are: + +- `<1.0.0` Less than `1.0.0` +- `<=1.0.0` Less than or equal to `1.0.0` +- `>1.0.0` Greater than `1.0.0` +- `>=1.0.0` Greater than or equal to `1.0.0` +- `1.0.0`, `=1.0.0`, `==1.0.0` Equal to `1.0.0` +- `!1.0.0`, `!=1.0.0` Not equal to `1.0.0`. Excludes version `1.0.0`. + +A `Range` can link multiple `Ranges` separated by space: + +Ranges can be linked by logical AND: + + - `>1.0.0 <2.0.0` would match between both ranges, so `1.1.1` and `1.8.7` but not `1.0.0` or `2.0.0` + - `>1.0.0 <3.0.0 !2.0.3-beta.2` would match every version between `1.0.0` and `3.0.0` except `2.0.3-beta.2` + +Ranges can also be linked by logical OR: + + - `<2.0.0 || >=3.0.0` would match `1.x.x` and `3.x.x` but not `2.x.x` + +AND has a higher precedence than OR. It's not possible to use brackets. + +Ranges can be combined by both AND and OR + + - `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1` + +Range usage: + +``` +v, err := semver.Parse("1.2.3") +range, err := semver.ParseRange(">1.0.0 <2.0.0 || >=3.0.0") +if range(v) { + //valid +} + +``` + +Example +----- + +Have a look at full examples in [examples/main.go](examples/main.go) + +```go +import github.com/blang/semver + +v, err := semver.Make("0.0.1-alpha.preview+123.github") +fmt.Printf("Major: %d\n", v.Major) +fmt.Printf("Minor: %d\n", v.Minor) +fmt.Printf("Patch: %d\n", v.Patch) +fmt.Printf("Pre: %s\n", v.Pre) +fmt.Printf("Build: %s\n", v.Build) + +// Prerelease versions array +if len(v.Pre) > 0 { + fmt.Println("Prerelease versions:") + for i, pre := range v.Pre { + fmt.Printf("%d: %q\n", i, pre) + } +} + +// Build meta data array +if len(v.Build) > 0 { + fmt.Println("Build meta data:") + for i, build := range v.Build { + fmt.Printf("%d: %q\n", i, build) + } +} + +v001, err := semver.Make("0.0.1") +// Compare using helpers: v.GT(v2), v.LT, v.GTE, v.LTE +v001.GT(v) == true +v.LT(v001) == true +v.GTE(v) == true +v.LTE(v) == true + +// Or use v.Compare(v2) for comparisons (-1, 0, 1): +v001.Compare(v) == 1 +v.Compare(v001) == -1 +v.Compare(v) == 0 + +// Manipulate Version in place: +v.Pre[0], err = semver.NewPRVersion("beta") +if err != nil { + fmt.Printf("Error parsing pre release version: %q", err) +} + +fmt.Println("\nValidate versions:") +v.Build[0] = "?" + +err = v.Validate() +if err != nil { + fmt.Printf("Validation failed: %s\n", err) +} +``` + + +Benchmarks +----- + + BenchmarkParseSimple-4 5000000 390 ns/op 48 B/op 1 allocs/op + BenchmarkParseComplex-4 1000000 1813 ns/op 256 B/op 7 allocs/op + BenchmarkParseAverage-4 1000000 1171 ns/op 163 B/op 4 allocs/op + BenchmarkStringSimple-4 20000000 119 ns/op 16 B/op 1 allocs/op + BenchmarkStringLarger-4 10000000 206 ns/op 32 B/op 2 allocs/op + BenchmarkStringComplex-4 5000000 324 ns/op 80 B/op 3 allocs/op + BenchmarkStringAverage-4 5000000 273 ns/op 53 B/op 2 allocs/op + BenchmarkValidateSimple-4 200000000 9.33 ns/op 0 B/op 0 allocs/op + BenchmarkValidateComplex-4 3000000 469 ns/op 0 B/op 0 allocs/op + BenchmarkValidateAverage-4 5000000 256 ns/op 0 B/op 0 allocs/op + BenchmarkCompareSimple-4 100000000 11.8 ns/op 0 B/op 0 allocs/op + BenchmarkCompareComplex-4 50000000 30.8 ns/op 0 B/op 0 allocs/op + BenchmarkCompareAverage-4 30000000 41.5 ns/op 0 B/op 0 allocs/op + BenchmarkSort-4 3000000 419 ns/op 256 B/op 2 allocs/op + BenchmarkRangeParseSimple-4 2000000 850 ns/op 192 B/op 5 allocs/op + BenchmarkRangeParseAverage-4 1000000 1677 ns/op 400 B/op 10 allocs/op + BenchmarkRangeParseComplex-4 300000 5214 ns/op 1440 B/op 30 allocs/op + BenchmarkRangeMatchSimple-4 50000000 25.6 ns/op 0 B/op 0 allocs/op + BenchmarkRangeMatchAverage-4 30000000 56.4 ns/op 0 B/op 0 allocs/op + BenchmarkRangeMatchComplex-4 10000000 153 ns/op 0 B/op 0 allocs/op + +See benchmark cases at [semver_test.go](semver_test.go) + + +Motivation +----- + +I simply couldn't find any lib supporting the full spec. Others were just wrong or used reflection and regex which i don't like. + + +Contribution +----- + +Feel free to make a pull request. For bigger changes create a issue first to discuss about it. + + +License +----- + +See [LICENSE](LICENSE) file. diff --git a/docs/generator/vendor/github.com/blang/semver/examples/main.go b/docs/generator/vendor/github.com/blang/semver/examples/main.go new file mode 100644 index 0000000..f36c983 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/examples/main.go @@ -0,0 +1,83 @@ +package main + +import ( + "fmt" + "github.com/blang/semver" +) + +func main() { + v, err := semver.Parse("0.0.1-alpha.preview.222+123.github") + if err != nil { + fmt.Printf("Error while parsing (not valid): %q", err) + } + fmt.Printf("Version to string: %q\n", v) + + fmt.Printf("Major: %d\n", v.Major) + fmt.Printf("Minor: %d\n", v.Minor) + fmt.Printf("Patch: %d\n", v.Patch) + + // Prerelease versions + if len(v.Pre) > 0 { + fmt.Println("Prerelease versions:") + for i, pre := range v.Pre { + fmt.Printf("%d: %q\n", i, pre) + } + } + + // Build meta data + if len(v.Build) > 0 { + fmt.Println("Build meta data:") + for i, build := range v.Build { + fmt.Printf("%d: %q\n", i, build) + } + } + + // Make == Parse (Value), New for Pointer + v001, err := semver.Make("0.0.1") + + fmt.Println("\nUse Version.Compare for comparisons (-1, 0, 1):") + fmt.Printf("%q is greater than %q: Compare == %d\n", v001, v, v001.Compare(v)) + fmt.Printf("%q is less than %q: Compare == %d\n", v, v001, v.Compare(v001)) + fmt.Printf("%q is equal to %q: Compare == %d\n", v, v, v.Compare(v)) + + fmt.Println("\nUse comparison helpers returning booleans:") + fmt.Printf("%q is greater than %q: %t\n", v001, v, v001.GT(v)) + fmt.Printf("%q is greater than equal %q: %t\n", v001, v, v001.GTE(v)) + fmt.Printf("%q is greater than equal %q: %t\n", v, v, v.GTE(v)) + fmt.Printf("%q is less than %q: %t\n", v, v001, v.LT(v001)) + fmt.Printf("%q is less than equal %q: %t\n", v, v001, v.LTE(v001)) + fmt.Printf("%q is less than equal %q: %t\n", v, v, v.LTE(v)) + + fmt.Println("\nManipulate Version in place:") + v.Pre[0], err = semver.NewPRVersion("beta") + if err != nil { + fmt.Printf("Error parsing pre release version: %q", err) + } + fmt.Printf("Version to string: %q\n", v) + + fmt.Println("\nCompare Prerelease versions:") + pre1, _ := semver.NewPRVersion("123") + pre2, _ := semver.NewPRVersion("alpha") + pre3, _ := semver.NewPRVersion("124") + fmt.Printf("%q is less than %q: Compare == %d\n", pre1, pre2, pre1.Compare(pre2)) + fmt.Printf("%q is greater than %q: Compare == %d\n", pre3, pre1, pre3.Compare(pre1)) + fmt.Printf("%q is equal to %q: Compare == %d\n", pre1, pre1, pre1.Compare(pre1)) + + fmt.Println("\nValidate versions:") + v.Build[0] = "?" + + err = v.Validate() + if err != nil { + fmt.Printf("Validation failed: %s\n", err) + } + + fmt.Println("Create valid build meta data:") + b1, _ := semver.NewBuildVersion("build123") + v.Build[0] = b1 + fmt.Printf("Version with new build version %q\n", v) + + _, err = semver.NewBuildVersion("build?123") + if err != nil { + fmt.Printf("Create build version failed: %s\n", err) + } +} diff --git a/docs/generator/vendor/github.com/blang/semver/json.go b/docs/generator/vendor/github.com/blang/semver/json.go new file mode 100644 index 0000000..a74bf7c --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/json.go @@ -0,0 +1,23 @@ +package semver + +import ( + "encoding/json" +) + +// MarshalJSON implements the encoding/json.Marshaler interface. +func (v Version) MarshalJSON() ([]byte, error) { + return json.Marshal(v.String()) +} + +// UnmarshalJSON implements the encoding/json.Unmarshaler interface. +func (v *Version) UnmarshalJSON(data []byte) (err error) { + var versionString string + + if err = json.Unmarshal(data, &versionString); err != nil { + return + } + + *v, err = Parse(versionString) + + return +} diff --git a/docs/generator/vendor/github.com/blang/semver/json_test.go b/docs/generator/vendor/github.com/blang/semver/json_test.go new file mode 100644 index 0000000..c635dea --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/json_test.go @@ -0,0 +1,49 @@ +package semver + +import ( + "encoding/json" + "strconv" + "testing" +) + +func TestJSONMarshal(t *testing.T) { + versionString := "3.1.4-alpha.1.5.9+build.2.6.5" + v, err := Parse(versionString) + if err != nil { + t.Fatal(err) + } + + versionJSON, err := json.Marshal(v) + if err != nil { + t.Fatal(err) + } + + quotedVersionString := strconv.Quote(versionString) + + if string(versionJSON) != quotedVersionString { + t.Fatalf("JSON marshaled semantic version not equal: expected %q, got %q", quotedVersionString, string(versionJSON)) + } +} + +func TestJSONUnmarshal(t *testing.T) { + versionString := "3.1.4-alpha.1.5.9+build.2.6.5" + quotedVersionString := strconv.Quote(versionString) + + var v Version + if err := json.Unmarshal([]byte(quotedVersionString), &v); err != nil { + t.Fatal(err) + } + + if v.String() != versionString { + t.Fatalf("JSON unmarshaled semantic version not equal: expected %q, got %q", versionString, v.String()) + } + + badVersionString := strconv.Quote("3.1.4.1.5.9.2.6.5-other-digits-of-pi") + if err := json.Unmarshal([]byte(badVersionString), &v); err == nil { + t.Fatal("expected JSON unmarshal error, got nil") + } + + if err := json.Unmarshal([]byte("3.1"), &v); err == nil { + t.Fatal("expected JSON unmarshal error, got nil") + } +} diff --git a/docs/generator/vendor/github.com/blang/semver/package.json b/docs/generator/vendor/github.com/blang/semver/package.json new file mode 100644 index 0000000..568be8d --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/package.json @@ -0,0 +1,17 @@ +{ + "author": "blang", + "bugs": { + "URL": "https://github.com/blang/semver/issues", + "url": "https://github.com/blang/semver/issues" + }, + "gx": { + "dvcsimport": "github.com/blang/semver" + }, + "gxVersion": "0.10.0", + "language": "go", + "license": "MIT", + "name": "semver", + "releaseCmd": "git commit -a -m \"gx publish $VERSION\"", + "version": "3.4.0" +} + diff --git a/docs/generator/vendor/github.com/blang/semver/range.go b/docs/generator/vendor/github.com/blang/semver/range.go new file mode 100644 index 0000000..fca406d --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/range.go @@ -0,0 +1,416 @@ +package semver + +import ( + "fmt" + "strconv" + "strings" + "unicode" +) + +type wildcardType int + +const ( + noneWildcard wildcardType = iota + majorWildcard wildcardType = 1 + minorWildcard wildcardType = 2 + patchWildcard wildcardType = 3 +) + +func wildcardTypefromInt(i int) wildcardType { + switch i { + case 1: + return majorWildcard + case 2: + return minorWildcard + case 3: + return patchWildcard + default: + return noneWildcard + } +} + +type comparator func(Version, Version) bool + +var ( + compEQ comparator = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == 0 + } + compNE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) != 0 + } + compGT = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == 1 + } + compGE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) >= 0 + } + compLT = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == -1 + } + compLE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) <= 0 + } +) + +type versionRange struct { + v Version + c comparator +} + +// rangeFunc creates a Range from the given versionRange. +func (vr *versionRange) rangeFunc() Range { + return Range(func(v Version) bool { + return vr.c(v, vr.v) + }) +} + +// Range represents a range of versions. +// A Range can be used to check if a Version satisfies it: +// +// range, err := semver.ParseRange(">1.0.0 <2.0.0") +// range(semver.MustParse("1.1.1") // returns true +type Range func(Version) bool + +// OR combines the existing Range with another Range using logical OR. +func (rf Range) OR(f Range) Range { + return Range(func(v Version) bool { + return rf(v) || f(v) + }) +} + +// AND combines the existing Range with another Range using logical AND. +func (rf Range) AND(f Range) Range { + return Range(func(v Version) bool { + return rf(v) && f(v) + }) +} + +// ParseRange parses a range and returns a Range. +// If the range could not be parsed an error is returned. +// +// Valid ranges are: +// - "<1.0.0" +// - "<=1.0.0" +// - ">1.0.0" +// - ">=1.0.0" +// - "1.0.0", "=1.0.0", "==1.0.0" +// - "!1.0.0", "!=1.0.0" +// +// A Range can consist of multiple ranges separated by space: +// Ranges can be linked by logical AND: +// - ">1.0.0 <2.0.0" would match between both ranges, so "1.1.1" and "1.8.7" but not "1.0.0" or "2.0.0" +// - ">1.0.0 <3.0.0 !2.0.3-beta.2" would match every version between 1.0.0 and 3.0.0 except 2.0.3-beta.2 +// +// Ranges can also be linked by logical OR: +// - "<2.0.0 || >=3.0.0" would match "1.x.x" and "3.x.x" but not "2.x.x" +// +// AND has a higher precedence than OR. It's not possible to use brackets. +// +// Ranges can be combined by both AND and OR +// +// - `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1` +func ParseRange(s string) (Range, error) { + parts := splitAndTrim(s) + orParts, err := splitORParts(parts) + if err != nil { + return nil, err + } + expandedParts, err := expandWildcardVersion(orParts) + if err != nil { + return nil, err + } + var orFn Range + for _, p := range expandedParts { + var andFn Range + for _, ap := range p { + opStr, vStr, err := splitComparatorVersion(ap) + if err != nil { + return nil, err + } + vr, err := buildVersionRange(opStr, vStr) + if err != nil { + return nil, fmt.Errorf("Could not parse Range %q: %s", ap, err) + } + rf := vr.rangeFunc() + + // Set function + if andFn == nil { + andFn = rf + } else { // Combine with existing function + andFn = andFn.AND(rf) + } + } + if orFn == nil { + orFn = andFn + } else { + orFn = orFn.OR(andFn) + } + + } + return orFn, nil +} + +// splitORParts splits the already cleaned parts by '||'. +// Checks for invalid positions of the operator and returns an +// error if found. +func splitORParts(parts []string) ([][]string, error) { + var ORparts [][]string + last := 0 + for i, p := range parts { + if p == "||" { + if i == 0 { + return nil, fmt.Errorf("First element in range is '||'") + } + ORparts = append(ORparts, parts[last:i]) + last = i + 1 + } + } + if last == len(parts) { + return nil, fmt.Errorf("Last element in range is '||'") + } + ORparts = append(ORparts, parts[last:]) + return ORparts, nil +} + +// buildVersionRange takes a slice of 2: operator and version +// and builds a versionRange, otherwise an error. +func buildVersionRange(opStr, vStr string) (*versionRange, error) { + c := parseComparator(opStr) + if c == nil { + return nil, fmt.Errorf("Could not parse comparator %q in %q", opStr, strings.Join([]string{opStr, vStr}, "")) + } + v, err := Parse(vStr) + if err != nil { + return nil, fmt.Errorf("Could not parse version %q in %q: %s", vStr, strings.Join([]string{opStr, vStr}, ""), err) + } + + return &versionRange{ + v: v, + c: c, + }, nil + +} + +// inArray checks if a byte is contained in an array of bytes +func inArray(s byte, list []byte) bool { + for _, el := range list { + if el == s { + return true + } + } + return false +} + +// splitAndTrim splits a range string by spaces and cleans whitespaces +func splitAndTrim(s string) (result []string) { + last := 0 + var lastChar byte + excludeFromSplit := []byte{'>', '<', '='} + for i := 0; i < len(s); i++ { + if s[i] == ' ' && !inArray(lastChar, excludeFromSplit) { + if last < i-1 { + result = append(result, s[last:i]) + } + last = i + 1 + } else if s[i] != ' ' { + lastChar = s[i] + } + } + if last < len(s)-1 { + result = append(result, s[last:]) + } + + for i, v := range result { + result[i] = strings.Replace(v, " ", "", -1) + } + + // parts := strings.Split(s, " ") + // for _, x := range parts { + // if s := strings.TrimSpace(x); len(s) != 0 { + // result = append(result, s) + // } + // } + return +} + +// splitComparatorVersion splits the comparator from the version. +// Input must be free of leading or trailing spaces. +func splitComparatorVersion(s string) (string, string, error) { + i := strings.IndexFunc(s, unicode.IsDigit) + if i == -1 { + return "", "", fmt.Errorf("Could not get version from string: %q", s) + } + return strings.TrimSpace(s[0:i]), s[i:], nil +} + +// getWildcardType will return the type of wildcard that the +// passed version contains +func getWildcardType(vStr string) wildcardType { + parts := strings.Split(vStr, ".") + nparts := len(parts) + wildcard := parts[nparts-1] + + possibleWildcardType := wildcardTypefromInt(nparts) + if wildcard == "x" { + return possibleWildcardType + } + + return noneWildcard +} + +// createVersionFromWildcard will convert a wildcard version +// into a regular version, replacing 'x's with '0's, handling +// special cases like '1.x.x' and '1.x' +func createVersionFromWildcard(vStr string) string { + // handle 1.x.x + vStr2 := strings.Replace(vStr, ".x.x", ".x", 1) + vStr2 = strings.Replace(vStr2, ".x", ".0", 1) + parts := strings.Split(vStr2, ".") + + // handle 1.x + if len(parts) == 2 { + return vStr2 + ".0" + } + + return vStr2 +} + +// incrementMajorVersion will increment the major version +// of the passed version +func incrementMajorVersion(vStr string) (string, error) { + parts := strings.Split(vStr, ".") + i, err := strconv.Atoi(parts[0]) + if err != nil { + return "", err + } + parts[0] = strconv.Itoa(i + 1) + + return strings.Join(parts, "."), nil +} + +// incrementMajorVersion will increment the minor version +// of the passed version +func incrementMinorVersion(vStr string) (string, error) { + parts := strings.Split(vStr, ".") + i, err := strconv.Atoi(parts[1]) + if err != nil { + return "", err + } + parts[1] = strconv.Itoa(i + 1) + + return strings.Join(parts, "."), nil +} + +// expandWildcardVersion will expand wildcards inside versions +// following these rules: +// +// * when dealing with patch wildcards: +// >= 1.2.x will become >= 1.2.0 +// <= 1.2.x will become < 1.3.0 +// > 1.2.x will become >= 1.3.0 +// < 1.2.x will become < 1.2.0 +// != 1.2.x will become < 1.2.0 >= 1.3.0 +// +// * when dealing with minor wildcards: +// >= 1.x will become >= 1.0.0 +// <= 1.x will become < 2.0.0 +// > 1.x will become >= 2.0.0 +// < 1.0 will become < 1.0.0 +// != 1.x will become < 1.0.0 >= 2.0.0 +// +// * when dealing with wildcards without +// version operator: +// 1.2.x will become >= 1.2.0 < 1.3.0 +// 1.x will become >= 1.0.0 < 2.0.0 +func expandWildcardVersion(parts [][]string) ([][]string, error) { + var expandedParts [][]string + for _, p := range parts { + var newParts []string + for _, ap := range p { + if strings.Index(ap, "x") != -1 { + opStr, vStr, err := splitComparatorVersion(ap) + if err != nil { + return nil, err + } + + versionWildcardType := getWildcardType(vStr) + flatVersion := createVersionFromWildcard(vStr) + + var resultOperator string + var shouldIncrementVersion bool + switch opStr { + case ">": + resultOperator = ">=" + shouldIncrementVersion = true + case ">=": + resultOperator = ">=" + case "<": + resultOperator = "<" + case "<=": + resultOperator = "<" + shouldIncrementVersion = true + case "", "=", "==": + newParts = append(newParts, ">="+flatVersion) + resultOperator = "<" + shouldIncrementVersion = true + case "!=", "!": + newParts = append(newParts, "<"+flatVersion) + resultOperator = ">=" + shouldIncrementVersion = true + } + + var resultVersion string + if shouldIncrementVersion { + switch versionWildcardType { + case patchWildcard: + resultVersion, _ = incrementMinorVersion(flatVersion) + case minorWildcard: + resultVersion, _ = incrementMajorVersion(flatVersion) + } + } else { + resultVersion = flatVersion + } + + ap = resultOperator + resultVersion + } + newParts = append(newParts, ap) + } + expandedParts = append(expandedParts, newParts) + } + + return expandedParts, nil +} + +func parseComparator(s string) comparator { + switch s { + case "==": + fallthrough + case "": + fallthrough + case "=": + return compEQ + case ">": + return compGT + case ">=": + return compGE + case "<": + return compLT + case "<=": + return compLE + case "!": + fallthrough + case "!=": + return compNE + } + + return nil +} + +// MustParseRange is like ParseRange but panics if the range cannot be parsed. +func MustParseRange(s string) Range { + r, err := ParseRange(s) + if err != nil { + panic(`semver: ParseRange(` + s + `): ` + err.Error()) + } + return r +} diff --git a/docs/generator/vendor/github.com/blang/semver/range_test.go b/docs/generator/vendor/github.com/blang/semver/range_test.go new file mode 100644 index 0000000..83ee9c7 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/range_test.go @@ -0,0 +1,581 @@ +package semver + +import ( + "reflect" + "strings" + "testing" +) + +type wildcardTypeTest struct { + input string + wildcardType wildcardType +} + +type comparatorTest struct { + input string + comparator func(comparator) bool +} + +func TestParseComparator(t *testing.T) { + compatorTests := []comparatorTest{ + {">", testGT}, + {">=", testGE}, + {"<", testLT}, + {"<=", testLE}, + {"", testEQ}, + {"=", testEQ}, + {"==", testEQ}, + {"!=", testNE}, + {"!", testNE}, + {"-", nil}, + {"<==", nil}, + {"<<", nil}, + {">>", nil}, + } + + for _, tc := range compatorTests { + if c := parseComparator(tc.input); c == nil { + if tc.comparator != nil { + t.Errorf("Comparator nil for case %q\n", tc.input) + } + } else if !tc.comparator(c) { + t.Errorf("Invalid comparator for case %q\n", tc.input) + } + } +} + +var ( + v1 = MustParse("1.2.2") + v2 = MustParse("1.2.3") + v3 = MustParse("1.2.4") +) + +func testEQ(f comparator) bool { + return f(v1, v1) && !f(v1, v2) +} + +func testNE(f comparator) bool { + return !f(v1, v1) && f(v1, v2) +} + +func testGT(f comparator) bool { + return f(v2, v1) && f(v3, v2) && !f(v1, v2) && !f(v1, v1) +} + +func testGE(f comparator) bool { + return f(v2, v1) && f(v3, v2) && !f(v1, v2) +} + +func testLT(f comparator) bool { + return f(v1, v2) && f(v2, v3) && !f(v2, v1) && !f(v1, v1) +} + +func testLE(f comparator) bool { + return f(v1, v2) && f(v2, v3) && !f(v2, v1) +} + +func TestSplitAndTrim(t *testing.T) { + tests := []struct { + i string + s []string + }{ + {"1.2.3 1.2.3", []string{"1.2.3", "1.2.3"}}, + {" 1.2.3 1.2.3 ", []string{"1.2.3", "1.2.3"}}, // Spaces + {" >= 1.2.3 <= 1.2.3 ", []string{">=1.2.3", "<=1.2.3"}}, // Spaces between operator and version + {"1.2.3 || >=1.2.3 <1.2.3", []string{"1.2.3", "||", ">=1.2.3", "<1.2.3"}}, + {" 1.2.3 || >=1.2.3 <1.2.3 ", []string{"1.2.3", "||", ">=1.2.3", "<1.2.3"}}, + } + + for _, tc := range tests { + p := splitAndTrim(tc.i) + if !reflect.DeepEqual(p, tc.s) { + t.Errorf("Invalid for case %q: Expected %q, got: %q", tc.i, tc.s, p) + } + } +} + +func TestSplitComparatorVersion(t *testing.T) { + tests := []struct { + i string + p []string + }{ + {">1.2.3", []string{">", "1.2.3"}}, + {">=1.2.3", []string{">=", "1.2.3"}}, + {"<1.2.3", []string{"<", "1.2.3"}}, + {"<=1.2.3", []string{"<=", "1.2.3"}}, + {"1.2.3", []string{"", "1.2.3"}}, + {"=1.2.3", []string{"=", "1.2.3"}}, + {"==1.2.3", []string{"==", "1.2.3"}}, + {"!=1.2.3", []string{"!=", "1.2.3"}}, + {"!1.2.3", []string{"!", "1.2.3"}}, + {"error", nil}, + } + for _, tc := range tests { + if op, v, err := splitComparatorVersion(tc.i); err != nil { + if tc.p != nil { + t.Errorf("Invalid for case %q: Expected %q, got error %q", tc.i, tc.p, err) + } + } else if op != tc.p[0] { + t.Errorf("Invalid operator for case %q: Expected %q, got: %q", tc.i, tc.p[0], op) + } else if v != tc.p[1] { + t.Errorf("Invalid version for case %q: Expected %q, got: %q", tc.i, tc.p[1], v) + } + + } +} + +func TestBuildVersionRange(t *testing.T) { + tests := []struct { + opStr string + vStr string + c func(comparator) bool + v string + }{ + {">", "1.2.3", testGT, "1.2.3"}, + {">=", "1.2.3", testGE, "1.2.3"}, + {"<", "1.2.3", testLT, "1.2.3"}, + {"<=", "1.2.3", testLE, "1.2.3"}, + {"", "1.2.3", testEQ, "1.2.3"}, + {"=", "1.2.3", testEQ, "1.2.3"}, + {"==", "1.2.3", testEQ, "1.2.3"}, + {"!=", "1.2.3", testNE, "1.2.3"}, + {"!", "1.2.3", testNE, "1.2.3"}, + {">>", "1.2.3", nil, ""}, // Invalid comparator + {"=", "invalid", nil, ""}, // Invalid version + } + + for _, tc := range tests { + if r, err := buildVersionRange(tc.opStr, tc.vStr); err != nil { + if tc.c != nil { + t.Errorf("Invalid for case %q: Expected %q, got error %q", strings.Join([]string{tc.opStr, tc.vStr}, ""), tc.v, err) + } + } else if r == nil { + t.Errorf("Invalid for case %q: got nil", strings.Join([]string{tc.opStr, tc.vStr}, "")) + } else { + // test version + if tv := MustParse(tc.v); !r.v.EQ(tv) { + t.Errorf("Invalid for case %q: Expected version %q, got: %q", strings.Join([]string{tc.opStr, tc.vStr}, ""), tv, r.v) + } + // test comparator + if r.c == nil { + t.Errorf("Invalid for case %q: got nil comparator", strings.Join([]string{tc.opStr, tc.vStr}, "")) + continue + } + if !tc.c(r.c) { + t.Errorf("Invalid comparator for case %q\n", strings.Join([]string{tc.opStr, tc.vStr}, "")) + } + } + } + +} + +func TestSplitORParts(t *testing.T) { + tests := []struct { + i []string + o [][]string + }{ + {[]string{">1.2.3", "||", "<1.2.3", "||", "=1.2.3"}, [][]string{ + []string{">1.2.3"}, + []string{"<1.2.3"}, + []string{"=1.2.3"}, + }}, + {[]string{">1.2.3", "<1.2.3", "||", "=1.2.3"}, [][]string{ + []string{">1.2.3", "<1.2.3"}, + []string{"=1.2.3"}, + }}, + {[]string{">1.2.3", "||"}, nil}, + {[]string{"||", ">1.2.3"}, nil}, + } + for _, tc := range tests { + o, err := splitORParts(tc.i) + if err != nil && tc.o != nil { + t.Errorf("Unexpected error for case %q: %s", tc.i, err) + } + if !reflect.DeepEqual(tc.o, o) { + t.Errorf("Invalid for case %q: Expected %q, got: %q", tc.i, tc.o, o) + } + } +} + +func TestGetWildcardType(t *testing.T) { + wildcardTypeTests := []wildcardTypeTest{ + {"x", majorWildcard}, + {"1.x", minorWildcard}, + {"1.2.x", patchWildcard}, + {"fo.o.b.ar", noneWildcard}, + } + + for _, tc := range wildcardTypeTests { + o := getWildcardType(tc.input) + if o != tc.wildcardType { + t.Errorf("Invalid for case: %q: Expected %q, got: %q", tc.input, tc.wildcardType, o) + } + } +} + +func TestCreateVersionFromWildcard(t *testing.T) { + tests := []struct { + i string + s string + }{ + {"1.2.x", "1.2.0"}, + {"1.x", "1.0.0"}, + } + + for _, tc := range tests { + p := createVersionFromWildcard(tc.i) + if p != tc.s { + t.Errorf("Invalid for case %q: Expected %q, got: %q", tc.i, tc.s, p) + } + } +} + +func TestIncrementMajorVersion(t *testing.T) { + tests := []struct { + i string + s string + }{ + {"1.2.3", "2.2.3"}, + {"1.2", "2.2"}, + {"foo.bar", ""}, + } + + for _, tc := range tests { + p, _ := incrementMajorVersion(tc.i) + if p != tc.s { + t.Errorf("Invalid for case %q: Expected %q, got: %q", tc.i, tc.s, p) + } + } +} + +func TestIncrementMinorVersion(t *testing.T) { + tests := []struct { + i string + s string + }{ + {"1.2.3", "1.3.3"}, + {"1.2", "1.3"}, + {"foo.bar", ""}, + } + + for _, tc := range tests { + p, _ := incrementMinorVersion(tc.i) + if p != tc.s { + t.Errorf("Invalid for case %q: Expected %q, got: %q", tc.i, tc.s, p) + } + } +} + +func TestExpandWildcardVersion(t *testing.T) { + tests := []struct { + i [][]string + o [][]string + }{ + {[][]string{[]string{"foox"}}, nil}, + {[][]string{[]string{">=1.2.x"}}, [][]string{[]string{">=1.2.0"}}}, + {[][]string{[]string{"<=1.2.x"}}, [][]string{[]string{"<1.3.0"}}}, + {[][]string{[]string{">1.2.x"}}, [][]string{[]string{">=1.3.0"}}}, + {[][]string{[]string{"<1.2.x"}}, [][]string{[]string{"<1.2.0"}}}, + {[][]string{[]string{"!=1.2.x"}}, [][]string{[]string{"<1.2.0", ">=1.3.0"}}}, + {[][]string{[]string{">=1.x"}}, [][]string{[]string{">=1.0.0"}}}, + {[][]string{[]string{"<=1.x"}}, [][]string{[]string{"<2.0.0"}}}, + {[][]string{[]string{">1.x"}}, [][]string{[]string{">=2.0.0"}}}, + {[][]string{[]string{"<1.x"}}, [][]string{[]string{"<1.0.0"}}}, + {[][]string{[]string{"!=1.x"}}, [][]string{[]string{"<1.0.0", ">=2.0.0"}}}, + {[][]string{[]string{"1.2.x"}}, [][]string{[]string{">=1.2.0", "<1.3.0"}}}, + {[][]string{[]string{"1.x"}}, [][]string{[]string{">=1.0.0", "<2.0.0"}}}, + } + + for _, tc := range tests { + o, _ := expandWildcardVersion(tc.i) + if !reflect.DeepEqual(tc.o, o) { + t.Errorf("Invalid for case %q: Expected %q, got: %q", tc.i, tc.o, o) + } + } +} + +func TestVersionRangeToRange(t *testing.T) { + vr := versionRange{ + v: MustParse("1.2.3"), + c: compLT, + } + rf := vr.rangeFunc() + if !rf(MustParse("1.2.2")) || rf(MustParse("1.2.3")) { + t.Errorf("Invalid conversion to range func") + } +} + +func TestRangeAND(t *testing.T) { + v := MustParse("1.2.2") + v1 := MustParse("1.2.1") + v2 := MustParse("1.2.3") + rf1 := Range(func(v Version) bool { + return v.GT(v1) + }) + rf2 := Range(func(v Version) bool { + return v.LT(v2) + }) + rf := rf1.AND(rf2) + if rf(v1) { + t.Errorf("Invalid rangefunc, accepted: %s", v1) + } + if rf(v2) { + t.Errorf("Invalid rangefunc, accepted: %s", v2) + } + if !rf(v) { + t.Errorf("Invalid rangefunc, did not accept: %s", v) + } +} + +func TestRangeOR(t *testing.T) { + tests := []struct { + v Version + b bool + }{ + {MustParse("1.2.0"), true}, + {MustParse("1.2.2"), false}, + {MustParse("1.2.4"), true}, + } + v1 := MustParse("1.2.1") + v2 := MustParse("1.2.3") + rf1 := Range(func(v Version) bool { + return v.LT(v1) + }) + rf2 := Range(func(v Version) bool { + return v.GT(v2) + }) + rf := rf1.OR(rf2) + for _, tc := range tests { + if r := rf(tc.v); r != tc.b { + t.Errorf("Invalid for case %q: Expected %t, got %t", tc.v, tc.b, r) + } + } +} + +func TestParseRange(t *testing.T) { + type tv struct { + v string + b bool + } + tests := []struct { + i string + t []tv + }{ + // Simple expressions + {">1.2.3", []tv{ + {"1.2.2", false}, + {"1.2.3", false}, + {"1.2.4", true}, + }}, + {">=1.2.3", []tv{ + {"1.2.3", true}, + {"1.2.4", true}, + {"1.2.2", false}, + }}, + {"<1.2.3", []tv{ + {"1.2.2", true}, + {"1.2.3", false}, + {"1.2.4", false}, + }}, + {"<=1.2.3", []tv{ + {"1.2.2", true}, + {"1.2.3", true}, + {"1.2.4", false}, + }}, + {"1.2.3", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + }}, + {"=1.2.3", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + }}, + {"==1.2.3", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + }}, + {"!=1.2.3", []tv{ + {"1.2.2", true}, + {"1.2.3", false}, + {"1.2.4", true}, + }}, + {"!1.2.3", []tv{ + {"1.2.2", true}, + {"1.2.3", false}, + {"1.2.4", true}, + }}, + // Simple Expression errors + {">>1.2.3", nil}, + {"!1.2.3", nil}, + {"1.0", nil}, + {"string", nil}, + {"", nil}, + {"fo.ob.ar.x", nil}, + // AND Expressions + {">1.2.2 <1.2.4", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + }}, + {"<1.2.2 <1.2.4", []tv{ + {"1.2.1", true}, + {"1.2.2", false}, + {"1.2.3", false}, + {"1.2.4", false}, + }}, + {">1.2.2 <1.2.5 !=1.2.4", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + {"1.2.5", false}, + }}, + {">1.2.2 <1.2.5 !1.2.4", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + {"1.2.5", false}, + }}, + // OR Expressions + {">1.2.2 || <1.2.4", []tv{ + {"1.2.2", true}, + {"1.2.3", true}, + {"1.2.4", true}, + }}, + {"<1.2.2 || >1.2.4", []tv{ + {"1.2.2", false}, + {"1.2.3", false}, + {"1.2.4", false}, + }}, + // Wildcard expressions + {">1.x", []tv{ + {"0.1.9", false}, + {"1.2.6", false}, + {"1.9.0", false}, + {"2.0.0", true}, + }}, + {">1.2.x", []tv{ + {"1.1.9", false}, + {"1.2.6", false}, + {"1.3.0", true}, + }}, + // Combined Expressions + {">1.2.2 <1.2.4 || >=2.0.0", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + {"2.0.0", true}, + {"2.0.1", true}, + }}, + {"1.x || >=2.0.x <2.2.x", []tv{ + {"0.9.2", false}, + {"1.2.2", true}, + {"2.0.0", true}, + {"2.1.8", true}, + {"2.2.0", false}, + }}, + {">1.2.2 <1.2.4 || >=2.0.0 <3.0.0", []tv{ + {"1.2.2", false}, + {"1.2.3", true}, + {"1.2.4", false}, + {"2.0.0", true}, + {"2.0.1", true}, + {"2.9.9", true}, + {"3.0.0", false}, + }}, + } + + for _, tc := range tests { + r, err := ParseRange(tc.i) + if err != nil && tc.t != nil { + t.Errorf("Error parsing range %q: %s", tc.i, err) + continue + } + for _, tvc := range tc.t { + v := MustParse(tvc.v) + if res := r(v); res != tvc.b { + t.Errorf("Invalid for case %q matching %q: Expected %t, got: %t", tc.i, tvc.v, tvc.b, res) + } + } + + } +} + +func TestMustParseRange(t *testing.T) { + testCase := ">1.2.2 <1.2.4 || >=2.0.0 <3.0.0" + r := MustParseRange(testCase) + if !r(MustParse("1.2.3")) { + t.Errorf("Unexpected range behavior on MustParseRange") + } +} + +func TestMustParseRange_panic(t *testing.T) { + defer func() { + if recover() == nil { + t.Errorf("Should have panicked") + } + }() + _ = MustParseRange("invalid version") +} + +func BenchmarkRangeParseSimple(b *testing.B) { + const VERSION = ">1.0.0" + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + ParseRange(VERSION) + } +} + +func BenchmarkRangeParseAverage(b *testing.B) { + const VERSION = ">=1.0.0 <2.0.0" + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + ParseRange(VERSION) + } +} + +func BenchmarkRangeParseComplex(b *testing.B) { + const VERSION = ">=1.0.0 <2.0.0 || >=3.0.1 <4.0.0 !=3.0.3 || >=5.0.0" + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + ParseRange(VERSION) + } +} + +func BenchmarkRangeMatchSimple(b *testing.B) { + const VERSION = ">1.0.0" + r, _ := ParseRange(VERSION) + v := MustParse("2.0.0") + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + r(v) + } +} + +func BenchmarkRangeMatchAverage(b *testing.B) { + const VERSION = ">=1.0.0 <2.0.0" + r, _ := ParseRange(VERSION) + v := MustParse("1.2.3") + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + r(v) + } +} + +func BenchmarkRangeMatchComplex(b *testing.B) { + const VERSION = ">=1.0.0 <2.0.0 || >=3.0.1 <4.0.0 !=3.0.3 || >=5.0.0" + r, _ := ParseRange(VERSION) + v := MustParse("5.0.1") + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + r(v) + } +} diff --git a/docs/generator/vendor/github.com/blang/semver/semver.go b/docs/generator/vendor/github.com/blang/semver/semver.go new file mode 100644 index 0000000..8ee0842 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/semver.go @@ -0,0 +1,418 @@ +package semver + +import ( + "errors" + "fmt" + "strconv" + "strings" +) + +const ( + numbers string = "0123456789" + alphas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-" + alphanum = alphas + numbers +) + +// SpecVersion is the latest fully supported spec version of semver +var SpecVersion = Version{ + Major: 2, + Minor: 0, + Patch: 0, +} + +// Version represents a semver compatible version +type Version struct { + Major uint64 + Minor uint64 + Patch uint64 + Pre []PRVersion + Build []string //No Precendence +} + +// Version to string +func (v Version) String() string { + b := make([]byte, 0, 5) + b = strconv.AppendUint(b, v.Major, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Minor, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Patch, 10) + + if len(v.Pre) > 0 { + b = append(b, '-') + b = append(b, v.Pre[0].String()...) + + for _, pre := range v.Pre[1:] { + b = append(b, '.') + b = append(b, pre.String()...) + } + } + + if len(v.Build) > 0 { + b = append(b, '+') + b = append(b, v.Build[0]...) + + for _, build := range v.Build[1:] { + b = append(b, '.') + b = append(b, build...) + } + } + + return string(b) +} + +// Equals checks if v is equal to o. +func (v Version) Equals(o Version) bool { + return (v.Compare(o) == 0) +} + +// EQ checks if v is equal to o. +func (v Version) EQ(o Version) bool { + return (v.Compare(o) == 0) +} + +// NE checks if v is not equal to o. +func (v Version) NE(o Version) bool { + return (v.Compare(o) != 0) +} + +// GT checks if v is greater than o. +func (v Version) GT(o Version) bool { + return (v.Compare(o) == 1) +} + +// GTE checks if v is greater than or equal to o. +func (v Version) GTE(o Version) bool { + return (v.Compare(o) >= 0) +} + +// GE checks if v is greater than or equal to o. +func (v Version) GE(o Version) bool { + return (v.Compare(o) >= 0) +} + +// LT checks if v is less than o. +func (v Version) LT(o Version) bool { + return (v.Compare(o) == -1) +} + +// LTE checks if v is less than or equal to o. +func (v Version) LTE(o Version) bool { + return (v.Compare(o) <= 0) +} + +// LE checks if v is less than or equal to o. +func (v Version) LE(o Version) bool { + return (v.Compare(o) <= 0) +} + +// Compare compares Versions v to o: +// -1 == v is less than o +// 0 == v is equal to o +// 1 == v is greater than o +func (v Version) Compare(o Version) int { + if v.Major != o.Major { + if v.Major > o.Major { + return 1 + } + return -1 + } + if v.Minor != o.Minor { + if v.Minor > o.Minor { + return 1 + } + return -1 + } + if v.Patch != o.Patch { + if v.Patch > o.Patch { + return 1 + } + return -1 + } + + // Quick comparison if a version has no prerelease versions + if len(v.Pre) == 0 && len(o.Pre) == 0 { + return 0 + } else if len(v.Pre) == 0 && len(o.Pre) > 0 { + return 1 + } else if len(v.Pre) > 0 && len(o.Pre) == 0 { + return -1 + } + + i := 0 + for ; i < len(v.Pre) && i < len(o.Pre); i++ { + if comp := v.Pre[i].Compare(o.Pre[i]); comp == 0 { + continue + } else if comp == 1 { + return 1 + } else { + return -1 + } + } + + // If all pr versions are the equal but one has further prversion, this one greater + if i == len(v.Pre) && i == len(o.Pre) { + return 0 + } else if i == len(v.Pre) && i < len(o.Pre) { + return -1 + } else { + return 1 + } + +} + +// Validate validates v and returns error in case +func (v Version) Validate() error { + // Major, Minor, Patch already validated using uint64 + + for _, pre := range v.Pre { + if !pre.IsNum { //Numeric prerelease versions already uint64 + if len(pre.VersionStr) == 0 { + return fmt.Errorf("Prerelease can not be empty %q", pre.VersionStr) + } + if !containsOnly(pre.VersionStr, alphanum) { + return fmt.Errorf("Invalid character(s) found in prerelease %q", pre.VersionStr) + } + } + } + + for _, build := range v.Build { + if len(build) == 0 { + return fmt.Errorf("Build meta data can not be empty %q", build) + } + if !containsOnly(build, alphanum) { + return fmt.Errorf("Invalid character(s) found in build meta data %q", build) + } + } + + return nil +} + +// New is an alias for Parse and returns a pointer, parses version string and returns a validated Version or error +func New(s string) (vp *Version, err error) { + v, err := Parse(s) + vp = &v + return +} + +// Make is an alias for Parse, parses version string and returns a validated Version or error +func Make(s string) (Version, error) { + return Parse(s) +} + +// ParseTolerant allows for certain version specifications that do not strictly adhere to semver +// specs to be parsed by this library. It does so by normalizing versions before passing them to +// Parse(). It currently trims spaces, removes a "v" prefix, and adds a 0 patch number to versions +// with only major and minor components specified +func ParseTolerant(s string) (Version, error) { + s = strings.TrimSpace(s) + s = strings.TrimPrefix(s, "v") + + // Split into major.minor.(patch+pr+meta) + parts := strings.SplitN(s, ".", 3) + if len(parts) < 3 { + if strings.ContainsAny(parts[len(parts)-1], "+-") { + return Version{}, errors.New("Short version cannot contain PreRelease/Build meta data") + } + for len(parts) < 3 { + parts = append(parts, "0") + } + s = strings.Join(parts, ".") + } + + return Parse(s) +} + +// Parse parses version string and returns a validated Version or error +func Parse(s string) (Version, error) { + if len(s) == 0 { + return Version{}, errors.New("Version string empty") + } + + // Split into major.minor.(patch+pr+meta) + parts := strings.SplitN(s, ".", 3) + if len(parts) != 3 { + return Version{}, errors.New("No Major.Minor.Patch elements found") + } + + // Major + if !containsOnly(parts[0], numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in major number %q", parts[0]) + } + if hasLeadingZeroes(parts[0]) { + return Version{}, fmt.Errorf("Major number must not contain leading zeroes %q", parts[0]) + } + major, err := strconv.ParseUint(parts[0], 10, 64) + if err != nil { + return Version{}, err + } + + // Minor + if !containsOnly(parts[1], numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1]) + } + if hasLeadingZeroes(parts[1]) { + return Version{}, fmt.Errorf("Minor number must not contain leading zeroes %q", parts[1]) + } + minor, err := strconv.ParseUint(parts[1], 10, 64) + if err != nil { + return Version{}, err + } + + v := Version{} + v.Major = major + v.Minor = minor + + var build, prerelease []string + patchStr := parts[2] + + if buildIndex := strings.IndexRune(patchStr, '+'); buildIndex != -1 { + build = strings.Split(patchStr[buildIndex+1:], ".") + patchStr = patchStr[:buildIndex] + } + + if preIndex := strings.IndexRune(patchStr, '-'); preIndex != -1 { + prerelease = strings.Split(patchStr[preIndex+1:], ".") + patchStr = patchStr[:preIndex] + } + + if !containsOnly(patchStr, numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in patch number %q", patchStr) + } + if hasLeadingZeroes(patchStr) { + return Version{}, fmt.Errorf("Patch number must not contain leading zeroes %q", patchStr) + } + patch, err := strconv.ParseUint(patchStr, 10, 64) + if err != nil { + return Version{}, err + } + + v.Patch = patch + + // Prerelease + for _, prstr := range prerelease { + parsedPR, err := NewPRVersion(prstr) + if err != nil { + return Version{}, err + } + v.Pre = append(v.Pre, parsedPR) + } + + // Build meta data + for _, str := range build { + if len(str) == 0 { + return Version{}, errors.New("Build meta data is empty") + } + if !containsOnly(str, alphanum) { + return Version{}, fmt.Errorf("Invalid character(s) found in build meta data %q", str) + } + v.Build = append(v.Build, str) + } + + return v, nil +} + +// MustParse is like Parse but panics if the version cannot be parsed. +func MustParse(s string) Version { + v, err := Parse(s) + if err != nil { + panic(`semver: Parse(` + s + `): ` + err.Error()) + } + return v +} + +// PRVersion represents a PreRelease Version +type PRVersion struct { + VersionStr string + VersionNum uint64 + IsNum bool +} + +// NewPRVersion creates a new valid prerelease version +func NewPRVersion(s string) (PRVersion, error) { + if len(s) == 0 { + return PRVersion{}, errors.New("Prerelease is empty") + } + v := PRVersion{} + if containsOnly(s, numbers) { + if hasLeadingZeroes(s) { + return PRVersion{}, fmt.Errorf("Numeric PreRelease version must not contain leading zeroes %q", s) + } + num, err := strconv.ParseUint(s, 10, 64) + + // Might never be hit, but just in case + if err != nil { + return PRVersion{}, err + } + v.VersionNum = num + v.IsNum = true + } else if containsOnly(s, alphanum) { + v.VersionStr = s + v.IsNum = false + } else { + return PRVersion{}, fmt.Errorf("Invalid character(s) found in prerelease %q", s) + } + return v, nil +} + +// IsNumeric checks if prerelease-version is numeric +func (v PRVersion) IsNumeric() bool { + return v.IsNum +} + +// Compare compares two PreRelease Versions v and o: +// -1 == v is less than o +// 0 == v is equal to o +// 1 == v is greater than o +func (v PRVersion) Compare(o PRVersion) int { + if v.IsNum && !o.IsNum { + return -1 + } else if !v.IsNum && o.IsNum { + return 1 + } else if v.IsNum && o.IsNum { + if v.VersionNum == o.VersionNum { + return 0 + } else if v.VersionNum > o.VersionNum { + return 1 + } else { + return -1 + } + } else { // both are Alphas + if v.VersionStr == o.VersionStr { + return 0 + } else if v.VersionStr > o.VersionStr { + return 1 + } else { + return -1 + } + } +} + +// PreRelease version to string +func (v PRVersion) String() string { + if v.IsNum { + return strconv.FormatUint(v.VersionNum, 10) + } + return v.VersionStr +} + +func containsOnly(s string, set string) bool { + return strings.IndexFunc(s, func(r rune) bool { + return !strings.ContainsRune(set, r) + }) == -1 +} + +func hasLeadingZeroes(s string) bool { + return len(s) > 1 && s[0] == '0' +} + +// NewBuildVersion creates a new valid build version +func NewBuildVersion(s string) (string, error) { + if len(s) == 0 { + return "", errors.New("Buildversion is empty") + } + if !containsOnly(s, alphanum) { + return "", fmt.Errorf("Invalid character(s) found in build meta data %q", s) + } + return s, nil +} diff --git a/docs/generator/vendor/github.com/blang/semver/semver_test.go b/docs/generator/vendor/github.com/blang/semver/semver_test.go new file mode 100644 index 0000000..b3e1fd4 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/semver_test.go @@ -0,0 +1,458 @@ +package semver + +import ( + "testing" +) + +func prstr(s string) PRVersion { + return PRVersion{s, 0, false} +} + +func prnum(i uint64) PRVersion { + return PRVersion{"", i, true} +} + +type formatTest struct { + v Version + result string +} + +var formatTests = []formatTest{ + {Version{1, 2, 3, nil, nil}, "1.2.3"}, + {Version{0, 0, 1, nil, nil}, "0.0.1"}, + {Version{0, 0, 1, []PRVersion{prstr("alpha"), prstr("preview")}, []string{"123", "456"}}, "0.0.1-alpha.preview+123.456"}, + {Version{1, 2, 3, []PRVersion{prstr("alpha"), prnum(1)}, []string{"123", "456"}}, "1.2.3-alpha.1+123.456"}, + {Version{1, 2, 3, []PRVersion{prstr("alpha"), prnum(1)}, nil}, "1.2.3-alpha.1"}, + {Version{1, 2, 3, nil, []string{"123", "456"}}, "1.2.3+123.456"}, + // Prereleases and build metadata hyphens + {Version{1, 2, 3, []PRVersion{prstr("alpha"), prstr("b-eta")}, []string{"123", "b-uild"}}, "1.2.3-alpha.b-eta+123.b-uild"}, + {Version{1, 2, 3, nil, []string{"123", "b-uild"}}, "1.2.3+123.b-uild"}, + {Version{1, 2, 3, []PRVersion{prstr("alpha"), prstr("b-eta")}, nil}, "1.2.3-alpha.b-eta"}, +} + +var tolerantFormatTests = []formatTest{ + {Version{1, 2, 3, nil, nil}, "v1.2.3"}, + {Version{1, 2, 3, nil, nil}, " 1.2.3 "}, + {Version{1, 2, 0, nil, nil}, "1.2"}, + {Version{1, 0, 0, nil, nil}, "1"}, +} + +func TestStringer(t *testing.T) { + for _, test := range formatTests { + if res := test.v.String(); res != test.result { + t.Errorf("Stringer, expected %q but got %q", test.result, res) + } + } +} + +func TestParse(t *testing.T) { + for _, test := range formatTests { + if v, err := Parse(test.result); err != nil { + t.Errorf("Error parsing %q: %q", test.result, err) + } else if comp := v.Compare(test.v); comp != 0 { + t.Errorf("Parsing, expected %q but got %q, comp: %d ", test.v, v, comp) + } else if err := v.Validate(); err != nil { + t.Errorf("Error validating parsed version %q: %q", test.v, err) + } + } +} + +func TestParseTolerant(t *testing.T) { + for _, test := range tolerantFormatTests { + if v, err := ParseTolerant(test.result); err != nil { + t.Errorf("Error parsing %q: %q", test.result, err) + } else if comp := v.Compare(test.v); comp != 0 { + t.Errorf("Parsing, expected %q but got %q, comp: %d ", test.v, v, comp) + } else if err := v.Validate(); err != nil { + t.Errorf("Error validating parsed version %q: %q", test.v, err) + } + } +} + +func TestMustParse(t *testing.T) { + _ = MustParse("32.2.1-alpha") +} + +func TestMustParse_panic(t *testing.T) { + defer func() { + if recover() == nil { + t.Errorf("Should have panicked") + } + }() + _ = MustParse("invalid version") +} + +func TestValidate(t *testing.T) { + for _, test := range formatTests { + if err := test.v.Validate(); err != nil { + t.Errorf("Error validating %q: %q", test.v, err) + } + } +} + +type compareTest struct { + v1 Version + v2 Version + result int +} + +var compareTests = []compareTest{ + {Version{1, 0, 0, nil, nil}, Version{1, 0, 0, nil, nil}, 0}, + {Version{2, 0, 0, nil, nil}, Version{1, 0, 0, nil, nil}, 1}, + {Version{0, 1, 0, nil, nil}, Version{0, 1, 0, nil, nil}, 0}, + {Version{0, 2, 0, nil, nil}, Version{0, 1, 0, nil, nil}, 1}, + {Version{0, 0, 1, nil, nil}, Version{0, 0, 1, nil, nil}, 0}, + {Version{0, 0, 2, nil, nil}, Version{0, 0, 1, nil, nil}, 1}, + {Version{1, 2, 3, nil, nil}, Version{1, 2, 3, nil, nil}, 0}, + {Version{2, 2, 4, nil, nil}, Version{1, 2, 4, nil, nil}, 1}, + {Version{1, 3, 3, nil, nil}, Version{1, 2, 3, nil, nil}, 1}, + {Version{1, 2, 4, nil, nil}, Version{1, 2, 3, nil, nil}, 1}, + + // Spec Examples #11 + {Version{1, 0, 0, nil, nil}, Version{2, 0, 0, nil, nil}, -1}, + {Version{2, 0, 0, nil, nil}, Version{2, 1, 0, nil, nil}, -1}, + {Version{2, 1, 0, nil, nil}, Version{2, 1, 1, nil, nil}, -1}, + + // Spec Examples #9 + {Version{1, 0, 0, nil, nil}, Version{1, 0, 0, []PRVersion{prstr("alpha")}, nil}, 1}, + {Version{1, 0, 0, []PRVersion{prstr("alpha")}, nil}, Version{1, 0, 0, []PRVersion{prstr("alpha"), prnum(1)}, nil}, -1}, + {Version{1, 0, 0, []PRVersion{prstr("alpha"), prnum(1)}, nil}, Version{1, 0, 0, []PRVersion{prstr("alpha"), prstr("beta")}, nil}, -1}, + {Version{1, 0, 0, []PRVersion{prstr("alpha"), prstr("beta")}, nil}, Version{1, 0, 0, []PRVersion{prstr("beta")}, nil}, -1}, + {Version{1, 0, 0, []PRVersion{prstr("beta")}, nil}, Version{1, 0, 0, []PRVersion{prstr("beta"), prnum(2)}, nil}, -1}, + {Version{1, 0, 0, []PRVersion{prstr("beta"), prnum(2)}, nil}, Version{1, 0, 0, []PRVersion{prstr("beta"), prnum(11)}, nil}, -1}, + {Version{1, 0, 0, []PRVersion{prstr("beta"), prnum(11)}, nil}, Version{1, 0, 0, []PRVersion{prstr("rc"), prnum(1)}, nil}, -1}, + {Version{1, 0, 0, []PRVersion{prstr("rc"), prnum(1)}, nil}, Version{1, 0, 0, nil, nil}, -1}, + + // Ignore Build metadata + {Version{1, 0, 0, nil, []string{"1", "2", "3"}}, Version{1, 0, 0, nil, nil}, 0}, +} + +func TestCompare(t *testing.T) { + for _, test := range compareTests { + if res := test.v1.Compare(test.v2); res != test.result { + t.Errorf("Comparing %q : %q, expected %d but got %d", test.v1, test.v2, test.result, res) + } + //Test counterpart + if res := test.v2.Compare(test.v1); res != -test.result { + t.Errorf("Comparing %q : %q, expected %d but got %d", test.v2, test.v1, -test.result, res) + } + } +} + +type wrongformatTest struct { + v *Version + str string +} + +var wrongformatTests = []wrongformatTest{ + {nil, ""}, + {nil, "."}, + {nil, "1."}, + {nil, ".1"}, + {nil, "a.b.c"}, + {nil, "1.a.b"}, + {nil, "1.1.a"}, + {nil, "1.a.1"}, + {nil, "a.1.1"}, + {nil, ".."}, + {nil, "1.."}, + {nil, "1.1."}, + {nil, "1..1"}, + {nil, "1.1.+123"}, + {nil, "1.1.-beta"}, + {nil, "-1.1.1"}, + {nil, "1.-1.1"}, + {nil, "1.1.-1"}, + // giant numbers + {nil, "20000000000000000000.1.1"}, + {nil, "1.20000000000000000000.1"}, + {nil, "1.1.20000000000000000000"}, + {nil, "1.1.1-20000000000000000000"}, + // Leading zeroes + {nil, "01.1.1"}, + {nil, "001.1.1"}, + {nil, "1.01.1"}, + {nil, "1.001.1"}, + {nil, "1.1.01"}, + {nil, "1.1.001"}, + {nil, "1.1.1-01"}, + {nil, "1.1.1-001"}, + {nil, "1.1.1-beta.01"}, + {nil, "1.1.1-beta.001"}, + {&Version{0, 0, 0, []PRVersion{prstr("!")}, nil}, "0.0.0-!"}, + {&Version{0, 0, 0, nil, []string{"!"}}, "0.0.0+!"}, + // empty prversion + {&Version{0, 0, 0, []PRVersion{prstr(""), prstr("alpha")}, nil}, "0.0.0-.alpha"}, + // empty build meta data + {&Version{0, 0, 0, []PRVersion{prstr("alpha")}, []string{""}}, "0.0.0-alpha+"}, + {&Version{0, 0, 0, []PRVersion{prstr("alpha")}, []string{"test", ""}}, "0.0.0-alpha+test."}, +} + +func TestWrongFormat(t *testing.T) { + for _, test := range wrongformatTests { + + if res, err := Parse(test.str); err == nil { + t.Errorf("Parsing wrong format version %q, expected error but got %q", test.str, res) + } + + if test.v != nil { + if err := test.v.Validate(); err == nil { + t.Errorf("Validating wrong format version %q (%q), expected error", test.v, test.str) + } + } + } +} + +var wrongTolerantFormatTests = []wrongformatTest{ + {nil, "1.0+abc"}, + {nil, "1.0-rc.1"}, +} + +func TestWrongTolerantFormat(t *testing.T) { + for _, test := range wrongTolerantFormatTests { + if res, err := ParseTolerant(test.str); err == nil { + t.Errorf("Parsing wrong format version %q, expected error but got %q", test.str, res) + } + } +} + +func TestCompareHelper(t *testing.T) { + v := Version{1, 0, 0, []PRVersion{prstr("alpha")}, nil} + v1 := Version{1, 0, 0, nil, nil} + if !v.EQ(v) { + t.Errorf("%q should be equal to %q", v, v) + } + if !v.Equals(v) { + t.Errorf("%q should be equal to %q", v, v) + } + if !v1.NE(v) { + t.Errorf("%q should not be equal to %q", v1, v) + } + if !v.GTE(v) { + t.Errorf("%q should be greater than or equal to %q", v, v) + } + if !v.LTE(v) { + t.Errorf("%q should be less than or equal to %q", v, v) + } + if !v.LT(v1) { + t.Errorf("%q should be less than %q", v, v1) + } + if !v.LTE(v1) { + t.Errorf("%q should be less than or equal %q", v, v1) + } + if !v.LE(v1) { + t.Errorf("%q should be less than or equal %q", v, v1) + } + if !v1.GT(v) { + t.Errorf("%q should be greater than %q", v1, v) + } + if !v1.GTE(v) { + t.Errorf("%q should be greater than or equal %q", v1, v) + } + if !v1.GE(v) { + t.Errorf("%q should be greater than or equal %q", v1, v) + } +} + +func TestPreReleaseVersions(t *testing.T) { + p1, err := NewPRVersion("123") + if !p1.IsNumeric() { + t.Errorf("Expected numeric prversion, got %q", p1) + } + if p1.VersionNum != 123 { + t.Error("Wrong prversion number") + } + if err != nil { + t.Errorf("Not expected error %q", err) + } + p2, err := NewPRVersion("alpha") + if p2.IsNumeric() { + t.Errorf("Expected non-numeric prversion, got %q", p2) + } + if p2.VersionStr != "alpha" { + t.Error("Wrong prversion string") + } + if err != nil { + t.Errorf("Not expected error %q", err) + } +} + +func TestBuildMetaDataVersions(t *testing.T) { + _, err := NewBuildVersion("123") + if err != nil { + t.Errorf("Unexpected error %q", err) + } + + _, err = NewBuildVersion("build") + if err != nil { + t.Errorf("Unexpected error %q", err) + } + + _, err = NewBuildVersion("test?") + if err == nil { + t.Error("Expected error, got none") + } + + _, err = NewBuildVersion("") + if err == nil { + t.Error("Expected error, got none") + } +} + +func TestNewHelper(t *testing.T) { + v, err := New("1.2.3") + if err != nil { + t.Fatalf("Unexpected error %q", err) + } + + // New returns pointer + if v == nil { + t.Fatal("Version is nil") + } + if v.Compare(Version{1, 2, 3, nil, nil}) != 0 { + t.Fatal("Unexpected comparison problem") + } +} + +func TestMakeHelper(t *testing.T) { + v, err := Make("1.2.3") + if err != nil { + t.Fatalf("Unexpected error %q", err) + } + if v.Compare(Version{1, 2, 3, nil, nil}) != 0 { + t.Fatal("Unexpected comparison problem") + } +} + +func BenchmarkParseSimple(b *testing.B) { + const VERSION = "0.0.1" + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + Parse(VERSION) + } +} + +func BenchmarkParseComplex(b *testing.B) { + const VERSION = "0.0.1-alpha.preview+123.456" + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + Parse(VERSION) + } +} + +func BenchmarkParseAverage(b *testing.B) { + l := len(formatTests) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + Parse(formatTests[n%l].result) + } +} + +func BenchmarkParseTolerantAverage(b *testing.B) { + l := len(tolerantFormatTests) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + ParseTolerant(tolerantFormatTests[n%l].result) + } +} + +func BenchmarkStringSimple(b *testing.B) { + const VERSION = "0.0.1" + v, _ := Parse(VERSION) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + v.String() + } +} + +func BenchmarkStringLarger(b *testing.B) { + const VERSION = "11.15.2012" + v, _ := Parse(VERSION) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + v.String() + } +} + +func BenchmarkStringComplex(b *testing.B) { + const VERSION = "0.0.1-alpha.preview+123.456" + v, _ := Parse(VERSION) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + v.String() + } +} + +func BenchmarkStringAverage(b *testing.B) { + l := len(formatTests) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + formatTests[n%l].v.String() + } +} + +func BenchmarkValidateSimple(b *testing.B) { + const VERSION = "0.0.1" + v, _ := Parse(VERSION) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + v.Validate() + } +} + +func BenchmarkValidateComplex(b *testing.B) { + const VERSION = "0.0.1-alpha.preview+123.456" + v, _ := Parse(VERSION) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + v.Validate() + } +} + +func BenchmarkValidateAverage(b *testing.B) { + l := len(formatTests) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + formatTests[n%l].v.Validate() + } +} + +func BenchmarkCompareSimple(b *testing.B) { + const VERSION = "0.0.1" + v, _ := Parse(VERSION) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + v.Compare(v) + } +} + +func BenchmarkCompareComplex(b *testing.B) { + const VERSION = "0.0.1-alpha.preview+123.456" + v, _ := Parse(VERSION) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + v.Compare(v) + } +} + +func BenchmarkCompareAverage(b *testing.B) { + l := len(compareTests) + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + compareTests[n%l].v1.Compare((compareTests[n%l].v2)) + } +} diff --git a/docs/generator/vendor/github.com/blang/semver/sort.go b/docs/generator/vendor/github.com/blang/semver/sort.go new file mode 100644 index 0000000..e18f880 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/sort.go @@ -0,0 +1,28 @@ +package semver + +import ( + "sort" +) + +// Versions represents multiple versions. +type Versions []Version + +// Len returns length of version collection +func (s Versions) Len() int { + return len(s) +} + +// Swap swaps two versions inside the collection by its indices +func (s Versions) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +// Less checks if version at index i is less than version at index j +func (s Versions) Less(i, j int) bool { + return s[i].LT(s[j]) +} + +// Sort sorts a slice of versions +func Sort(versions []Version) { + sort.Sort(Versions(versions)) +} diff --git a/docs/generator/vendor/github.com/blang/semver/sort_test.go b/docs/generator/vendor/github.com/blang/semver/sort_test.go new file mode 100644 index 0000000..6889397 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/sort_test.go @@ -0,0 +1,30 @@ +package semver + +import ( + "reflect" + "testing" +) + +func TestSort(t *testing.T) { + v100, _ := Parse("1.0.0") + v010, _ := Parse("0.1.0") + v001, _ := Parse("0.0.1") + versions := []Version{v010, v100, v001} + Sort(versions) + + correct := []Version{v001, v010, v100} + if !reflect.DeepEqual(versions, correct) { + t.Fatalf("Sort returned wrong order: %s", versions) + } +} + +func BenchmarkSort(b *testing.B) { + v100, _ := Parse("1.0.0") + v010, _ := Parse("0.1.0") + v001, _ := Parse("0.0.1") + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + Sort([]Version{v010, v100, v001}) + } +} diff --git a/docs/generator/vendor/github.com/blang/semver/sql.go b/docs/generator/vendor/github.com/blang/semver/sql.go new file mode 100644 index 0000000..eb4d802 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/sql.go @@ -0,0 +1,30 @@ +package semver + +import ( + "database/sql/driver" + "fmt" +) + +// Scan implements the database/sql.Scanner interface. +func (v *Version) Scan(src interface{}) (err error) { + var str string + switch src := src.(type) { + case string: + str = src + case []byte: + str = string(src) + default: + return fmt.Errorf("Version.Scan: cannot convert %T to string.", src) + } + + if t, err := Parse(str); err == nil { + *v = t + } + + return +} + +// Value implements the database/sql/driver.Valuer interface. +func (v Version) Value() (driver.Value, error) { + return v.String(), nil +} diff --git a/docs/generator/vendor/github.com/blang/semver/sql_test.go b/docs/generator/vendor/github.com/blang/semver/sql_test.go new file mode 100644 index 0000000..ebf48b5 --- /dev/null +++ b/docs/generator/vendor/github.com/blang/semver/sql_test.go @@ -0,0 +1,38 @@ +package semver + +import ( + "testing" +) + +type scanTest struct { + val interface{} + shouldError bool + expected string +} + +var scanTests = []scanTest{ + {"1.2.3", false, "1.2.3"}, + {[]byte("1.2.3"), false, "1.2.3"}, + {7, true, ""}, + {7e4, true, ""}, + {true, true, ""}, +} + +func TestScanString(t *testing.T) { + for _, tc := range scanTests { + s := &Version{} + err := s.Scan(tc.val) + if tc.shouldError { + if err == nil { + t.Fatalf("Scan did not return an error on %v (%T)", tc.val, tc.val) + } + } else { + if err != nil { + t.Fatalf("Scan returned an unexpected error: %s (%T) on %v (%T)", tc.val, tc.val, tc.val, tc.val) + } + if val, _ := s.Value(); val != tc.expected { + t.Errorf("Wrong Value returned, expected %q, got %q", tc.expected, val) + } + } + } +} diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/.gitignore b/docs/generator/vendor/github.com/go-forks/fsnotify/.gitignore new file mode 100644 index 0000000..e4706a9 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/.gitignore @@ -0,0 +1,5 @@ +# Setup a Global .gitignore for OS and editor generated files: +# https://help.github.com/articles/ignoring-files +# git config --global core.excludesfile ~/.gitignore_global + +.vagrant diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/AUTHORS b/docs/generator/vendor/github.com/go-forks/fsnotify/AUTHORS new file mode 100644 index 0000000..e52b72f --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/AUTHORS @@ -0,0 +1,28 @@ +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# You can update this list using the following command: +# +# $ git shortlog -se | awk '{print $2 " " $3 " " $4}' + +# Please keep the list sorted. + +Adrien Bustany +Caleb Spare +Case Nelson +Chris Howey +Christoffer Buchholz +Dave Cheney +Francisco Souza +John C Barstow +Kelvin Fo +Nathan Youngman +Paul Hammond +Pursuit92 +Rob Figueiredo +Travis Cline +Tudor Golubenco +bronze1man +debrando +henrikedwards diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/CHANGELOG.md b/docs/generator/vendor/github.com/go-forks/fsnotify/CHANGELOG.md new file mode 100644 index 0000000..761686a --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/CHANGELOG.md @@ -0,0 +1,160 @@ +# Changelog + +## v0.9.0 / 2014-01-17 + +* IsAttrib() for events that only concern a file's metadata [#79][] (thanks @abustany) +* [Fix] kqueue: fix deadlock [#77][] (thanks @cespare) +* [NOTICE] Development has moved to `code.google.com/p/go.exp/fsnotify` in preparation for inclusion in the Go standard library. + +## v0.8.12 / 2013-11-13 + +* [API] Remove FD_SET and friends from Linux adapter + +## v0.8.11 / 2013-11-02 + +* [Doc] Add Changelog [#72][] (thanks @nathany) +* [Doc] Spotlight and double modify events on OS X [#62][] (reported by @paulhammond) + +## v0.8.10 / 2013-10-19 + +* [Fix] kqueue: remove file watches when parent directory is removed [#71][] (reported by @mdwhatcott) +* [Fix] kqueue: race between Close and readEvents [#70][] (reported by @bernerdschaefer) +* [Doc] specify OS-specific limits in README (thanks @debrando) + +## v0.8.9 / 2013-09-08 + +* [Doc] Contributing (thanks @nathany) +* [Doc] update package path in example code [#63][] (thanks @paulhammond) +* [Doc] GoCI badge in README (Linux only) [#60][] +* [Doc] Cross-platform testing with Vagrant [#59][] (thanks @nathany) + +## v0.8.8 / 2013-06-17 + +* [Fix] Windows: handle `ERROR_MORE_DATA` on Windows [#49][] (thanks @jbowtie) + +## v0.8.7 / 2013-06-03 + +* [API] Make syscall flags internal +* [Fix] inotify: ignore event changes +* [Fix] race in symlink test [#45][] (reported by @srid) +* [Fix] tests on Windows +* lower case error messages + +## v0.8.6 / 2013-05-23 + +* kqueue: Use EVT_ONLY flag on Darwin +* [Doc] Update README with full example + +## v0.8.5 / 2013-05-09 + +* [Fix] inotify: allow monitoring of "broken" symlinks (thanks @tsg) + +## v0.8.4 / 2013-04-07 + +* [Fix] kqueue: watch all file events [#40][] (thanks @ChrisBuchholz) + +## v0.8.3 / 2013-03-13 + +* [Fix] inoitfy/kqueue memory leak [#36][] (reported by @nbkolchin) +* [Fix] kqueue: use fsnFlags for watching a directory [#33][] (reported by @nbkolchin) + +## v0.8.2 / 2013-02-07 + +* [Doc] add Authors +* [Fix] fix data races for map access [#29][] (thanks @fsouza) + +## v0.8.1 / 2013-01-09 + +* [Fix] Windows path separators +* [Doc] BSD License + +## v0.8.0 / 2012-11-09 + +* kqueue: directory watching improvements (thanks @vmirage) +* inotify: add `IN_MOVED_TO` [#25][] (requested by @cpisto) +* [Fix] kqueue: deleting watched directory [#24][] (reported by @jakerr) + +## v0.7.4 / 2012-10-09 + +* [Fix] inotify: fixes from https://codereview.appspot.com/5418045/ (ugorji) +* [Fix] kqueue: preserve watch flags when watching for delete [#21][] (reported by @robfig) +* [Fix] kqueue: watch the directory even if it isn't a new watch (thanks @robfig) +* [Fix] kqueue: modify after recreation of file + +## v0.7.3 / 2012-09-27 + +* [Fix] kqueue: watch with an existing folder inside the watched folder (thanks @vmirage) +* [Fix] kqueue: no longer get duplicate CREATE events + +## v0.7.2 / 2012-09-01 + +* kqueue: events for created directories + +## v0.7.1 / 2012-07-14 + +* [Fix] for renaming files + +## v0.7.0 / 2012-07-02 + +* [Feature] FSNotify flags +* [Fix] inotify: Added file name back to event path + +## v0.6.0 / 2012-06-06 + +* kqueue: watch files after directory created (thanks @tmc) + +## v0.5.1 / 2012-05-22 + +* [Fix] inotify: remove all watches before Close() + +## v0.5.0 / 2012-05-03 + +* [API] kqueue: return errors during watch instead of sending over channel +* kqueue: match symlink behavior on Linux +* inotify: add `DELETE_SELF` (requested by @taralx) +* [Fix] kqueue: handle EINTR (reported by @robfig) +* [Doc] Godoc example [#1][] (thanks @davecheney) + +## v0.4.0 / 2012-03-30 + +* Go 1 released: build with go tool +* [Feature] Windows support using winfsnotify +* Windows does not have attribute change notifications +* Roll attribute notifications into IsModify + +## v0.3.0 / 2012-02-19 + +* kqueue: add files when watch directory + +## v0.2.0 / 2011-12-30 + +* update to latest Go weekly code + +## v0.1.0 / 2011-10-19 + +* kqueue: add watch on file creation to match inotify +* kqueue: create file event +* inotify: ignore `IN_IGNORED` events +* event String() +* linux: common FileEvent functions +* initial commit + +[#79]: https://github.com/howeyc/fsnotify/pull/79 +[#77]: https://github.com/howeyc/fsnotify/pull/77 +[#72]: https://github.com/howeyc/fsnotify/issues/72 +[#71]: https://github.com/howeyc/fsnotify/issues/71 +[#70]: https://github.com/howeyc/fsnotify/issues/70 +[#63]: https://github.com/howeyc/fsnotify/issues/63 +[#62]: https://github.com/howeyc/fsnotify/issues/62 +[#60]: https://github.com/howeyc/fsnotify/issues/60 +[#59]: https://github.com/howeyc/fsnotify/issues/59 +[#49]: https://github.com/howeyc/fsnotify/issues/49 +[#45]: https://github.com/howeyc/fsnotify/issues/45 +[#40]: https://github.com/howeyc/fsnotify/issues/40 +[#36]: https://github.com/howeyc/fsnotify/issues/36 +[#33]: https://github.com/howeyc/fsnotify/issues/33 +[#29]: https://github.com/howeyc/fsnotify/issues/29 +[#25]: https://github.com/howeyc/fsnotify/issues/25 +[#24]: https://github.com/howeyc/fsnotify/issues/24 +[#21]: https://github.com/howeyc/fsnotify/issues/21 +[#1]: https://github.com/howeyc/fsnotify/issues/1 diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/CONTRIBUTING.md b/docs/generator/vendor/github.com/go-forks/fsnotify/CONTRIBUTING.md new file mode 100644 index 0000000..86cce0f --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/CONTRIBUTING.md @@ -0,0 +1,53 @@ +# Contributing + +### Moving Notice + +We plan to include os/fsnotify in the Go standard library with a new [API](http://goo.gl/MrYxyA). + +* Import `code.google.com/p/go.exp/fsnotify` ([GoDoc](http://godoc.org/code.google.com/p/go.exp/fsnotify)) for the latest API under development. +* Continue importing `github.com/howeyc/fsnotify` ([GoDoc](http://godoc.org/github.com/howeyc/fsnotify)) for the stable API. +* [Report Issues](https://code.google.com/p/go/issues/list?q=fsnotify) to go.exp/fsnotify after testing against `code.google.com/p/go.exp/fsnotify` +* Join [golang-dev](https://groups.google.com/forum/#!forum/golang-dev) to discuss fsnotify. +* See the [Contribution Guidelines](http://golang.org/doc/contribute.html) for Go and sign the CLA. + +### Pull Requests + +To hack on fsnotify: + +1. Install as usual (`go get -u github.com/howeyc/fsnotify`) +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Ensure everything works and the tests pass (see below) +4. Commit your changes (`git commit -am 'Add some feature'`) + +Contribute upstream: + +1. Fork fsnotify on GitHub +2. Add your remote (`git remote add fork git@github.com:mycompany/repo.git`) +3. Push to the branch (`git push fork my-new-feature`) +4. Create a new Pull Request on GitHub + +For other team members: + +1. Install as usual (`go get -u github.com/howeyc/fsnotify`) +2. Add your remote (`git remote add fork git@github.com:mycompany/repo.git`) +3. Pull your revisions (`git fetch fork; git checkout -b my-new-feature fork/my-new-feature`) + +Notice: Always use the original import path by installing with `go get`. + +### Testing + +fsnotify uses build tags to compile different code on Linux, BSD, OS X, and Windows. Our continuous integration server is only able to test on Linux at this time. + +Before doing a pull request, please do your best to test your changes on multiple platforms, and list which platforms you were able/unable to test on. + +To make cross-platform testing easier, we've created a Vagrantfile for Linux and BSD. + +* Install [Vagrant](http://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) +* Setup [Vagrant Gopher](https://github.com/gophertown/vagrant-gopher) in your `src` folder. +* Run `vagrant up` from the project folder. You can also setup just one box with `vagrant up linux` or `vagrant up bsd` (note: the BSD box doesn't support Windows hosts at this time, and NFS may prompt for your host OS password) +* Once setup, you can run the test suite on a given OS with a single command `vagrant ssh linux -c 'cd howeyc/fsnotify; go test ./...'`. +* When you're done, you will want to halt or destroy the vagrant boxes. + +Notice: fsnotify file system events won't work on shared folders. The tests get around this limitation by using a tmp directory, but it is something to be aware of when logging in with `vagrant ssh linux` to do some manual testing. + +Right now we don't have an equivalent solution for Windows and OS X, but there are Windows VMs [freely available from Microsoft](http://www.modern.ie/en-us/virtualization-tools#downloads). diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/LICENSE b/docs/generator/vendor/github.com/go-forks/fsnotify/LICENSE new file mode 100644 index 0000000..f21e540 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright (c) 2012 fsnotify Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/README.md b/docs/generator/vendor/github.com/go-forks/fsnotify/README.md new file mode 100644 index 0000000..b0e18d6 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/README.md @@ -0,0 +1,101 @@ +# File system notifications for Go + +[![Build Status](https://goci.herokuapp.com/project/image/github.com/howeyc/fsnotify)](http://goci.me/project/github.com/howeyc/fsnotify) [![GoDoc](https://godoc.org/github.com/howeyc/fsnotify?status.png)](http://godoc.org/github.com/howeyc/fsnotify) + +Cross platform, works on: +* Windows +* Linux +* BSD +* OSX + +### Moving Notice + +We plan to include os/fsnotify in the Go standard library with a new [API](http://goo.gl/MrYxyA). + +* Import `code.google.com/p/go.exp/fsnotify` ([GoDoc](http://godoc.org/code.google.com/p/go.exp/fsnotify)) for the latest API under development. +* Continue importing `github.com/howeyc/fsnotify` ([GoDoc](http://godoc.org/github.com/howeyc/fsnotify)) for the stable API. +* [Report Issues](https://code.google.com/p/go/issues/list?q=fsnotify) to go.exp/fsnotify after testing against `code.google.com/p/go.exp/fsnotify` +* Join [golang-dev](https://groups.google.com/forum/#!forum/golang-dev) to discuss fsnotify. +* See the [Contribution Guidelines](http://golang.org/doc/contribute.html) for Go and sign the CLA. + +### Example: + +```go +package main + +import ( + "log" + + "github.com/howeyc/fsnotify" +) + +func main() { + watcher, err := fsnotify.NewWatcher() + if err != nil { + log.Fatal(err) + } + + done := make(chan bool) + + // Process events + go func() { + for { + select { + case ev := <-watcher.Event: + log.Println("event:", ev) + case err := <-watcher.Error: + log.Println("error:", err) + } + } + }() + + err = watcher.Watch("testDir") + if err != nil { + log.Fatal(err) + } + + <-done + + /* ... do stuff ... */ + watcher.Close() +} +``` + +For each event: +* Name +* IsCreate() +* IsDelete() +* IsModify() +* IsRename() + +### FAQ + +**When a file is moved to another directory is it still being watched?** + +No (it shouldn't be, unless you are watching where it was moved to). + +**When I watch a directory, are all subdirectories watched as well?** + +No, you must add watches for any directory you want to watch (a recursive watcher is in the works [#56][]). + +**Do I have to watch the Error and Event channels in a separate goroutine?** + +As of now, yes. Looking into making this single-thread friendly (see [#7][]) + +**Why am I receiving multiple events for the same file on OS X?** + +Spotlight indexing on OS X can result in multiple events (see [#62][]). A temporary workaround is to add your folder(s) to the *Spotlight Privacy settings* until we have a native FSEvents implementation (see [#54][]). + +**How many files can be watched at once?** + +There are OS-specific limits as to how many watches can be created: +* Linux: /proc/sys/fs/inotify/max_user_watches contains the limit, +reaching this limit results in a "no space left on device" error. +* BSD / OSX: sysctl variables "kern.maxfiles" and "kern.maxfilesperproc", reaching these limits results in a "too many open files" error. + + +[#62]: https://github.com/howeyc/fsnotify/issues/62 +[#56]: https://github.com/howeyc/fsnotify/issues/56 +[#54]: https://github.com/howeyc/fsnotify/issues/54 +[#7]: https://github.com/howeyc/fsnotify/issues/7 + diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/example_test.go b/docs/generator/vendor/github.com/go-forks/fsnotify/example_test.go new file mode 100644 index 0000000..d3130e2 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/example_test.go @@ -0,0 +1,34 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package fsnotify_test + +import ( + "log" + + "github.com/howeyc/fsnotify" +) + +func ExampleNewWatcher() { + watcher, err := fsnotify.NewWatcher() + if err != nil { + log.Fatal(err) + } + + go func() { + for { + select { + case ev := <-watcher.Event: + log.Println("event:", ev) + case err := <-watcher.Error: + log.Println("error:", err) + } + } + }() + + err = watcher.Watch("/tmp/foo") + if err != nil { + log.Fatal(err) + } +} diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify.go new file mode 100644 index 0000000..6d1ccbe --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify.go @@ -0,0 +1,114 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package fsnotify implements file system notification. +package fsnotify + +import "fmt" + +const ( + FSN_CREATE = 1 + FSN_MODIFY = 2 + FSN_DELETE = 4 + FSN_RENAME = 8 + + FSN_ALL = FSN_MODIFY | FSN_DELETE | FSN_RENAME | FSN_CREATE +) + +// Purge events from interal chan to external chan if passes filter +func (w *Watcher) purgeEvents() { + for ev := range w.internalEvent { + sendEvent := false + w.fsnmut.Lock() + fsnFlags := w.fsnFlags[ev.Name] + w.fsnmut.Unlock() + + if (fsnFlags&FSN_CREATE == FSN_CREATE) && ev.IsCreate() { + sendEvent = true + } + + if (fsnFlags&FSN_MODIFY == FSN_MODIFY) && ev.IsModify() { + sendEvent = true + } + + if (fsnFlags&FSN_DELETE == FSN_DELETE) && ev.IsDelete() { + sendEvent = true + } + + if (fsnFlags&FSN_RENAME == FSN_RENAME) && ev.IsRename() { + sendEvent = true + } + + if sendEvent { + w.Event <- ev + } + + // If there's no file, then no more events for user + // BSD must keep watch for internal use (watches DELETEs to keep track + // what files exist for create events) + if ev.IsDelete() { + w.fsnmut.Lock() + delete(w.fsnFlags, ev.Name) + w.fsnmut.Unlock() + } + } + + close(w.Event) +} + +// Watch a given file path +func (w *Watcher) Watch(path string) error { + w.fsnmut.Lock() + w.fsnFlags[path] = FSN_ALL + w.fsnmut.Unlock() + return w.watch(path) +} + +// Watch a given file path for a particular set of notifications (FSN_MODIFY etc.) +func (w *Watcher) WatchFlags(path string, flags uint32) error { + w.fsnmut.Lock() + w.fsnFlags[path] = flags + w.fsnmut.Unlock() + return w.watch(path) +} + +// Remove a watch on a file +func (w *Watcher) RemoveWatch(path string) error { + w.fsnmut.Lock() + delete(w.fsnFlags, path) + w.fsnmut.Unlock() + return w.removeWatch(path) +} + +// String formats the event e in the form +// "filename: DELETE|MODIFY|..." +func (e *FileEvent) String() string { + var events string = "" + + if e.IsCreate() { + events += "|" + "CREATE" + } + + if e.IsDelete() { + events += "|" + "DELETE" + } + + if e.IsModify() { + events += "|" + "MODIFY" + } + + if e.IsRename() { + events += "|" + "RENAME" + } + + if e.IsAttrib() { + events += "|" + "ATTRIB" + } + + if len(events) > 0 { + events = events[1:] + } + + return fmt.Sprintf("%q: %s", e.Name, events) +} diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_bsd.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_bsd.go new file mode 100644 index 0000000..7fb24af --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_bsd.go @@ -0,0 +1,500 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd darwin + +package fsnotify + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "sync" + "syscall" +) + +const ( + // Flags (from ) + sys_NOTE_DELETE = 0x0001 /* vnode was removed */ + sys_NOTE_WRITE = 0x0002 /* data contents changed */ + sys_NOTE_EXTEND = 0x0004 /* size increased */ + sys_NOTE_ATTRIB = 0x0008 /* attributes changed */ + sys_NOTE_LINK = 0x0010 /* link count changed */ + sys_NOTE_RENAME = 0x0020 /* vnode was renamed */ + sys_NOTE_REVOKE = 0x0040 /* vnode access was revoked */ + + // Watch all events + sys_NOTE_ALLEVENTS = sys_NOTE_DELETE | sys_NOTE_WRITE | sys_NOTE_ATTRIB | sys_NOTE_RENAME + + // Block for 100 ms on each call to kevent + keventWaitTime = 100e6 +) + +type FileEvent struct { + mask uint32 // Mask of events + Name string // File name (optional) + create bool // set by fsnotify package if found new file +} + +// IsCreate reports whether the FileEvent was triggered by a creation +func (e *FileEvent) IsCreate() bool { return e.create } + +// IsDelete reports whether the FileEvent was triggered by a delete +func (e *FileEvent) IsDelete() bool { return (e.mask & sys_NOTE_DELETE) == sys_NOTE_DELETE } + +// IsModify reports whether the FileEvent was triggered by a file modification +func (e *FileEvent) IsModify() bool { + return ((e.mask&sys_NOTE_WRITE) == sys_NOTE_WRITE || (e.mask&sys_NOTE_ATTRIB) == sys_NOTE_ATTRIB) +} + +// IsRename reports whether the FileEvent was triggered by a change name +func (e *FileEvent) IsRename() bool { return (e.mask & sys_NOTE_RENAME) == sys_NOTE_RENAME } + +// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. +func (e *FileEvent) IsAttrib() bool { + return (e.mask & sys_NOTE_ATTRIB) == sys_NOTE_ATTRIB +} + +type Watcher struct { + mu sync.Mutex // Mutex for the Watcher itself. + kq int // File descriptor (as returned by the kqueue() syscall) + watches map[string]int // Map of watched file descriptors (key: path) + wmut sync.Mutex // Protects access to watches. + fsnFlags map[string]uint32 // Map of watched files to flags used for filter + fsnmut sync.Mutex // Protects access to fsnFlags. + enFlags map[string]uint32 // Map of watched files to evfilt note flags used in kqueue + enmut sync.Mutex // Protects access to enFlags. + paths map[int]string // Map of watched paths (key: watch descriptor) + finfo map[int]os.FileInfo // Map of file information (isDir, isReg; key: watch descriptor) + pmut sync.Mutex // Protects access to paths and finfo. + fileExists map[string]bool // Keep track of if we know this file exists (to stop duplicate create events) + femut sync.Mutex // Protects access to fileExists. + externalWatches map[string]bool // Map of watches added by user of the library. + ewmut sync.Mutex // Protects access to externalWatches. + Error chan error // Errors are sent on this channel + internalEvent chan *FileEvent // Events are queued on this channel + Event chan *FileEvent // Events are returned on this channel + done chan bool // Channel for sending a "quit message" to the reader goroutine + isClosed bool // Set to true when Close() is first called + kbuf [1]syscall.Kevent_t // An event buffer for Add/Remove watch + bufmut sync.Mutex // Protects access to kbuf. +} + +// NewWatcher creates and returns a new kevent instance using kqueue(2) +func NewWatcher() (*Watcher, error) { + fd, errno := syscall.Kqueue() + if fd == -1 { + return nil, os.NewSyscallError("kqueue", errno) + } + w := &Watcher{ + kq: fd, + watches: make(map[string]int), + fsnFlags: make(map[string]uint32), + enFlags: make(map[string]uint32), + paths: make(map[int]string), + finfo: make(map[int]os.FileInfo), + fileExists: make(map[string]bool), + externalWatches: make(map[string]bool), + internalEvent: make(chan *FileEvent), + Event: make(chan *FileEvent), + Error: make(chan error), + done: make(chan bool, 1), + } + + go w.readEvents() + go w.purgeEvents() + return w, nil +} + +// Close closes a kevent watcher instance +// It sends a message to the reader goroutine to quit and removes all watches +// associated with the kevent instance +func (w *Watcher) Close() error { + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return nil + } + w.isClosed = true + w.mu.Unlock() + + // Send "quit" message to the reader goroutine + w.done <- true + w.pmut.Lock() + ws := w.watches + w.pmut.Unlock() + for path := range ws { + w.removeWatch(path) + } + + return nil +} + +// AddWatch adds path to the watched file set. +// The flags are interpreted as described in kevent(2). +func (w *Watcher) addWatch(path string, flags uint32) error { + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return errors.New("kevent instance already closed") + } + w.mu.Unlock() + + watchDir := false + + w.wmut.Lock() + watchfd, found := w.watches[path] + w.wmut.Unlock() + if !found { + fi, errstat := os.Lstat(path) + if errstat != nil { + return errstat + } + + // don't watch socket + if fi.Mode()&os.ModeSocket == os.ModeSocket { + return nil + } + + // Follow Symlinks + // Unfortunately, Linux can add bogus symlinks to watch list without + // issue, and Windows can't do symlinks period (AFAIK). To maintain + // consistency, we will act like everything is fine. There will simply + // be no file events for broken symlinks. + // Hence the returns of nil on errors. + if fi.Mode()&os.ModeSymlink == os.ModeSymlink { + path, err := filepath.EvalSymlinks(path) + if err != nil { + return nil + } + + fi, errstat = os.Lstat(path) + if errstat != nil { + return nil + } + } + + fd, errno := syscall.Open(path, open_FLAGS, 0700) + if fd == -1 { + return errno + } + watchfd = fd + + w.wmut.Lock() + w.watches[path] = watchfd + w.wmut.Unlock() + + w.pmut.Lock() + w.paths[watchfd] = path + w.finfo[watchfd] = fi + w.pmut.Unlock() + } + // Watch the directory if it has not been watched before. + w.pmut.Lock() + w.enmut.Lock() + if w.finfo[watchfd].IsDir() && + (flags&sys_NOTE_WRITE) == sys_NOTE_WRITE && + (!found || (w.enFlags[path]&sys_NOTE_WRITE) != sys_NOTE_WRITE) { + watchDir = true + } + w.enmut.Unlock() + w.pmut.Unlock() + + w.enmut.Lock() + w.enFlags[path] = flags + w.enmut.Unlock() + + w.bufmut.Lock() + watchEntry := &w.kbuf[0] + watchEntry.Fflags = flags + syscall.SetKevent(watchEntry, watchfd, syscall.EVFILT_VNODE, syscall.EV_ADD|syscall.EV_CLEAR) + entryFlags := watchEntry.Flags + w.bufmut.Unlock() + + wd, errno := syscall.Kevent(w.kq, w.kbuf[:], nil, nil) + if wd == -1 { + return errno + } else if (entryFlags & syscall.EV_ERROR) == syscall.EV_ERROR { + return errors.New("kevent add error") + } + + if watchDir { + errdir := w.watchDirectoryFiles(path) + if errdir != nil { + return errdir + } + } + return nil +} + +// Watch adds path to the watched file set, watching all events. +func (w *Watcher) watch(path string) error { + w.ewmut.Lock() + w.externalWatches[path] = true + w.ewmut.Unlock() + return w.addWatch(path, sys_NOTE_ALLEVENTS) +} + +// RemoveWatch removes path from the watched file set. +func (w *Watcher) removeWatch(path string) error { + w.wmut.Lock() + watchfd, ok := w.watches[path] + w.wmut.Unlock() + if !ok { + return errors.New(fmt.Sprintf("can't remove non-existent kevent watch for: %s", path)) + } + w.bufmut.Lock() + watchEntry := &w.kbuf[0] + syscall.SetKevent(watchEntry, watchfd, syscall.EVFILT_VNODE, syscall.EV_DELETE) + success, errno := syscall.Kevent(w.kq, w.kbuf[:], nil, nil) + w.bufmut.Unlock() + if success == -1 { + return os.NewSyscallError("kevent_rm_watch", errno) + } else if (watchEntry.Flags & syscall.EV_ERROR) == syscall.EV_ERROR { + return errors.New("kevent rm error") + } + syscall.Close(watchfd) + w.wmut.Lock() + delete(w.watches, path) + w.wmut.Unlock() + w.enmut.Lock() + delete(w.enFlags, path) + w.enmut.Unlock() + w.pmut.Lock() + delete(w.paths, watchfd) + fInfo := w.finfo[watchfd] + delete(w.finfo, watchfd) + w.pmut.Unlock() + + // Find all watched paths that are in this directory that are not external. + if fInfo.IsDir() { + var pathsToRemove []string + w.pmut.Lock() + for _, wpath := range w.paths { + wdir, _ := filepath.Split(wpath) + if filepath.Clean(wdir) == filepath.Clean(path) { + w.ewmut.Lock() + if !w.externalWatches[wpath] { + pathsToRemove = append(pathsToRemove, wpath) + } + w.ewmut.Unlock() + } + } + w.pmut.Unlock() + for _, p := range pathsToRemove { + // Since these are internal, not much sense in propagating error + // to the user, as that will just confuse them with an error about + // a path they did not explicitly watch themselves. + w.removeWatch(p) + } + } + + return nil +} + +// readEvents reads from the kqueue file descriptor, converts the +// received events into Event objects and sends them via the Event channel +func (w *Watcher) readEvents() { + var ( + eventbuf [10]syscall.Kevent_t // Event buffer + events []syscall.Kevent_t // Received events + twait *syscall.Timespec // Time to block waiting for events + n int // Number of events returned from kevent + errno error // Syscall errno + ) + events = eventbuf[0:0] + twait = new(syscall.Timespec) + *twait = syscall.NsecToTimespec(keventWaitTime) + + for { + // See if there is a message on the "done" channel + var done bool + select { + case done = <-w.done: + default: + } + + // If "done" message is received + if done { + errno := syscall.Close(w.kq) + if errno != nil { + w.Error <- os.NewSyscallError("close", errno) + } + close(w.internalEvent) + close(w.Error) + return + } + + // Get new events + if len(events) == 0 { + n, errno = syscall.Kevent(w.kq, nil, eventbuf[:], twait) + + // EINTR is okay, basically the syscall was interrupted before + // timeout expired. + if errno != nil && errno != syscall.EINTR { + w.Error <- os.NewSyscallError("kevent", errno) + continue + } + + // Received some events + if n > 0 { + events = eventbuf[0:n] + } + } + + // Flush the events we received to the events channel + for len(events) > 0 { + fileEvent := new(FileEvent) + watchEvent := &events[0] + fileEvent.mask = uint32(watchEvent.Fflags) + w.pmut.Lock() + fileEvent.Name = w.paths[int(watchEvent.Ident)] + fileInfo := w.finfo[int(watchEvent.Ident)] + w.pmut.Unlock() + if fileInfo != nil && fileInfo.IsDir() && !fileEvent.IsDelete() { + // Double check to make sure the directory exist. This can happen when + // we do a rm -fr on a recursively watched folders and we receive a + // modification event first but the folder has been deleted and later + // receive the delete event + if _, err := os.Lstat(fileEvent.Name); os.IsNotExist(err) { + // mark is as delete event + fileEvent.mask |= sys_NOTE_DELETE + } + } + + if fileInfo != nil && fileInfo.IsDir() && fileEvent.IsModify() && !fileEvent.IsDelete() { + w.sendDirectoryChangeEvents(fileEvent.Name) + } else { + // Send the event on the events channel + w.internalEvent <- fileEvent + } + + // Move to next event + events = events[1:] + + if fileEvent.IsRename() { + w.removeWatch(fileEvent.Name) + w.femut.Lock() + delete(w.fileExists, fileEvent.Name) + w.femut.Unlock() + } + if fileEvent.IsDelete() { + w.removeWatch(fileEvent.Name) + w.femut.Lock() + delete(w.fileExists, fileEvent.Name) + w.femut.Unlock() + + // Look for a file that may have overwritten this + // (ie mv f1 f2 will delete f2 then create f2) + fileDir, _ := filepath.Split(fileEvent.Name) + fileDir = filepath.Clean(fileDir) + w.wmut.Lock() + _, found := w.watches[fileDir] + w.wmut.Unlock() + if found { + // make sure the directory exist before we watch for changes. When we + // do a recursive watch and perform rm -fr, the parent directory might + // have gone missing, ignore the missing directory and let the + // upcoming delete event remove the watch form the parent folder + if _, err := os.Lstat(fileDir); !os.IsNotExist(err) { + w.sendDirectoryChangeEvents(fileDir) + } + } + } + } + } +} + +func (w *Watcher) watchDirectoryFiles(dirPath string) error { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + return err + } + + // Search for new files + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + + // Inherit fsnFlags from parent directory + w.fsnmut.Lock() + if flags, found := w.fsnFlags[dirPath]; found { + w.fsnFlags[filePath] = flags + } else { + w.fsnFlags[filePath] = FSN_ALL + } + w.fsnmut.Unlock() + + if fileInfo.IsDir() == false { + // Watch file to mimic linux fsnotify + e := w.addWatch(filePath, sys_NOTE_ALLEVENTS) + if e != nil { + return e + } + } else { + // If the user is currently watching directory + // we want to preserve the flags used + w.enmut.Lock() + currFlags, found := w.enFlags[filePath] + w.enmut.Unlock() + var newFlags uint32 = sys_NOTE_DELETE + if found { + newFlags |= currFlags + } + + // Linux gives deletes if not explicitly watching + e := w.addWatch(filePath, newFlags) + if e != nil { + return e + } + } + w.femut.Lock() + w.fileExists[filePath] = true + w.femut.Unlock() + } + + return nil +} + +// sendDirectoryEvents searches the directory for newly created files +// and sends them over the event channel. This functionality is to have +// the BSD version of fsnotify match linux fsnotify which provides a +// create event for files created in a watched directory. +func (w *Watcher) sendDirectoryChangeEvents(dirPath string) { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + w.Error <- err + } + + // Search for new files + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + w.femut.Lock() + _, doesExist := w.fileExists[filePath] + w.femut.Unlock() + if !doesExist { + // Inherit fsnFlags from parent directory + w.fsnmut.Lock() + if flags, found := w.fsnFlags[dirPath]; found { + w.fsnFlags[filePath] = flags + } else { + w.fsnFlags[filePath] = FSN_ALL + } + w.fsnmut.Unlock() + + // Send create event + fileEvent := new(FileEvent) + fileEvent.Name = filePath + fileEvent.create = true + w.internalEvent <- fileEvent + } + w.femut.Lock() + w.fileExists[filePath] = true + w.femut.Unlock() + } + w.watchDirectoryFiles(dirPath) +} diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_linux.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_linux.go new file mode 100644 index 0000000..80ade87 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_linux.go @@ -0,0 +1,304 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "errors" + "fmt" + "os" + "strings" + "sync" + "syscall" + "unsafe" +) + +const ( + // Options for inotify_init() are not exported + // sys_IN_CLOEXEC uint32 = syscall.IN_CLOEXEC + // sys_IN_NONBLOCK uint32 = syscall.IN_NONBLOCK + + // Options for AddWatch + sys_IN_DONT_FOLLOW uint32 = syscall.IN_DONT_FOLLOW + sys_IN_ONESHOT uint32 = syscall.IN_ONESHOT + sys_IN_ONLYDIR uint32 = syscall.IN_ONLYDIR + + // The "sys_IN_MASK_ADD" option is not exported, as AddWatch + // adds it automatically, if there is already a watch for the given path + // sys_IN_MASK_ADD uint32 = syscall.IN_MASK_ADD + + // Events + sys_IN_ACCESS uint32 = syscall.IN_ACCESS + sys_IN_ALL_EVENTS uint32 = syscall.IN_ALL_EVENTS + sys_IN_ATTRIB uint32 = syscall.IN_ATTRIB + sys_IN_CLOSE uint32 = syscall.IN_CLOSE + sys_IN_CLOSE_NOWRITE uint32 = syscall.IN_CLOSE_NOWRITE + sys_IN_CLOSE_WRITE uint32 = syscall.IN_CLOSE_WRITE + sys_IN_CREATE uint32 = syscall.IN_CREATE + sys_IN_DELETE uint32 = syscall.IN_DELETE + sys_IN_DELETE_SELF uint32 = syscall.IN_DELETE_SELF + sys_IN_MODIFY uint32 = syscall.IN_MODIFY + sys_IN_MOVE uint32 = syscall.IN_MOVE + sys_IN_MOVED_FROM uint32 = syscall.IN_MOVED_FROM + sys_IN_MOVED_TO uint32 = syscall.IN_MOVED_TO + sys_IN_MOVE_SELF uint32 = syscall.IN_MOVE_SELF + sys_IN_OPEN uint32 = syscall.IN_OPEN + + sys_AGNOSTIC_EVENTS = sys_IN_MOVED_TO | sys_IN_MOVED_FROM | sys_IN_CREATE | sys_IN_ATTRIB | sys_IN_MODIFY | sys_IN_MOVE_SELF | sys_IN_DELETE | sys_IN_DELETE_SELF + + // Special events + sys_IN_ISDIR uint32 = syscall.IN_ISDIR + sys_IN_IGNORED uint32 = syscall.IN_IGNORED + sys_IN_Q_OVERFLOW uint32 = syscall.IN_Q_OVERFLOW + sys_IN_UNMOUNT uint32 = syscall.IN_UNMOUNT +) + +type FileEvent struct { + mask uint32 // Mask of events + cookie uint32 // Unique cookie associating related events (for rename(2)) + Name string // File name (optional) +} + +// IsCreate reports whether the FileEvent was triggered by a creation +func (e *FileEvent) IsCreate() bool { + return (e.mask&sys_IN_CREATE) == sys_IN_CREATE || (e.mask&sys_IN_MOVED_TO) == sys_IN_MOVED_TO +} + +// IsDelete reports whether the FileEvent was triggered by a delete +func (e *FileEvent) IsDelete() bool { + return (e.mask&sys_IN_DELETE_SELF) == sys_IN_DELETE_SELF || (e.mask&sys_IN_DELETE) == sys_IN_DELETE +} + +// IsModify reports whether the FileEvent was triggered by a file modification or attribute change +func (e *FileEvent) IsModify() bool { + return ((e.mask&sys_IN_MODIFY) == sys_IN_MODIFY || (e.mask&sys_IN_ATTRIB) == sys_IN_ATTRIB) +} + +// IsRename reports whether the FileEvent was triggered by a change name +func (e *FileEvent) IsRename() bool { + return ((e.mask&sys_IN_MOVE_SELF) == sys_IN_MOVE_SELF || (e.mask&sys_IN_MOVED_FROM) == sys_IN_MOVED_FROM) +} + +// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. +func (e *FileEvent) IsAttrib() bool { + return (e.mask & sys_IN_ATTRIB) == sys_IN_ATTRIB +} + +type watch struct { + wd uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall) + flags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags) +} + +type Watcher struct { + mu sync.Mutex // Map access + fd int // File descriptor (as returned by the inotify_init() syscall) + watches map[string]*watch // Map of inotify watches (key: path) + fsnFlags map[string]uint32 // Map of watched files to flags used for filter + fsnmut sync.Mutex // Protects access to fsnFlags. + paths map[int]string // Map of watched paths (key: watch descriptor) + Error chan error // Errors are sent on this channel + internalEvent chan *FileEvent // Events are queued on this channel + Event chan *FileEvent // Events are returned on this channel + done chan bool // Channel for sending a "quit message" to the reader goroutine + isClosed bool // Set to true when Close() is first called +} + +// NewWatcher creates and returns a new inotify instance using inotify_init(2) +func NewWatcher() (*Watcher, error) { + fd, errno := syscall.InotifyInit() + if fd == -1 { + return nil, os.NewSyscallError("inotify_init", errno) + } + w := &Watcher{ + fd: fd, + watches: make(map[string]*watch), + fsnFlags: make(map[string]uint32), + paths: make(map[int]string), + internalEvent: make(chan *FileEvent), + Event: make(chan *FileEvent), + Error: make(chan error), + done: make(chan bool, 1), + } + + go w.readEvents() + go w.purgeEvents() + return w, nil +} + +// Close closes an inotify watcher instance +// It sends a message to the reader goroutine to quit and removes all watches +// associated with the inotify instance +func (w *Watcher) Close() error { + if w.isClosed { + return nil + } + w.isClosed = true + + // Remove all watches + for path := range w.watches { + w.RemoveWatch(path) + } + + // Send "quit" message to the reader goroutine + w.done <- true + + return nil +} + +// AddWatch adds path to the watched file set. +// The flags are interpreted as described in inotify_add_watch(2). +func (w *Watcher) addWatch(path string, flags uint32) error { + if w.isClosed { + return errors.New("inotify instance already closed") + } + + w.mu.Lock() + watchEntry, found := w.watches[path] + w.mu.Unlock() + if found { + watchEntry.flags |= flags + flags |= syscall.IN_MASK_ADD + } + wd, errno := syscall.InotifyAddWatch(w.fd, path, flags) + if wd == -1 { + return errno + } + + w.mu.Lock() + w.watches[path] = &watch{wd: uint32(wd), flags: flags} + w.paths[wd] = path + w.mu.Unlock() + + return nil +} + +// Watch adds path to the watched file set, watching all events. +func (w *Watcher) watch(path string) error { + return w.addWatch(path, sys_AGNOSTIC_EVENTS) +} + +// RemoveWatch removes path from the watched file set. +func (w *Watcher) removeWatch(path string) error { + w.mu.Lock() + defer w.mu.Unlock() + watch, ok := w.watches[path] + if !ok { + return errors.New(fmt.Sprintf("can't remove non-existent inotify watch for: %s", path)) + } + success, errno := syscall.InotifyRmWatch(w.fd, watch.wd) + if success == -1 { + return os.NewSyscallError("inotify_rm_watch", errno) + } + delete(w.watches, path) + return nil +} + +// readEvents reads from the inotify file descriptor, converts the +// received events into Event objects and sends them via the Event channel +func (w *Watcher) readEvents() { + var ( + buf [syscall.SizeofInotifyEvent * 4096]byte // Buffer for a maximum of 4096 raw events + n int // Number of bytes read with read() + errno error // Syscall errno + ) + + for { + // See if there is a message on the "done" channel + select { + case <-w.done: + syscall.Close(w.fd) + close(w.internalEvent) + close(w.Error) + return + default: + } + + n, errno = syscall.Read(w.fd, buf[:]) + + // If EOF is received + if n == 0 { + syscall.Close(w.fd) + close(w.internalEvent) + close(w.Error) + return + } + + if n < 0 { + w.Error <- os.NewSyscallError("read", errno) + continue + } + if n < syscall.SizeofInotifyEvent { + w.Error <- errors.New("inotify: short read in readEvents()") + continue + } + + var offset uint32 = 0 + // We don't know how many events we just read into the buffer + // While the offset points to at least one whole event... + for offset <= uint32(n-syscall.SizeofInotifyEvent) { + // Point "raw" to the event in the buffer + raw := (*syscall.InotifyEvent)(unsafe.Pointer(&buf[offset])) + event := new(FileEvent) + event.mask = uint32(raw.Mask) + event.cookie = uint32(raw.Cookie) + nameLen := uint32(raw.Len) + // If the event happened to the watched directory or the watched file, the kernel + // doesn't append the filename to the event, but we would like to always fill the + // the "Name" field with a valid filename. We retrieve the path of the watch from + // the "paths" map. + w.mu.Lock() + event.Name = w.paths[int(raw.Wd)] + w.mu.Unlock() + watchedName := event.Name + if nameLen > 0 { + // Point "bytes" at the first byte of the filename + bytes := (*[syscall.PathMax]byte)(unsafe.Pointer(&buf[offset+syscall.SizeofInotifyEvent])) + // The filename is padded with NUL bytes. TrimRight() gets rid of those. + event.Name += "/" + strings.TrimRight(string(bytes[0:nameLen]), "\000") + } + + // Send the events that are not ignored on the events channel + if !event.ignoreLinux() { + // Setup FSNotify flags (inherit from directory watch) + w.fsnmut.Lock() + if _, fsnFound := w.fsnFlags[event.Name]; !fsnFound { + if fsnFlags, watchFound := w.fsnFlags[watchedName]; watchFound { + w.fsnFlags[event.Name] = fsnFlags + } else { + w.fsnFlags[event.Name] = FSN_ALL + } + } + w.fsnmut.Unlock() + + w.internalEvent <- event + } + + // Move to the next event in the buffer + offset += syscall.SizeofInotifyEvent + nameLen + } + } +} + +// Certain types of events can be "ignored" and not sent over the Event +// channel. Such as events marked ignore by the kernel, or MODIFY events +// against files that do not exist. +func (e *FileEvent) ignoreLinux() bool { + // Ignore anything the inotify API says to ignore + if e.mask&sys_IN_IGNORED == sys_IN_IGNORED { + return true + } + + // If the event is not a DELETE or RENAME, the file must exist. + // Otherwise the event is ignored. + // *Note*: this was put in place because it was seen that a MODIFY + // event was sent after the DELETE. This ignores that MODIFY and + // assumes a DELETE will come or has come if the file doesn't exist. + if !(e.IsDelete() || e.IsRename()) { + _, statErr := os.Lstat(e.Name) + return os.IsNotExist(statErr) + } + return false +} diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_bsd.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_bsd.go new file mode 100644 index 0000000..37ea998 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_bsd.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd + +package fsnotify + +import "syscall" + +const open_FLAGS = syscall.O_NONBLOCK | syscall.O_RDONLY diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_darwin.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_darwin.go new file mode 100644 index 0000000..d450318 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_open_darwin.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin + +package fsnotify + +import "syscall" + +const open_FLAGS = syscall.O_EVTONLY diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_symlink_test.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_symlink_test.go new file mode 100644 index 0000000..39061f8 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_symlink_test.go @@ -0,0 +1,74 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd darwin linux + +package fsnotify + +import ( + "os" + "path/filepath" + "testing" + "time" +) + +func TestFsnotifyFakeSymlink(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + var errorsReceived counter + // Receive errors on the error channel on a separate goroutine + go func() { + for errors := range watcher.Error { + t.Logf("Received error: %s", errors) + errorsReceived.increment() + } + }() + + // Count the CREATE events received + var createEventsReceived, otherEventsReceived counter + go func() { + for ev := range watcher.Event { + t.Logf("event received: %s", ev) + if ev.IsCreate() { + createEventsReceived.increment() + } else { + otherEventsReceived.increment() + } + } + }() + + addWatch(t, watcher, testDir) + + if err := os.Symlink(filepath.Join(testDir, "zzz"), filepath.Join(testDir, "zzznew")); err != nil { + t.Fatalf("Failed to create bogus symlink: %s", err) + } + t.Logf("Created bogus symlink") + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + + // Should not be error, just no events for broken links (watching nothing) + if errorsReceived.value() > 0 { + t.Fatal("fsnotify errors have been received.") + } + if otherEventsReceived.value() > 0 { + t.Fatal("fsnotify other events received on the broken link") + } + + // Except for 1 create event (for the link itself) + if createEventsReceived.value() == 0 { + t.Fatal("fsnotify create events were not received after 500 ms") + } + if createEventsReceived.value() > 1 { + t.Fatal("fsnotify more create events received than expected") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() +} diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_test.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_test.go new file mode 100644 index 0000000..3f5a648 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_test.go @@ -0,0 +1,1010 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package fsnotify + +import ( + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "runtime" + "sync/atomic" + "testing" + "time" +) + +// An atomic counter +type counter struct { + val int32 +} + +func (c *counter) increment() { + atomic.AddInt32(&c.val, 1) +} + +func (c *counter) value() int32 { + return atomic.LoadInt32(&c.val) +} + +func (c *counter) reset() { + atomic.StoreInt32(&c.val, 0) +} + +// tempMkdir makes a temporary directory +func tempMkdir(t *testing.T) string { + dir, err := ioutil.TempDir("", "fsnotify") + if err != nil { + t.Fatalf("failed to create test directory: %s", err) + } + return dir +} + +// newWatcher initializes an fsnotify Watcher instance. +func newWatcher(t *testing.T) *Watcher { + watcher, err := NewWatcher() + if err != nil { + t.Fatalf("NewWatcher() failed: %s", err) + } + return watcher +} + +// addWatch adds a watch for a directory +func addWatch(t *testing.T, watcher *Watcher, dir string) { + if err := watcher.Watch(dir); err != nil { + t.Fatalf("watcher.Watch(%q) failed: %s", dir, err) + } +} + +func TestFsnotifyMultipleOperations(t *testing.T) { + watcher := newWatcher(t) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create directory that's not watched + testDirToMoveFiles := tempMkdir(t) + defer os.RemoveAll(testDirToMoveFiles) + + testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") + testFileRenamed := filepath.Join(testDirToMoveFiles, "TestFsnotifySeqRename.testfile") + + addWatch(t, watcher, testDir) + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var createReceived, modifyReceived, deleteReceived, renameReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { + t.Logf("event received: %s", event) + if event.IsDelete() { + deleteReceived.increment() + } + if event.IsModify() { + modifyReceived.increment() + } + if event.IsCreate() { + createReceived.increment() + } + if event.IsRename() { + renameReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // Modify the file outside of the watched dir + f, err = os.Open(testFileRenamed) + if err != nil { + t.Fatalf("open test renamed file failed: %s", err) + } + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Recreate the file that was moved + f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Close() + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 2 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) + } + mReceived := modifyReceived.value() + if mReceived != 1 { + t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) + } + dReceived := deleteReceived.value() + rReceived := renameReceived.value() + if dReceived+rReceived != 1 { + t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", rReceived+dReceived, 1) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyMultipleCreates(t *testing.T) { + watcher := newWatcher(t) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") + + addWatch(t, watcher, testDir) + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var createReceived, modifyReceived, deleteReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { + t.Logf("event received: %s", event) + if event.IsDelete() { + deleteReceived.increment() + } + if event.IsCreate() { + createReceived.increment() + } + if event.IsModify() { + modifyReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + os.Remove(testFile) + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Recreate the file + f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Close() + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Modify + f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Modify + f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 2 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) + } + mReceived := modifyReceived.value() + if mReceived < 3 { + t.Fatalf("incorrect number of modify events received after 500 ms (%d vs atleast %d)", mReceived, 3) + } + dReceived := deleteReceived.value() + if dReceived != 1 { + t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", dReceived, 1) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyDirOnly(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create a file before watching directory + // This should NOT add any events to the fsnotify event queue + testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") + { + var f *os.File + f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + } + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDir, "TestFsnotifyDirOnly.testfile") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var createReceived, modifyReceived, deleteReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileAlreadyExists) { + t.Logf("event received: %s", event) + if event.IsDelete() { + deleteReceived.increment() + } + if event.IsModify() { + modifyReceived.increment() + } + if event.IsCreate() { + createReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + os.Remove(testFile) + os.Remove(testFileAlreadyExists) + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 1 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 1) + } + mReceived := modifyReceived.value() + if mReceived != 1 { + t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) + } + dReceived := deleteReceived.value() + if dReceived != 2 { + t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyDeleteWatchedDir(t *testing.T) { + watcher := newWatcher(t) + defer watcher.Close() + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create a file before watching directory + testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") + { + var f *os.File + f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + } + + addWatch(t, watcher, testDir) + + // Add a watch for testFile + addWatch(t, watcher, testFileAlreadyExists) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var deleteReceived counter + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFileAlreadyExists) { + t.Logf("event received: %s", event) + if event.IsDelete() { + deleteReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + }() + + os.RemoveAll(testDir) + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + dReceived := deleteReceived.value() + if dReceived < 2 { + t.Fatalf("did not receive at least %d delete events, received %d after 500 ms", 2, dReceived) + } +} + +func TestFsnotifySubDir(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + testFile1 := filepath.Join(testDir, "TestFsnotifyFile1.testfile") + testSubDir := filepath.Join(testDir, "sub") + testSubDirFile := filepath.Join(testDir, "sub/TestFsnotifyFile1.testfile") + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var createReceived, deleteReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testSubDir) || event.Name == filepath.Clean(testFile1) { + t.Logf("event received: %s", event) + if event.IsCreate() { + createReceived.increment() + } + if event.IsDelete() { + deleteReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + addWatch(t, watcher, testDir) + + // Create sub-directory + if err := os.Mkdir(testSubDir, 0777); err != nil { + t.Fatalf("failed to create test sub-directory: %s", err) + } + + // Create a file + var f *os.File + f, err := os.OpenFile(testFile1, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + + // Create a file (Should not see this! we are not watching subdir) + var fs *os.File + fs, err = os.OpenFile(testSubDirFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + fs.Sync() + fs.Close() + + time.Sleep(200 * time.Millisecond) + + // Make sure receive deletes for both file and sub-directory + os.RemoveAll(testSubDir) + os.Remove(testFile1) + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 2 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) + } + dReceived := deleteReceived.value() + if dReceived != 2 { + t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyRename(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDir, "TestFsnotifyEvents.testfile") + testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var renameReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { + if event.IsRename() { + renameReceived.increment() + } + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + f.WriteString("data") + f.Sync() + f.Close() + + // Add a watch for testFile + addWatch(t, watcher, testFile) + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + if renameReceived.value() == 0 { + t.Fatal("fsnotify rename events have not been received after 500 ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } + + os.Remove(testFileRenamed) +} + +func TestFsnotifyRenameToCreate(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create directory to get file + testDirFrom := tempMkdir(t) + defer os.RemoveAll(testDirFrom) + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") + testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var createReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { + if event.IsCreate() { + createReceived.increment() + } + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + if createReceived.value() == 0 { + t.Fatal("fsnotify create events have not been received after 500 ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } + + os.Remove(testFileRenamed) +} + +func TestFsnotifyRenameToOverwrite(t *testing.T) { + switch runtime.GOOS { + case "plan9", "windows": + t.Skipf("skipping test on %q (os.Rename over existing file does not create event).", runtime.GOOS) + } + + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create directory to get file + testDirFrom := tempMkdir(t) + defer os.RemoveAll(testDirFrom) + + testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") + testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") + + // Create a file + var fr *os.File + fr, err := os.OpenFile(testFileRenamed, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + fr.Sync() + fr.Close() + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + var eventReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testFileRenamed) { + eventReceived.increment() + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + if eventReceived.value() == 0 { + t.Fatal("fsnotify events have not been received after 500 ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } + + os.Remove(testFileRenamed) +} + +func TestRemovalOfWatch(t *testing.T) { + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create a file before watching directory + testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") + { + var f *os.File + f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + } + + watcher := newWatcher(t) + defer watcher.Close() + + addWatch(t, watcher, testDir) + if err := watcher.RemoveWatch(testDir); err != nil { + t.Fatalf("Could not remove the watch: %v\n", err) + } + + go func() { + select { + case ev := <-watcher.Event: + t.Fatalf("We received event: %v\n", ev) + case <-time.After(500 * time.Millisecond): + t.Log("No event received, as expected.") + } + }() + + time.Sleep(200 * time.Millisecond) + // Modify the file outside of the watched dir + f, err := os.Open(testFileAlreadyExists) + if err != nil { + t.Fatalf("Open test file failed: %s", err) + } + f.WriteString("data") + f.Sync() + f.Close() + if err := os.Chmod(testFileAlreadyExists, 0700); err != nil { + t.Fatalf("chmod failed: %s", err) + } + time.Sleep(400 * time.Millisecond) +} + +func TestFsnotifyAttrib(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("attributes don't work on Windows.") + } + + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Error { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDir, "TestFsnotifyAttrib.testfile") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Event + // The modifyReceived counter counts IsModify events that are not IsAttrib, + // and the attribReceived counts IsAttrib events (which are also IsModify as + // a consequence). + var modifyReceived counter + var attribReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { + if event.IsModify() { + modifyReceived.increment() + } + if event.IsAttrib() { + attribReceived.increment() + } + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + f.WriteString("data") + f.Sync() + f.Close() + + // Add a watch for testFile + addWatch(t, watcher, testFile) + + if err := os.Chmod(testFile, 0700); err != nil { + t.Fatalf("chmod failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + // Creating/writing a file changes also the mtime, so IsAttrib should be set to true here + time.Sleep(500 * time.Millisecond) + if modifyReceived.value() == 0 { + t.Fatal("fsnotify modify events have not received after 500 ms") + } + if attribReceived.value() == 0 { + t.Fatal("fsnotify attribute events have not received after 500 ms") + } + + // Modifying the contents of the file does not set the attrib flag (although eg. the mtime + // might have been modified). + modifyReceived.reset() + attribReceived.reset() + + f, err = os.OpenFile(testFile, os.O_WRONLY, 0) + if err != nil { + t.Fatalf("reopening test file failed: %s", err) + } + + f.WriteString("more data") + f.Sync() + f.Close() + + time.Sleep(500 * time.Millisecond) + + if modifyReceived.value() != 1 { + t.Fatal("didn't receive a modify event after changing test file contents") + } + + if attribReceived.value() != 0 { + t.Fatal("did receive an unexpected attrib event after changing test file contents") + } + + modifyReceived.reset() + attribReceived.reset() + + // Doing a chmod on the file should trigger an event with the "attrib" flag set (the contents + // of the file are not changed though) + if err := os.Chmod(testFile, 0600); err != nil { + t.Fatalf("chmod failed: %s", err) + } + + time.Sleep(500 * time.Millisecond) + + if attribReceived.value() != 1 { + t.Fatal("didn't receive an attribute change after 500ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(1e9): + t.Fatal("event stream was not closed after 1 second") + } + + os.Remove(testFile) +} + +func TestFsnotifyClose(t *testing.T) { + watcher := newWatcher(t) + watcher.Close() + + var done int32 + go func() { + watcher.Close() + atomic.StoreInt32(&done, 1) + }() + + time.Sleep(50e6) // 50 ms + if atomic.LoadInt32(&done) == 0 { + t.Fatal("double Close() test failed: second Close() call didn't return") + } + + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + if err := watcher.Watch(testDir); err == nil { + t.Fatal("expected error on Watch() after Close(), got nil") + } +} + +func testRename(file1, file2 string) error { + switch runtime.GOOS { + case "windows", "plan9": + return os.Rename(file1, file2) + default: + cmd := exec.Command("mv", file1, file2) + return cmd.Run() + } +} diff --git a/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_windows.go b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_windows.go new file mode 100644 index 0000000..d88ae63 --- /dev/null +++ b/docs/generator/vendor/github.com/go-forks/fsnotify/fsnotify_windows.go @@ -0,0 +1,598 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package fsnotify + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "runtime" + "sync" + "syscall" + "unsafe" +) + +const ( + // Options for AddWatch + sys_FS_ONESHOT = 0x80000000 + sys_FS_ONLYDIR = 0x1000000 + + // Events + sys_FS_ACCESS = 0x1 + sys_FS_ALL_EVENTS = 0xfff + sys_FS_ATTRIB = 0x4 + sys_FS_CLOSE = 0x18 + sys_FS_CREATE = 0x100 + sys_FS_DELETE = 0x200 + sys_FS_DELETE_SELF = 0x400 + sys_FS_MODIFY = 0x2 + sys_FS_MOVE = 0xc0 + sys_FS_MOVED_FROM = 0x40 + sys_FS_MOVED_TO = 0x80 + sys_FS_MOVE_SELF = 0x800 + + // Special events + sys_FS_IGNORED = 0x8000 + sys_FS_Q_OVERFLOW = 0x4000 +) + +const ( + // TODO(nj): Use syscall.ERROR_MORE_DATA from ztypes_windows in Go 1.3+ + sys_ERROR_MORE_DATA syscall.Errno = 234 +) + +// Event is the type of the notification messages +// received on the watcher's Event channel. +type FileEvent struct { + mask uint32 // Mask of events + cookie uint32 // Unique cookie associating related events (for rename) + Name string // File name (optional) +} + +// IsCreate reports whether the FileEvent was triggered by a creation +func (e *FileEvent) IsCreate() bool { return (e.mask & sys_FS_CREATE) == sys_FS_CREATE } + +// IsDelete reports whether the FileEvent was triggered by a delete +func (e *FileEvent) IsDelete() bool { + return ((e.mask&sys_FS_DELETE) == sys_FS_DELETE || (e.mask&sys_FS_DELETE_SELF) == sys_FS_DELETE_SELF) +} + +// IsModify reports whether the FileEvent was triggered by a file modification or attribute change +func (e *FileEvent) IsModify() bool { + return ((e.mask&sys_FS_MODIFY) == sys_FS_MODIFY || (e.mask&sys_FS_ATTRIB) == sys_FS_ATTRIB) +} + +// IsRename reports whether the FileEvent was triggered by a change name +func (e *FileEvent) IsRename() bool { + return ((e.mask&sys_FS_MOVE) == sys_FS_MOVE || (e.mask&sys_FS_MOVE_SELF) == sys_FS_MOVE_SELF || (e.mask&sys_FS_MOVED_FROM) == sys_FS_MOVED_FROM || (e.mask&sys_FS_MOVED_TO) == sys_FS_MOVED_TO) +} + +// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. +func (e *FileEvent) IsAttrib() bool { + return (e.mask & sys_FS_ATTRIB) == sys_FS_ATTRIB +} + +const ( + opAddWatch = iota + opRemoveWatch +) + +const ( + provisional uint64 = 1 << (32 + iota) +) + +type input struct { + op int + path string + flags uint32 + reply chan error +} + +type inode struct { + handle syscall.Handle + volume uint32 + index uint64 +} + +type watch struct { + ov syscall.Overlapped + ino *inode // i-number + path string // Directory path + mask uint64 // Directory itself is being watched with these notify flags + names map[string]uint64 // Map of names being watched and their notify flags + rename string // Remembers the old name while renaming a file + buf [4096]byte +} + +type indexMap map[uint64]*watch +type watchMap map[uint32]indexMap + +// A Watcher waits for and receives event notifications +// for a specific set of files and directories. +type Watcher struct { + mu sync.Mutex // Map access + port syscall.Handle // Handle to completion port + watches watchMap // Map of watches (key: i-number) + fsnFlags map[string]uint32 // Map of watched files to flags used for filter + fsnmut sync.Mutex // Protects access to fsnFlags. + input chan *input // Inputs to the reader are sent on this channel + internalEvent chan *FileEvent // Events are queued on this channel + Event chan *FileEvent // Events are returned on this channel + Error chan error // Errors are sent on this channel + isClosed bool // Set to true when Close() is first called + quit chan chan<- error + cookie uint32 +} + +// NewWatcher creates and returns a Watcher. +func NewWatcher() (*Watcher, error) { + port, e := syscall.CreateIoCompletionPort(syscall.InvalidHandle, 0, 0, 0) + if e != nil { + return nil, os.NewSyscallError("CreateIoCompletionPort", e) + } + w := &Watcher{ + port: port, + watches: make(watchMap), + fsnFlags: make(map[string]uint32), + input: make(chan *input, 1), + Event: make(chan *FileEvent, 50), + internalEvent: make(chan *FileEvent), + Error: make(chan error), + quit: make(chan chan<- error, 1), + } + go w.readEvents() + go w.purgeEvents() + return w, nil +} + +// Close closes a Watcher. +// It sends a message to the reader goroutine to quit and removes all watches +// associated with the watcher. +func (w *Watcher) Close() error { + if w.isClosed { + return nil + } + w.isClosed = true + + // Send "quit" message to the reader goroutine + ch := make(chan error) + w.quit <- ch + if err := w.wakeupReader(); err != nil { + return err + } + return <-ch +} + +// AddWatch adds path to the watched file set. +func (w *Watcher) AddWatch(path string, flags uint32) error { + if w.isClosed { + return errors.New("watcher already closed") + } + in := &input{ + op: opAddWatch, + path: filepath.Clean(path), + flags: flags, + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +// Watch adds path to the watched file set, watching all events. +func (w *Watcher) watch(path string) error { + return w.AddWatch(path, sys_FS_ALL_EVENTS) +} + +// RemoveWatch removes path from the watched file set. +func (w *Watcher) removeWatch(path string) error { + in := &input{ + op: opRemoveWatch, + path: filepath.Clean(path), + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +func (w *Watcher) wakeupReader() error { + e := syscall.PostQueuedCompletionStatus(w.port, 0, 0, nil) + if e != nil { + return os.NewSyscallError("PostQueuedCompletionStatus", e) + } + return nil +} + +func getDir(pathname string) (dir string, err error) { + attr, e := syscall.GetFileAttributes(syscall.StringToUTF16Ptr(pathname)) + if e != nil { + return "", os.NewSyscallError("GetFileAttributes", e) + } + if attr&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 { + dir = pathname + } else { + dir, _ = filepath.Split(pathname) + dir = filepath.Clean(dir) + } + return +} + +func getIno(path string) (ino *inode, err error) { + h, e := syscall.CreateFile(syscall.StringToUTF16Ptr(path), + syscall.FILE_LIST_DIRECTORY, + syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, + nil, syscall.OPEN_EXISTING, + syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OVERLAPPED, 0) + if e != nil { + return nil, os.NewSyscallError("CreateFile", e) + } + var fi syscall.ByHandleFileInformation + if e = syscall.GetFileInformationByHandle(h, &fi); e != nil { + syscall.CloseHandle(h) + return nil, os.NewSyscallError("GetFileInformationByHandle", e) + } + ino = &inode{ + handle: h, + volume: fi.VolumeSerialNumber, + index: uint64(fi.FileIndexHigh)<<32 | uint64(fi.FileIndexLow), + } + return ino, nil +} + +// Must run within the I/O thread. +func (m watchMap) get(ino *inode) *watch { + if i := m[ino.volume]; i != nil { + return i[ino.index] + } + return nil +} + +// Must run within the I/O thread. +func (m watchMap) set(ino *inode, watch *watch) { + i := m[ino.volume] + if i == nil { + i = make(indexMap) + m[ino.volume] = i + } + i[ino.index] = watch +} + +// Must run within the I/O thread. +func (w *Watcher) addWatch(pathname string, flags uint64) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + if flags&sys_FS_ONLYDIR != 0 && pathname != dir { + return nil + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watchEntry := w.watches.get(ino) + w.mu.Unlock() + if watchEntry == nil { + if _, e := syscall.CreateIoCompletionPort(ino.handle, w.port, 0, 0); e != nil { + syscall.CloseHandle(ino.handle) + return os.NewSyscallError("CreateIoCompletionPort", e) + } + watchEntry = &watch{ + ino: ino, + path: dir, + names: make(map[string]uint64), + } + w.mu.Lock() + w.watches.set(ino, watchEntry) + w.mu.Unlock() + flags |= provisional + } else { + syscall.CloseHandle(ino.handle) + } + if pathname == dir { + watchEntry.mask |= flags + } else { + watchEntry.names[filepath.Base(pathname)] |= flags + } + if err = w.startRead(watchEntry); err != nil { + return err + } + if pathname == dir { + watchEntry.mask &= ^provisional + } else { + watchEntry.names[filepath.Base(pathname)] &= ^provisional + } + return nil +} + +// Must run within the I/O thread. +func (w *Watcher) remWatch(pathname string) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watch := w.watches.get(ino) + w.mu.Unlock() + if watch == nil { + return fmt.Errorf("can't remove non-existent watch for: %s", pathname) + } + if pathname == dir { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + watch.mask = 0 + } else { + name := filepath.Base(pathname) + w.sendEvent(watch.path+"\\"+name, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + return w.startRead(watch) +} + +// Must run within the I/O thread. +func (w *Watcher) deleteWatch(watch *watch) { + for name, mask := range watch.names { + if mask&provisional == 0 { + w.sendEvent(watch.path+"\\"+name, mask&sys_FS_IGNORED) + } + delete(watch.names, name) + } + if watch.mask != 0 { + if watch.mask&provisional == 0 { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + } + watch.mask = 0 + } +} + +// Must run within the I/O thread. +func (w *Watcher) startRead(watch *watch) error { + if e := syscall.CancelIo(watch.ino.handle); e != nil { + w.Error <- os.NewSyscallError("CancelIo", e) + w.deleteWatch(watch) + } + mask := toWindowsFlags(watch.mask) + for _, m := range watch.names { + mask |= toWindowsFlags(m) + } + if mask == 0 { + if e := syscall.CloseHandle(watch.ino.handle); e != nil { + w.Error <- os.NewSyscallError("CloseHandle", e) + } + w.mu.Lock() + delete(w.watches[watch.ino.volume], watch.ino.index) + w.mu.Unlock() + return nil + } + e := syscall.ReadDirectoryChanges(watch.ino.handle, &watch.buf[0], + uint32(unsafe.Sizeof(watch.buf)), false, mask, nil, &watch.ov, 0) + if e != nil { + err := os.NewSyscallError("ReadDirectoryChanges", e) + if e == syscall.ERROR_ACCESS_DENIED && watch.mask&provisional == 0 { + // Watched directory was probably removed + if w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + err = nil + } + w.deleteWatch(watch) + w.startRead(watch) + return err + } + return nil +} + +// readEvents reads from the I/O completion port, converts the +// received events into Event objects and sends them via the Event channel. +// Entry point to the I/O thread. +func (w *Watcher) readEvents() { + var ( + n, key uint32 + ov *syscall.Overlapped + ) + runtime.LockOSThread() + + for { + e := syscall.GetQueuedCompletionStatus(w.port, &n, &key, &ov, syscall.INFINITE) + watch := (*watch)(unsafe.Pointer(ov)) + + if watch == nil { + select { + case ch := <-w.quit: + w.mu.Lock() + var indexes []indexMap + for _, index := range w.watches { + indexes = append(indexes, index) + } + w.mu.Unlock() + for _, index := range indexes { + for _, watch := range index { + w.deleteWatch(watch) + w.startRead(watch) + } + } + var err error + if e := syscall.CloseHandle(w.port); e != nil { + err = os.NewSyscallError("CloseHandle", e) + } + close(w.internalEvent) + close(w.Error) + ch <- err + return + case in := <-w.input: + switch in.op { + case opAddWatch: + in.reply <- w.addWatch(in.path, uint64(in.flags)) + case opRemoveWatch: + in.reply <- w.remWatch(in.path) + } + default: + } + continue + } + + switch e { + case sys_ERROR_MORE_DATA: + if watch == nil { + w.Error <- errors.New("ERROR_MORE_DATA has unexpectedly null lpOverlapped buffer") + } else { + // The i/o succeeded but the buffer is full. + // In theory we should be building up a full packet. + // In practice we can get away with just carrying on. + n = uint32(unsafe.Sizeof(watch.buf)) + } + case syscall.ERROR_ACCESS_DENIED: + // Watched directory was probably removed + w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) + w.deleteWatch(watch) + w.startRead(watch) + continue + case syscall.ERROR_OPERATION_ABORTED: + // CancelIo was called on this handle + continue + default: + w.Error <- os.NewSyscallError("GetQueuedCompletionPort", e) + continue + case nil: + } + + var offset uint32 + for { + if n == 0 { + w.internalEvent <- &FileEvent{mask: sys_FS_Q_OVERFLOW} + w.Error <- errors.New("short read in readEvents()") + break + } + + // Point "raw" to the event in the buffer + raw := (*syscall.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset])) + buf := (*[syscall.MAX_PATH]uint16)(unsafe.Pointer(&raw.FileName)) + name := syscall.UTF16ToString(buf[:raw.FileNameLength/2]) + fullname := watch.path + "\\" + name + + var mask uint64 + switch raw.Action { + case syscall.FILE_ACTION_REMOVED: + mask = sys_FS_DELETE_SELF + case syscall.FILE_ACTION_MODIFIED: + mask = sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + watch.rename = name + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + if watch.names[watch.rename] != 0 { + watch.names[name] |= watch.names[watch.rename] + delete(watch.names, watch.rename) + mask = sys_FS_MOVE_SELF + } + } + + sendNameEvent := func() { + if w.sendEvent(fullname, watch.names[name]&mask) { + if watch.names[name]&sys_FS_ONESHOT != 0 { + delete(watch.names, name) + } + } + } + if raw.Action != syscall.FILE_ACTION_RENAMED_NEW_NAME { + sendNameEvent() + } + if raw.Action == syscall.FILE_ACTION_REMOVED { + w.sendEvent(fullname, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + if w.sendEvent(fullname, watch.mask&toFSnotifyFlags(raw.Action)) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + if raw.Action == syscall.FILE_ACTION_RENAMED_NEW_NAME { + fullname = watch.path + "\\" + watch.rename + sendNameEvent() + } + + // Move to the next event in the buffer + if raw.NextEntryOffset == 0 { + break + } + offset += raw.NextEntryOffset + + // Error! + if offset >= n { + w.Error <- errors.New("Windows system assumed buffer larger than it is, events have likely been missed.") + break + } + } + + if err := w.startRead(watch); err != nil { + w.Error <- err + } + } +} + +func (w *Watcher) sendEvent(name string, mask uint64) bool { + if mask == 0 { + return false + } + event := &FileEvent{mask: uint32(mask), Name: name} + if mask&sys_FS_MOVE != 0 { + if mask&sys_FS_MOVED_FROM != 0 { + w.cookie++ + } + event.cookie = w.cookie + } + select { + case ch := <-w.quit: + w.quit <- ch + case w.Event <- event: + } + return true +} + +func toWindowsFlags(mask uint64) uint32 { + var m uint32 + if mask&sys_FS_ACCESS != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS + } + if mask&sys_FS_MODIFY != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_WRITE + } + if mask&sys_FS_ATTRIB != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES + } + if mask&(sys_FS_MOVE|sys_FS_CREATE|sys_FS_DELETE) != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_FILE_NAME | syscall.FILE_NOTIFY_CHANGE_DIR_NAME + } + return m +} + +func toFSnotifyFlags(action uint32) uint64 { + switch action { + case syscall.FILE_ACTION_ADDED: + return sys_FS_CREATE + case syscall.FILE_ACTION_REMOVED: + return sys_FS_DELETE + case syscall.FILE_ACTION_MODIFIED: + return sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + return sys_FS_MOVED_FROM + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + return sys_FS_MOVED_TO + } + return 0 +} diff --git a/docs/generator/vendor/github.com/go-utils/ufs/README.md b/docs/generator/vendor/github.com/go-utils/ufs/README.md new file mode 100644 index 0000000..7d28b3e --- /dev/null +++ b/docs/generator/vendor/github.com/go-utils/ufs/README.md @@ -0,0 +1,286 @@ +# ufs + +Go programming helpers for common file-system needs. + +## Usage + +```go +var ( + // The permission bits used in the `EnsureDirExists`, `WriteBinaryFile` and `WriteTextFile` functions. + ModePerm = os.ModePerm +) +``` + +#### func ClearDirectory + +```go +func ClearDirectory(dirPath string, keepNamePatterns ...string) (err error) +``` +Removes anything in `dirPath` (but not `dirPath` itself), except items whose +`os.FileInfo.Name` matches any of the specified `keepNamePatterns`. + +#### func ClearEmptyDirectories + +```go +func ClearEmptyDirectories(dirPath string) (canDelete bool, err error) +``` +Removes all directories inside `dirPath`, except those that contain files or +descendent directories that contain files. + +#### func CopyAll + +```go +func CopyAll(srcDirPath, dstDirPath string, skipDirs *ustr.Matcher) (err error) +``` +Copies all files and directories inside `srcDirPath` to `dstDirPath`. All +sub-directories whose `os.FileInfo.Name` is matched by `skipDirs` (optional) are +skipped. + +#### func CopyFile + +```go +func CopyFile(srcFilePath, dstFilePath string) (err error) +``` +Performs an `io.Copy` from the specified source file to the specified +destination file. + +#### func DirExists + +```go +func DirExists(dirPath string) bool +``` +Returns whether a directory (not a file) exists at the specified `dirPath`. + +#### func DirsOrFilesExistIn + +```go +func DirsOrFilesExistIn(dirPath string, dirOrFileNames ...string) bool +``` +Returns whether all of the specified `dirOrFileNames` exist in `dirPath`. + +#### func EnsureDirExists + +```go +func EnsureDirExists(dirPath string) (err error) +``` +If a directory does not exist at the specified `dirPath`, attempts to create it. + +#### func ExtractZipFile + +```go +func ExtractZipFile(zipFilePath, targetDirPath string, deleteZipFile bool, fileNamesPrefix string, fileNamesToExtract ...string) error +``` +Extracts a ZIP archive to the local file system. zipFilePath: full file path to +the ZIP archive file. targetDirPath: directory path where un-zipped archive +contents are extracted to. deleteZipFile: deletes the ZIP archive file upon +successful extraction. + +#### func FileExists + +```go +func FileExists(filePath string) (fileExists bool) +``` +Returns whether a file (not a directory) exists at the specified `filePath`. + +#### func IsNewerThan + +```go +func IsNewerThan(srcFilePath, dstFilePath string) (newer bool, err error) +``` +Returns whether `srcFilePath` has been modified later than `dstFilePath`. + +NOTE: be aware that `newer` will be returned as `true` if `err` is returned as +*not* `nil`, since that is often more convenient for many use-cases. + +#### func MatchesAny + +```go +func MatchesAny(name string, patterns ...string) (matchingPattern string, err error) +``` +Applies all specified `patterns` to `filepath.Match` and returns the first +successfully matching such pattern. + +#### func ReadBinaryFile + +```go +func ReadBinaryFile(filePath string, panicOnError bool) []byte +``` +Reads and returns the binary contents of a file with non-idiomatic error +handling, mostly for one-off `package main`s. + +#### func ReadTextFile + +```go +func ReadTextFile(filePath string, panicOnError bool, defaultValue string) string +``` +Reads and returns the contents of a text file with non-idiomatic error handling, +mostly for one-off `package main`s. + +#### func SaveToFile + +```go +func SaveToFile(src io.Reader, dstFilePath string) (err error) +``` +Performs an `io.Copy` from the specified `io.Reader` to the specified local +file. + +#### func WalkAllDirs + +```go +func WalkAllDirs(dirPath string, visitor WalkerVisitor) []error +``` +Calls `visitor` for `dirPath` and all descendent directories (but not files). + +#### func WalkAllFiles + +```go +func WalkAllFiles(dirPath string, visitor WalkerVisitor) []error +``` +Calls `visitor` for all files (but not directories) directly or indirectly +descendent to `dirPath`. + +#### func WalkDirsIn + +```go +func WalkDirsIn(dirPath string, visitor WalkerVisitor) []error +``` +Calls `visitor` for all directories (but not files) in `dirPath`, but not their +sub-directories and not `dirPath` itself. + +#### func WalkFilesIn + +```go +func WalkFilesIn(dirPath string, visitor WalkerVisitor) []error +``` +Calls `visitor` for all files (but not directories) directly inside `dirPath`, +but not for any inside sub-directories. + +#### func WriteBinaryFile + +```go +func WriteBinaryFile(filePath string, contents []byte) error +``` +A short-hand for `ioutil.WriteFile` using `ModePerm`. Also ensures the target +file's directory exists. + +#### func WriteTextFile + +```go +func WriteTextFile(filePath, contents string) error +``` +A short-hand for `ioutil.WriteFile`, using `ModePerm`. Also ensures the target +file's directory exists. + +#### type DirWalker + +```go +type DirWalker struct { + // `Walk` returns a slice of all `error`s encountered but keeps walking as indicated by + // `DirVisitor` and/or `FileVisitor` --- to abort walking upon the first `error`, set this to `true`. + BreakOnError bool + + // After invoking `DirVisitor` on the specified directory (if `VisitSelf`), by default + // its files get visited first before visiting its sub-directories. + // If `VisitDirsFirst` is `true`, then files get visited last, after + // having visited all sub-directories. + VisitDirsFirst bool + + // If `false`, only the items in the specified directory get visited + // (and the directory itself if `VisitSelf`), but no items inside its sub-directories. + VisitSubDirs bool + + // Defaults to `true` if initialized via `NewDirWalker`. + VisitSelf bool + + // Called for every directory being visited during a `Walk`. + DirVisitor WalkerVisitor + + // Called for every file being visited during a `Walk`. + FileVisitor WalkerVisitor +} +``` + +Provides recursive directory walking with a variety of options. + +#### func NewDirWalker + +```go +func NewDirWalker(deep bool, dirVisitor, fileVisitor WalkerVisitor) (me *DirWalker) +``` +Initializes and returns a new `DirWalker` with the specified (optional) +`WalkerVisitor`s. `deep` sets `VisitSubDirs`. + +#### func (*DirWalker) Walk + +```go +func (me *DirWalker) Walk(dirPath string) (errs []error) +``` +Initiates a walk starting at the specified `dirPath`. + +#### type WalkerVisitor + +```go +type WalkerVisitor func(fullPath string) (keepWalking bool) +``` + +Used for `DirWalker.DirVisitor` and `DirWalker.FileVisitor`. Always return +`keepWalking` as true unless you want to immediately terminate a `Walk` early. + +#### type Watcher + +```go +type Watcher struct { +} +``` + +A convenient wrapper around `go-forks/fsnotify.Watcher`. + +**NOTE**: `godocdown` picked `watcher-sandboxed.go` shim instead of +`watcher-default.go`: Refer to *actual* docs on `Watcher`. + +#### func NewWatcher + +```go +func NewWatcher() (me *Watcher, err error) +``` +Always returns a new `Watcher`, even if `err` is not `nil` (in which case, +however, `me.Watcher` might be `nil`). + +#### func (*Watcher) Close + +```go +func (me *Watcher) Close() (err error) +``` +Closes the underlying `me.Watcher`. + +#### func (*Watcher) Go + +```go +func (me *Watcher) Go() +``` +Starts watching. A loop designed to be called in a new go-routine, as in `go +myWatcher.Go`. This function returns when `me.Close()` is called. + +#### func (*Watcher) WatchIn + +```go +func (me *Watcher) WatchIn(dirPath string, namePattern ustr.Pattern, runHandlerNow bool, handler WatcherHandler) (errs []error) +``` +Watches dirs/files (whose `filepath.Base` names match the specified +`namePattern`) inside the specified `dirPath` for change event notifications. + +`handler` is invoked whenever a change event is observed, providing the full +path. + +`runHandlerNow` allows immediate one-off invokation of `handler`. This will +`DirWalker.Walk` the `dirPath`. + +An empty `namePattern` is equivalent to `*`. + +#### type WatcherHandler + +```go +type WatcherHandler func(path string) +``` + +Handles a file-system notification originating in a `Watcher`. diff --git a/docs/generator/vendor/github.com/go-utils/ufs/_gob.gtxt b/docs/generator/vendor/github.com/go-utils/ufs/_gob.gtxt new file mode 100644 index 0000000..ff0b6ec --- /dev/null +++ b/docs/generator/vendor/github.com/go-utils/ufs/_gob.gtxt @@ -0,0 +1,42 @@ +package uio + +/* +import ( + "compress/gzip" + "encoding/gob" + "os" + +// wot + + util "github.com/metaleap/go-util-misc" +) + +type AnyToAny func(src interface{}) interface{} + +func PtrVal(ptr interface{}) interface{} { + return reflect.Indirect(reflect.ValueOf(ptr)).Interface() +} + +func CreateGobsFile (targetFilePath string, recs []interface{}, getRecPtr util.AnyToAny, gzipped bool) (err error) { + var file *os.File + var gobber *gob.Encoder + var gzipper *gzip.Writer + if file, err = os.Create(targetFilePath); file != nil { + defer file.Close() + } + if err != nil { return } + if gzipped { + if gzipper, err = gzip.NewWriterLevel(file, gzip.BestCompression); gzipper != nil { + defer gzipper.Close() + gobber = gob.NewEncoder(gzipper) + } + if err != nil { return } + } else { + gobber = gob.NewEncoder(file) + } + for _, rec := range recs { + if err = gobber.Encode(util.PtrVal(getRecPtr(rec))); err != nil { return } + } + return +} +*/ diff --git a/docs/generator/vendor/github.com/go-utils/ufs/doc.go b/docs/generator/vendor/github.com/go-utils/ufs/doc.go new file mode 100644 index 0000000..167288a --- /dev/null +++ b/docs/generator/vendor/github.com/go-utils/ufs/doc.go @@ -0,0 +1,2 @@ +// Go programming helpers for common file-system needs. +package ufs diff --git a/docs/generator/vendor/github.com/go-utils/ufs/fs.go b/docs/generator/vendor/github.com/go-utils/ufs/fs.go new file mode 100644 index 0000000..648d58a --- /dev/null +++ b/docs/generator/vendor/github.com/go-utils/ufs/fs.go @@ -0,0 +1,376 @@ +package ufs + +import ( + "archive/zip" + "io" + "io/ioutil" + "os" + "path/filepath" + "runtime" + "strings" + + "github.com/metaleap/go-util-slice" + "github.com/metaleap/go-util-str" +) + +// Handles a file-system notification originating in a `Watcher`. +type WatcherHandler func(path string) + +var ( + // The permission bits used in the `EnsureDirExists`, `WriteBinaryFile` and `WriteTextFile` functions. + ModePerm = os.ModePerm +) + + +func PathPrefix (val string, pathprefix string) bool { + if runtime.GOOS=="windows" { + return strings.HasPrefix(strings.ToLower(val), strings.ToLower(pathprefix)) + } + return strings.HasPrefix(val, pathprefix) +} + + +// Removes anything in `dirPath` (but not `dirPath` itself), except items whose `os.FileInfo.Name` matches any of the specified `keepNamePatterns`. +func ClearDirectory(dirPath string, keepNamePatterns ...string) (err error) { + var fileInfos []os.FileInfo + var matcher ustr.Matcher + matcher.AddPatterns(keepNamePatterns...) + if fileInfos, err = ioutil.ReadDir(dirPath); err == nil { + for _, fi := range fileInfos { + if fn := fi.Name(); !matcher.IsMatch(fn) { + if err = os.RemoveAll(filepath.Join(dirPath, fn)); err != nil { + return + } + } + } + } + return +} + +// Removes all directories inside `dirPath`, except those that +// contain files or descendent directories that contain files. +func ClearEmptyDirectories(dirPath string) (canDelete bool, err error) { + var ( + fi os.FileInfo + subs []os.FileInfo + canDel bool + subDir string + ) + canDelete = true + if subs, err = ioutil.ReadDir(dirPath); err == nil { + for _, fi = range subs { + if fi.IsDir() { + subDir = filepath.Join(dirPath, fi.Name()) + if canDel, err = ClearEmptyDirectories(subDir); err != nil { + break + } else if !canDel { + canDelete = false + } else if err = os.RemoveAll(subDir); err != nil { + break + } + } else { + canDelete = false + } + } + } + if err != nil { + canDelete = false + } + return +} + +// Copies all files and directories inside `srcDirPath` to `dstDirPath`. +// All sub-directories whose `os.FileInfo.Name` is matched by `skipDirs` (optional) are skipped. +func CopyAll(srcDirPath, dstDirPath string, skipDirs *ustr.Matcher) (err error) { + var ( + srcPath, destPath string + fileInfos []os.FileInfo + ) + if fileInfos, err = ioutil.ReadDir(srcDirPath); err == nil { + EnsureDirExists(dstDirPath) + for _, fi := range fileInfos { + if srcPath, destPath = filepath.Join(srcDirPath, fi.Name()), filepath.Join(dstDirPath, fi.Name()); fi.IsDir() { + if skipDirs == nil || !skipDirs.IsMatch(fi.Name()) { + CopyAll(srcPath, destPath, skipDirs) + } + } else { + CopyFile(srcPath, destPath) + } + } + } + return +} + +// Performs an `io.Copy` from the specified source file to the specified destination file. +func CopyFile(srcFilePath, dstFilePath string) (err error) { + var src *os.File + if src, err = os.Open(srcFilePath); err != nil { + return + } + defer src.Close() + err = SaveToFile(src, dstFilePath) + return +} + +// Returns whether a directory (not a file) exists at the specified `dirpath`. +func DirExists(dirpath string) bool { + if len(dirpath) == 0 { return false } + stat, err := os.Stat(dirpath) + return err==nil && stat.IsDir() +} + +// Returns whether all of the specified `dirOrFileNames` exist in `dirPath`. +func DirsOrFilesExistIn(dirPath string, dirOrFileNames ...string) bool { + var ( + err error + stat os.FileInfo + ) + for _, name := range dirOrFileNames { + if stat, err = os.Stat(filepath.Join(dirPath, name)); err != nil || stat == nil { + return false + } + + } + return true +} + +// If a directory does not exist at the specified `dirPath`, attempts to create it. +func EnsureDirExists(dirPath string) (err error) { + if !DirExists(dirPath) { + if err = EnsureDirExists(filepath.Dir(dirPath)); err == nil { + err = os.Mkdir(dirPath, ModePerm) + } + } + return +} + +// Extracts a ZIP archive to the local file system. +// zipFilePath: full file path to the ZIP archive file. +// targetDirPath: directory path where un-zipped archive contents are extracted to. +// deleteZipFile: deletes the ZIP archive file upon successful extraction. +func ExtractZipFile(zipFilePath, targetDirPath string, deleteZipFile bool, fileNamesPrefix string, fileNamesToExtract ...string) error { + var ( + fnames []string + fnprefix string + efile *os.File + zfile *zip.File + zfileReader io.ReadCloser + ) + unzip, err := zip.OpenReader(zipFilePath) + if unzip != nil { + if err == nil && unzip.File != nil { + if fnames = fileNamesToExtract; len(fnames) > 0 { + for i, fn := range fnames { + if strings.HasPrefix(fn, fileNamesPrefix) { + fnames[i] = fn[len(fileNamesPrefix):] + fnprefix = fileNamesPrefix + } + } + } + for _, zfile = range unzip.File { + if len(fnames) == 0 || uslice.StrHas(fnames, zfile.FileHeader.Name) { + if zfileReader, err = zfile.Open(); zfileReader != nil { + if err == nil { + if efile, err = os.Create(filepath.Join(targetDirPath, fnprefix+zfile.FileHeader.Name)); efile != nil { + if err == nil { + _, err = io.Copy(efile, zfileReader) + } + efile.Close() + } + } + zfileReader.Close() + } + } + if err != nil { + break + } + } + } + unzip.Close() + if deleteZipFile && (err == nil) { + err = os.Remove(zipFilePath) + } + } + return err +} + +// Returns whether a file (not a directory) exists at the specified `filePath`. +func FileExists (filePath string) bool { + stat,err := os.Stat(filePath) + return err==nil && stat.Mode().IsRegular() +} + +/* +// If a file with a given base-name and one of a set of extensions exists in the specified directory, returns details on it. +// The tryLower and tryUpper flags also test for upper-case and lower-case variants of the specified fileBaseName. +func FindFileInfo(dirPath string, fileBaseName string, fileExts []string, tryLower bool, tryUpper bool) (fullFilePath string, fileInfo *os.FileInfo) { + var ( + stat os.FileInfo + err error + fext, fpath string + ) + for _, fext = range fileExts { + fpath = filepath.Join(dirPath, fileBaseName+fext) + if stat, err = os.Stat(fpath); err != nil { + if tryUpper { + fpath = filepath.Join(dirPath, strings.ToUpper(fileBaseName)+fext) + stat, err = os.Stat(fpath) + } + if (err != nil) && tryLower { + fpath = filepath.Join(dirPath, strings.ToLower(fileBaseName)+fext) + stat, err = os.Stat(fpath) + } + } + if (err == nil) && !stat.IsDir() { + return fpath, &stat + } + } + return "", nil +} +*/ + +// Returns whether `srcFilePath` has been modified later than `dstFilePath`. +// +// NOTE: be aware that `newer` will be returned as `true` if `err` is returned as *not* `nil`, +// since that is often more convenient for many use-cases. +func IsNewerThan(srcFilePath, dstFilePath string) (newer bool, err error) { + var out, src os.FileInfo + newer = true + if out, err = os.Stat(dstFilePath); err == nil && out != nil { + if src, err = os.Stat(srcFilePath); err == nil && src != nil { + newer = src.ModTime().UnixNano() > out.ModTime().UnixNano() || (out.Size() == 0 && src.Size() != 0) + } + } + return +} + +// Applies all specified `patterns` to `filepath.Match` and returns the first +// successfully matching such pattern. +func MatchesAny(name string, patterns ...string) (matchingPattern string, err error) { + var ( + b bool + e error + ) + for _, pattern := range patterns { + if b, e = filepath.Match(pattern, name); b { + matchingPattern = pattern + return + } else if e != nil { + err = e + } + } + return +} + +// Reads and returns the binary contents of a file with non-idiomatic error handling, mostly for one-off `package main`s. +func ReadBinaryFile(filePath string, panicOnError bool) []byte { + bytes, err := ioutil.ReadFile(filePath) + if panicOnError && (err != nil) { + panic(err) + } + return bytes +} + +/* +// Reads binary data into the specified interface{} from the specified io.ReadSeeker at the specified offset using the specified binary.ByteOrder. +// Returns false if data could not be successfully read as specified, otherwise true. +func ReadFromBinary(readSeeker io.ReadSeeker, offset int64, byteOrder binary.ByteOrder, ptr interface{}) bool { + o, err := readSeeker.Seek(offset, 0) + if (o != offset) || (err != nil) { + return false + } + if err = binary.Read(readSeeker, byteOrder, ptr); err != nil { + return false + } + return true +} +*/ + +// Reads and returns the contents of a text file with non-idiomatic error handling, mostly for one-off `package main`s. +func ReadTextFile(filePath string, panicOnError bool, defaultValue string) string { + bytes, err := ioutil.ReadFile(filePath) + if err == nil { + return string(bytes) + } + if panicOnError && (err != nil) { + panic(err) + } + return defaultValue +} + +func SanitizeFsName (name string) string { + return ustr.Replace(name, map[string]string { ":": "_", + "*": "_", + ".": "_", + "\"": "_", + "/": "_", + "\\": "_", + "<": "_", + ">": "_", + "|": "_", + "?": "_", + }) +} + +// Performs an `io.Copy` from the specified `io.Reader` to the specified local file. +func SaveToFile(src io.Reader, dstFilePath string) (err error) { + var file *os.File + if file, err = os.Create(dstFilePath); file != nil { + defer file.Close() + if err == nil { + _, err = io.Copy(file, src) + } + } + return +} + +// Calls `visitor` for `dirPath` and all descendent directories (but not files). +func WalkAllDirs(dirPath string, visitor WalkerVisitor) []error { + return NewDirWalker(true, visitor, nil).Walk(dirPath) +} + +// Calls `visitor` for all files (but not directories) directly or indirectly descendent to `dirPath`. +func WalkAllFiles(dirPath string, visitor WalkerVisitor) []error { + return NewDirWalker(true, nil, visitor).Walk(dirPath) +} + +// Calls `visitor` for all directories (but not files) in `dirPath`, but not their sub-directories and not `dirPath` itself. +func WalkDirsIn(dirPath string, visitor WalkerVisitor) []error { + w := NewDirWalker(false, visitor, nil) + w.VisitSelf = false + return w.Walk(dirPath) +} + +// Calls `visitor` for all files (but not directories) directly inside `dirPath`, but not for any inside sub-directories. +func WalkFilesIn(dirPath string, visitor WalkerVisitor) []error { + w := NewDirWalker(false, nil, visitor) + w.VisitSelf = false + return w.Walk(dirPath) +} + +// A short-hand for `ioutil.WriteFile` using `ModePerm`. +// Also ensures the target file's directory exists. +func WriteBinaryFile(filePath string, contents []byte) error { + EnsureDirExists(filepath.Dir(filePath)) + return ioutil.WriteFile(filePath, contents, ModePerm) +} + +// A short-hand for `ioutil.WriteFile`, using `ModePerm`. +// Also ensures the target file's directory exists. +func WriteTextFile(filePath, contents string) error { + return WriteBinaryFile(filePath, []byte(contents)) +} + +func watchRunHandler(dirPath string, namePattern ustr.Pattern, handler WatcherHandler) []error { + vis := func(fullPath string) (keepWalking bool) { + keepWalking = true + if namePattern.IsMatch(filepath.Base(fullPath)) { + handler(fullPath) + } + return + } + w := NewDirWalker(false, vis, vis) + w.VisitSelf = false + w.VisitDirsFirst = true + return w.Walk(dirPath) +} diff --git a/docs/generator/vendor/github.com/go-utils/ufs/walker.go b/docs/generator/vendor/github.com/go-utils/ufs/walker.go new file mode 100644 index 0000000..70f8837 --- /dev/null +++ b/docs/generator/vendor/github.com/go-utils/ufs/walker.go @@ -0,0 +1,104 @@ +package ufs + +import ( + "io/ioutil" + "os" + "path/filepath" +) + +// Used for `DirWalker.DirVisitor` and `DirWalker.FileVisitor`. +// Always return `keepWalking` as true unless you want to immediately terminate a `Walk` early. +type WalkerVisitor func(fullPath string) (keepWalking bool) + +// An empty `WalkerVisitor` used in place of a `nil` directory or file visitor during a `DirWalker.Walk`. Always returns `true`. +func walkerVisitorNoop(_ string) bool { + return true +} + +// Provides recursive directory walking with a variety of options. +type DirWalker struct { + // `Walk` returns a slice of all `error`s encountered but keeps walking as indicated by + // `DirVisitor` and/or `FileVisitor` --- to abort walking upon the first `error`, set this to `true`. + BreakOnError bool + + // After invoking `DirVisitor` on the specified directory (if `VisitSelf`), by default + // its files get visited first before visiting its sub-directories. + // If `VisitDirsFirst` is `true`, then files get visited last, after + // having visited all sub-directories. + VisitDirsFirst bool + + // If `false`, only the items in the specified directory get visited + // (and the directory itself if `VisitSelf`), but no items inside its sub-directories. + VisitSubDirs bool + + // Defaults to `true` if initialized via `NewDirWalker`. + VisitSelf bool + + // Called for every directory being visited during a `Walk`. + DirVisitor WalkerVisitor + + // Called for every file being visited during a `Walk`. + FileVisitor WalkerVisitor +} + +// Initializes and returns a new `DirWalker` with the specified (optional) `WalkerVisitor`s. +// `deep` sets `VisitSubDirs`. +func NewDirWalker(deep bool, dirVisitor, fileVisitor WalkerVisitor) (me *DirWalker) { + me = &DirWalker{DirVisitor: dirVisitor, FileVisitor: fileVisitor, VisitSubDirs: deep, VisitSelf: true} + return +} + +// Initiates a walk starting at the specified `dirPath`. +func (me *DirWalker) Walk(dirPath string) (errs []error) { + me.walk(me.VisitSelf, dirPath, &errs) + return +} + +func (me *DirWalker) walk(walkSelf bool, dirPath string, errs *[]error) { + dirVisitor, fileVisitor := me.DirVisitor, me.FileVisitor + if dirVisitor == nil { + dirVisitor = walkerVisitorNoop + } + if fileVisitor == nil { + fileVisitor = walkerVisitorNoop + } + if walkSelf { + walkSelf = dirVisitor(dirPath) + } else { + walkSelf = true + } + if walkSelf { + if fileInfos, err := ioutil.ReadDir(dirPath); err == nil { + if me.VisitDirsFirst { + if !me.walkInfos(dirPath, fileInfos, true, dirVisitor, errs) { + return + } + } + if !me.walkInfos(dirPath, fileInfos, false, fileVisitor, errs) { + return + } + if !me.VisitDirsFirst { + if !me.walkInfos(dirPath, fileInfos, true, dirVisitor, errs) { + return + } + } + } else if *errs = append(*errs, err); me.BreakOnError { + return + } + } +} + +func (me *DirWalker) walkInfos(dirPath string, fileInfos []os.FileInfo, isDir bool, visitor WalkerVisitor, errs *[]error) (keepWalking bool) { + var fullPath string + keepWalking = true + for _, fi := range fileInfos { + if fullPath = filepath.Join(dirPath, fi.Name()); fi.IsDir() == isDir { + if keepWalking = visitor(fullPath); !keepWalking { + break + } else if isDir && me.VisitSubDirs { + me.walk(false, fullPath, errs) + } + } + } + return +} diff --git a/docs/generator/vendor/github.com/go-utils/ufs/watcher-default.go b/docs/generator/vendor/github.com/go-utils/ufs/watcher-default.go new file mode 100644 index 0000000..e8d0e9e --- /dev/null +++ b/docs/generator/vendor/github.com/go-utils/ufs/watcher-default.go @@ -0,0 +1,133 @@ +// +build !appengine + +package ufs + +import ( + "log" + "path/filepath" + "runtime" + "time" + + "github.com/go-forks/fsnotify" + + "github.com/metaleap/go-util-str" +) + +// A convenient wrapper around `go-forks/fsnotify.Watcher`. +// +// Usage: +// var w ufs.Watcher +// w.WatchIn(dir, pattern, runNow, handler) +// go w.Go() +// otherCode(laterOn...) +// w.WatchIn(anotherDir...) +type Watcher struct { + *fsnotify.Watcher + + // Defaults to a `time.Duration` of 250 milliseconds + DebounceNano int64 + + // A collection of custom `fsnotify.FileEvent` handlers. + // Not related to the handlers specified in your `Watcher.WatchIn` calls. + OnEvent []func(evt *fsnotify.FileEvent) + + // A collection of custom `error` handlers. + OnError []func(err error) + + closed chan bool + dirsWatching map[string]bool + allHandlers map[string][]WatcherHandler +} + +// Always returns a new `Watcher`, even if `err` is not `nil` (in which case, however, `me.Watcher` might be `nil`). +func NewWatcher() (me *Watcher, err error) { + me = &Watcher{dirsWatching: map[string]bool{}, allHandlers: map[string][]WatcherHandler{}, closed: make(chan bool)} + me.DebounceNano = time.Duration(250 * time.Millisecond).Nanoseconds() + me.Watcher, err = fsnotify.NewWatcher() + return +} + +// Closes the underlying `me.Watcher`. +func (me *Watcher) Close() (err error) { + me.closed <- true + if me.Watcher != nil { + err = me.Watcher.Close() + } + return +} + +// Starts watching. A loop designed to be called in a new go-routine, as in `go myWatcher.Go`. +// This function returns when `me.Close()` is called. +func (me *Watcher) Go() { + defer log.Println("BYEBYE!!") + var ( + evt *fsnotify.FileEvent + err error + hasLast bool + dif int64 + dirPath, dirPathAndNamePattern string + on WatcherHandler + ons []WatcherHandler + onErr func(err error) + onEvt func(evt *fsnotify.FileEvent) + ) + lastEvt := map[string]int64{} + for { + select { + case <-me.closed: + return + case evt = <-me.Event: + if evt != nil { + _, hasLast = lastEvt[evt.Name] + if dif = time.Now().UnixNano() - lastEvt[evt.Name]; dif > me.DebounceNano || !hasLast { + for _, onEvt = range me.OnEvent { + onEvt(evt) + } + dirPath = filepath.Dir(evt.Name) + for dirPathAndNamePattern, ons = range me.allHandlers { + if filepath.Dir(dirPathAndNamePattern) == dirPath && ustr.MatchesAny(filepath.Base(evt.Name), filepath.Base(dirPathAndNamePattern)) { + for _, on = range ons { + on(evt.Name) + } + } + } + lastEvt[evt.Name] = time.Now().UnixNano() + } + } + case err = <-me.Error: + if err != nil { + for _, onErr = range me.OnError { + onErr(err) + } + } + default: + runtime.Gosched() + } + } +} + +// Watches dirs/files (whose `filepath.Base` names match the specified `namePattern`) inside the specified `dirPath` for change event notifications. +// +// `handler` is invoked whenever a change event is observed, providing the full path. +// +// `runHandlerNow` allows immediate one-off invokation of `handler`. This will `DirWalker.Walk` the `dirPath`. +// +// An empty `namePattern` is equivalent to `*`. +func (me *Watcher) WatchIn(dirPath string, namePattern ustr.Pattern, runHandlerNow bool, handler WatcherHandler) (errs []error) { + dirPath = filepath.Clean(dirPath) + if _, ok := me.dirsWatching[dirPath]; !ok { + if err := me.Watch(dirPath); err != nil { + errs = append(errs, err) + } else { + me.dirsWatching[dirPath] = true + } + } + if len(errs) == 0 { + fullPath := filepath.Join(dirPath, string(namePattern)) + me.allHandlers[fullPath] = append(me.allHandlers[fullPath], handler) + if runHandlerNow { + errs = append(errs, watchRunHandler(dirPath, namePattern, handler)...) + } + } + return +} diff --git a/docs/generator/vendor/github.com/go-utils/ufs/watcher-sandboxed.go b/docs/generator/vendor/github.com/go-utils/ufs/watcher-sandboxed.go new file mode 100644 index 0000000..cef0245 --- /dev/null +++ b/docs/generator/vendor/github.com/go-utils/ufs/watcher-sandboxed.go @@ -0,0 +1,37 @@ +// +build appengine + +package ufs + +import ( + "path/filepath" + + "github.com/metaleap/go-util-str" +) + +// A convenient wrapper around `go-forks/fsnotify.Watcher`. +// +// **NOTE**: `godocdown` picked `watcher-sandboxed.go` shim instead of `watcher-default.go`: +// Refer to http://godoc.org/github.com/metaleap/go-util-fs#Watcher for *actual* docs on `Watcher`. +type Watcher struct { +} + +// Returns a new `Watcher`, `err` is always nil. +func NewWatcher() (me *Watcher, err error) { + me = &Watcher{} + return +} + +// Closes the underlying `me.Watcher`. +func (me *Watcher) Close() (err error) { + return +} + +func (me *Watcher) Go() { +} + +func (me *Watcher) WatchIn(dirPath string, namePattern ustr.Pattern, runHandlerNow bool, handler WatcherHandler) (errs []error) { + if runHandlerNow { + errs = watchRunHandler(filepath.Clean(dirPath), namePattern, handler) + } + return +} diff --git a/docs/generator/vendor/github.com/metaleap/go-util-misc/README.md b/docs/generator/vendor/github.com/metaleap/go-util-misc/README.md new file mode 100644 index 0000000..7806d69 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-misc/README.md @@ -0,0 +1,205 @@ +# ugo + +Go programming helpers for common miscellaneous needs. + +## Usage + +```go +var ( + // The string format used in LogError(). + LogErrorFormat = "%v" + + // Look-up hash-table for the `OSName` function. + OSNames = map[string]string{ + "windows": "Windows", + "darwin": "Mac OS X", + "linux": "Linux", + "freebsd": "FreeBSD", + "appengine": "Google App Engine", + } +) +``` + +#### func GoPaths + +```go +func GoPaths() []string +``` +Returns all paths listed in the `GOPATH` environment variable. + +#### func GopathSrc + +```go +func GopathSrc(subDirNames ...string) (gps string) +``` +Returns the `path/filepath.Join`-ed full directory path for a specified +`$GOPATH/src` sub-directory. Example: `util.GopathSrc("tools", "importers", +"sql")` yields `c:\gd\src\tools\importers\sql` if `$GOPATH` is `c:\gd`. + +#### func GopathSrcGithub + +```go +func GopathSrcGithub(gitHubName string, subDirNames ...string) string +``` +Returns the `path/filepath.Join`-ed full directory path for a specified +`$GOPATH/src/github.com` sub-directory. Example: +`util.GopathSrcGithub("metaleap", "go-util-num")` yields +`c:\gd\src\github.com\metaleap\go-util-num` if `$GOPATH` is `c:\gd`. + +#### func HostName + +```go +func HostName() (hostName string) +``` +Returns the result of `os.Hostname` if any, else `localhost`. + +#### func Ifb + +```go +func Ifb(cond, ifTrue, ifFalse bool) bool +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifd + +```go +func Ifd(cond bool, ifTrue, ifFalse float64) float64 +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifi + +```go +func Ifi(cond bool, ifTrue, ifFalse int) int +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifi16 + +```go +func Ifi16(cond bool, ifTrue, ifFalse int16) int16 +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifi32 + +```go +func Ifi32(cond bool, ifTrue, ifFalse int32) int32 +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifi64 + +```go +func Ifi64(cond bool, ifTrue, ifFalse int64) int64 +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifs + +```go +func Ifs(cond bool, ifTrue string, ifFalse string) string +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifu32 + +```go +func Ifu32(cond bool, ifTrue, ifFalse uint32) uint32 +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifu64 + +```go +func Ifu64(cond bool, ifTrue, ifFalse uint64) uint64 +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifw + +```go +func Ifw(cond bool, ifTrue, ifFalse io.Writer) io.Writer +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifx + +```go +func Ifx(cond bool, ifTrue, ifFalse interface{}) interface{} +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func LogError + +```go +func LogError(err error) +``` +A convenience short-hand for `log.Println(fmt.Sprintf(LogErrorFormat, err))` if +`err` isn't `nil`. + +#### func MaxProcs + +```go +func MaxProcs() +``` +Short-hand for: `runtime.GOMAXPROCS(2 * runtime.NumCPU())`. + +#### func OSName + +```go +func OSName(goOS string) (name string) +``` +Returns the human-readable operating system name represented by the specified +`goOS` name, by looking up the corresponding entry in `OSNames`. + +#### func ParseVersion + +```go +func ParseVersion(verstr string) (majorMinor [2]int, both float64) +``` +Attempts to extract major and minor version components from a string that begins +with a version number. Example: returns []int{3, 2} and float64(3.2) for a +`verstr` that is `3.2.0 - Build 8.15.10.2761`. + +#### func UserHomeDirPath + +```go +func UserHomeDirPath() (dirPath string) +``` +Returns the path to the current user's home directory. Might be `C:\Users\Kitty` +under Windows, `/home/Kitty` under Linux or `/Users/Kitty` under Mac OS X. +Specifically, returns the value of either the `%userprofile%` (Windows) or the +`$HOME` (others) environment variable, whichever one is set. + +#### type MutexIf + +```go +type MutexIf struct { + sync.Mutex +} +``` + +A `sync.Mutex` wrapper for convenient conditional `defer`d un/locking. + +Example: `defer mut.UnlockIf(mut.LockIf(mycondition))` + +#### func (*MutexIf) Lock + +```go +func (me *MutexIf) Lock() bool +``` + +#### func (*MutexIf) LockIf + +```go +func (me *MutexIf) LockIf(lock bool) bool +``` +Calls `me.Lock` if `lock` is `true`, then returns `lock`. + +#### func (*MutexIf) UnlockIf + +```go +func (me *MutexIf) UnlockIf(unlock bool) +``` +Calls `me.Unlock` if `unlock` is `true`. diff --git a/docs/generator/vendor/github.com/metaleap/go-util-misc/doc.go b/docs/generator/vendor/github.com/metaleap/go-util-misc/doc.go new file mode 100644 index 0000000..3ddb628 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-misc/doc.go @@ -0,0 +1,2 @@ +// Go programming helpers for common miscellaneous needs. +package ugo diff --git a/docs/generator/vendor/github.com/metaleap/go-util-misc/util.go b/docs/generator/vendor/github.com/metaleap/go-util-misc/util.go new file mode 100644 index 0000000..ab10cd2 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-misc/util.go @@ -0,0 +1,421 @@ +package ugo + +import ( + "bufio" + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "log" + "os" + "os/exec" + "os/user" + "path/filepath" + "runtime" + "strconv" + "strings" + "sync" +) + + +type CmdTry struct { + Args []string + Ran *bool +} + + +var ( + // The string format used in LogError(). + LogErrorFormat = "%v" + + // Look-up hash-table for the `OSName` function. + OSNames = map[string]string{ + "windows": "Windows", + "darwin": "Mac OS X", + "linux": "Linux", + "freebsd": "FreeBSD", + "appengine": "Google App Engine", + } +) + +var ( + _userHomeDirPath string + _userDataDirPath string +) + +func SetupJsonProtoPipes (bufferCapacity int, clenProto bool, needJsonOut bool) (stdin *bufio.Scanner, rawOut *bufio.Writer, jsonOut *json.Encoder) { + stdin = bufio.NewScanner(os.Stdin) + stdin.Buffer(make([]byte, bufferCapacity), bufferCapacity) + if clenProto { + stdin.Split(func(data []byte, ateof bool) (advance int, token []byte, err error) { + if i_cl1 := bytes.Index(data, []byte("Content-Length: ")) ; i_cl1>=0 { + datafromclen := data[i_cl1+16:] ; if i_cl2 := bytes.IndexAny(datafromclen, "\r\n") ; i_cl2>0 { + if clen,e := strconv.Atoi(string(datafromclen[:i_cl2])) ; e!=nil { err = e } else { + if i_js1 := bytes.Index(datafromclen, []byte("{\"")) ; i_js1 > i_cl2 { + if i_js2 := i_js1+clen ; len(datafromclen)>=i_js2 { + advance = i_cl1 + 16 + i_js2 ; token = datafromclen[i_js1:i_js2] + } + } + } + } + } + return + }) + } + rawOut = bufio.NewWriterSize(os.Stdout, bufferCapacity) + if needJsonOut { + jsonOut = json.NewEncoder(rawOut) + jsonOut.SetEscapeHTML(false) + jsonOut.SetIndent("","") + } + return +} + +func CmdTryStart (cmdname string, cmdargs ...string) (err error) { + cmd := exec.Command(cmdname, cmdargs...) + err = cmd.Start() ; defer cmd.Wait() + if cmd.Process != nil { cmd.Process.Kill() } + return +} + + +func CmdsTryStart (cmds map[string]*CmdTry) { + var w sync.WaitGroup + run := func (cmd string, try *CmdTry) { + defer w.Done() ; *try.Ran = nil==CmdTryStart(cmd, try.Args...) + } + for cmdname,cmdmore := range cmds { w.Add(1) ; go run(cmdname, cmdmore) } + w.Wait() +} + + +func CmdExecStdin (stdin string, dir string, cmdname string, cmdargs ...string) (stdout string, stderr string, err error) { + if len(cmdname)>0 && strings.Contains(cmdname, " ") && len(cmdargs)==0 { + cmdargs = strings.Split(cmdname, " ") + cmdname = cmdargs[0] + cmdargs = cmdargs[1:] + } + cmd := exec.Command(cmdname, cmdargs...) + cmd.Dir = dir + if len(stdin)>0 { cmd.Stdin = strings.NewReader(stdin) } + var bufout, buferr bytes.Buffer + cmd.Stdout = &bufout + cmd.Stderr = &buferr + if err = cmd.Run() ; err != nil { + if _, isexiterr := err.(*exec.ExitError) ; isexiterr || strings.Contains(err.Error(), "pipe has been ended") { + err = nil + } + } + stdout = bufout.String() + stderr = strings.TrimSpace(buferr.String()) + return +} + +func CmdExecIn (dir string, cmdname string, cmdargs ...string) (out string, err error) { + var output []byte + cmd := exec.Command(cmdname, cmdargs...) + cmd.Dir = dir + output,err = cmd.CombinedOutput() // wish Output() would suffice, but sadly some tools abuse stderr for all sorts of non-error 'metainfotainment' (hi godoc & gofmt!) + out = strings.TrimSpace(string(output)) // do this regardless of err, because it might well be benign such as "exitcode 2", in which case output is still wanted + return +} + +func CmdExecInOr (def string, dir string, cmdname string, cmdargs ...string) string { + out,err := CmdExecIn(dir, cmdname, cmdargs...) + if err != nil { return def } + return out +} + +func CmdExec (cmdname string, cmdargs ...string) (string, error) { + return CmdExecIn("", cmdname, cmdargs...) +} + +func CmdExecOr (def string, cmdname string, cmdargs ...string) string { + return CmdExecInOr(def, "", cmdname, cmdargs...) +} + +func WaitOn (funcs ...func()) { + if l := len(funcs) ; l==0 { return } else if l==1 { funcs[0]() ; return } + var wait sync.WaitGroup + run := func(fn func()) { + defer wait.Done() + fn() + } + for _,fn := range funcs { + wait.Add(1) + go run(fn) + } + wait.Wait() +} + +func WaitOn_ (funcs ...func()) { + for _,fn := range funcs { fn() } +} + +func E (msg string) error { + return errors.New(msg) +} + +func F (thing interface{}) float64 { + f,_ := thing.(float64) ; return f +} + +func S (thing interface{}) string { + s,_ := thing.(string) ; return s +} + +func SPr (thing interface{}) string { + return fmt.Sprint(thing) +} + + + +// A `sync.Mutex` wrapper for convenient conditional `defer`d un/locking. +// +// Example: `defer mut.UnlockIf(mut.LockIf(mycondition))` +type MutexIf struct { + sync.Mutex +} + +func (me *MutexIf) Lock() bool { + me.Mutex.Lock() + return true +} + +// Calls `me.Lock` if `lock` is `true`, then returns `lock`. +func (me *MutexIf) LockIf(lock bool) bool { + if lock { + me.Mutex.Lock() + } + return lock +} + +// Calls `me.Unlock` if `unlock` is `true`. +func (me *MutexIf) UnlockIf(unlock bool) { + if unlock { + me.Mutex.Unlock() + } +} + +func dirExists(path string) bool { + stat, err := os.Stat(path) + return err == nil && stat.IsDir() +} + +// Returns all paths listed in the `GOPATH` environment variable. +func GoPaths() []string { + return filepath.SplitList(os.Getenv("GOPATH")) +} + +// Returns the `path/filepath.Join`-ed full directory path for a specified `$GOPATH/src` sub-directory. +// Example: `util.GopathSrc("tools", "importers", "sql")` yields `c:\gd\src\tools\importers\sql` if `$GOPATH` is `c:\gd`. +func GopathSrc(subDirNames ...string) (gps string) { + gp := []string{"", "src"} + for _, goPath := range GoPaths() { // in 99% of setups there's only 1 GOPATH, but hey.. + gp[0] = goPath + if gps = filepath.Join(append(gp, subDirNames...)...); dirExists(gps) { + break + } + } + return +} + +// Returns the `path/filepath.Join`-ed full directory path for a specified `$GOPATH/src/github.com` sub-directory. +// Example: `util.GopathSrcGithub("go-utils", "unum")` yields `c:\gd\src\github.com\go-utils\unum` if `$GOPATH` is `c:\gd`. +func GopathSrcGithub(gitHubName string, subDirNames ...string) string { + return GopathSrc(append([]string{"github.com", gitHubName}, subDirNames...)...) +} + +// Returns the result of `os.Hostname` if any, else `localhost`. +func HostName() (hostName string) { + if hostName, _ = os.Hostname(); len(hostName) == 0 { + hostName = "localhost" + } + return +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifb(cond, ifTrue, ifFalse bool) bool { + return (cond && ifTrue) || ((!cond) && ifFalse) + // if cond { + // return ifTrue + // } + // return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifd(cond bool, ifTrue, ifFalse float64) float64 { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifi(cond bool, ifTrue, ifFalse int) int { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifi16(cond bool, ifTrue, ifFalse int16) int16 { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifi32(cond bool, ifTrue, ifFalse int32) int32 { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifi64(cond bool, ifTrue, ifFalse int64) int64 { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifs(cond bool, ifTrue string, ifFalse string) string { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifu32(cond bool, ifTrue, ifFalse uint32) uint32 { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifu64(cond bool, ifTrue, ifFalse uint64) uint64 { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifw(cond bool, ifTrue, ifFalse io.Writer) io.Writer { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifx(cond bool, ifTrue, ifFalse interface{}) interface{} { + if cond { + return ifTrue + } + return ifFalse +} + +// A convenience short-hand for `log.Println(fmt.Sprintf(LogErrorFormat, err))` if `err` isn't `nil`. +func LogError(err error) { + if err != nil { + log.Println(strf(LogErrorFormat, err)) + } +} + +// Short-hand for: `runtime.GOMAXPROCS(2 * runtime.NumCPU())`. +func MaxProcs() { + runtime.GOMAXPROCS(2 * runtime.NumCPU()) +} + +// Returns the human-readable operating system name represented by the specified +// `goOS` name, by looking up the corresponding entry in `OSNames`. +func OSName(goOS string) (name string) { + if name = OSNames[goOS]; len(name) == 0 { + name = strings.ToTitle(goOS) + } + return +} + +// Attempts to extract major and minor version components from a string that begins with a version number. +// Example: returns []int{3, 2} and float64(3.2) for a `verstr` that is `3.2.0 - Build 8.15.10.2761`. +func ParseVersion(verstr string) (majorMinor [2]int, both float64) { + var ( + pos, j int + i uint64 + err error + ) + for _, p := range strings.Split(verstr, ".") { + if pos = strings.Index(p, " "); pos > 0 { + p = p[:pos] + } + if i, err = strconv.ParseUint(p, 10, 8); err == nil { + majorMinor[j] = int(i) + if j++; j >= len(majorMinor) { + break + } + } else { + break + } + } + if len(majorMinor) > 0 { + both = float64(majorMinor[0]) + } + if len(majorMinor) > 1 { + both += (float64(majorMinor[1]) * 0.1) + } + return +} + +func strf(format string, args ...interface{}) string { + return fmt.Sprintf(format, args...) +} + +func UserDataDirPath () string { + dirpath := _userDataDirPath + if len(dirpath) == 0 { + probeenvvars := []string { "XDG_CACHE_HOME", "XDG_CONFIG_HOME", "LOCALAPPDATA", "APPDATA" } + for _,envvar := range probeenvvars { + if maybedirpath := os.Getenv(envvar) ; len(maybedirpath)>0 && dirExists(maybedirpath) { + dirpath = maybedirpath + break + } + } + if len(dirpath) == 0 { + probehomesubdirs := []string { ".cache", ".config", "Library/Caches", "Library/Application Support" } + for _,homesubdir := range probehomesubdirs { + if maybedirpath := filepath.Join(UserHomeDirPath(),homesubdir) ; dirExists(maybedirpath) { + dirpath = maybedirpath + break + } + } + if len(dirpath) == 0 { + dirpath = UserHomeDirPath() + } + } + _userDataDirPath = dirpath + } + return dirpath +} + +// Returns the path to the current user's home directory. +func UserHomeDirPath () string { + dirpath := _userHomeDirPath + if len(dirpath) == 0 { + if user,err := user.Current() ; err == nil && len(user.HomeDir) > 0 && dirExists(user.HomeDir) { + dirpath = user.HomeDir + } else if dirpath = os.Getenv("USERPROFILE") ; len(dirpath) == 0 || !dirExists(dirpath) { + dirpath = os.Getenv("HOME") + } + _userHomeDirPath = dirpath + } + return dirpath +} diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/-gen-sort.gt b/docs/generator/vendor/github.com/metaleap/go-util-slice/-gen-sort.gt new file mode 100644 index 0000000..c585c2a --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/-gen-sort.gt @@ -0,0 +1,36 @@ +package gt + +import "sort" + +type sort__N__ struct { + descending bool + slice []__T__ +} + +// Implements `sort.Interface.Len`. +func (me *sort__N__) Len() int { return len(me.slice) } + +// Implements `sort.Interface.Less`. +func (me *sort__N__) Less(i, j int) bool { + if me.descending { + return me.slice[j] < me.slice[i] + } + return me.slice[i] < me.slice[j] +} + +// Implements `sort.Interface.Swap`. +func (me *sort__N__) Swap(i, j int) { me.slice[i], me.slice[j] = me.slice[j], me.slice[i] } + +// Returns `sl` sorted by ascending order. +func __N__SortAsc(sl []__T__) []__T__ { + me := &sort__N__{descending: false, slice: sl} + sort.Sort(me) + return me.slice +} + +// Returns `sl` sorted by decending order. +func __N__SortDesc(sl []__T__) []__T__ { + me := &sort__N__{descending: true, slice: sl} + sort.Sort(me) + return me.slice +} diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/-gen.gt b/docs/generator/vendor/github.com/metaleap/go-util-slice/-gen.gt new file mode 100644 index 0000000..c2d7444 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/-gen.gt @@ -0,0 +1,156 @@ +package gt + + + +// Appends `v` to `*ref` only if `*ref` does not already contain `v`. +func __N__AppendUnique(ref *[]__T__, v __T__) { + for _, sv := range *ref { + if sv == v { + return + } + } + *ref = append(*ref, v) +} + +// Appends each value in `vals` to `*ref` only `*ref` does not already contain it. +func __N__AppendUniques(ref *[]__T__, vals ...__T__) { + for _, v := range vals { + __N__AppendUnique(ref, v) + } +} + +// Returns the position of `val` in `slice`. +func __N__At(slice []__T__, val __T__) int { + for i, v := range slice { + if v == val { + return i + } + } + return -1 +} + +// Converts `src` to `dst`. +// +// If `sparse` is `true`, then only successfully converted `__T__` values are placed +// in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` in length or indices. +// +// If `sparse` is `false`, `dst` has the same length as `src` and non-convertable values remain zeroed. +func __N__Convert(src []interface{}, sparse bool) (dst []__T__) { + if sparse { + var ( + val __T__ + ok bool + ) + for _, v := range src { + if val, ok = v.(__T__); ok { + dst = append(dst, val) + } + } + } else { + dst = make([]__T__, len(src)) + for i, v := range src { + dst[i], _ = v.(__T__) + } + } + return +} + +// Sets each `__T__` in `sl` to the result of passing it to each `apply` func. +// Although `sl` is modified in-place, it is also returned for convenience. +func __N__Each(sl []__T__, apply ...func(__T__) __T__) []__T__ { + for _, fn := range apply { + for i, _ := range sl { + sl[i] = fn(sl[i]) + } + } + return sl +} + +// Calls `__N__SetCap` only if the current `cap(*ref)` is less than the specified `capacity`. +func __N__EnsureCap(ref *[]__T__, capacity int) { + if cap(*ref) < capacity { + __N__SetCap(ref, capacity) + } +} + +// Calls `__N__SetLen` only if the current `len(*ref)` is less than the specified `length`. +func __N__EnsureLen(ref *[]__T__, length int) { + if len(*ref) < length { + __N__SetLen(ref, length) + } +} + +// Returns whether `one` and `two` only contain identical values, regardless of ordering. +func __N__Equivalent(one, two []__T__) bool { + if len(one) != len(two) { + return false + } + for _, v := range one { + if __N__At(two, v) < 0 { + return false + } + } + return true +} + +// Returns whether `val` is in `slice`. +func __N__Has(slice []__T__, val __T__) bool { + return __N__At(slice, val) >= 0 +} + +// Returns whether at least one of the specified `vals` is contained in `slice`. +func __N__HasAny(slice []__T__, vals ...__T__) bool { + for _, v1 := range vals { + for _, v2 := range slice { + if v1 == v2 { + return true + } + } + } + return false +} + +// Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if `all` is `true`. +func __N__Remove(ref *[]__T__, v __T__, all bool) { + for i := 0; i < len(*ref); i++ { + if (*ref)[i] == v { + before, after := (*ref)[:i], (*ref)[i+1:] + *ref = append(before, after...) + if !all { + break + } + } + } +} + +// Sets `*ref` to a copy of `*ref` with the specified `capacity`. +func __N__SetCap(ref *[]__T__, capacity int) { + nu := make([]__T__, len(*ref), capacity) + copy(nu, *ref) + *ref = nu +} + +// Sets `*ref` to a copy of `*ref` with the specified `length`. +func __N__SetLen(ref *[]__T__, length int) { + nu := make([]__T__, length) + copy(nu, *ref) + *ref = nu +} + +// Removes all specified `withoutVals` from `slice`. +func __N__Without(slice []__T__, keepOrder bool, withoutVals ...__T__) []__T__ { + if len(withoutVals) > 0 { + var pos int + for _, w := range withoutVals { + for pos = __N__At(slice, w); pos >= 0; pos = __N__At(slice, w) { + if keepOrder { + slice = append(slice[:pos], slice[pos+1:]...) + } else { + slice[pos] = slice[len(slice)-1] + slice = slice[:len(slice)-1] + } + } + } + } + return slice +} diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/README.md b/docs/generator/vendor/github.com/metaleap/go-util-slice/README.md new file mode 100644 index 0000000..2805f1d --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/README.md @@ -0,0 +1,459 @@ +# uslice + +Go programming helpers for common 'pseudo-generic' typed-slice needs. + +## Usage + +#### func BoolAppendUnique + +```go +func BoolAppendUnique(ref *[]bool, v bool) +``` +Appends `v` to `*ref` only if `*ref` does not already contain `v`. + +#### func BoolAppendUniques + +```go +func BoolAppendUniques(ref *[]bool, vals ...bool) +``` +Appends each value in `vals` to `*ref` only `*ref` does not already contain it. + +#### func BoolAt + +```go +func BoolAt(slice []bool, val bool) int +``` +Returns the position of `val` in `slice`. + +#### func BoolConvert + +```go +func BoolConvert(src []interface{}, sparse bool) (dst []bool) +``` +Converts `src` to `dst`. + +If `sparse` is `true`, then only successfully converted `bool` values are placed +in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` in +length or indices. + +If `sparse` is `false`, `dst` has the same length as `src` and non-convertable +values remain zeroed. + +#### func BoolEach + +```go +func BoolEach(sl []bool, apply ...func(bool) bool) []bool +``` +Sets each `bool` in `sl` to the result of passing it to each `apply` func. +Although `sl` is modified in-place, it is also returned for convenience. + +#### func BoolEnsureCap + +```go +func BoolEnsureCap(ref *[]bool, capacity int) +``` +Calls `BoolSetCap` only if the current `cap(*ref)` is less than the specified +`capacity`. + +#### func BoolEnsureLen + +```go +func BoolEnsureLen(ref *[]bool, length int) +``` +Calls `BoolSetLen` only if the current `len(*ref)` is less than the specified +`length`. + +#### func BoolEquivalent + +```go +func BoolEquivalent(one, two []bool) bool +``` +Returns whether `one` and `two` only contain identical values, regardless of +ordering. + +#### func BoolHas + +```go +func BoolHas(slice []bool, val bool) bool +``` +Returns whether `val` is in `slice`. + +#### func BoolHasAny + +```go +func BoolHasAny(slice []bool, vals ...bool) bool +``` +Returns whether at least one of the specified `vals` is contained in `slice`. + +#### func BoolRemove + +```go +func BoolRemove(ref *[]bool, v bool, all bool) +``` +Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if +`all` is `true`. + +#### func BoolSetCap + +```go +func BoolSetCap(ref *[]bool, capacity int) +``` +Sets `*ref` to a copy of `*ref` with the specified `capacity`. + +#### func BoolSetLen + +```go +func BoolSetLen(ref *[]bool, length int) +``` +Sets `*ref` to a copy of `*ref` with the specified `length`. + +#### func BoolWithout + +```go +func BoolWithout(slice []bool, keepOrder bool, withoutVals ...bool) []bool +``` +Removes all specified `withoutVals` from `slice`. + +#### func F64AppendUnique + +```go +func F64AppendUnique(ref *[]float64, v float64) +``` +Appends `v` to `*ref` only if `*ref` does not already contain `v`. + +#### func F64AppendUniques + +```go +func F64AppendUniques(ref *[]float64, vals ...float64) +``` +Appends each value in `vals` to `*ref` only `*ref` does not already contain it. + +#### func F64At + +```go +func F64At(slice []float64, val float64) int +``` +Returns the position of `val` in `slice`. + +#### func F64Convert + +```go +func F64Convert(src []interface{}, sparse bool) (dst []float64) +``` +Converts `src` to `dst`. + +If `sparse` is `true`, then only successfully converted `float64` values are +placed in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` +in length or indices. + +If `sparse` is `false`, `dst` has the same length as `src` and non-convertable +values remain zeroed. + +#### func F64Each + +```go +func F64Each(sl []float64, apply ...func(float64) float64) []float64 +``` +Sets each `float64` in `sl` to the result of passing it to each `apply` func. +Although `sl` is modified in-place, it is also returned for convenience. + +#### func F64EnsureCap + +```go +func F64EnsureCap(ref *[]float64, capacity int) +``` +Calls `F64SetCap` only if the current `cap(*ref)` is less than the specified +`capacity`. + +#### func F64EnsureLen + +```go +func F64EnsureLen(ref *[]float64, length int) +``` +Calls `F64SetLen` only if the current `len(*ref)` is less than the specified +`length`. + +#### func F64Equivalent + +```go +func F64Equivalent(one, two []float64) bool +``` +Returns whether `one` and `two` only contain identical values, regardless of +ordering. + +#### func F64Has + +```go +func F64Has(slice []float64, val float64) bool +``` +Returns whether `val` is in `slice`. + +#### func F64HasAny + +```go +func F64HasAny(slice []float64, vals ...float64) bool +``` +Returns whether at least one of the specified `vals` is contained in `slice`. + +#### func F64Remove + +```go +func F64Remove(ref *[]float64, v float64, all bool) +``` +Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if +`all` is `true`. + +#### func F64SetCap + +```go +func F64SetCap(ref *[]float64, capacity int) +``` +Sets `*ref` to a copy of `*ref` with the specified `capacity`. + +#### func F64SetLen + +```go +func F64SetLen(ref *[]float64, length int) +``` +Sets `*ref` to a copy of `*ref` with the specified `length`. + +#### func F64Without + +```go +func F64Without(slice []float64, keepOrder bool, withoutVals ...float64) []float64 +``` +Removes all specified `withoutVals` from `slice`. + +#### func IntAppendUnique + +```go +func IntAppendUnique(ref *[]int, v int) +``` +Appends `v` to `*ref` only if `*ref` does not already contain `v`. + +#### func IntAppendUniques + +```go +func IntAppendUniques(ref *[]int, vals ...int) +``` +Appends each value in `vals` to `*ref` only `*ref` does not already contain it. + +#### func IntAt + +```go +func IntAt(slice []int, val int) int +``` +Returns the position of `val` in `slice`. + +#### func IntConvert + +```go +func IntConvert(src []interface{}, sparse bool) (dst []int) +``` +Converts `src` to `dst`. + +If `sparse` is `true`, then only successfully converted `int` values are placed +in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` in +length or indices. + +If `sparse` is `false`, `dst` has the same length as `src` and non-convertable +values remain zeroed. + +#### func IntEach + +```go +func IntEach(sl []int, apply ...func(int) int) []int +``` +Sets each `int` in `sl` to the result of passing it to each `apply` func. +Although `sl` is modified in-place, it is also returned for convenience. + +#### func IntEnsureCap + +```go +func IntEnsureCap(ref *[]int, capacity int) +``` +Calls `IntSetCap` only if the current `cap(*ref)` is less than the specified +`capacity`. + +#### func IntEnsureLen + +```go +func IntEnsureLen(ref *[]int, length int) +``` +Calls `IntSetLen` only if the current `len(*ref)` is less than the specified +`length`. + +#### func IntEquivalent + +```go +func IntEquivalent(one, two []int) bool +``` +Returns whether `one` and `two` only contain identical values, regardless of +ordering. + +#### func IntHas + +```go +func IntHas(slice []int, val int) bool +``` +Returns whether `val` is in `slice`. + +#### func IntHasAny + +```go +func IntHasAny(slice []int, vals ...int) bool +``` +Returns whether at least one of the specified `vals` is contained in `slice`. + +#### func IntRemove + +```go +func IntRemove(ref *[]int, v int, all bool) +``` +Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if +`all` is `true`. + +#### func IntSetCap + +```go +func IntSetCap(ref *[]int, capacity int) +``` +Sets `*ref` to a copy of `*ref` with the specified `capacity`. + +#### func IntSetLen + +```go +func IntSetLen(ref *[]int, length int) +``` +Sets `*ref` to a copy of `*ref` with the specified `length`. + +#### func IntWithout + +```go +func IntWithout(slice []int, keepOrder bool, withoutVals ...int) []int +``` +Removes all specified `withoutVals` from `slice`. + +#### func StrAppendUnique + +```go +func StrAppendUnique(ref *[]string, v string) +``` +Appends `v` to `*ref` only if `*ref` does not already contain `v`. + +#### func StrAppendUniques + +```go +func StrAppendUniques(ref *[]string, vals ...string) +``` +Appends each value in `vals` to `*ref` only `*ref` does not already contain it. + +#### func StrAt + +```go +func StrAt(slice []string, val string) int +``` +Returns the position of `val` in `slice`. + +#### func StrAtIgnoreCase + +```go +func StrAtIgnoreCase(vals []string, val string) int +``` +Returns the position of lower-case `val` in lower-case `vals`. + +#### func StrConvert + +```go +func StrConvert(src []interface{}, sparse bool) (dst []string) +``` +Converts `src` to `dst`. + +If `sparse` is `true`, then only successfully converted `string` values are +placed in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` +in length or indices. + +If `sparse` is `false`, `dst` has the same length as `src` and non-convertable +values remain zeroed. + +#### func StrEach + +```go +func StrEach(sl []string, apply ...func(string) string) []string +``` +Sets each `string` in `sl` to the result of passing it to each `apply` func. +Although `sl` is modified in-place, it is also returned for convenience. + +#### func StrEnsureCap + +```go +func StrEnsureCap(ref *[]string, capacity int) +``` +Calls `StrSetCap` only if the current `cap(*ref)` is less than the specified +`capacity`. + +#### func StrEnsureLen + +```go +func StrEnsureLen(ref *[]string, length int) +``` +Calls `StrSetLen` only if the current `len(*ref)` is less than the specified +`length`. + +#### func StrEquivalent + +```go +func StrEquivalent(one, two []string) bool +``` +Returns whether `one` and `two` only contain identical values, regardless of +ordering. + +#### func StrHas + +```go +func StrHas(slice []string, val string) bool +``` +Returns whether `val` is in `slice`. + +#### func StrHasAny + +```go +func StrHasAny(slice []string, vals ...string) bool +``` +Returns whether at least one of the specified `vals` is contained in `slice`. + +#### func StrHasIgnoreCase + +```go +func StrHasIgnoreCase(vals []string, val string) bool +``` +Returns whether lower-case `val` is in lower-case `vals`. + +#### func StrRemove + +```go +func StrRemove(ref *[]string, v string, all bool) +``` +Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if +`all` is `true`. + +#### func StrSetCap + +```go +func StrSetCap(ref *[]string, capacity int) +``` +Sets `*ref` to a copy of `*ref` with the specified `capacity`. + +#### func StrSetLen + +```go +func StrSetLen(ref *[]string, length int) +``` +Sets `*ref` to a copy of `*ref` with the specified `length`. + +#### func StrWithout + +```go +func StrWithout(slice []string, keepOrder bool, withoutVals ...string) []string +``` +Removes all specified `withoutVals` from `slice`. diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/bool.gt.go b/docs/generator/vendor/github.com/metaleap/go-util-slice/bool.gt.go new file mode 100644 index 0000000..866174d --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/bool.gt.go @@ -0,0 +1,158 @@ +package uslice + +//#begin-gt -gen.gt N:Bool T:bool + +// Appends `v` to `*ref` only if `*ref` does not already contain `v`. +func BoolAppendUnique(ref *[]bool, v bool) { + for _, sv := range *ref { + if sv == v { + return + } + } + *ref = append(*ref, v) +} + +// Appends each value in `vals` to `*ref` only `*ref` does not already contain it. +func BoolAppendUniques(ref *[]bool, vals ...bool) { + for _, v := range vals { + BoolAppendUnique(ref, v) + } +} + +// Returns the position of `val` in `slice`. +func BoolAt(slice []bool, val bool) int { + for i, v := range slice { + if v == val { + return i + } + } + return -1 +} + +// Converts `src` to `dst`. +// +// If `sparse` is `true`, then only successfully converted `bool` values are placed +// in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` in length or indices. +// +// If `sparse` is `false`, `dst` has the same length as `src` and non-convertable values remain zeroed. +func BoolConvert(src []interface{}, sparse bool) (dst []bool) { + if sparse { + var ( + val bool + ok bool + ) + for _, v := range src { + if val, ok = v.(bool); ok { + dst = append(dst, val) + } + } + } else { + dst = make([]bool, len(src)) + for i, v := range src { + dst[i], _ = v.(bool) + } + } + return +} + +// Sets each `bool` in `sl` to the result of passing it to each `apply` func. +// Although `sl` is modified in-place, it is also returned for convenience. +func BoolEach(sl []bool, apply ...func(bool) bool) []bool { + for _, fn := range apply { + for i, _ := range sl { + sl[i] = fn(sl[i]) + } + } + return sl +} + +// Calls `BoolSetCap` only if the current `cap(*ref)` is less than the specified `capacity`. +func BoolEnsureCap(ref *[]bool, capacity int) { + if cap(*ref) < capacity { + BoolSetCap(ref, capacity) + } +} + +// Calls `BoolSetLen` only if the current `len(*ref)` is less than the specified `length`. +func BoolEnsureLen(ref *[]bool, length int) { + if len(*ref) < length { + BoolSetLen(ref, length) + } +} + +// Returns whether `one` and `two` only contain identical values, regardless of ordering. +func BoolEquivalent(one, two []bool) bool { + if len(one) != len(two) { + return false + } + for _, v := range one { + if BoolAt(two, v) < 0 { + return false + } + } + return true +} + +// Returns whether `val` is in `slice`. +func BoolHas(slice []bool, val bool) bool { + return BoolAt(slice, val) >= 0 +} + +// Returns whether at least one of the specified `vals` is contained in `slice`. +func BoolHasAny(slice []bool, vals ...bool) bool { + for _, v1 := range vals { + for _, v2 := range slice { + if v1 == v2 { + return true + } + } + } + return false +} + +// Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if `all` is `true`. +func BoolRemove(ref *[]bool, v bool, all bool) { + for i := 0; i < len(*ref); i++ { + if (*ref)[i] == v { + before, after := (*ref)[:i], (*ref)[i+1:] + *ref = append(before, after...) + if !all { + break + } + } + } +} + +// Sets `*ref` to a copy of `*ref` with the specified `capacity`. +func BoolSetCap(ref *[]bool, capacity int) { + nu := make([]bool, len(*ref), capacity) + copy(nu, *ref) + *ref = nu +} + +// Sets `*ref` to a copy of `*ref` with the specified `length`. +func BoolSetLen(ref *[]bool, length int) { + nu := make([]bool, length) + copy(nu, *ref) + *ref = nu +} + +// Removes all specified `withoutVals` from `slice`. +func BoolWithout(slice []bool, keepOrder bool, withoutVals ...bool) []bool { + if len(withoutVals) > 0 { + var pos int + for _, w := range withoutVals { + for pos = BoolAt(slice, w); pos >= 0; pos = BoolAt(slice, w) { + if keepOrder { + slice = append(slice[:pos], slice[pos+1:]...) + } else { + slice[pos] = slice[len(slice)-1] + slice = slice[:len(slice)-1] + } + } + } + } + return slice +} + +//#end-gt diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/doc.go b/docs/generator/vendor/github.com/metaleap/go-util-slice/doc.go new file mode 100644 index 0000000..a2aebb3 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/doc.go @@ -0,0 +1,2 @@ +// Go programming helpers for common 'pseudo-generic' typed-slice needs. +package uslice diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/f64.gt.go b/docs/generator/vendor/github.com/metaleap/go-util-slice/f64.gt.go new file mode 100644 index 0000000..c6b53a9 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/f64.gt.go @@ -0,0 +1,158 @@ +package uslice + +//#begin-gt -gen.gt N:F64 T:float64 + +// Appends `v` to `*ref` only if `*ref` does not already contain `v`. +func F64AppendUnique(ref *[]float64, v float64) { + for _, sv := range *ref { + if sv == v { + return + } + } + *ref = append(*ref, v) +} + +// Appends each value in `vals` to `*ref` only `*ref` does not already contain it. +func F64AppendUniques(ref *[]float64, vals ...float64) { + for _, v := range vals { + F64AppendUnique(ref, v) + } +} + +// Returns the position of `val` in `slice`. +func F64At(slice []float64, val float64) int { + for i, v := range slice { + if v == val { + return i + } + } + return -1 +} + +// Converts `src` to `dst`. +// +// If `sparse` is `true`, then only successfully converted `float64` values are placed +// in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` in length or indices. +// +// If `sparse` is `false`, `dst` has the same length as `src` and non-convertable values remain zeroed. +func F64Convert(src []interface{}, sparse bool) (dst []float64) { + if sparse { + var ( + val float64 + ok bool + ) + for _, v := range src { + if val, ok = v.(float64); ok { + dst = append(dst, val) + } + } + } else { + dst = make([]float64, len(src)) + for i, v := range src { + dst[i], _ = v.(float64) + } + } + return +} + +// Sets each `float64` in `sl` to the result of passing it to each `apply` func. +// Although `sl` is modified in-place, it is also returned for convenience. +func F64Each(sl []float64, apply ...func(float64) float64) []float64 { + for _, fn := range apply { + for i, _ := range sl { + sl[i] = fn(sl[i]) + } + } + return sl +} + +// Calls `F64SetCap` only if the current `cap(*ref)` is less than the specified `capacity`. +func F64EnsureCap(ref *[]float64, capacity int) { + if cap(*ref) < capacity { + F64SetCap(ref, capacity) + } +} + +// Calls `F64SetLen` only if the current `len(*ref)` is less than the specified `length`. +func F64EnsureLen(ref *[]float64, length int) { + if len(*ref) < length { + F64SetLen(ref, length) + } +} + +// Returns whether `one` and `two` only contain identical values, regardless of ordering. +func F64Equivalent(one, two []float64) bool { + if len(one) != len(two) { + return false + } + for _, v := range one { + if F64At(two, v) < 0 { + return false + } + } + return true +} + +// Returns whether `val` is in `slice`. +func F64Has(slice []float64, val float64) bool { + return F64At(slice, val) >= 0 +} + +// Returns whether at least one of the specified `vals` is contained in `slice`. +func F64HasAny(slice []float64, vals ...float64) bool { + for _, v1 := range vals { + for _, v2 := range slice { + if v1 == v2 { + return true + } + } + } + return false +} + +// Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if `all` is `true`. +func F64Remove(ref *[]float64, v float64, all bool) { + for i := 0; i < len(*ref); i++ { + if (*ref)[i] == v { + before, after := (*ref)[:i], (*ref)[i+1:] + *ref = append(before, after...) + if !all { + break + } + } + } +} + +// Sets `*ref` to a copy of `*ref` with the specified `capacity`. +func F64SetCap(ref *[]float64, capacity int) { + nu := make([]float64, len(*ref), capacity) + copy(nu, *ref) + *ref = nu +} + +// Sets `*ref` to a copy of `*ref` with the specified `length`. +func F64SetLen(ref *[]float64, length int) { + nu := make([]float64, length) + copy(nu, *ref) + *ref = nu +} + +// Removes all specified `withoutVals` from `slice`. +func F64Without(slice []float64, keepOrder bool, withoutVals ...float64) []float64 { + if len(withoutVals) > 0 { + var pos int + for _, w := range withoutVals { + for pos = F64At(slice, w); pos >= 0; pos = F64At(slice, w) { + if keepOrder { + slice = append(slice[:pos], slice[pos+1:]...) + } else { + slice[pos] = slice[len(slice)-1] + slice = slice[:len(slice)-1] + } + } + } + } + return slice +} + +//#end-gt diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/int.gt.go b/docs/generator/vendor/github.com/metaleap/go-util-slice/int.gt.go new file mode 100644 index 0000000..c0fb1f9 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/int.gt.go @@ -0,0 +1,158 @@ +package uslice + +//#begin-gt -gen.gt N:Int T:int + +// Appends `v` to `*ref` only if `*ref` does not already contain `v`. +func IntAppendUnique(ref *[]int, v int) { + for _, sv := range *ref { + if sv == v { + return + } + } + *ref = append(*ref, v) +} + +// Appends each value in `vals` to `*ref` only `*ref` does not already contain it. +func IntAppendUniques(ref *[]int, vals ...int) { + for _, v := range vals { + IntAppendUnique(ref, v) + } +} + +// Returns the position of `val` in `slice`. +func IntAt(slice []int, val int) int { + for i, v := range slice { + if v == val { + return i + } + } + return -1 +} + +// Converts `src` to `dst`. +// +// If `sparse` is `true`, then only successfully converted `int` values are placed +// in `dst`, so there may not be a 1-to-1 correspondence of `dst` to `src` in length or indices. +// +// If `sparse` is `false`, `dst` has the same length as `src` and non-convertable values remain zeroed. +func IntConvert(src []interface{}, sparse bool) (dst []int) { + if sparse { + var ( + val int + ok bool + ) + for _, v := range src { + if val, ok = v.(int); ok { + dst = append(dst, val) + } + } + } else { + dst = make([]int, len(src)) + for i, v := range src { + dst[i], _ = v.(int) + } + } + return +} + +// Sets each `int` in `sl` to the result of passing it to each `apply` func. +// Although `sl` is modified in-place, it is also returned for convenience. +func IntEach(sl []int, apply ...func(int) int) []int { + for _, fn := range apply { + for i, _ := range sl { + sl[i] = fn(sl[i]) + } + } + return sl +} + +// Calls `IntSetCap` only if the current `cap(*ref)` is less than the specified `capacity`. +func IntEnsureCap(ref *[]int, capacity int) { + if cap(*ref) < capacity { + IntSetCap(ref, capacity) + } +} + +// Calls `IntSetLen` only if the current `len(*ref)` is less than the specified `length`. +func IntEnsureLen(ref *[]int, length int) { + if len(*ref) < length { + IntSetLen(ref, length) + } +} + +// Returns whether `one` and `two` only contain identical values, regardless of ordering. +func IntEquivalent(one, two []int) bool { + if len(one) != len(two) { + return false + } + for _, v := range one { + if IntAt(two, v) < 0 { + return false + } + } + return true +} + +// Returns whether `val` is in `slice`. +func IntHas(slice []int, val int) bool { + return IntAt(slice, val) >= 0 +} + +// Returns whether at least one of the specified `vals` is contained in `slice`. +func IntHasAny(slice []int, vals ...int) bool { + for _, v1 := range vals { + for _, v2 := range slice { + if v1 == v2 { + return true + } + } + } + return false +} + +// Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if `all` is `true`. +func IntRemove(ref *[]int, v int, all bool) { + for i := 0; i < len(*ref); i++ { + if (*ref)[i] == v { + before, after := (*ref)[:i], (*ref)[i+1:] + *ref = append(before, after...) + if !all { + break + } + } + } +} + +// Sets `*ref` to a copy of `*ref` with the specified `capacity`. +func IntSetCap(ref *[]int, capacity int) { + nu := make([]int, len(*ref), capacity) + copy(nu, *ref) + *ref = nu +} + +// Sets `*ref` to a copy of `*ref` with the specified `length`. +func IntSetLen(ref *[]int, length int) { + nu := make([]int, length) + copy(nu, *ref) + *ref = nu +} + +// Removes all specified `withoutVals` from `slice`. +func IntWithout(slice []int, keepOrder bool, withoutVals ...int) []int { + if len(withoutVals) > 0 { + var pos int + for _, w := range withoutVals { + for pos = IntAt(slice, w); pos >= 0; pos = IntAt(slice, w) { + if keepOrder { + slice = append(slice[:pos], slice[pos+1:]...) + } else { + slice[pos] = slice[len(slice)-1] + slice = slice[:len(slice)-1] + } + } + } + } + return slice +} + +//#end-gt diff --git a/docs/generator/vendor/github.com/metaleap/go-util-slice/str.gt.go b/docs/generator/vendor/github.com/metaleap/go-util-slice/str.gt.go new file mode 100644 index 0000000..ce8805a --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-slice/str.gt.go @@ -0,0 +1,199 @@ +package uslice + +import "strings" + +// Returns the position of lower-case `val` in lower-case `vals`. +func StrAtIgnoreCase(vals []string, val string) int { + lv := strings.ToLower(val) + for i, v := range vals { + if (v == val) || (strings.ToLower(v) == lv) { + return i + } + } + return -1 +} + +func StrFiltered (vals []string, check func(string) bool) (items []string) { + if check==nil { return vals } + for _,val := range vals { + if check(val) { + items = append(items, val) + } + } + return +} + +func StrMap (vals []string, strmap func(string) string) (items []string) { + if strmap==nil { return vals } + for _,val := range vals { items = append(items, strmap(val)) } + return +} + +// Returns whether lower-case `val` is in lower-case `vals`. +func StrHasIgnoreCase(vals []string, val string) bool { + return StrAtIgnoreCase(vals, val) >= 0 +} + +func StrReverse (v []string) []string { + for l,r := 0 , len(v)-1 ; l= 0 +} + +// Returns whether at least one of the specified `vals` is contained in `slice`. +func StrHasAny(slice []string, vals ...string) bool { + for _, v1 := range vals { + for _, v2 := range slice { + if v1 == v2 { + return true + } + } + } + return false +} + +// Removes the first occurrence of `v` encountered in `*ref`, or all occurrences if `all` is `true`. +func StrRemove(ref *[]string, v string, all bool) { + for i := 0; i < len(*ref); i++ { + if (*ref)[i] == v { + before, after := (*ref)[:i], (*ref)[i+1:] + *ref = append(before, after...) + if !all { + break + } + } + } +} + +// Sets `*ref` to a copy of `*ref` with the specified `capacity`. +func StrSetCap(ref *[]string, capacity int) { + nu := make([]string, len(*ref), capacity) + copy(nu, *ref) + *ref = nu +} + +// Sets `*ref` to a copy of `*ref` with the specified `length`. +func StrSetLen(ref *[]string, length int) { + nu := make([]string, length) + copy(nu, *ref) + *ref = nu +} + +// Removes all specified `withoutVals` from `slice`. +func StrWithout(slice []string, keepOrder bool, withoutVals ...string) []string { + if len(withoutVals) > 0 { + var pos int + for _, w := range withoutVals { + for pos = StrAt(slice, w); pos >= 0; pos = StrAt(slice, w) { + if keepOrder { + slice = append(slice[:pos], slice[pos+1:]...) + } else { + slice[pos] = slice[len(slice)-1] + slice = slice[:len(slice)-1] + } + } + } + } + return slice +} + +//#end-gt diff --git a/docs/generator/vendor/github.com/metaleap/go-util-str/README.md b/docs/generator/vendor/github.com/metaleap/go-util-str/README.md new file mode 100644 index 0000000..6ca2532 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-str/README.md @@ -0,0 +1,393 @@ +# ustr + +Go programming helpers for common string-processing needs. + +## Usage + +#### func Concat + +```go +func Concat(vals ...string) string +``` +Passes the specified `vals` to `strings.Join`. + +#### func ExtractAllIdentifiers + +```go +func ExtractAllIdentifiers(src, prefix string) (identifiers []string) +``` +Extracts all "identifiers" (as per `ExtractFirstIdentifier`) in `src` and +starting with `prefix` (no duplicates, ordered by occurrence). + +#### func ExtractFirstIdentifier + +```go +func ExtractFirstIdentifier(src, prefix string, minPos int) (identifier string) +``` +Extracts the first occurrence (at or after `minPos`) of the "identifier" +starting with `prefix` in `src`. + +#### func First + +```go +func First(predicate func(s string) bool, step int, vals ...string) string +``` +Returns the first `string` in `vals` to match the specified `predicate`. + +`step`: 1 to test all values, a higher value to skip n values after each test, +negative for reverse slice traversal, or use 0 to get stuck in an infinite loop. + +#### func FirstNonEmpty + +```go +func FirstNonEmpty(vals ...string) (val string) +``` +Returns the first non-empty `string` in `vals`. + +#### func Has + +```go +func Has(s, substr string) bool +``` +Convenience short-hand for `strings.Contains`. + +#### func HasAny + +```go +func HasAny(s string, subs ...string) bool +``` +Returns whether `s` contains any of the specified sub-strings. + +#### func HasAnyCase + +```go +func HasAnyCase(s1, s2 string) bool +``` +Returns whether `s1` contains `s2` or lower-case `s1` contains lower-case `s2`. + +#### func HasAnyPrefix + +```go +func HasAnyPrefix(s string, prefixes ...string) bool +``` +Returns whether `s` starts with any one of the specified `prefixes`. + +#### func HasAnySuffix + +```go +func HasAnySuffix(s string, suffixes ...string) bool +``` +Returns whether `s` ends with any one of the specified `suffixes`. + +#### func HasOnce + +```go +func HasOnce(str1, str2 string) bool +``` +Returns whether `str2` is contained in `str1` exactly once. + +#### func Ifm + +```go +func Ifm(cond bool, ifTrue, ifFalse map[string]string) map[string]string +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func Ifs + +```go +func Ifs(cond bool, ifTrue, ifFalse string) string +``` +Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. + +#### func IndexAny + +```go +func IndexAny(s string, seps ...string) (pos int) +``` +For all `seps`, records its position of first occurrence in `s`, then returns +the smallest such position. + +#### func IsAscii + +```go +func IsAscii(str string) bool +``` +Returns whether `str` is ASCII-compatible. + +#### func IsLower + +```go +func IsLower(s string) bool +``` +Returns whether all `unicode.IsLetter` runes in `s` are lower-case. + +#### func IsOneOf + +```go +func IsOneOf(s string, all ...string) bool +``` +Returns whether `s` is in `all`. + +#### func IsUpper + +```go +func IsUpper(s string) bool +``` +Returns whether all `unicode.IsLetter` runes in `s` are upper-case. + +#### func IsUpperAscii + +```go +func IsUpperAscii(s string) bool +``` + +#### func LettersOnly + +```go +func LettersOnly(s string) string +``` +Returns a representation of `s` with all non-`unicode.IsLetter` runes removed. + +#### func MatchesAny + +```go +func MatchesAny(value string, patterns ...string) bool +``` +Uses a `Matcher` to determine whether `value` matches any one of the specified +simple-`patterns`. + +#### func NonEmpties + +```go +func NonEmpties(breakAtFirstEmpty bool, vals ...string) (slice []string) +``` +Returns a slice that contains the non-empty items in `vals`. + +#### func ParseBool + +```go +func ParseBool(s string) bool +``` +Returns `strconv.ParseBool` or `false`. + +#### func ParseFloat + +```go +func ParseFloat(s string) float64 +``` +Returns `strconv.ParseFloat` or `0`. + +#### func ParseFloats + +```go +func ParseFloats(vals ...string) []float64 +``` +Returns the parsed `float64`s from `vals` in the same order, or `nil` if one of +them failed to parse. + +#### func ParseInt + +```go +func ParseInt(s string) int64 +``` +Returns `strconv.ParseInt` or `0`. + +#### func ParseUint + +```go +func ParseUint(s string) uint64 +``` +Returns `strconv.ParseUint` or `0`. + +#### func Pluralize + +```go +func Pluralize(s string) string +``` +A most simplistic (not linguistically-correct) English-language pluralizer that +may be useful for code or doc generation. + +If `s` ends with "s", only appends "es": bus -> buses, mess -> messes etc. + +If `s` ends with "y" (but not "ay", "ey", "oy", "uy" or "iy"), removes "y" and +appends "ies": autonomy -> autonomies, dictionary -> dictionaries etc. + +Otherwise, appends "s": gopher -> gophers, laptop -> laptops etc. + +#### func PrefixWithSep + +```go +func PrefixWithSep(prefix, sep, v string) string +``` +Prepends `prefix + sep` to `v` only if `prefix` isn't empty. + +#### func PrependIf + +```go +func PrependIf(s, p string) string +``` +Prepends `p` to `s` only if `s` doesn't already have that prefix. + +#### func ReduceSpaces + +```go +func ReduceSpaces(s string) string +``` +All occurrences in `s` of multiple subsequent spaces in a row are collapsed into +one single space. + +#### func Replace + +```go +func Replace(str string, repls map[string]string) string +``` +Replaces in `str` all occurrences of all `repls` hash-map keys with their +respective associated (mapped) value. + +#### func SafeIdentifier + +```go +func SafeIdentifier(s string) string +``` +Creates a Pascal-cased "identifier" version of the specified string. + +#### func Split + +```go +func Split(v, s string) (sl []string) +``` +Returns an empty slice is `v` is emtpy, otherwise like `strings.Split` + +#### func StripPrefix + +```go +func StripPrefix(val, prefix string) string +``` +Strips `prefix` off `val` if possible. + +#### func StripSuffix + +```go +func StripSuffix(val, suffix string) string +``` +Strips `suffix` off `val` if possible. + +#### func ToLowerIfUpper + +```go +func ToLowerIfUpper(s string) string +``` +Returns the lower-case representation of `s` only if it is currently fully +upper-case as per `IsUpper`. + +#### func ToUpperIfLower + +```go +func ToUpperIfLower(s string) string +``` +Returns the upper-case representation of `s` only if it is currently fully +lower-case as per `IsLower`. + +#### type Buffer + +```go +type Buffer struct { + bytes.Buffer +} +``` + +A convenient wrapper for `bytes.Buffer`. + +#### func (*Buffer) Write + +```go +func (me *Buffer) Write(format string, args ...interface{}) +``` +Convenience short-hand for `bytes.Buffer.WriteString(fmt.Sprintf(format, +args...))` + +#### func (*Buffer) Writeln + +```go +func (me *Buffer) Writeln(format string, args ...interface{}) +``` +Convenience short-hand for `bytes.Buffer.WriteString(fmt.Sprintf(format+"\n", +args...))` + +#### type Matcher + +```go +type Matcher struct { +} +``` + +Matches a string against "simple-patterns": patterns that can have asterisk (*) +wildcards only at the beginning ("ends-with"), at the end ("begins-with"), or +both ("contains"), or not at all ("equals"). + +For more complex pattern-matching needs, go forth and unleash the full force of +the standard library's `regexp` package. But I found that in a big portion of +pattern-matching use-cases, I'm just doing +"begins-or-ends-or-contains-or-equals" testing. Hence the conception of the +"simple-pattern". + +There is also an alternative `Pattern` type in this package. Use `Matcher` to +match strings against multiple patterns at once, especially if the patterns +don't change often and the matchings occur frequently / repeatedly. In simpler, +rarer one-off matchings, `Pattern` is preferable for simpler "setup-less" +matching. + +#### func (*Matcher) AddPatterns + +```go +func (me *Matcher) AddPatterns(patterns ...string) +``` +Adds the specified simple-`patterns` to me. + +#### func (*Matcher) HasWildcardPatterns + +```go +func (me *Matcher) HasWildcardPatterns() bool +``` +Returns whether any of the simple-patterns specified for `me` declares a +(usable) *-wildcard. + +#### func (*Matcher) IsMatch + +```go +func (me *Matcher) IsMatch(s string) bool +``` +Matches `s` against all patterns in `me`. + +#### type Pattern + +```go +type Pattern string +``` + +An "leaner" alternative to `Matcher` (see docs for `Matcher`). This represents a +single "simple-pattern" and provides matching methods for one or multiple +values. + +#### func (Pattern) AllMatch + +```go +func (me Pattern) AllMatch(values ...string) (allMatch bool) +``` +Returns whether all specified `values` match this simple-pattern. + +#### func (Pattern) AnyMatches + +```go +func (me Pattern) AnyMatches(values ...string) (firstMatch string) +``` +Returns the first of the specified `values` to match this simple-pattern, or +empty if none of them match. + +#### func (Pattern) IsMatch + +```go +func (me Pattern) IsMatch(value string) bool +``` +Returns whether the specified `value` matches this simple-pattern. diff --git a/docs/generator/vendor/github.com/metaleap/go-util-str/buf.go b/docs/generator/vendor/github.com/metaleap/go-util-str/buf.go new file mode 100644 index 0000000..674e969 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-str/buf.go @@ -0,0 +1,26 @@ +package ustr + +import ( + "bytes" + "fmt" +) + +// A convenient wrapper for `bytes.Buffer`. +type Buffer struct { + bytes.Buffer +} + + +// Convenience short-hand for `bytes.Buffer.WriteString(fmt.Sprintf(format, args...))` +func (me *Buffer) Write(format string, args ...interface{}) { + if len(args) > 0 { + format = fmt.Sprintf(format, args...) + } + me.Buffer.WriteString(format) +} + +// Convenience short-hand for `bytes.Buffer.WriteString(fmt.Sprintf(format+"\n", args...))` +func (me *Buffer) Writeln(format string, args ...interface{}) { + me.Write(format, args...) + me.Buffer.WriteString("\n") +} diff --git a/docs/generator/vendor/github.com/metaleap/go-util-str/doc.go b/docs/generator/vendor/github.com/metaleap/go-util-str/doc.go new file mode 100644 index 0000000..d79babf --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-str/doc.go @@ -0,0 +1,2 @@ +// Go programming helpers for common string-processing needs. +package ustr diff --git a/docs/generator/vendor/github.com/metaleap/go-util-str/matcher.go b/docs/generator/vendor/github.com/metaleap/go-util-str/matcher.go new file mode 100644 index 0000000..34ce1e2 --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-str/matcher.go @@ -0,0 +1,127 @@ +package ustr + +import ( + "strings" +) + +// Uses a `Matcher` to determine whether `value` matches any one of the specified simple-`patterns`. +func MatchesAny(value string, patterns ...string) bool { + var m Matcher + m.AddPatterns(patterns...) + return m.IsMatch(value) +} + +type matcherPattern struct { + pattern, prefix, suffix, contains string + any bool +} + +// Matches a string against "simple-patterns": patterns that can have asterisk (*) wildcards only +// at the beginning ("ends-with"), at the end ("begins-with"), or both ("contains"), or not at all ("equals"). +// +// For more complex pattern-matching needs, go forth and unleash the full force of the standard library's `regexp` package. +// But I found that in a big portion of pattern-matching use-cases, I'm just doing "begins-or-ends-or-contains-or-equals" testing. +// Hence the conception of the "simple-pattern". +// +// There is also an alternative `Pattern` type in this package. Use `Matcher` to match strings against multiple patterns +// at once, especially if the patterns don't change often and the matchings occur frequently / repeatedly. +// In simpler, rarer one-off matchings, `Pattern` is preferable for simpler "setup-less" matching. +type Matcher struct { + patterns []matcherPattern + hasWildcards bool +} + +// Adds the specified simple-`patterns` to me. +func (me *Matcher) AddPatterns(patterns ...string) { + var s string + patts := make([]matcherPattern, len(patterns)) + for i := 0; i < len(patterns); i++ { + s = patterns[i] + if patts[i].pattern, patts[i].any = s, len(s) == 0 || s == "*"; !patts[i].any { + if strings.HasPrefix(s, "*") && strings.HasSuffix(s, "*") { + patts[i].contains = s[1 : len(s)-1] + } else if strings.HasPrefix(s, "*") { + patts[i].suffix = s[1:] + } else if strings.HasSuffix(s, "*") { + patts[i].prefix = s[:len(s)-1] + } + } + if patts[i].any || len(patts[i].contains) > 0 || len(patts[i].prefix) > 0 || len(patts[i].suffix) > 0 { + me.hasWildcards = true + } + } + me.patterns = append(me.patterns, patts...) +} + +// Returns whether any of the simple-patterns specified for `me` declares a (usable) *-wildcard. +func (me *Matcher) HasWildcardPatterns() bool { + return me.hasWildcards +} + +// Matches `s` against all patterns in `me`. +func (me *Matcher) IsMatch(s string) bool { + for i := 0; i < len(me.patterns); i++ { + if me.patterns[i].any || s == me.patterns[i].pattern { + return true + } + if me.hasWildcards { + if len(me.patterns[i].prefix) > 0 && strings.HasPrefix(s, me.patterns[i].prefix) { + return true + } + if len(me.patterns[i].suffix) > 0 && strings.HasSuffix(s, me.patterns[i].suffix) { + return true + } + if len(me.patterns[i].contains) > 0 && strings.Contains(s, me.patterns[i].contains) { + return true + } + } + } + return false +} + +// An "leaner" alternative to `Matcher` (see docs for `Matcher`). This represents a +// single "simple-pattern" and provides matching methods for one or multiple values. +type Pattern string + +// Returns whether all specified `values` match this simple-pattern. +func (me Pattern) AllMatch(values ...string) (allMatch bool) { + allMatch = true + if len(me) == 0 || me == "*" { + return + } + for _, val := range values { + if !me.IsMatch(val) { + allMatch = false + break + } + } + return +} + +// Returns the first of the specified `values` to match this simple-pattern, or empty if none of them match. +func (me Pattern) AnyMatches(values ...string) (firstMatch string) { + for _, val := range values { + if me.IsMatch(val) { + firstMatch = val + break + } + } + return +} + +// Returns whether the specified `value` matches this simple-pattern. +func (me Pattern) IsMatch(value string) bool { + meLen := len(me) + if meLen == 0 || me == "*" { + return true + } + prefix, suffix := me[0] == '*', me[meLen-1] == '*' + if prefix && suffix { + return strings.Contains(value, string(me)[1:meLen-2]) + } else if prefix { + return strings.HasSuffix(value, string(me)[1:]) + } else if suffix { + return strings.HasPrefix(value, string(me)[:meLen-1]) + } + return value == string(me) +} diff --git a/docs/generator/vendor/github.com/metaleap/go-util-str/str.go b/docs/generator/vendor/github.com/metaleap/go-util-str/str.go new file mode 100644 index 0000000..7c840ce --- /dev/null +++ b/docs/generator/vendor/github.com/metaleap/go-util-str/str.go @@ -0,0 +1,524 @@ +package ustr + +import ( + "strconv" + "strings" + "unicode" + + "github.com/metaleap/go-util-misc" + "github.com/metaleap/go-util-slice" +) + + +func AnyOf (val string, anyof ...string) bool { + for _,v := range anyof { if v==val { return true } } + return false +} +func After (val string, needle string, elseempty bool) string { + if i := strings.Index(val, needle) ; i>=0 { return val[i+1:] } + if elseempty { return "" } + return val +} +func AfterLast (val string, needle string, elseempty bool) string { + if i := strings.LastIndex(val, needle) ; i>=0 { return val[i+1:] } + if elseempty { return "" } + return val +} +func Before (val string, needle string, elseempty bool) string { + if i := strings.Index(val, needle) ; i>=0 { return val[:i] } + if elseempty { return "" } + return val +} +func Pref (val string, pref string) bool { + return strings.HasPrefix(val, pref) +} +func Suff (val string, suff string) bool { + return strings.HasSuffix(val, suff) +} +func Join (vals []string, delim string) string { + return strings.Join(vals, delim) +} +func Idx (val string, needle string) int { + return strings.Index(val, needle) +} +func Trim (val string) string { + return strings.TrimSpace(val) +} + + +func DistBetween (val string, needle1 string, needle2 string) int { + if i1 := strings.Index(val, needle1) ; i1>=0 { + if len(needle2)==0 { return len(val) - (i1 + len(needle1)) } + if i2 := strings.Index(val[i1+len(needle1):], needle2) ; i2>=0 { return i2 } + } + return -1 +} + +func N (vals ...string) []string { + return vals +} + +func NotPrefixed (pref string) func(string)bool { + return func (val string) bool { + return !strings.HasPrefix(val, pref) + } +} + +func BreakAt(val string, index int) (left string, right string) { + left = val[:index] ; right = val[index:] ; return +} + +func BreakOn(val string, on string) (left string, right string) { + if idx := strings.Index(val, on) ; idx < 0 { + right = val + } else { + left = val[:idx] ; right = val[idx+1:] + } + return +} + +func BreakOnLast(val string, on string) (left string, right string) { + if idx := strings.LastIndex(val, on) ; idx < 0 { + right = val + } else { + left = val[:idx] ; right = val[idx+1:] + } + return +} + +// Passes the specified `vals` to `strings.Join`. +func Concat(vals ...string) string { + return strings.Join(vals, "") +} + +/* +// A simple string-similarity algorithm. +func Distance(s1, s2 string) int { + var ( + cost, min1, min2, min3, i, j int + d = make([][]int, len(s1)+1) + ) + for i = 0; i < len(d); i++ { + d[i] = make([]int, len(s2)+1) + d[i][0] = i + } + for i = 0; i < len(d[0]); i++ { + d[0][i] = i + } + for i = 1; i < len(d); i++ { + for j = 1; j < len(d[0]); j++ { + cost = ugo.Ifi(s1[i-1] == s2[j-1], 0, 1) + min1 = d[i-1][j] + 1 + min2 = d[i][j-1] + 1 + min3 = d[i-1][j-1] + cost + d[i][j] = int(math.Min(math.Min(float64(min1), float64(min2)), float64(min3))) + } + } + return d[len(s1)][len(s2)] +} +*/ + +// Extracts all "identifiers" (as per `ExtractFirstIdentifier`) in `src` and starting with `prefix` (no duplicates, ordered by occurrence). +func ExtractAllIdentifiers(src, prefix string) (identifiers []string) { + minPos := 0 + id := ExtractFirstIdentifier(src, prefix, minPos) + for len(id) > 0 { + if minPos = strings.Index(src, id) + 1; !uslice.StrHas(identifiers, id) { + identifiers = append(identifiers, id) + } + id = ExtractFirstIdentifier(src, prefix, minPos) + } + return +} + +// Extracts the first occurrence (at or after `minPos`) of the "identifier" starting with `prefix` in `src`. +func ExtractFirstIdentifier(src, prefix string, minPos int) (identifier string) { + sub := src[minPos:] + pos := strings.Index(sub, prefix) + if pos >= 0 { + for i, r := range sub[pos:] { + if !(unicode.IsNumber(r) || unicode.IsLetter(r) || r == '_') { + identifier = sub[pos : pos+i] + break + } + } + } + return +} + +// Returns the first `string` in `vals` to match the specified `check`. +// +// `step`: 1 to test all values, a higher value to skip n values after each test, negative for reverse slice traversal, or use 0 to get stuck in an infinite loop. +func First(check func(s string) bool, step int, vals ...string) string { + l := len(vals) + reverse := step < 0 + for i := ugo.Ifi(reverse, l-1, 0); ugo.Ifb(reverse, i >= 0, i < l); i += step { + if check(vals[i]) { + return vals[i] + } + } + return "" +} + +// Returns the first non-empty `string` in `vals`. +func FirstNonEmpty(vals ...string) (val string) { + // return First(func(s string) bool { return len(s) > 0 }, step, vals...) + for _, val = range vals { + if len(val) > 0 { + return + } + } + return +} + +// Convenience short-hand for `strings.Contains`. +func Has(s, substr string) bool { + return strings.Contains(s, substr) +} + +// Returns whether `s` contains any of the specified sub-strings. +func HasAny(s string, subs ...string) bool { + for _, sub := range subs { + if strings.Contains(s, sub) { + return true + } + } + return false +} + +// Returns whether `s1` contains `s2` or lower-case `s1` contains lower-case `s2`. +func HasAnyCase(s1, s2 string) bool { + return strings.Contains(s1, s2) || strings.Contains(strings.ToLower(s1), strings.ToLower(s2)) +} + +// Returns whether `s` starts with any one of the specified `prefixes`. +func HasAnyPrefix(s string, prefixes ...string) bool { + for _, prefix := range prefixes { + if strings.HasPrefix(s, prefix) { + return true + } + } + return false +} + +// Returns whether `s` ends with any one of the specified `suffixes`. +func HasAnySuffix(s string, suffixes ...string) bool { + for _, suffix := range suffixes { + if strings.HasSuffix(s, suffix) { + return true + } + } + return false +} + +// Returns whether `str2` is contained in `str1` exactly once. +func HasOnce(str1, str2 string) bool { + first, last := strings.Index(str1, str2), strings.LastIndex(str1, str2) + return (first >= 0) && (first == last) +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifm(cond bool, ifTrue, ifFalse map[string]string) map[string]string { + if cond { + return ifTrue + } + return ifFalse +} + +// Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`. +func Ifs(cond bool, ifTrue, ifFalse string) string { + if cond { + return ifTrue + } + return ifFalse +} + +// For all `seps`, records its position of first occurrence in `s`, then returns the smallest such position. +func IndexAny(s string, seps ...string) (pos int) { + pos = -1 + for index, sep := range seps { + if index = strings.Index(s, sep); pos < 0 || (index >= 0 && index < pos) { + pos = index + } + } + return +} + +// Returns whether `str` is ASCII-compatible. +func IsAscii(str string) bool { + for _, c := range str { + if c > unicode.MaxASCII { + return false + } + } + return true +} + +// Returns whether all `unicode.IsLetter` runes in `s` are lower-case. +func IsLower(s string) bool { + for _, r := range s { + if unicode.IsLetter(r) && !unicode.IsLower(r) { + return false + } + } + return true +} + +// Returns whether `s` is in `all`. +func IsOneOf(s string, all ...string) bool { + for _, a := range all { + if s == a { + return true + } + } + return false +} + +// Returns whether all `unicode.IsLetter` runes in `s` are upper-case. +func IsUpper(s string) bool { + for _, r := range s { + if !((unicode.IsLetter(r) && unicode.IsUpper(r)) || unicode.IsSpace(r) || unicode.IsDigit(r) || unicode.IsNumber(r)) { + return false + } + } + return true +} + +func IsUpperAscii(s string) bool { + for _, r := range s { + if r > unicode.MaxASCII || (unicode.IsLetter(r) && !unicode.IsUpper(r)) { + return false + } + } + return true +} + +// Returns a representation of `s` with all non-`unicode.IsLetter` runes removed. +func LettersOnly(s string) string { + var buf Buffer + for _, r := range s { + if unicode.IsLetter(r) { + buf.WriteRune(r) + } + } + return buf.String() +} + +// Returns a slice that contains the non-empty items in `vals`. +func NonEmpties(breakAtFirstEmpty bool, vals ...string) (slice []string) { + for _, s := range vals { + if len(s) > 0 { + slice = append(slice, s) + } else if breakAtFirstEmpty { + break + } + } + return +} + +// Returns `strconv.ParseBool` or `false`. +func ParseBool(s string) bool { + v, _ := strconv.ParseBool(s) + return v +} + +// Returns `strconv.ParseFloat` or `0`. +func ParseFloat(s string) float64 { + v, _ := strconv.ParseFloat(s, 64) + return v +} + +// Returns the parsed `float64`s from `vals` in the same order, or `nil` if one of them failed to parse. +func ParseFloats(vals ...string) []float64 { + var ( + f float64 + err error + ) + all := make([]float64, 0, len(vals)) + for _, s := range vals { + if f, err = strconv.ParseFloat(s, 64); err == nil { + all = append(all, f) + } else { + return nil + } + } + return all +} + +func ToInt(s string) (i int) { + i,_ = strconv.Atoi(s) + return +} + +// Returns `strconv.ParseInt` or `0`. +func ParseInt(s string) int64 { + v, _ := strconv.ParseInt(s, 0, 64) + return v +} + +// Returns `strconv.ParseUint` or `0`. +func ParseUint(s string) uint64 { + v, _ := strconv.ParseUint(s, 0, 64) + return v +} + +// A most simplistic (not linguistically-correct) English-language pluralizer that may be useful for code or doc generation. +// +// If `s` ends with "s", only appends "es": bus -> buses, mess -> messes etc. +// +// If `s` ends with "y" (but not "ay", "ey", "oy", "uy" or "iy"), removes "y" and appends "ies": autonomy -> autonomies, dictionary -> dictionaries etc. +// +// Otherwise, appends "s": gopher -> gophers, laptop -> laptops etc. +func Pluralize(s string) string { + if strings.HasSuffix(s, "s") { + return s + "es" + } + if (len(s) > 1) && strings.HasSuffix(s, "y") && !IsOneOf(s[(len(s)-2):], "ay", "ey", "oy", "uy", "iy") { + return s[0:(len(s)-1)] + "ies" + } + return s + "s" +} + +// Prepends `prefix + sep` to `v` only if `prefix` isn't empty. +func PrefixWithSep(prefix, sep, v string) string { + if len(prefix) > 0 { + return prefix + sep + v + } + return v +} + +// Prepends `p` to `s` only if `s` doesn't already have that prefix. +func PrependIf(s, p string) string { + if strings.HasPrefix(s, p) { + return s + } + return p + s +} + +// All occurrences in `s` of multiple subsequent spaces in a row are collapsed into one single space. +func ReduceSpaces(s string) string { + for strings.Index(s, " ") >= 0 { + s = strings.Replace(s, " ", " ", -1) + } + return s +} + +// Replaces in `str` all occurrences of all `repls` hash-map keys with their respective associated (mapped) value. +func Replace(str string, repls map[string]string) string { + for k, v := range repls { + str = strings.Replace(str, k, v, -1) + } + return str +} + +// Creates a Pascal-cased "identifier" version of the specified string. +func SafeIdentifier(s string) string { + var ( + isL, isD, last bool + buf Buffer + ) + for i, r := range s { + if isL, isD = unicode.IsLetter(r), unicode.IsDigit(r); isL || isD || ((r == '_') && (i == 0)) { + if (i > 0) && (isL != last) { + buf.WriteRune(' ') + } + buf.WriteRune(r) + } else { + buf.WriteRune(' ') + } + last = isL + } + words := Split(strings.Title(buf.String()), " ") + for i, w := range words { + if (len(w) > 1) && IsUpper(w) { + words[i] = strings.Title(strings.ToLower(w)) + } + } + return strings.Join(words, "") +} + +// Returns an empty slice is `v` is emtpy, otherwise like `strings.Split` +func Split(v, s string) (sl []string) { + if len(v) > 0 { + sl = strings.Split(v, s) + } + return +} + +// Strips `prefix` off `val` if possible. +func StripPrefix(val, prefix string) string { + for strings.HasPrefix(val, prefix) { + val = val[len(prefix):] + } + return val +} + +// Strips `suffix` off `val` if possible. +func StripSuffix(val, suffix string) string { + for strings.HasSuffix(val, suffix) { + val = val[:len(val)-len(suffix)] + } + return val +} + +/* +func ToFloat32 (str string) float32 { + var f, err = strconv.ParseFloat(str, 32) + if err == nil { return float32(f) } + return 0.0 +} + +func ToFloat64 (str string) float64 { + var f, err = strconv.ParseFloat(str, 64) + if err == nil { return f } + return 0.0 +} + +func ToFloat64s (strs ... string) []float64 { + var f = make([]float64, len(strs)) + for i, s := range strs { f[i] = ToFloat64(s) } + return f +} + +func ToInt (str string) int { + var i, err = strconv.Atoi(str) + if err == nil { return i } + return 0 +} + +func ToString (any interface{}, nilVal string) string { + if any == nil { + return nilVal + } + if s, isS := any.(string); isS { + return s + } + if f, isF := any.(fmt.Stringer); isF { + return f.String() + } + return fmt.Sprintf("%v", any) +} + +func ToStrings (any interface{}) []string { + if sl, isSl := any.([]string); isSl { + return sl + } + return nil +} +*/ + +// Returns the lower-case representation of `s` only if it is currently fully upper-case as per `IsUpper`. +func ToLowerIfUpper(s string) string { + if IsUpper(s) { + return strings.ToLower(s) + } + return s +} + +// Returns the upper-case representation of `s` only if it is currently fully lower-case as per `IsLower`. +func ToUpperIfLower(s string) string { + if IsLower(s) { + return strings.ToUpper(s) + } + return s +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.codeclimate.yml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.codeclimate.yml new file mode 100644 index 0000000..d8a62d4 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.codeclimate.yml @@ -0,0 +1,18 @@ +engines: + fixme: + enabled: true + gofmt: + enabled: true + golint: + enabled: true + exclude_paths: + # Ginkgo/Gomega style aren't compatible + - "**_test.go" + govet: + enabled: true +ratings: + paths: + - "**.go" +exclude_paths: +- fixtures/ +- vendor/ diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.dockerignore b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.dockerignore new file mode 100644 index 0000000..fc94de9 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.dockerignore @@ -0,0 +1,12 @@ +circleci/ +docs/ +exampleplugin/ +fixtures/ +.codeclimate.yml +.git +.gitignore +.goxc.json +appveyor.yml +circle.yml +CONTRIBUTING.md +release.sh \ No newline at end of file diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.gitignore b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.gitignore new file mode 100644 index 0000000..db24d7e --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.gitignore @@ -0,0 +1,5 @@ +.goxc.local.json +/compliance-masonry +*.swp +*.out +vendor diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.goxc.json b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.goxc.json new file mode 100644 index 0000000..8fae8fe --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/.goxc.json @@ -0,0 +1,18 @@ +{ + "Tasks": [ + "default", + "publish-github" + ], + "TasksExclude": [ + "go-test" + ], + "BuildConstraints": "linux,windows,darwin", + "PackageVersion": "1.1.2", + "TaskSettings": { + "publish-github": { + "owner": "opencontrol", + "repository": "compliance-masonry" + } + }, + "ConfigVersion": "0.9" +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/CONTRIBUTING.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/CONTRIBUTING.md new file mode 100644 index 0000000..7f350a0 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/CONTRIBUTING.md @@ -0,0 +1,21 @@ +## Welcome! + +We're so glad you're thinking about contributing to an 18F open source project! If you're unsure about anything, just ask -- or submit the issue or pull request anyway. The worst that can happen is you'll be politely asked to change something. We love all friendly contributions. + +We want to ensure a welcoming environment for all of our projects. Our staff follow the [18F Code of Conduct](https://github.com/18F/code-of-conduct/blob/master/code-of-conduct.md) and all contributors should do the same. + +We encourage you to read this project's CONTRIBUTING policy (you are here), its [LICENSE](LICENSE.md), and its [README](README.md). + +If you have any questions or want to read more, check out the [18F Open Source Policy GitHub repository]( https://github.com/18f/open-source-policy), or just [shoot us an email](mailto:18f@gsa.gov). + +See [this page](docs/development.md) for developer documentation. + +## Public domain + +This project is in the public domain within the United States, and +copyright and related rights in the work worldwide are waived through +the [CC0 1.0 Universal public domain dedication](https://creativecommons.org/publicdomain/zero/1.0/). + +All contributions to this project will be released under the CC0 +dedication. By submitting a pull request, you are agreeing to comply +with this waiver of copyright interest. diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Dockerfile b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Dockerfile new file mode 100644 index 0000000..5990575 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Dockerfile @@ -0,0 +1,6 @@ +FROM golang:1.8-alpine +RUN apk add --no-cache git openssh +WORKDIR /go/src/github.com/opencontrol/compliance-masonry +ADD . . +RUN go install +ENTRYPOINT ["/go/bin/compliance-masonry"] diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.lock b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.lock new file mode 100644 index 0000000..4b1ad81 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.lock @@ -0,0 +1,129 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/Masterminds/vcs" + packages = ["."] + revision = "3084677c2c188840777bff30054f2b553729d329" + version = "v1.11.1" + +[[projects]] + name = "github.com/blang/semver" + packages = ["."] + revision = "b38d23b8782a487059e8fc8773e9a5b228a77cb6" + version = "v3.5.0" + +[[projects]] + name = "github.com/codegangsta/cli" + packages = ["."] + revision = "0bdeddeeb0f650497d603c4ad7b20cfe685682f6" + version = "v1.19.1" + +[[projects]] + name = "github.com/davecgh/go-spew" + packages = ["spew"] + revision = "346938d642f2ec3594ed81d874461961cd0faa76" + version = "v1.1.0" + +[[projects]] + name = "github.com/go-forks/fsnotify" + packages = ["."] + revision = "441bbc86b167f3c1f4786afae9931403b99fdacf" + version = "v0.9.0" + +[[projects]] + branch = "master" + name = "github.com/go-utils/ufs" + packages = ["."] + revision = "759211ccbbfc380b7356c038dbb3667251f6b7b3" + +[[projects]] + branch = "master" + name = "github.com/metaleap/go-util-misc" + packages = ["."] + revision = "c53f803886d3a520c369beb2368914d853389f30" + +[[projects]] + branch = "master" + name = "github.com/metaleap/go-util-slice" + packages = ["."] + revision = "fb69df90f7992e63a8959323a08a85aaba012564" + +[[projects]] + branch = "master" + name = "github.com/metaleap/go-util-str" + packages = ["."] + revision = "ea3253c93490d3bbb0ad77670e2ad712e717ae1a" + +[[projects]] + name = "github.com/onsi/ginkgo" + packages = [".","config","extensions/table","internal/codelocation","internal/containernode","internal/failer","internal/leafnodes","internal/remote","internal/spec","internal/spec_iterator","internal/specrunner","internal/suite","internal/testingtproxy","internal/writer","reporters","reporters/stenographer","reporters/stenographer/support/go-colorable","reporters/stenographer/support/go-isatty","types"] + revision = "77a8c1e5c40d6bb6c5eb4dd4bdce9763564f6298" + version = "v1.3.1" + +[[projects]] + name = "github.com/onsi/gomega" + packages = [".","format","gbytes","gexec","internal/assertion","internal/asyncassertion","internal/oraclematcher","internal/testingtsupport","matchers","matchers/support/goraph/bipartitegraph","matchers/support/goraph/edge","matchers/support/goraph/node","matchers/support/goraph/util","types"] + revision = "334b8f472b3af5d541c5642701c1e29e2126f486" + version = "v1.1.0" + +[[projects]] + name = "github.com/pmezard/go-difflib" + packages = ["difflib"] + revision = "792786c7400a136282c1664665ae0a8db921c6c2" + version = "v1.0.0" + +[[projects]] + branch = "master" + name = "github.com/stretchr/objx" + packages = ["."] + revision = "1a9d0bb9f541897e62256577b352fdbc1fb4fd94" + +[[projects]] + name = "github.com/stretchr/testify" + packages = ["assert","mock"] + revision = "69483b4bd14f5845b5a1e55bca19e954e827f1d0" + version = "v1.1.4" + +[[projects]] + branch = "master" + name = "github.com/tg/gosortmap" + packages = ["."] + revision = "9e9c6c22cdeb75203f2b1ee5f7eb8d5d7832e7b0" + +[[projects]] + branch = "master" + name = "github.com/vektra/errors" + packages = ["."] + revision = "c64d83aba85aa4392895aadeefabbd24e89f3580" + +[[projects]] + branch = "master" + name = "golang.org/x/sys" + packages = ["unix"] + revision = "4cd6d1a821c7175768725b55ca82f14683a29ea4" + +[[projects]] + name = "gopkg.in/fatih/set.v0" + packages = ["."] + revision = "57907de300222151a123d29255ed17f5ed43fad3" + version = "v0.1.0" + +[[projects]] + branch = "v2" + name = "gopkg.in/yaml.v2" + packages = ["."] + revision = "3b4ad1db5b2a649883ff3782f5f9f6fb52be71af" + +[[projects]] + branch = "master" + name = "vbom.ml/util" + packages = ["sortorder"] + revision = "256737ac55c46798123f754ab7d2c784e2c71783" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "16d0a94d866c136228b6f2ca0d50fe73b4a8e468fc887440f9f5cadf78eb8827" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.toml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.toml new file mode 100644 index 0000000..80128df --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/Gopkg.toml @@ -0,0 +1,62 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + name = "github.com/Masterminds/vcs" + version = "=1.11.1" + +[[constraint]] + name = "github.com/blang/semver" + version = "=3.5.0" + +[[constraint]] + name = "github.com/codegangsta/cli" + version = "=1.19.1" + +[[constraint]] + branch = "master" + name = "github.com/go-utils/ufs" + +[[constraint]] + name = "github.com/onsi/ginkgo" + version = "=1.3.1" + +[[constraint]] + name = "github.com/onsi/gomega" + version = "=1.1.0" + +[[constraint]] + branch = "master" + name = "github.com/tg/gosortmap" + +[[constraint]] + branch = "master" + name = "github.com/vektra/errors" + +[[constraint]] + name = "gopkg.in/fatih/set.v0" + version = "=0.1.0" + +[[constraint]] + branch = "v2" + name = "gopkg.in/yaml.v2" diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/LICENSE.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/LICENSE.md new file mode 100644 index 0000000..19fa33d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/LICENSE.md @@ -0,0 +1,31 @@ +As a work of the United States Government, this project is in the +public domain within the United States. + +Additionally, we waive copyright and related rights in the work +worldwide through the CC0 1.0 Universal public domain dedication. + +## CC0 1.0 Universal Summary + +This is a human-readable summary of the [Legal Code (read the full text)](https://creativecommons.org/publicdomain/zero/1.0/legalcode). + +### No Copyright + +The person who associated a work with this deed has dedicated the work to +the public domain by waiving all of his or her rights to the work worldwide +under copyright law, including all related and neighboring rights, to the +extent allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial +purposes, all without asking permission. + +### Other Information + +In no way are the patent or trademark rights of any person affected by CC0, +nor are the rights that other persons may have in the work or in how the +work is used, such as publicity or privacy rights. + +Unless expressly stated otherwise, the person who associated a work with +this deed makes no warranties about the work, and disclaims liability for +all uses of the work, to the fullest extent permitted by applicable law. +When using or citing the work, you should not imply endorsement by the +author or the affirmer. diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/README.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/README.md new file mode 100644 index 0000000..0bb75bd --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/README.md @@ -0,0 +1,14 @@ +# Compliance Masonry + +[![Go Report Card](https://goreportcard.com/badge/github.com/opencontrol/compliance-masonry)](https://goreportcard.com/report/github.com/opencontrol/compliance-masonry) +[![Code Climate](https://codeclimate.com/github/opencontrol/compliance-masonry/badges/gpa.svg)](https://codeclimate.com/github/opencontrol/compliance-masonry) +[![codecov.io](https://codecov.io/github/opencontrol/compliance-masonry/coverage.svg?branch=master)](https://codecov.io/github/opencontrol/compliance-masonry?branch=master) +[![Circle CI](https://circleci.com/gh/opencontrol/compliance-masonry/tree/master.svg?style=svg)](https://circleci.com/gh/opencontrol/compliance-masonry/tree/master) +[![Build status](https://ci.appveyor.com/api/projects/status/jjjo83ewacbwnthy/branch/master?svg=true)](https://ci.appveyor.com/project/opencontrol/compliance-masonry/branch/master) + +Compliance Masonry is a command-line interface (CLI) that allows users to construct certification documentation using the [OpenControl Schema](https://github.com/opencontrol/schemas). + +* [Overview](docs/) +* [Installation](docs/install.md) +* [Usage](docs/usage.md) +* [Developer setup](docs/development.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/appveyor.yml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/appveyor.yml new file mode 100644 index 0000000..b95c426 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/appveyor.yml @@ -0,0 +1,24 @@ +version: 1.0.{build} +branches: + only: + - master +clone_folder: c:\gopath\src\github.com\opencontrol\compliance-masonry +environment: + GOPATH: c:\gopath +install: +- cmd: >- + echo %GOPATH% + + go version + + go env + + go get github.com/golang/dep/cmd/dep github.com/Masterminds/glide + + set PATH=%PATH%;%GOPATH%\bin + + dep ensure +build_script: +- cmd: go build +test_script: +- cmd: FOR /F %%A IN ('glide novendor') DO go test -v %%A || exit /b 1 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circle.yml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circle.yml new file mode 100644 index 0000000..c0702c5 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circle.yml @@ -0,0 +1,36 @@ +version: 2 +jobs: + build: + working_directory: /go/src/github.com/opencontrol/compliance-masonry + docker: + - image: golang:1.8-alpine + steps: + - run: + name: Install Git + command: apk add --no-cache bash gcc git musl-dev + - checkout + + - run: + name: Install dependencies + command: | + go get -u github.com/golang/dep/cmd/dep + dep ensure + - run: + name: Build the program + command: go build + + - run: + name: Download test dependencies + command: | + go get -u \ + github.com/golang/dep/cmd/dep \ + github.com/axw/gocov/gocov \ + github.com/kisielk/errcheck \ + github.com/mattn/goveralls \ + golang.org/x/tools/cmd/cover + - run: + name: Run tests + command: ./circleci/coverage.sh + - run: + name: Check for unhandled errors + command: errcheck diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/README.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/README.md new file mode 100644 index 0000000..c02ef84 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/README.md @@ -0,0 +1,4 @@ +## Circle CI Scripts + +Call these scripts from the root of the repository +- `circleci/coverage.sh # example` diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/coverage.sh b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/coverage.sh new file mode 100755 index 0000000..c3b9be1 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/circleci/coverage.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +cov_file=/tmp/coverage.txt + +# Get the list of packages. +pkgs=`go list ./... | grep -v vendor` + +echo "mode: count" > $cov_file +for pkg in $pkgs +do + go test -v -covermode=count $pkg -coverprofile=tmp.cov + if [ -f tmp.cov ] + then + cat tmp.cov | tail -n +2 >> $cov_file + rm tmp.cov + fi +done + +go tool cover -func $cov_file + +mv $cov_file . && bash <(curl -s https://codecov.io/bash) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/diff_suite_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/diff_suite_test.go new file mode 100644 index 0000000..27d2941 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/diff_suite_test.go @@ -0,0 +1,13 @@ +package diff_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestDiff(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Diff Suite") +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory.go new file mode 100644 index 0000000..b3a7d37 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory.go @@ -0,0 +1,97 @@ +package diff + +import ( + "fmt" + "github.com/opencontrol/compliance-masonry/lib" + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/tools/certifications" +) + +// Inventory maintains the inventory of all the controls within a given workspace. +type Inventory struct { + common.Workspace + masterControlList map[string]common.Control + actualSatisfiedControls map[string]common.Satisfies + MissingControlList map[string]common.Control +} + +// retrieveMasterControlsList will gather the list of controls needed for a given certification. +func (i *Inventory) retrieveMasterControlsList() { + standardKeys := i.GetCertification().GetSortedStandards() + for _, standardKey := range standardKeys { + for _, controlKey := range i.GetCertification().GetControlKeysFor(standardKey) { + key := standardAndControlString(standardKey, controlKey) + if _, exists := i.masterControlList[key]; !exists { + standard, found := i.GetStandard(standardKey) + if !found { + continue + } + i.masterControlList[key] = standard.GetControl(controlKey) + } + } + } +} + +// findDocumentedControls will find the list of all documented controls found within the workspace. +func (i *Inventory) findDocumentedControls() { + for _, component := range i.GetAllComponents() { + for _, satisfiedControl := range component.GetAllSatisfies() { + key := standardAndControlString(satisfiedControl.GetStandardKey(), satisfiedControl.GetControlKey()) + if _, exists := i.actualSatisfiedControls[key]; !exists { + i.actualSatisfiedControls[key] = satisfiedControl + } + } + } +} + +// calculateNonDocumentedControls will compute the diff between the master list of controls and the documented controls. +func (i *Inventory) calculateNonDocumentedControls() { + for standardAndControlKey, control := range i.masterControlList { + if _, exists := i.actualSatisfiedControls[standardAndControlKey]; !exists { + i.MissingControlList[standardAndControlKey] = control + } + } +} + +// standardAndControlString makes a string from the standard and the control. +// This is helpful for functions that want to create unique keys consistently. +func standardAndControlString(standard string, control string) string { + return standard + "@" + control +} + +// Config contains the settings for how to compute the gap analysis +type Config struct { + Certification string + OpencontrolDir string +} + +// ComputeGapAnalysis will compute the gap analysis and return the inventory of the controls for the +// opencontrol workspace if successful. Otherwise, it will return a list of error messages. +// TODO: fix the error return to return of type error. This was used because existing code returned that type +// TODO: e.g. GetCertification +func ComputeGapAnalysis(config Config) (Inventory, []error) { + // Initialize inventory with certification + certificationPath, errs := certifications.GetCertification(config.OpencontrolDir, config.Certification) + if certificationPath == "" { + return Inventory{}, errs + } + workspace, _ := lib.LoadData(config.OpencontrolDir, certificationPath) + i := Inventory{ + Workspace: workspace, + masterControlList: make(map[string]common.Control), + actualSatisfiedControls: make(map[string]common.Satisfies), + MissingControlList: make(map[string]common.Control), + } + if i.GetCertification() == nil || i.GetAllComponents() == nil { + return Inventory{}, []error{fmt.Errorf("Unable to load data in %s for certification %s", config.OpencontrolDir, config.Certification)} + } + + // Gather list of all controls for certification + i.retrieveMasterControlsList() + // Find the documented controls. + i.findDocumentedControls() + // Calculate the Missing controls / Non documented + i.calculateNonDocumentedControls() + + return i, nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory_test.go new file mode 100644 index 0000000..0d93789 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/diff/inventory_test.go @@ -0,0 +1,62 @@ +package diff_test + +import ( + . "github.com/opencontrol/compliance-masonry/commands/diff" + + "errors" + . "github.com/onsi/ginkgo" + "github.com/stretchr/testify/assert" + "os" + "path/filepath" +) + +var _ = Describe("Inventory", func() { + Describe("Computing Gap Analysis", func() { + var ( + workingDir string + ) + BeforeEach(func() { + workingDir, _ = os.Getwd() + }) + Describe("bad inputs", func() { + Context("When no certification is specified", func() { + It("should return an empty slice and an error", func() { + config := Config{} + i, err := ComputeGapAnalysis(config) + assert.Equal(GinkgoT(), []error{errors.New("Error: Missing Certification Argument")}, err) + assert.Equal(GinkgoT(), 0, len(i.MissingControlList)) + }) + }) + Context("When bad / no folder location is given", func() { + It("should return an empty slice and an error", func() { + config := Config{Certification: "LATO"} + i, err := ComputeGapAnalysis(config) + assert.Equal(GinkgoT(), []error{errors.New("Error: `certifications` directory does exist")}, err) + assert.Equal(GinkgoT(), 0, len(i.MissingControlList)) + }) + }) + }) + Context("When there are controls specified in the certification but some controls have been documented", func() { + It("should return a subset of the full list of controls", func() { + config := Config{ + OpencontrolDir: filepath.Join(workingDir, "..", "..", "fixtures", "opencontrol_fixtures"), + Certification: "LATO", + } + i, err := ComputeGapAnalysis(config) + assert.Nil(GinkgoT(), err) + assert.Equal(GinkgoT(), 3, len(i.MissingControlList)) + }) + }) + Context("When there are controls specified in the certification and we have documented them", func() { + It("should return no missing controls", func() { + config := Config{ + OpencontrolDir: filepath.Join(workingDir, "..", "..", "fixtures", "opencontrol_fixtures_complete"), + Certification: "LATO", + } + i, err := ComputeGapAnalysis(config) + assert.Nil(GinkgoT(), err) + assert.Equal(GinkgoT(), 0, len(i.MissingControlList)) + }) + }) + }) +}) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs.go new file mode 100644 index 0000000..ee01560 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs.go @@ -0,0 +1,25 @@ +package docs + +import ( + "os" + + "github.com/opencontrol/compliance-masonry/commands/docs/gitbook" + "github.com/opencontrol/compliance-masonry/tools/certifications" +) + +// MakeGitbook is the wrapper function that will create a gitbook for the specified certification. +func MakeGitbook(config gitbook.Config) (string, []error) { + warning := "" + certificationPath, err := certifications.GetCertification(config.OpencontrolDir, config.Certification) + if certificationPath == "" { + return warning, err + } + if _, err := os.Stat(config.MarkdownPath); os.IsNotExist(err) { + warning = "Warning: markdown directory does not exist" + } + config.Certification = certificationPath + if err := config.BuildGitbook(); err != nil { + return warning, err + } + return warning, nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_suite_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_suite_test.go new file mode 100644 index 0000000..7395a85 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_suite_test.go @@ -0,0 +1,13 @@ +package docs_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestDocs(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Docs Suite") +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_test.go new file mode 100644 index 0000000..02c9de5 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/docs_test.go @@ -0,0 +1,82 @@ +package docs_test + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" + + . "github.com/opencontrol/compliance-masonry/commands/docs" + "github.com/opencontrol/compliance-masonry/commands/docs/gitbook" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/extensions/table" + "github.com/stretchr/testify/assert" +) + +var _ = Describe("Doc Tests", func() { + DescribeTable("BuildGitbookTest", func(config gitbook.Config, expectedWarning string, expectedMessages []error) { + tempDir, _ := ioutil.TempDir("", "example") + defer os.RemoveAll(tempDir) + config.ExportPath = tempDir + actualWarning, actualMessages := MakeGitbook(config) + assert.Equal(GinkgoT(), expectedWarning, actualWarning) + assert.Equal(GinkgoT(), expectedMessages, actualMessages) + }, + Entry( + "Check that the gitbook is correctly exported given the fixtures", + gitbook.Config{ + OpencontrolDir: filepath.Join("..", "..", "fixtures", "opencontrol_fixtures"), + Certification: "LATO", + MarkdownPath: "", + }, + "Warning: markdown directory does not exist", + nil, + ), + + Entry( + "Check that there is an error when there is no opencontrol dir", + gitbook.Config{ + OpencontrolDir: "", + Certification: "LATO", + MarkdownPath: "", + }, + "", + []error{errors.New("Error: `certifications` directory does exist")}, + ), + + Entry( + "Check that gitbook is created with markdowns", + gitbook.Config{ + OpencontrolDir: filepath.Join("..", "..", "fixtures", "opencontrol_fixtures_with_markdown"), + Certification: "LATO", + MarkdownPath: filepath.Join("..", "..", "fixtures", "opencontrol_fixtures_with_markdown", "markdowns"), + }, + "", + nil, + ), + + Entry( + "Check that thre is an error returned when the certification does not exist", + gitbook.Config{ + OpencontrolDir: filepath.Join("..", "..", "fixtures", "opencontrol_fixtures_with_markdown"), + Certification: "LAT", + MarkdownPath: filepath.Join("..", "..", "fixtures", "opencontrol_fixtures_with_markdown", "markdowns"), + }, + "", + []error{fmt.Errorf("Error: `%s` does not exist\nUse one of the following:\nLATO", filepath.Join("..", "..", "fixtures", "opencontrol_fixtures_with_markdown", "certifications", "LAT.yaml"))}, + ), + + Entry( + "Check that error is returned when certification argument is not present", + gitbook.Config{ + OpencontrolDir: filepath.Join("..", "..", "fixtures", "opencontrol_fixtures_with_markdown"), + Certification: "", + MarkdownPath: filepath.Join("..", "..", "fixtures", "opencontrol_fixtures_with_markdown", "markdowns/"), + }, + "", + []error{errors.New("Error: Missing Certification Argument")}, + ), + ) +}) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook.go new file mode 100644 index 0000000..7052866 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook.go @@ -0,0 +1,76 @@ +package gitbook + +import ( + "fmt" + "path/filepath" + "strings" + + "github.com/opencontrol/compliance-masonry/lib" + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/tools/fs" +) + +// Config contains data for gitbook export configurations +type Config struct { + OpencontrolDir string + Certification string + ExportPath string + MarkdownPath string +} + +// OpenControlGitBook struct is an extension of models.OpenControl that adds +// an exportPath +type OpenControlGitBook struct { + common.Workspace + markdownPath string + exportPath string + FSUtil fs.Util +} + +// ComponentGitbook struct is an extension of models.Component that adds +// an exportPath +type ComponentGitbook struct { + common.Component + exportPath string +} + +// ControlGitbook struct is an extension of models.Control that adds +// an exportPath +type ControlGitbook struct { + common.Control + exportPath string + standardKey string + controlKey string +} + +func exportLink(text string, location string) string { + return fmt.Sprintf("* [%s](%s)\n", text, location) +} + +func replaceParentheses(text string) string { + return strings.Replace(strings.Replace(text, "(", "", -1), ")", "", -1) +} + +// BuildGitbook entry point for creating gitbook +func (config Config) BuildGitbook() []error { + var errs []error + openControlData, err := lib.LoadData(config.OpencontrolDir, config.Certification) + if err != nil && len(err) > 0 { + return append(errs, err...) + } + openControl := OpenControlGitBook{ + openControlData, + config.MarkdownPath, + config.ExportPath, + fs.OSUtil{}, + } + openControl.FSUtil.Mkdirs(config.ExportPath) + openControl.FSUtil.Mkdirs(filepath.Join(config.ExportPath, "components")) + openControl.FSUtil.Mkdirs(filepath.Join(config.ExportPath, "standards")) + if err := openControl.buildSummaries(); err != nil { + return append(errs, err) + } + openControl.exportComponents() + openControl.exportStandards() + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification.go new file mode 100644 index 0000000..364c00b --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification.go @@ -0,0 +1,138 @@ +package gitbook + +import ( + "fmt" + "io/ioutil" + "path/filepath" + + "github.com/opencontrol/compliance-masonry/lib/common" +) + +func (openControl *OpenControlGitBook) getResponsibleRole(text string, component common.Component) string { + if component.GetResponsibleRole() != "" { + text = fmt.Sprintf("%s\n##### Responsible Role: %s\n", text, component.GetResponsibleRole()) + } + return text +} + +func (openControl *OpenControlGitBook) getNarratives(narratives []common.Section, text string, control *ControlGitbook) string { + if len(narratives) == 0 { + return fmt.Sprintf("%s\nNo narrative found for the combination of standard %s and control %s\n", text, control.standardKey, control.controlKey) + } + + for _, narrative := range narratives { + text = openControl.getNarrative(narrative, text) + } + return text +} + +func (openControl *OpenControlGitBook) getNarrative(narrative common.Section, text string) string { + if narrative.GetKey() != "" { + text = fmt.Sprintf("%s\n##### %s\n", text, narrative.GetKey()) + } + text = fmt.Sprintf("%s%s\n", text, narrative.GetText()) + return text +} + +func (openControl *OpenControlGitBook) getParameters(text string, parameters []common.Section) string { + if len(parameters) > 0 { + text = fmt.Sprintf("%s\n##### Parameters:\n", text) + } + for _, parameter := range parameters { + text = openControl.getParameter(text, parameter) + } + return text +} + +func (openControl *OpenControlGitBook) getParameter(text string, parameter common.Section) string { + text = fmt.Sprintf("%s\n###### %s\n", text, parameter.GetKey()) + text = fmt.Sprintf("%s%s\n", text, parameter.GetText()) + return text +} + +func (openControl *OpenControlGitBook) getCoveredBy(text string, justification common.Verification) string { + if len(justification.SatisfiesData.GetCoveredBy()) > 0 { + text += "Covered By:\n" + } + for _, coveredBy := range justification.SatisfiesData.GetCoveredBy() { + // In case the component key is missing, get it from the justification. + componentKey := coveredBy.ComponentKey + if componentKey == "" { + componentKey = justification.ComponentKey + } + component, found := openControl.GetComponent(componentKey) + if !found { + continue + } + text = openControl.getCoveredByVerification(text, component, coveredBy) + } + return text +} + +func (openControl *OpenControlGitBook) getCoveredByVerification(text string, component common.Component, coveredBy common.CoveredBy) string { + if component != nil { + verification := component.GetVerifications().Get(coveredBy.VerificationKey) + text += exportLink( + fmt.Sprintf("%s - %s", component.GetName(), verification.Name), + filepath.Join("..", "components", component.GetKey()+".md"), + ) + } + return text +} + +func (openControl *OpenControlGitBook) getControlOrigin(text string, controlOrigin string) string { + if controlOrigin != "" { + text = fmt.Sprintf("%s\n##### Control Origin: %s\n", text, controlOrigin) + } + return text +} + +func (openControl *OpenControlGitBook) exportControl(control *ControlGitbook) (string, string) { + key := replaceParentheses(fmt.Sprintf("%s-%s", control.standardKey, control.controlKey)) + text := fmt.Sprintf("#%s\n##%s\n", key, control.GetName()) + if len(control.GetDescription()) > 0 { + text += "#### Description\n" + text += control.GetDescription() + } + selectJustifications := openControl.GetAllVerificationsWith(control.standardKey, control.controlKey) + // In the case that no information was found period for the standard and control + if len(selectJustifications) == 0 { + errorText := fmt.Sprintf("No information found for the combination of standard %s and control %s", control.standardKey, control.controlKey) + text = fmt.Sprintf("%s\n%s\n", text, errorText) + } + for _, justification := range selectJustifications { + component, found := openControl.GetComponent(justification.ComponentKey) + if !found { + continue + } + text = fmt.Sprintf("%s\n#### %s\n", text, component.GetName()) + + text = openControl.getResponsibleRole(text, component) + + text = openControl.getParameters(text, justification.SatisfiesData.GetParameters()) + + text = openControl.getControlOrigin(text, justification.SatisfiesData.GetControlOrigin()) + + text = openControl.getNarratives(justification.SatisfiesData.GetNarratives(), text, control) + text = openControl.getCoveredBy(text, justification) + } + return filepath.Join(control.exportPath, key+".md"), text +} + +func (openControl *OpenControlGitBook) exportStandards() { + standardsExportPath := filepath.Join(openControl.exportPath, "standards") + openControl.FSUtil.Mkdirs(standardsExportPath) + standardKeys := openControl.GetCertification().GetSortedStandards() + for _, standardKey := range standardKeys { + standard, found := openControl.GetStandard(standardKey) + if !found { + continue + } + controlKeys := standard.GetSortedControls() + for _, controlKey := range controlKeys { + control := standard.GetControl(controlKey) + controlPath, controlText := openControl.exportControl(&ControlGitbook{control, standardsExportPath, standardKey, controlKey}) + ioutil.WriteFile(controlPath, []byte(controlText), 0700) + } + } +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification_test.go new file mode 100644 index 0000000..5c1a3ee --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookCertification_test.go @@ -0,0 +1,86 @@ +package gitbook + +import ( + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/opencontrol/compliance-masonry/lib" + "github.com/opencontrol/compliance-masonry/tools/fs" +) + +type exportControlTest struct { + opencontrolDir string + certificationPath string + standardKey string + controlKey string + expectedPath string + expectedText string +} + +var exportControlTests = []exportControlTest{ + // Check that a control is exported correctly + { + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures"), + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures", "certifications", "LATO.yaml"), + "NIST-800-53", + "CM-2", + "NIST-800-53-CM-2.md", + `#NIST-800-53-CM-2 +##Baseline Configuration +#### Description +'The organization develops, documents, and maintains under configuration +control, a current baseline configuration of the information system.' + +#### Amazon Elastic Compute Cloud + +##### Responsible Role: AWS Staff + +##### Control Origin: shared + +##### a +Justification in narrative form A for CM-2 + +##### b +Justification in narrative form B for CM-2 +Covered By: +* [Amazon Elastic Compute Cloud - EC2 Verification 1](../components/EC2.md) +`, + }, +} + +func TestExportControl(t *testing.T) { + for _, example := range exportControlTests { + dir, err := ioutil.TempDir("", "example") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(dir) + openControlData, errs := lib.LoadData(example.opencontrolDir, example.certificationPath) + if len(errs) > 0 { + log.Fatal("Should have loaded the opencontrol data.") + } + openControl := OpenControlGitBook{ + openControlData, + "", + dir, + fs.OSUtil{}, + } + standard, _ := openControl.GetStandard(example.standardKey) + control := standard.GetControl(example.controlKey) + actualPath, actualText := openControl.exportControl(&ControlGitbook{control, dir, example.standardKey, example.controlKey}) + expectedPath := filepath.Join(dir, example.expectedPath) + // Verify the expected export path is the same as the actual export path + if expectedPath != actualPath { + t.Errorf("Expected %s, Actual: %s", example.expectedPath, actualPath) + } + // Verify the expected text is the same as the actual text + if example.expectedText != strings.Replace(actualText, "\\", "/", -1) { + t.Errorf("Expected %s, Actual: %s", example.expectedText, actualText) + } + + } +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents.go new file mode 100644 index 0000000..54da34d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents.go @@ -0,0 +1,44 @@ +package gitbook + +import ( + "fmt" + "io/ioutil" + "path/filepath" + "sort" +) + +func (component *ComponentGitbook) exportComponent() (string, string) { + var text string + componentPath := component.GetKey() + ".md" + text = fmt.Sprintf("# %s\n", component.GetName()) + // Sort Components and Verifications + if component.GetReferences() != nil { + if component.GetReferences().Len() > 0 { + sort.Sort(component.GetReferences()) + text += "## References\n" + for _, reference := range *(component.GetReferences()) { + text += exportLink(reference.Name, reference.Path) + } + } + } + if component.GetVerifications() != nil { + if component.GetVerifications().Len() > 0 { + sort.Sort(component.GetVerifications()) + text += "## Verifications\n" + for _, reference := range *(component.GetVerifications()) { + text += exportLink(reference.Name, reference.Path) + } + } + } + return filepath.Join(component.exportPath, componentPath), text +} + +func (openControl *OpenControlGitBook) exportComponents() { + componentsExportPath := filepath.Join(openControl.exportPath, "components") + openControl.FSUtil.Mkdirs(componentsExportPath) + for _, component := range openControl.GetAllComponents() { + componentsGitBook := ComponentGitbook{component, componentsExportPath} + componentPath, componentText := componentsGitBook.exportComponent() + ioutil.WriteFile(componentPath, []byte(componentText), 0700) + } +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents_test.go new file mode 100644 index 0000000..ff96111 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookComponents_test.go @@ -0,0 +1,44 @@ +package gitbook + +import ( + "testing" + + "github.com/blang/semver" + "github.com/opencontrol/compliance-masonry/lib/common" + v2 "github.com/opencontrol/compliance-masonry/lib/components/versions/2_0_0" +) + +type componentExportTest struct { + component v2.Component + expectedPath string + expectedText string +} + +var componentExportTests = []componentExportTest{ + // Check that a component is correctly exported + { + v2.Component{ + Name: "Amazon Elastic Compute Cloud", + Key: "EC2", + References: common.GeneralReferences{{}}, + Verifications: common.VerificationReferences{{}}, + Satisfies: nil, + SchemaVersion: semver.MustParse("2.0.0"), + }, + "EC2.md", + "# Amazon Elastic Compute Cloud\n## References\n* []()\n## Verifications\n* []()\n", + }, +} + +func TestExportComponent(t *testing.T) { + for _, example := range componentExportTests { + gitbookComponent := ComponentGitbook{&example.component, ""} + actualPath, actualText := gitbookComponent.exportComponent() + if example.expectedPath != actualPath { + t.Errorf("Expected %s, Actual: %s", example.expectedPath, actualPath) + } + if example.expectedText != actualText { + t.Errorf("Expected %s, Actual: %s", example.expectedText, actualText) + } + } +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries.go new file mode 100644 index 0000000..0bb3710 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries.go @@ -0,0 +1,135 @@ +package gitbook + +import ( + "fmt" + "github.com/opencontrol/compliance-masonry/lib/common" + "io/ioutil" + "path/filepath" + "strings" +) + +// createSubHeading will create a subheading with the passed in string. +func createSubHeading(text string) string { + return fmt.Sprintf("## %s\n", text) +} + +// fileName contains the base file name without the extension. +type fileName struct { + name string +} + +// withExt is a wrapper to wrap adding a extension and returning the final string. +func (f fileName) withExt(ext string) string { + return fmt.Sprintf("%s%s", f.name, ext) +} + +// createFileName creates a file name from multiple strings. Between each string, there will be a hyphen between them. +func createFileName(fileNameParts ...string) fileName { + name := strings.Join(fileNameParts, "-") + return fileName{name: name} +} + +// BuildComponentsSummaries creates summaries the components for the general summary +func (openControl *OpenControlGitBook) buildComponentsSummaries() string { + summary := "\n## Components\n" + for _, component := range openControl.GetAllComponents() { + summary += exportLink(component.GetName(), + filepath.Join("components", createFileName(component.GetKey()).withExt(".md"))) + } + return summary +} + +// buildStandardsSummaries creates summaries the standards for the general summary (via SUMMARY.md) which is the +// returned string. +// In addition, it builds the summary page for the standard-control combination (e.g. NIST-800-53-CM.html for standard +// NIST-800-53 and control family CM). The collection of these summary pages are in the returned map. +func (openControl *OpenControlGitBook) buildStandardsSummaries() (string, *map[string]string) { + var familyFileName fileName + familySummaryMap := make(map[string]string) + + // create the Standards sub-heading for the SUMMARY.md + summary := createSubHeading("Standards") + + // Go through all the standards for the certification. + standardKeys := openControl.GetCertification().GetSortedStandards() + for _, standardKey := range standardKeys { + // Find all the information for a particular standard. + standard, found := openControl.GetStandard(standardKey) + if !found { + continue + } + // Go through all the controls for the certification. + controlKeys := openControl.GetCertification().GetControlKeysFor(standardKey) + for _, controlKey := range controlKeys { + var controlSummary string + controlSummary, familyFileName, familySummaryMap = + openControl.buildStandardsSummary(standardKey, controlKey, standard, familyFileName, + familySummaryMap) + // append summary + summary += controlSummary + } + } + return summary, &familySummaryMap +} + +func (*OpenControlGitBook) buildStandardsSummary(standardKey, controlKey string, standard common.Standard, + oldFamilyFileName fileName, familySummaryMap map[string]string) (string, fileName, map[string]string) { + summary := "" + // format the filename + controlLink := replaceParentheses(createFileName(standardKey, controlKey).withExt(".md")) + + // get the control. + control := standard.GetControl(controlKey) + + // get the control family and name + controlFamily := control.GetFamily() + controlName := control.GetName() + + // concatenate the standard and control family to create a filename. + newFamilyFileName := createFileName(standardKey, controlFamily) + + // create control family headings if we are finally on a new heading file. + if oldFamilyFileName.name != newFamilyFileName.name { + familySummaryMap[newFamilyFileName.name] = createSubHeading(newFamilyFileName.name) + summary += exportLink(controlFamily, + filepath.Join("standards", newFamilyFileName.withExt(".md"))) + oldFamilyFileName = newFamilyFileName + } + + // Add the control name as a link under the control family header. + controlFullName := fmt.Sprintf("%s: %s", controlKey, controlName) + summary += "\t" + exportLink(controlFullName, filepath.Join("standards", controlLink)) + + // add the link to the summary page for that particular standard-control combination + // which will be created later on. + familySummaryMap[newFamilyFileName.name] += exportLink(controlFullName, controlLink) + return summary, oldFamilyFileName, familySummaryMap +} + +func (openControl *OpenControlGitBook) exportFamilyReadMap(familySummaryMap *map[string]string) { + for family, familySummary := range *(familySummaryMap) { + ioutil.WriteFile(filepath.Join(openControl.exportPath, "standards", family+".md"), []byte(familySummary), 0700) + } +} + +func (openControl *OpenControlGitBook) buildMarkdowns() { + if openControl.markdownPath != "" { + openControl.FSUtil.CopyAll(openControl.markdownPath, openControl.exportPath) + } +} + +// buildSummaries creates the general summary +func (openControl *OpenControlGitBook) buildSummaries() error { + openControl.buildMarkdowns() + standardsSummary, familySummaryMap := openControl.buildStandardsSummaries() + componentsSummary := openControl.buildComponentsSummaries() + openControl.exportFamilyReadMap(familySummaryMap) + summary := standardsSummary + componentsSummary + if err := openControl.FSUtil.AppendOrCreate(filepath.Join(openControl.exportPath, "SUMMARY.md"), summary); err != nil { + return err + } + if err := openControl.FSUtil.AppendOrCreate(filepath.Join(openControl.exportPath, "README.md"), summary); err != nil { + return err + } + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries_test.go new file mode 100644 index 0000000..73452ef --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbookSummaries_test.go @@ -0,0 +1,107 @@ +package gitbook + +import ( + "io/ioutil" + "log" + "path/filepath" + "strings" + "testing" + + "github.com/opencontrol/compliance-masonry/lib" + "github.com/opencontrol/compliance-masonry/tools/fs" +) + +type buildComponentsSummariesTest struct { + opencontrolDir string + certificationPath string + exportPath string + expectedSummary string +} + +type buildStandardsSummariesTest struct { + opencontrolDir string + certificationPath string + exportPath string + expectedSummary string + expectedStandardsSummaries string +} + +var buildComponentsSummariesTests = []buildComponentsSummariesTest{ + // Check that the component summary is correctly exported + { + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures"), + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures", "certifications", "LATO.yaml"), + "", + filepath.Join("..", "..", "..", "fixtures", "exports_fixtures", "gitbook_exports", "components_readme.md"), + }, +} + +func TestBuildComponentsSummaries(t *testing.T) { + for _, example := range buildComponentsSummariesTests { + openControlData, _ := lib.LoadData(example.opencontrolDir, example.certificationPath) + openControl := OpenControlGitBook{ + openControlData, + "", + example.exportPath, + fs.OSUtil{}, + } + actualSummary := openControl.buildComponentsSummaries() + data, err := ioutil.ReadFile(example.expectedSummary) + if err != nil { + log.Fatal(err) + } + expectedSummary := string(data) + // Check that the actual and expected summaries are similar + if strings.Replace(actualSummary, "\\", "/", -1) != expectedSummary { + t.Errorf("Expected: `%s`, Actual: `%s`", expectedSummary, actualSummary) + } + } +} + +var buildStandardsSummariesTests = []buildStandardsSummariesTest{ + // Check that a standards summary is correctly exported + { + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures"), + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures", "certifications", "LATO.yaml"), + "", + filepath.Join("..", "..", "..", "fixtures", "exports_fixtures", "gitbook_exports", "standards_readme.md"), + filepath.Join("..", "..", "..", "fixtures", "exports_fixtures", "gitbook_exports", "standards"), + }, +} + +func TestBuildStandardsSummaries(t *testing.T) { + for _, example := range buildStandardsSummariesTests { + openControlData, _ := lib.LoadData(example.opencontrolDir, example.certificationPath) + openControl := OpenControlGitBook{ + openControlData, + "", + example.exportPath, + fs.OSUtil{}, + } + actualSummary, familySummaryMap := openControl.buildStandardsSummaries() + // Check the summary + data, err := ioutil.ReadFile(example.expectedSummary) + if err != nil { + log.Fatal(err) + } + expectedSummary := string(data) + // Check that the actual and expected summaries are similar + if strings.Replace(actualSummary, "\\", "/", -1) != expectedSummary { + t.Errorf("Expected (%s):\n`%s`\n\nActual:\n`%s`", example.expectedSummary, expectedSummary, actualSummary) + } + // Check individual pages + for family, familySummary := range *(familySummaryMap) { + expectedFamilySummaryFile := filepath.Join(example.expectedStandardsSummaries, family+".md") + data, err := ioutil.ReadFile(expectedFamilySummaryFile) + if err != nil { + log.Fatal(err) + } + expectedFamilySummary := string(data) + // Check that the actual and expected summaries are similar + if strings.Replace(familySummary, "\\", "/", -1) != expectedFamilySummary { + t.Errorf("Expected (%s):\n`%s`\n\nActual:\n`%s`", expectedFamilySummaryFile, expectedFamilySummary, familySummary) + } + } + + } +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook_test.go new file mode 100644 index 0000000..30b8fff --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/docs/gitbook/gitbook_test.go @@ -0,0 +1,104 @@ +package gitbook + +import ( + "io/ioutil" + "os" + "path/filepath" + "strings" + "testing" +) + +type exportLinkTest struct { + text string + location string + expected string +} + +type replaceParenthesesTest struct { + text string + expected string +} + +type buildGitbookTest struct { + inputDir string + certificationPath string + markdownPath string + expectedOutputDir string +} + +var exportLinkTests = []exportLinkTest{ + // Check that text and location create the correct output + {"test text", "location", "* [test text](location)\n"}, + // Check that an emtpy text and location create the correct output + {"", "", "* []()\n"}, +} + +func TestExportLink(t *testing.T) { + for _, example := range exportLinkTests { + actual := exportLink(example.text, example.location) + if actual != example.expected { + t.Errorf("Expected: `%s`, Actual: `%s`", example.expected, actual) + } + } +} + +var replaceParenthesesTests = []replaceParenthesesTest{ + // Check that Parentheses are replaced in multiple places + {"NIST-800-53-(1).md", "NIST-800-53-1.md"}, + {"NIST-800-53-(1.md", "NIST-800-53-1.md"}, + {"NIST-()800()-53-1.md", "NIST-800-53-1.md"}, + {"NIST-()800-)53-(1).md", "NIST-800-53-1.md"}, +} + +func TestReplaceParentheses(t *testing.T) { + for _, example := range replaceParenthesesTests { + actual := replaceParentheses(example.text) + if actual != example.expected { + t.Errorf("Expected: `%s`, Actual: `%s`", example.expected, actual) + } + } +} + +var buildGitbookTests = []buildGitbookTest{ + // Check that the gitbook is correctly exported given the fixtures + { + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures"), + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures", "certifications", "LATO.yaml"), + "", + filepath.Join("..", "..", "..", "fixtures", "exports_fixtures", "complete_export"), + }, + // Check that the gitbook is correctly exported given the fixtures with markdowns + { + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures_with_markdown"), + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures_with_markdown", "certifications", "LATO.yaml"), + filepath.Join("..", "..", "..", "fixtures", "opencontrol_fixtures_with_markdown", "markdowns"), + filepath.Join("..", "..", "..", "fixtures", "exports_fixtures", "complete_export_with_markdown"), + }, +} + +func TestBuildGitbook(t *testing.T) { + for _, example := range buildGitbookTests { + tempDir, _ := ioutil.TempDir("", "example") + defer os.RemoveAll(tempDir) + config := Config{ + OpencontrolDir: example.inputDir, + Certification: example.certificationPath, + ExportPath: tempDir, + MarkdownPath: example.markdownPath, + } + + config.BuildGitbook() + // Loop through the expected output to verify it matches the actual output + matches, _ := filepath.Glob(filepath.Join(example.expectedOutputDir, "*", "*")) + for _, expectedfilePath := range matches { + actualFilePath := strings.Replace(expectedfilePath, example.expectedOutputDir, tempDir, -1) + expectedData, _ := ioutil.ReadFile(expectedfilePath) + actualData, _ := ioutil.ReadFile(actualFilePath) + actualDataString := strings.Replace(string(actualData), "\\", "/", -1) + // Verify the expected text is the same as the actual text + if string(expectedData) != actualDataString { + t.Errorf("Expected (%s):\n`%s`\nActual:\n`%s`", expectedfilePath, string(expectedData), string(actualData)) + } + } + } +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/get.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/get.go new file mode 100644 index 0000000..4f24419 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/get.go @@ -0,0 +1,28 @@ +package get + +import ( + "github.com/opencontrol/compliance-masonry/commands/get/resources" + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/lib/opencontrol" +) + +// Get will retrieve all of the resources for the schemas and the resources for all the dependent schemas. +func Get(destination string, configData []byte) error { + // Check the data. + if configData == nil || len(configData) == 0 { + return common.ErrNoDataToParse + } + // Parse it. + parser := opencontrol.YAMLParser{} + configSchema, err := parser.Parse(configData) + if err != nil { + return err + } + // Get Resources + getter := resources.NewVCSAndLocalGetter(parser) + err = resources.GetResources("", destination, configSchema, getter) + if err != nil { + return err + } + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader.go new file mode 100644 index 0000000..dd29dab --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader.go @@ -0,0 +1,29 @@ +package resources + +import ( + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/tools/vcs" +) + +// Downloader is a generic interface for how to download entries. +type Downloader interface { + DownloadRepo(common.RemoteSource, string) error +} + +// NewVCSDownloader is a constructor for downloading entries using VCS methods. +func NewVCSDownloader() Downloader { + return vcsEntryDownloader{vcs.Manager{}} +} + +type vcsEntryDownloader struct { + manager vcs.RepoManager +} + +// DownloadEntry is a implementation for downloading entries using VCS methods. +func (v vcsEntryDownloader) DownloadRepo(entry common.RemoteSource, destination string) error { + err := v.manager.Clone(entry.GetURL(), entry.GetRevision(), destination) + if err != nil { + return err + } + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader_test.go new file mode 100644 index 0000000..6b70545 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/downloader_test.go @@ -0,0 +1,34 @@ +package resources + +import ( + "errors" + . "github.com/onsi/ginkgo" + "github.com/onsi/ginkgo/extensions/table" + commonMocks "github.com/opencontrol/compliance-masonry/lib/common/mocks" + "github.com/opencontrol/compliance-masonry/tools/vcs/mocks" + "github.com/stretchr/testify/assert" +) + +var _ = Describe("Downloader", func() { + Describe("Constructing a new VCEntrySDownloader", func() { + It("should return a downloader of type VCSEntryDownloader", func() { + downloader := NewVCSDownloader() + assert.IsType(GinkgoT(), vcsEntryDownloader{}, downloader) + }) + }) + Describe("Downloading Entry from VCS", func() { + table.DescribeTable("DownloadRepo", func(err error) { + remoteSource := new(commonMocks.RemoteSource) + remoteSource.On("GetURL").Return("https://github.com/opencontrol/notarealrepo") + remoteSource.On("GetRevision").Return("master") + m := new(mocks.RepoManager) + m.On("Clone", remoteSource.GetURL(), remoteSource.GetRevision(), ".").Return(err) + v := vcsEntryDownloader{m} + v.DownloadRepo(remoteSource, ".") + m.AssertExpectations(GinkgoT()) + }, + table.Entry("No error returned", nil), + table.Entry("An error returned", errors.New("an error")), + ) + }) +}) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter.go new file mode 100644 index 0000000..d15f9bc --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter.go @@ -0,0 +1,209 @@ +package resources + +import ( + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/lib/opencontrol" + "github.com/opencontrol/compliance-masonry/tools/constants" + "github.com/opencontrol/compliance-masonry/tools/fs" + "github.com/opencontrol/compliance-masonry/tools/mapset" + "log" + "os" + "path/filepath" +) + +// getAllLocalResources will get try to get the resources that are in the current "source" directory and place them +// in the final "destination" workspace directory. +func getAllLocalResources(source string, destination string, opencontrol common.OpenControl, getter Getter) error { + // Get Certifications + log.Println("Retrieving certifications") + err := getter.GetLocalResources(source, opencontrol.GetCertifications(), destination, + constants.DefaultCertificationsFolder, false, constants.Certifications) + if err != nil { + return err + } + // Get Standards + log.Println("Retrieving standards") + err = getter.GetLocalResources(source, opencontrol.GetStandards(), destination, + constants.DefaultStandardsFolder, false, constants.Standards) + if err != nil { + return err + } + // Get Components + log.Println("Retrieving components") + err = getter.GetLocalResources(source, opencontrol.GetComponents(), destination, + constants.DefaultComponentsFolder, true, constants.Components) + if err != nil { + return err + } + return nil +} + +// getAllRemoteResources will get try to get the dependencies from their respective repositories and put them +// in the final "destination" workspace directory. +func getAllRemoteResources(destination string, opencontrol common.OpenControl, getter Getter) error { + // Get Certifications + log.Println("Retrieving dependent certifications") + err := getter.GetRemoteResources(destination, constants.DefaultCertificationsFolder, + opencontrol.GetCertificationsDependencies()) + if err != nil { + return err + } + // Get Standards + log.Println("Retrieving dependent standards") + err = getter.GetRemoteResources(destination, constants.DefaultStandardsFolder, + opencontrol.GetStandardsDependencies()) + if err != nil { + return err + } + // Get Components + log.Println("Retrieving dependent components") + err = getter.GetRemoteResources(destination, constants.DefaultComponentsFolder, + opencontrol.GetComponentsDependencies()) + if err != nil { + return err + } + return nil +} + +// GetResources will download all the resources that are specified by the schema first by copying the +// local resources then downloading the remote ones and letting their respective schema version handle +// how to get their resources. +func GetResources(source string, destination string, opencontrol common.OpenControl, getter Getter) error { + // Local + err := getAllLocalResources(source, destination, opencontrol, getter) + if err != nil { + return err + } + + // Remote + err = getAllRemoteResources(destination, opencontrol, getter) + if err != nil { + return err + } + return nil +} + +// Getter is an interface for how to get and place local and remote resources. +type Getter interface { + GetLocalResources(source string, resources []string, destination string, subfolder string, recursively bool, + resourceType constants.ResourceType) error + GetRemoteResources(destination string, subfolder string, entries []common.RemoteSource) error +} + +// NewVCSAndLocalGetter constructs a new resource getter with the type of parser to use for the files. +func NewVCSAndLocalGetter(parser opencontrol.SchemaParser) Getter { + return &vcsAndLocalFSGetter{Downloader: NewVCSDownloader(), FSUtil: fs.OSUtil{}, Parser: parser, + ResourceMap: mapset.Init()} +} + +// vcsAndLocalFSGetter is the resource getter that uses VCS for remote resource getting and local file system +// for local resources. +type vcsAndLocalFSGetter struct { + Downloader Downloader + FSUtil fs.Util + ResourceMap mapset.MapSet + Parser opencontrol.SchemaParser +} + +// reserveLocalResourceDestination will attempt to make a unique reservation for a particular type of resource and make +// any necessary filesystem changes so that the resource can moved there. +func (g *vcsAndLocalFSGetter) reserveLocalResourceDestination(resourceType constants.ResourceType, subfolder string, + destination string, resource string) (string, error) { + // Attempt to make a unique reservation for the resource. + if result := g.ResourceMap.Reserve(string(resourceType), resource); !result.Success { + return "", result.Error + } + // Construct the folder of where the resource should be placed. + resourceDestinationFolder := filepath.Join(destination, subfolder) + // Construct the final path for the resource itself once placed in the destination path. + resourceDestination := filepath.Join(resourceDestinationFolder, filepath.Base(resource)) + + log.Printf("Ensuring directory %s exists\n", resourceDestinationFolder) + err := g.FSUtil.Mkdirs(resourceDestinationFolder) + if err != nil { + return "", err + } + return resourceDestination, nil +} + +func (g *vcsAndLocalFSGetter) copyLocalResource(resourceSource string, + resourceDestination string, recursively bool) error { + var err error + log.Printf("Attempting to copy local resource %s into %s\n", resourceSource, resourceDestination) + if recursively { + log.Printf("Copying local resource %s recursively into %s\n", + resourceSource, resourceDestination) + err = g.FSUtil.CopyAll(resourceSource, resourceDestination) + } else { + log.Printf("Copying local resource %s into %s\n", resourceSource, resourceDestination) + err = g.FSUtil.Copy(resourceSource, resourceDestination) + } + if err != nil { + log.Printf("Copying local resources %s failed\n", resourceSource) + return err + } + return nil +} + +// GetLocalResources is the implementation that uses the local file system to get local resources. +func (g *vcsAndLocalFSGetter) GetLocalResources(source string, resources []string, destination string, + subfolder string, recursively bool, resourceType constants.ResourceType) error { + for _, resource := range resources { + // Attempt to reserve a space for the local resource. + resourceDestination, err := g.reserveLocalResourceDestination(resourceType, + subfolder, destination, resource) + if err != nil { + return err + } + + // Find the final path of where the resource is originally located. + resourceSource := filepath.Join(source, resource) + + // Attempt to copy the resource. + err = g.copyLocalResource(resourceSource, resourceDestination, recursively) + if err != nil { + return err + } + + } + return nil +} + +// GetRemoteResources is the implementation that uses VCS to get remote resources. +func (g *vcsAndLocalFSGetter) GetRemoteResources(destination string, subfolder string, + entries []common.RemoteSource) error { + // Create the temporary directory for where to clone all the remote resources. + tempResourcesDir, err := g.FSUtil.TempDir("", "opencontrol-resources") + if err != nil { + return err + } + defer os.RemoveAll(tempResourcesDir) + for _, entry := range entries { + // Create the final path for where to clone. + tempPath := filepath.Join(tempResourcesDir, subfolder, filepath.Base(entry.GetURL())) + + // Clone repo + log.Printf("Attempting to clone %v into %s\n", entry, tempPath) + err := g.Downloader.DownloadRepo(entry, tempPath) + if err != nil { + return err + } + + // Parse the opencontrol.yaml. + configBytes, err := g.FSUtil.OpenAndReadFile(filepath.Join(tempPath, entry.GetConfigFile())) + if err != nil { + return err + } + opencontrol, err := g.Parser.Parse(configBytes) + if err != nil { + return err + } + + // Get the resources specified in the OpenControl YAML + err = GetResources(tempPath, destination, opencontrol, g) + if err != nil { + return err + } + } + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter_test.go new file mode 100644 index 0000000..73bac5c --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/getter_test.go @@ -0,0 +1,186 @@ +package resources + +import ( + "errors" + . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/extensions/table" + resmocks "github.com/opencontrol/compliance-masonry/commands/get/resources/mocks" + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/lib/common/mocks" + "github.com/opencontrol/compliance-masonry/lib/opencontrol" + parserMocks "github.com/opencontrol/compliance-masonry/lib/opencontrol/mocks" + "github.com/opencontrol/compliance-masonry/tools/constants" + "github.com/opencontrol/compliance-masonry/tools/fs" + fsmocks "github.com/opencontrol/compliance-masonry/tools/fs/mocks" + "github.com/opencontrol/compliance-masonry/tools/mapset" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" +) + +var _ = Describe("ResourceGetter", func() { + DescribeTable("GetResources", + func(errs getterErrors) { + dest := "." + // get mocks for the getter and opencontrol yaml. + getter, opencontrol := createMockGetterAndOpenControl(dest, errs) + // Call GetResources + err := GetResources("", dest, opencontrol, getter) + // Make sure that we check the error. + assert.Equal(GinkgoT(), errs.expectedError, err) + }, + // Note: each of the variables not specified by the getterErrors init per entry will default to nil. + // Thus, it's not necessary to be explicit with all of them. + Entry("should return an error when it's unable to get local certifications", getterErrors{ + localCertError: errors.New("Cert error"), + expectedError: errors.New("Cert error"), + }), + Entry("should return an error when it's unable to get local standards", getterErrors{ + localStandardError: errors.New("Standards error"), + expectedError: errors.New("Standards error"), + }), + Entry("should return an error when it's unable to get local components", getterErrors{ + localComponentError: errors.New("Components error"), + expectedError: errors.New("Components error"), + }), + Entry("should return an error when it's unable to get remote certifications", getterErrors{ + remoteCertError: errors.New("Remote cert error"), + expectedError: errors.New("Remote cert error"), + }), + Entry("should return an error when it's unable to get remote standards", getterErrors{ + remoteStandardError: errors.New("Remote standards error"), + expectedError: errors.New("Remote standards error"), + }), + Entry("should return an error when it's unable to get remote components", getterErrors{ + remoteComponentError: errors.New("Remote components error"), + expectedError: errors.New("Remote components error"), + }), + Entry("should return no error when able to get all components", getterErrors{ + // everything is nil. + }), + ) + + Describe("GetLocalResources", func() { + DescribeTable("", func(recursively bool, initMap bool, resources []string, mkdirsError, copyError, + copyAllError, expectedError error) { + getter := vcsAndLocalFSGetter{} + getter.Parser = createMockParser(nil) + getter.FSUtil = createMockFSUtil(nil, nil, mkdirsError, copyError, copyAllError) + getter.ResourceMap = mapset.Init() + err := getter.GetLocalResources("", resources, "dest", "subfolder", + recursively, constants.Standards) + assert.Equal(GinkgoT(), expectedError, err) + }, + Entry("Bad input to reserve", false, true, []string{""}, nil, nil, nil, mapset.ErrEmptyInput), + Entry("Successful recursive copy", true, true, []string{"res"}, nil, nil, nil, nil), + Entry("Successful single copy", false, true, []string{"res"}, nil, nil, nil, nil), + Entry("Failure of single copy", false, true, []string{"res"}, nil, + errors.New("single copy fail"), nil, errors.New("single copy fail")), + Entry("Mkdirs", false, true, []string{"res"}, + errors.New("mkdirs error"), nil, nil, errors.New("mkdirs error")), + ) + }) + + Describe("GetRemoteResources", func() { + DescribeTable("", func(downloadEntryError, tempDirError, openAndReadFileError, + parserError, expectedError error) { + // Override remoteSource with a mock. + remoteSource := createMockRemoteSource() + entries := []common.RemoteSource{remoteSource} + + // Setup getter + getter := vcsAndLocalFSGetter{ResourceMap: mapset.Init()} + + // Override the fsutil with a mock. + getter.FSUtil = createMockFSUtil(tempDirError, openAndReadFileError, nil, nil, nil) + + // Override downloader with a mock. + getter.Downloader = createMockDownloader(remoteSource, downloadEntryError) + + // Override parser with a mock. + getter.Parser = createMockParser(parserError) + + err := getter.GetRemoteResources("dest", "subfolder", entries) + assert.Equal(GinkgoT(), expectedError, err) + + }, + Entry("fail to parse config", nil, nil, nil, errors.New("error parsing"), + errors.New("error parsing")), + Entry("fail to open and read file", nil, nil, errors.New("error reading file"), nil, + errors.New("error reading file")), + Entry("fail to download repo", errors.New("error downloading entry"), nil, nil, nil, + errors.New("error downloading entry")), + Entry("fail to create temp dir", nil, errors.New("error creating tempdir"), nil, nil, + errors.New("error creating tempdir")), + ) + }) +}) + +func createMockFSUtil(tempDirError, openAndReadFileError, mkdirsError, copyError, copyAllError error) fs.Util { + fsUtil := new(fsmocks.Util) + fsUtil.On("TempDir", "", "opencontrol-resources").Return("sometempdir", tempDirError) + data := []byte("schema_version: 1.0.0") + fsUtil.On("OpenAndReadFile", mock.AnythingOfType("string")).Return(data, openAndReadFileError) + fsUtil.On("Mkdirs", mock.AnythingOfType("string")).Return(mkdirsError) + fsUtil.On("Copy", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(copyError) + fsUtil.On("CopyAll", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(copyAllError) + return fsUtil +} + +func createMockDownloader(remoteSource common.RemoteSource, downloadEntryError error) Downloader { + downloader := new(resmocks.Downloader) + downloader.On("DownloadRepo", remoteSource, mock.AnythingOfType("string")).Return(downloadEntryError) + return downloader +} + +func createMockParser(parserError error) opencontrol.SchemaParser { + schema := new(mocks.OpenControl) + + parser := new(parserMocks.SchemaParser) + parser.On("Parse", mock.Anything).Return(schema, parserError) + return parser +} + +func createMockRemoteSource() common.RemoteSource { + // Setup remoteSource mock + remoteSource := new(mocks.RemoteSource) + remoteSource.On("GetURL").Return("") + remoteSource.On("GetConfigFile").Return("") + return remoteSource +} + +func createMockGetterAndOpenControl(destination string, errs getterErrors) (Getter, common.OpenControl) { + // create the common variables used in both the opencontrol mock and getter mock. + var dependentStandards, dependentCertifications, dependentComponents []common.RemoteSource + var certifications, standards, components []string + + // Create the opencontrol mock + opencontrol := new(mocks.OpenControl) + opencontrol.On("GetCertifications").Return(certifications) + opencontrol.On("GetStandards").Return(standards) + opencontrol.On("GetComponents").Return(components) + opencontrol.On("GetCertificationsDependencies").Return(dependentCertifications) + opencontrol.On("GetStandardsDependencies").Return(dependentStandards) + opencontrol.On("GetComponentsDependencies").Return(dependentComponents) + + // Create the getter mock. + getter := new(resmocks.Getter) + getter.On("GetLocalResources", "", certifications, destination, + constants.DefaultCertificationsFolder, false, constants.Certifications).Return(errs.localCertError) + getter.On("GetLocalResources", "", standards, destination, + constants.DefaultStandardsFolder, false, constants.Standards).Return(errs.localStandardError) + getter.On("GetLocalResources", "", components, destination, + constants.DefaultComponentsFolder, true, constants.Components).Return(errs.localComponentError) + getter.On("GetRemoteResources", destination, constants.DefaultCertificationsFolder, + dependentCertifications).Return(errs.remoteCertError) + getter.On("GetRemoteResources", destination, constants.DefaultStandardsFolder, + dependentStandards).Return(errs.remoteStandardError) + getter.On("GetRemoteResources", destination, constants.DefaultComponentsFolder, + dependentStandards).Return(errs.remoteComponentError) + return getter, opencontrol +} + +type getterErrors struct { + localCertError, localStandardError, localComponentError error + remoteCertError, remoteStandardError, remoteComponentError error + expectedError error +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Downloader.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Downloader.go new file mode 100644 index 0000000..3e35113 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Downloader.go @@ -0,0 +1,24 @@ +package mocks + +import "github.com/stretchr/testify/mock" + +import "github.com/opencontrol/compliance-masonry/lib/common" + +// Downloader is an autogenerated mock type for the Downloader type +type Downloader struct { + mock.Mock +} + +// DownloadRepo provides a mock function with given fields: _a0, _a1 +func (_m *Downloader) DownloadRepo(_a0 common.RemoteSource, _a1 string) error { + ret := _m.Called(_a0, _a1) + + var r0 error + if rf, ok := ret.Get(0).(func(common.RemoteSource, string) error); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Error(0) + } + + return r0 +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Getter.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Getter.go new file mode 100644 index 0000000..63485d4 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/mocks/Getter.go @@ -0,0 +1,40 @@ +package mocks + +import ( + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/tools/constants" + "github.com/stretchr/testify/mock" +) + +// Getter is an autogenerated mock type for the Getter type +type Getter struct { + mock.Mock +} + +// GetLocalResources provides a mock function with given fields: source, resources, destination, subfolder, recursively, resourceType +func (_m *Getter) GetLocalResources(source string, resources []string, destination string, subfolder string, recursively bool, resourceType constants.ResourceType) error { + ret := _m.Called(source, resources, destination, subfolder, recursively, resourceType) + + var r0 error + if rf, ok := ret.Get(0).(func(string, []string, string, string, bool, constants.ResourceType) error); ok { + r0 = rf(source, resources, destination, subfolder, recursively, resourceType) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// GetRemoteResources provides a mock function with given fields: destination, subfolder, entries +func (_m *Getter) GetRemoteResources(destination string, subfolder string, entries []common.RemoteSource) error { + ret := _m.Called(destination, subfolder, entries) + + var r0 error + if rf, ok := ret.Get(0).(func(string, string, []common.RemoteSource) error); ok { + r0 = rf(destination, subfolder, entries) + } else { + r0 = ret.Error(0) + } + + return r0 +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/resources_suite_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/resources_suite_test.go new file mode 100644 index 0000000..e6d58f6 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/commands/get/resources/resources_suite_test.go @@ -0,0 +1,13 @@ +package resources + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestResources(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Resources Suite") +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/compliance_masonry_go_suite_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/compliance_masonry_go_suite_test.go new file mode 100644 index 0000000..432ac38 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/compliance_masonry_go_suite_test.go @@ -0,0 +1,13 @@ +package main_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestComplianceMasonryGo(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "ComplianceMasonryGo Suite") +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff.go new file mode 100644 index 0000000..efc0f24 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff.go @@ -0,0 +1,48 @@ +package main + +import ( + "fmt" + "github.com/codegangsta/cli" + "github.com/opencontrol/compliance-masonry/commands/diff" + "github.com/tg/gosortmap" +) + +const ( + diffCommandName = "diff" + diffCommandUsage = "Compute Gap Analysis" +) + +var ( + diffCommandAliases = []string{"d"} + diffCommandFlags = []cli.Flag{ + cli.StringFlag{ + Name: "opencontrols, o", + Value: "opencontrols", + Usage: "Set opencontrols directory", + Destination: &opencontrolDir, + }, + } + diffCommand = cli.Command{ + Name: diffCommandName, + Aliases: diffCommandAliases, + Usage: diffCommandUsage, + Flags: diffCommandFlags, + Action: diffCommandAction, + } +) + +func diffCommandAction(c *cli.Context) error { + config := diff.Config{ + Certification: c.Args().First(), + OpencontrolDir: opencontrolDir, + } + inventory, errs := diff.ComputeGapAnalysis(config) + if errs != nil && len(errs) > 0 { + return cli.NewExitError(cli.NewMultiError(errs...).Error(), 1) + } + fmt.Fprintf(c.App.Writer, "\nNumber of missing controls: %d\n", len(inventory.MissingControlList)) + for _, standardAndControl := range sortmap.ByKey(inventory.MissingControlList) { + fmt.Fprintf(c.App.Writer, "%s\n", standardAndControl.Key) + } + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff_test.go new file mode 100644 index 0000000..0612123 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/diff_test.go @@ -0,0 +1,42 @@ +package main + +import ( + "bytes" + "github.com/codegangsta/cli" + . "github.com/onsi/ginkgo" + "github.com/stretchr/testify/assert" + "path/filepath" +) + +var _ = Describe("Diff", func() { + var ( + app *cli.App + buffer *bytes.Buffer + errBuffer *bytes.Buffer + ) + BeforeEach(func() { + app = NewCLIApp() + buffer = new(bytes.Buffer) + app.Writer = buffer + errBuffer = new(bytes.Buffer) + app.ErrWriter = errBuffer + cli.ErrWriter = errBuffer + cli.OsExiter = func(code int) {} + }) + Describe("Running the diff command", func() { + It("should return an exit error of 1 when running without certification argument.", func() { + err := app.Run([]string{app.Name, "diff"}) + assert.NotNil(GinkgoT(), err) + if assert.IsType(GinkgoT(), new(cli.ExitError), err) { + exitErr, _ := err.(*cli.ExitError) + assert.Equal(GinkgoT(), 1, exitErr.ExitCode()) + assert.Contains(GinkgoT(), errBuffer.String(), "Error: Missing Certification Argument") + } + }) + It("should return return the number a missing controls when given a certification", func() { + err := app.Run([]string{app.Name, "diff", "LATO", "-o", filepath.Join("fixtures", "opencontrol_fixtures")}) + assert.Nil(GinkgoT(), err) + assert.Contains(GinkgoT(), buffer.String(), "Number of missing controls:") + }) + }) +}) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/README.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/README.md new file mode 100644 index 0000000..e7d2ec2 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/README.md @@ -0,0 +1,24 @@ +To learn about Compliance Masonry at a high level: + +* [18F blog post about Compliance Masonry](https://18f.gsa.gov/2016/04/15/compliance-masonry-buildling-a-risk-management-platform/) +* [Compliance Masonry for the Compliance Literate](masonry-for-the-compliance-literate.md) + +![screen shot 2016-04-12 at 12 22 02 pm](assets/data_flow.png) + +## Benefits + +Modern applications are built on existing systems such as S3, EC2, and Cloud Foundry. Documentation for how these underlying systems fulfill NIST controls or PCI SSC Data Security Standards is a prerequisite for receiving authorization to operate (ATO). Unlike most [System Security Plan documentation](http://csrc.nist.gov/publications/nistpubs/800-18-Rev1/sp800-18-Rev1-final.pdf), Compliance Masonry documentation is built using [OpenControl Schema](https://github.com/opencontrol/schemas), a machine readable format for storing compliance documentation. + +Compliance Masonry simplifies the process of certification documentations by providing: + +1. a data store for certifications (ex FISMA), standards (ex NIST-800-53), and the individual system components (ex AWS-EC2). +1. a way for government projects to edit existing files and also add new control files for their applications and organizations. +1. a pipeline for generating clean and standardized certification documentation. + +## Examples + +See [this list of OpenControl project examples](https://github.com/opencontrol/schemas/#full-project-examples). + +--- + +Take a look at the [installation](install.md) instructions if you'd like to run Masonry locally. diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/data_flow.png b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/data_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..e55b3932640fdfdf479dee48ddb1722b0dad89df GIT binary patch literal 188005 zcmeFZcUV)~);CHM6hu^1niN4mq$#}@0qI3R=}n}BUIU>DsE8mSy@Pb5_ZkotX+r3M zgr=0xLJJ9yP;T7ksC(bD&-S~2eb0NJ*FW+s)>?C{G3OX_l;0TB2puhDN^*K~0s;a` zRTV{D0s=As0ReH*SyKER^4h?8{BH+9K|x1VL4ifb!_^kxWJ5rp5|Nlprmts2-@WC( zdgCp-qMX`_W-P0jAElDt)x=o2v+U2V=x_ARpN+c3%9?XweX4C_-}us0=?0ZcfeA&WZ0&TeMH_2haI9F_c!PrA7VTG(hS
+S&KSq6@y_zMWvv~#+e9Pw;R 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 z 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�D9K6d;X)S&r+*1!fR;$owqF)3 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
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. An access control policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the access control policy and associated access controls; and
    5. +
    6. An access control policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the access control policy and associated access controls; and
  • Reviews and updates the current:
    1. -
    2. Access control policy [Assignment: organization-defined frequency]; and
    3. -
    4. Access control procedures [Assignment: organization-defined frequency].
    5. +
    6. Access control policy [Assignment: organization-defined frequency]; and
    7. +
    8. Access control procedures [Assignment: organization-defined frequency].
    @@ -57,16 +57,16 @@ The organization:
  • Notifies account managers:
    1. -
    2. When accounts are no longer required;
    3. -
    4. When users are terminated or transferred; and
    5. -
    6. When individual information system usage or need-to-know changes;
    7. +
    8. When accounts are no longer required;
    9. +
    10. When users are terminated or transferred; and
    11. +
    12. When individual information system usage or need-to-know changes;
  • Authorizes access to the information system based on:
    1. -
    2. A valid access authorization;
    3. -
    4. Intended system usage; and
    5. -
    6. Other attributes as required by the organization or associated missions/business functions;
    7. +
    8. A valid access authorization;
    9. +
    10. Intended system usage; and
    11. +
    12. Other attributes as required by the organization or associated missions/business functions;
  • Reviews accounts for compliance with account management requirements [Assignment: organization-defined frequency]; and
  • Establishes a process for reissuing shared/group account credentials (if deployed) when individuals are removed from the group.
  • @@ -485,11 +485,11 @@ The information system enforces [Assignment: organization-defined mandatory acce
  • Specifies that a subject that has been granted access to information is constrained from doing any of the following;
    1. -
    2. Passing the information to unauthorized subjects or objects;
    3. -
    4. Granting its privileges to other subjects;
    5. -
    6. Changing one or more security attributes on subjects, objects, the information system, or information system components;
    7. -
    8. Choosing the security attributes and attribute values to be associated with newly created or modified objects; or
    9. -
    10. Changing the rules governing access control; and
    11. +
    12. Passing the information to unauthorized subjects or objects;
    13. +
    14. Granting its privileges to other subjects;
    15. +
    16. Changing one or more security attributes on subjects, objects, the information system, or information system components;
    17. +
    18. Choosing the security attributes and attribute values to be associated with newly created or modified objects; or
    19. +
    20. Changing the rules governing access control; and
  • Specifies that [Assignment: organization-defined subjects] may explicitly be granted [Assignment: organization-defined privileges (i.e., they are trusted subjects)] such that they are not limited by some or all of the above constraints.
  • @@ -1164,18 +1164,18 @@ The information system:
  • Displays to users [Assignment: organization-defined system use notification message or banner] before granting access to the system that provides privacy and security notices consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance and states that:
    1. -
    2. Users are accessing a U.S. Government information system;
    3. -
    4. Information system usage may be monitored, recorded, and subject to audit;
    5. -
    6. Unauthorized use of the information system is prohibited and subject to criminal and civil penalties; and
    7. -
    8. Use of the information system indicates consent to monitoring and recording;
    9. +
    10. Users are accessing a U.S. Government information system;
    11. +
    12. Information system usage may be monitored, recorded, and subject to audit;
    13. +
    14. Unauthorized use of the information system is prohibited and subject to criminal and civil penalties; and
    15. +
    16. Use of the information system indicates consent to monitoring and recording;
  • Retains the notification message or banner on the screen until users acknowledge the usage conditions and take explicit actions to log on to or further access the information system; and
  • For publicly accessible systems:
    1. -
    2. Displays system use information [Assignment: organization-defined conditions], before granting further access;
    3. -
    4. Displays references, if any, to monitoring, recording, or auditing that are consistent with privacy accommodations for such systems that generally prohibit those activities; and
    5. -
    6. Includes a description of the authorized uses of the system.
    7. +
    8. Displays system use information [Assignment: organization-defined conditions], before granting further access;
    9. +
    10. Displays references, if any, to monitoring, recording, or auditing that are consistent with privacy accommodations for such systems that generally prohibit those activities; and
    11. +
    12. Includes a description of the authorized uses of the system.
    @@ -1783,10 +1783,10 @@ The organization:
  • Enforces the following restrictions on individuals permitted by the authorizing official to use unclassified mobile devices in facilities containing information systems processing, storing, or transmitting classified information:
    1. -
    2. Connection of unclassified mobile devices to classified information systems is prohibited;
    3. -
    4. Connection of unclassified mobile devices to unclassified information systems requires approval from the authorizing official;
    5. -
    6. Use of internal or external modems or wireless interfaces within the unclassified mobile devices is prohibited; and
    7. -
    8. Unclassified mobile devices and the information stored on those devices are subject to random reviews and inspections by [Assignment: organization-defined security officials], and if classified information is found, the incident handling policy is followed.
    9. +
    10. Connection of unclassified mobile devices to classified information systems is prohibited;
    11. +
    12. Connection of unclassified mobile devices to unclassified information systems requires approval from the authorizing official;
    13. +
    14. Use of internal or external modems or wireless interfaces within the unclassified mobile devices is prohibited; and
    15. +
    16. Unclassified mobile devices and the information stored on those devices are subject to random reviews and inspections by [Assignment: organization-defined security officials], and if classified information is found, the incident handling policy is followed.
  • Restricts the connection of classified mobile devices to classified information systems in accordance with [Assignment: organization-defined security policies].
  • diff --git a/docs/compliance/reference/800-53/AT.md b/docs/compliance/reference/800-53/AT.md index e777ef2..162f17d 100644 --- a/docs/compliance/reference/800-53/AT.md +++ b/docs/compliance/reference/800-53/AT.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A security awareness and training policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the security awareness and training policy and associated security awareness and training controls; and
    5. +
    6. A security awareness and training policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the security awareness and training policy and associated security awareness and training controls; and
  • Reviews and updates the current:
    1. -
    2. Security awareness and training policy [Assignment: organization-defined frequency]; and
    3. -
    4. Security awareness and training procedures [Assignment: organization-defined frequency].
    5. +
    6. Security awareness and training policy [Assignment: organization-defined frequency]; and
    7. +
    8. Security awareness and training procedures [Assignment: organization-defined frequency].
    diff --git a/docs/compliance/reference/800-53/AU.md b/docs/compliance/reference/800-53/AU.md index a5c1fd7..bb694d1 100644 --- a/docs/compliance/reference/800-53/AU.md +++ b/docs/compliance/reference/800-53/AU.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. An audit and accountability policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the audit and accountability policy and associated audit and accountability controls; and
    5. +
    6. An audit and accountability policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the audit and accountability policy and associated audit and accountability controls; and
  • Reviews and updates the current:
    1. -
    2. Audit and accountability policy [Assignment: organization-defined frequency]; and
    3. -
    4. Audit and accountability procedures [Assignment: organization-defined frequency].
    5. +
    6. Audit and accountability policy [Assignment: organization-defined frequency]; and
    7. +
    8. Audit and accountability procedures [Assignment: organization-defined frequency].
    diff --git a/docs/compliance/reference/800-53/CA.md b/docs/compliance/reference/800-53/CA.md index 19d77df..17abd7e 100644 --- a/docs/compliance/reference/800-53/CA.md +++ b/docs/compliance/reference/800-53/CA.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A security assessment and authorization policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the security assessment and authorization policy and associated security assessment and authorization controls; and
    5. +
    6. A security assessment and authorization policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the security assessment and authorization policy and associated security assessment and authorization controls; and
  • Reviews and updates the current:
    1. -
    2. Security assessment and authorization policy [Assignment: organization-defined frequency]; and
    3. -
    4. Security assessment and authorization procedures [Assignment: organization-defined frequency].
    5. +
    6. Security assessment and authorization policy [Assignment: organization-defined frequency]; and
    7. +
    8. Security assessment and authorization procedures [Assignment: organization-defined frequency].
    @@ -37,9 +37,9 @@ The organization:
  • Develops a security assessment plan that describes the scope of the assessment including:
    1. -
    2. Security controls and control enhancements under assessment;
    3. -
    4. Assessment procedures to be used to determine security control effectiveness; and
    5. -
    6. Assessment environment, assessment team, and assessment roles and responsibilities;
    7. +
    8. Security controls and control enhancements under assessment;
    9. +
    10. Assessment procedures to be used to determine security control effectiveness; and
    11. +
    12. Assessment environment, assessment team, and assessment roles and responsibilities;
  • Assesses the security controls in the information system and its environment of operation [Assignment: organization-defined frequency] to determine the extent to which the controls are implemented correctly, operating as intended, and producing the desired outcome with respect to meeting established security requirements;
  • Produces a security assessment report that documents the results of the assessment; and
  • diff --git a/docs/compliance/reference/800-53/CM.md b/docs/compliance/reference/800-53/CM.md index b3b621b..15b3211 100644 --- a/docs/compliance/reference/800-53/CM.md +++ b/docs/compliance/reference/800-53/CM.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A configuration management policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the configuration management policy and associated configuration management controls; and
    5. +
    6. A configuration management policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the configuration management policy and associated configuration management controls; and
  • Reviews and updates the current:
    1. -
    2. Configuration management policy [Assignment: organization-defined frequency]; and
    3. -
    4. Configuration management procedures [Assignment: organization-defined frequency].
    5. +
    6. Configuration management policy [Assignment: organization-defined frequency]; and
    7. +
    8. Configuration management procedures [Assignment: organization-defined frequency].
    @@ -695,10 +695,10 @@ The organization:
  • Develops and documents an inventory of information system components that:
    1. -
    2. Accurately reflects the current information system;
    3. -
    4. Includes all components within the authorization boundary of the information system;
    5. -
    6. Is at the level of granularity deemed necessary for tracking and reporting; and
    7. -
    8. Includes [Assignment: organization-defined information deemed necessary to achieve effective information system component accountability]; and
    9. +
    10. Accurately reflects the current information system;
    11. +
    12. Includes all components within the authorization boundary of the information system;
    13. +
    14. Is at the level of granularity deemed necessary for tracking and reporting; and
    15. +
    16. Includes [Assignment: organization-defined information deemed necessary to achieve effective information system component accountability]; and
  • Reviews and updates the information system component inventory [Assignment: organization-defined frequency].
  • diff --git a/docs/compliance/reference/800-53/CP.md b/docs/compliance/reference/800-53/CP.md index 8bd5781..5406754 100644 --- a/docs/compliance/reference/800-53/CP.md +++ b/docs/compliance/reference/800-53/CP.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A contingency planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the contingency planning policy and associated contingency planning controls; and
    5. +
    6. A contingency planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the contingency planning policy and associated contingency planning controls; and
  • Reviews and updates the current:
    1. -
    2. Contingency planning policy [Assignment: organization-defined frequency]; and
    3. -
    4. Contingency planning procedures [Assignment: organization-defined frequency].
    5. +
    6. Contingency planning policy [Assignment: organization-defined frequency]; and
    7. +
    8. Contingency planning procedures [Assignment: organization-defined frequency].
    @@ -37,12 +37,12 @@ The organization:
  • Develops a contingency plan for the information system that:
    1. -
    2. Identifies essential missions and business functions and associated contingency requirements;
    3. -
    4. Provides recovery objectives, restoration priorities, and metrics;
    5. -
    6. Addresses contingency roles, responsibilities, assigned individuals with contact information;
    7. -
    8. Addresses maintaining essential missions and business functions despite an information system disruption, compromise, or failure;
    9. -
    10. Addresses eventual, full information system restoration without deterioration of the security safeguards originally planned and implemented; and
    11. -
    12. Is reviewed and approved by [Assignment: organization-defined personnel or roles];
    13. +
    14. Identifies essential missions and business functions and associated contingency requirements;
    15. +
    16. Provides recovery objectives, restoration priorities, and metrics;
    17. +
    18. Addresses contingency roles, responsibilities, assigned individuals with contact information;
    19. +
    20. Addresses maintaining essential missions and business functions despite an information system disruption, compromise, or failure;
    21. +
    22. Addresses eventual, full information system restoration without deterioration of the security safeguards originally planned and implemented; and
    23. +
    24. Is reviewed and approved by [Assignment: organization-defined personnel or roles];
  • Distributes copies of the contingency plan to [Assignment: organization-defined key contingency personnel (identified by name and/or by role) and organizational elements];
  • Coordinates contingency planning activities with incident handling activities;
  • diff --git a/docs/compliance/reference/800-53/IA.md b/docs/compliance/reference/800-53/IA.md index f42c61a..c70682e 100644 --- a/docs/compliance/reference/800-53/IA.md +++ b/docs/compliance/reference/800-53/IA.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. An identification and authentication policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the identification and authentication policy and associated identification and authentication controls; and
    5. +
    6. An identification and authentication policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the identification and authentication policy and associated identification and authentication controls; and
  • Reviews and updates the current:
    1. -
    2. Identification and authentication policy [Assignment: organization-defined frequency]; and
    3. -
    4. Identification and authentication procedures [Assignment: organization-defined frequency].
    5. +
    6. Identification and authentication policy [Assignment: organization-defined frequency]; and
    7. +
    8. Identification and authentication procedures [Assignment: organization-defined frequency].
    diff --git a/docs/compliance/reference/800-53/IR.md b/docs/compliance/reference/800-53/IR.md index e826a60..7861c9d 100644 --- a/docs/compliance/reference/800-53/IR.md +++ b/docs/compliance/reference/800-53/IR.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. An incident response policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the incident response policy and associated incident response controls; and
    5. +
    6. An incident response policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the incident response policy and associated incident response controls; and
  • Reviews and updates the current:
    1. -
    2. Incident response policy [Assignment: organization-defined frequency]; and
    3. -
    4. Incident response procedures [Assignment: organization-defined frequency].
    5. +
    6. Incident response policy [Assignment: organization-defined frequency]; and
    7. +
    8. Incident response procedures [Assignment: organization-defined frequency].
    @@ -359,14 +359,14 @@ The organization:
  • Develops an incident response plan that:
    1. -
    2. Provides the organization with a roadmap for implementing its incident response capability;
    3. -
    4. Describes the structure and organization of the incident response capability;
    5. -
    6. Provides a high-level approach for how the incident response capability fits into the overall organization;
    7. -
    8. Meets the unique requirements of the organization, which relate to mission, size, structure, and functions;
    9. -
    10. Defines reportable incidents;
    11. -
    12. Provides metrics for measuring the incident response capability within the organization;
    13. -
    14. Defines the resources and management support needed to effectively maintain and mature an incident response capability; and
    15. -
    16. Is reviewed and approved by [Assignment: organization-defined personnel or roles];
    17. +
    18. Provides the organization with a roadmap for implementing its incident response capability;
    19. +
    20. Describes the structure and organization of the incident response capability;
    21. +
    22. Provides a high-level approach for how the incident response capability fits into the overall organization;
    23. +
    24. Meets the unique requirements of the organization, which relate to mission, size, structure, and functions;
    25. +
    26. Defines reportable incidents;
    27. +
    28. Provides metrics for measuring the incident response capability within the organization;
    29. +
    30. Defines the resources and management support needed to effectively maintain and mature an incident response capability; and
    31. +
    32. Is reviewed and approved by [Assignment: organization-defined personnel or roles];
  • Distributes copies of the incident response plan to [Assignment: organization-defined incident response personnel (identified by name and/or by role) and organizational elements];
  • Reviews the incident response plan [Assignment: organization-defined frequency];
  • diff --git a/docs/compliance/reference/800-53/MA.md b/docs/compliance/reference/800-53/MA.md index 7263fc6..ecf719a 100644 --- a/docs/compliance/reference/800-53/MA.md +++ b/docs/compliance/reference/800-53/MA.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A system maintenance policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the system maintenance policy and associated system maintenance controls; and
    5. +
    6. A system maintenance policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the system maintenance policy and associated system maintenance controls; and
  • Reviews and updates the current:
    1. -
    2. System maintenance policy [Assignment: organization-defined frequency]; and
    3. -
    4. System maintenance procedures [Assignment: organization-defined frequency].
    5. +
    6. System maintenance policy [Assignment: organization-defined frequency]; and
    7. +
    8. System maintenance procedures [Assignment: organization-defined frequency].
    @@ -191,8 +191,8 @@ The organization protects nonlocal maintenance sessions by:
  • Separating the maintenance sessions from other network sessions with the information system by either:
    1. -
    2. Physically separated communications paths; or
    3. -
    4. Logically separated communications paths based upon encryption.
    5. +
    6. Physically separated communications paths; or
    7. +
    8. Logically separated communications paths based upon encryption.
    @@ -262,8 +262,8 @@ The organization:
  • Implements procedures for the use of maintenance personnel that lack appropriate security clearances or are not U.S. citizens, that include the following requirements:
    1. -
    2. Maintenance personnel who do not have needed access authorizations, clearances, or formal access approvals are escorted and supervised during the performance of maintenance and diagnostic activities on the information system by approved organizational personnel who are fully cleared, have appropriate access authorizations, and are technically qualified;
    3. -
    4. Prior to initiating maintenance or diagnostic activities by personnel who do not have needed access authorizations, clearances or formal access approvals, all volatile information storage components within the information system are sanitized and all nonvolatile storage media are removed or physically disconnected from the system and secured; and
    5. +
    6. Maintenance personnel who do not have needed access authorizations, clearances, or formal access approvals are escorted and supervised during the performance of maintenance and diagnostic activities on the information system by approved organizational personnel who are fully cleared, have appropriate access authorizations, and are technically qualified;
    7. +
    8. Prior to initiating maintenance or diagnostic activities by personnel who do not have needed access authorizations, clearances or formal access approvals, all volatile information storage components within the information system are sanitized and all nonvolatile storage media are removed or physically disconnected from the system and secured; and
  • Develops and implements alternate security safeguards in the event an information system component cannot be sanitized, removed, or disconnected from the system.
  • diff --git a/docs/compliance/reference/800-53/MP.md b/docs/compliance/reference/800-53/MP.md index b95b7f9..20c79d1 100644 --- a/docs/compliance/reference/800-53/MP.md +++ b/docs/compliance/reference/800-53/MP.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A media protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the media protection policy and associated media protection controls; and
    5. +
    6. A media protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the media protection policy and associated media protection controls; and
  • Reviews and updates the current:
    1. -
    2. Media protection policy [Assignment: organization-defined frequency]; and
    3. -
    4. Media protection procedures [Assignment: organization-defined frequency].
    5. +
    6. Media protection policy [Assignment: organization-defined frequency]; and
    7. +
    8. Media protection procedures [Assignment: organization-defined frequency].
    diff --git a/docs/compliance/reference/800-53/PE.md b/docs/compliance/reference/800-53/PE.md index 3b6bf58..e8098cb 100644 --- a/docs/compliance/reference/800-53/PE.md +++ b/docs/compliance/reference/800-53/PE.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A physical and environmental protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the physical and environmental protection policy and associated physical and environmental protection controls; and
    5. +
    6. A physical and environmental protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the physical and environmental protection policy and associated physical and environmental protection controls; and
  • Reviews and updates the current:
    1. -
    2. Physical and environmental protection policy [Assignment: organization-defined frequency]; and
    3. -
    4. Physical and environmental protection procedures [Assignment: organization-defined frequency].
    5. +
    6. Physical and environmental protection policy [Assignment: organization-defined frequency]; and
    7. +
    8. Physical and environmental protection procedures [Assignment: organization-defined frequency].
    @@ -89,8 +89,8 @@ The organization:
  • Enforces physical access authorizations at [Assignment: organization-defined entry/exit points to the facility where the information system resides] by;
    1. -
    2. Verifying individual access authorizations before granting access to the facility; and
    3. -
    4. Controlling ingress/egress to the facility using [Selection (one or more): [Assignment: organization-defined physical access control systems/devices]; guards];
    5. +
    6. Verifying individual access authorizations before granting access to the facility; and
    7. +
    8. Controlling ingress/egress to the facility using [Selection (one or more): [Assignment: organization-defined physical access control systems/devices]; guards];
  • Maintains physical access audit logs for [Assignment: organization-defined entry/exit points];
  • Provides [Assignment: organization-defined security safeguards] to control access to areas within the facility officially designated as publicly accessible;
  • diff --git a/docs/compliance/reference/800-53/PL.md b/docs/compliance/reference/800-53/PL.md index 21fe124..5cf1a95 100644 --- a/docs/compliance/reference/800-53/PL.md +++ b/docs/compliance/reference/800-53/PL.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A security planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the security planning policy and associated security planning controls; and
    5. +
    6. A security planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the security planning policy and associated security planning controls; and
  • Reviews and updates the current:
    1. -
    2. Security planning policy [Assignment: organization-defined frequency]; and
    3. -
    4. Security planning procedures [Assignment: organization-defined frequency].
    5. +
    6. Security planning policy [Assignment: organization-defined frequency]; and
    7. +
    8. Security planning procedures [Assignment: organization-defined frequency].
    @@ -37,15 +37,15 @@ The organization:
  • Develops a security plan for the information system that:
    1. -
    2. Is consistent with the organization�s enterprise architecture;
    3. -
    4. Explicitly defines the authorization boundary for the system;
    5. -
    6. Describes the operational context of the information system in terms of missions and business processes;
    7. -
    8. Provides the security categorization of the information system including supporting rationale;
    9. -
    10. Describes the operational environment for the information system and relationships with or connections to other information systems;
    11. -
    12. Provides an overview of the security requirements for the system;
    13. -
    14. Identifies any relevant overlays, if applicable;
    15. -
    16. Describes the security controls in place or planned for meeting those requirements including a rationale for the tailoring decisions; and
    17. -
    18. Is reviewed and approved by the authorizing official or designated representative prior to plan implementation;
    19. +
    20. Is consistent with the organization�s enterprise architecture;
    21. +
    22. Explicitly defines the authorization boundary for the system;
    23. +
    24. Describes the operational context of the information system in terms of missions and business processes;
    25. +
    26. Provides the security categorization of the information system including supporting rationale;
    27. +
    28. Describes the operational environment for the information system and relationships with or connections to other information systems;
    29. +
    30. Provides an overview of the security requirements for the system;
    31. +
    32. Identifies any relevant overlays, if applicable;
    33. +
    34. Describes the security controls in place or planned for meeting those requirements including a rationale for the tailoring decisions; and
    35. +
    36. Is reviewed and approved by the authorizing official or designated representative prior to plan implementation;
  • Distributes copies of the security plan and communicates subsequent changes to the plan to [Assignment: organization-defined personnel or roles];
  • Reviews the security plan for the information system [Assignment: organization-defined frequency];
  • @@ -120,9 +120,9 @@ The organization:
  • Develops an information security architecture for the information system that:
    1. -
    2. Describes the overall philosophy, requirements, and approach to be taken with regard to protecting the confidentiality, integrity, and availability of organizational information;
    3. -
    4. Describes how the information security architecture is integrated into and supports the enterprise architecture; and
    5. -
    6. Describes any information security assumptions about, and dependencies on, external services;
    7. +
    8. Describes the overall philosophy, requirements, and approach to be taken with regard to protecting the confidentiality, integrity, and availability of organizational information;
    9. +
    10. Describes how the information security architecture is integrated into and supports the enterprise architecture; and
    11. +
    12. Describes any information security assumptions about, and dependencies on, external services;
  • Reviews and updates the information security architecture [Assignment: organization-defined frequency] to reflect updates in the enterprise architecture; and
  • Ensures that planned information security architecture changes are reflected in the security plan, the security Concept of Operations (CONOPS), and organizational procurements/acquisitions.
  • diff --git a/docs/compliance/reference/800-53/PM.md b/docs/compliance/reference/800-53/PM.md index aad81ee..441b337 100644 --- a/docs/compliance/reference/800-53/PM.md +++ b/docs/compliance/reference/800-53/PM.md @@ -13,10 +13,10 @@ The organization:
  • Develops and disseminates an organization-wide information security program plan that:
    1. -
    2. Provides an overview of the requirements for the security program and a description of the security program management controls and common controls in place or planned for meeting those requirements;
    3. -
    4. Includes the identification and assignment of roles, responsibilities, management commitment, coordination among organizational entities, and compliance;
    5. -
    6. Reflects coordination among organizational entities responsible for the different aspects of information security (i.e., technical, physical, personnel, cyber-physical); and
    7. -
    8. Is approved by a senior official with responsibility and accountability for the risk being incurred to organizational operations (including mission, functions, image, and reputation), organizational assets, individuals, other organizations, and the Nation;
    9. +
    10. Provides an overview of the requirements for the security program and a description of the security program management controls and common controls in place or planned for meeting those requirements;
    11. +
    12. Includes the identification and assignment of roles, responsibilities, management commitment, coordination among organizational entities, and compliance;
    13. +
    14. Reflects coordination among organizational entities responsible for the different aspects of information security (i.e., technical, physical, personnel, cyber-physical); and
    15. +
    16. Is approved by a senior official with responsibility and accountability for the risk being incurred to organizational operations (including mission, functions, image, and reputation), organizational assets, individuals, other organizations, and the Nation;
  • Reviews the organization-wide information security program plan [Assignment: organization-defined frequency];
  • Updates the plan to address organizational changes and problems identified during plan implementation or security control assessments; and
  • @@ -63,9 +63,9 @@ The organization:
  • Implements a process for ensuring that plans of action and milestones for the security program and associated organizational information systems:
    1. -
    2. Are developed and maintained;
    3. -
    4. Document the remedial information security actions to adequately respond to risk to organizational operations and assets, individuals, other organizations, and the Nation; and
    5. -
    6. Are reported in accordance with OMB FISMA reporting requirements.
    7. +
    8. Are developed and maintained;
    9. +
    10. Document the remedial information security actions to adequately respond to risk to organizational operations and assets, individuals, other organizations, and the Nation; and
    11. +
    12. Are reported in accordance with OMB FISMA reporting requirements.
  • Reviews plans of action and milestones for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions.
  • @@ -199,8 +199,8 @@ The organization:
  • Implements a process for ensuring that organizational plans for conducting security testing, training, and monitoring activities associated with organizational information systems:
    1. -
    2. Are developed and maintained; and
    3. -
    4. Continue to be executed in a timely manner;
    5. +
    6. Are developed and maintained; and
    7. +
    8. Continue to be executed in a timely manner;
  • Reviews testing, training, and monitoring plans for consistency with the organizational risk management strategy and organization-wide priorities for risk response actions.
  • diff --git a/docs/compliance/reference/800-53/PS.md b/docs/compliance/reference/800-53/PS.md index c282312..20f7bbe 100644 --- a/docs/compliance/reference/800-53/PS.md +++ b/docs/compliance/reference/800-53/PS.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A personnel security policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the personnel security policy and associated personnel security controls; and
    5. +
    6. A personnel security policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the personnel security policy and associated personnel security controls; and
  • Reviews and updates the current:
    1. -
    2. Personnel security policy [Assignment: organization-defined frequency]; and
    3. -
    4. Personnel security procedures [Assignment: organization-defined frequency].
    5. +
    6. Personnel security policy [Assignment: organization-defined frequency]; and
    7. +
    8. Personnel security procedures [Assignment: organization-defined frequency].
    @@ -166,8 +166,8 @@ The organization:
  • Ensures that individuals requiring access to organizational information and information systems:
    1. -
    2. Sign appropriate access agreements prior to being granted access; and
    3. -
    4. Re-sign access agreements to maintain access to organizational information systems when access agreements have been updated or [Assignment: organization-defined frequency].
    5. +
    6. Sign appropriate access agreements prior to being granted access; and
    7. +
    8. Re-sign access agreements to maintain access to organizational information systems when access agreements have been updated or [Assignment: organization-defined frequency].
    diff --git a/docs/compliance/reference/800-53/RA.md b/docs/compliance/reference/800-53/RA.md index 233a713..ba58921 100644 --- a/docs/compliance/reference/800-53/RA.md +++ b/docs/compliance/reference/800-53/RA.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A risk assessment policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the risk assessment policy and associated risk assessment controls; and
    5. +
    6. A risk assessment policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the risk assessment policy and associated risk assessment controls; and
  • Reviews and updates the current:
    1. -
    2. Risk assessment policy [Assignment: organization-defined frequency]; and
    3. -
    4. Risk assessment procedures [Assignment: organization-defined frequency].
    5. +
    6. Risk assessment policy [Assignment: organization-defined frequency]; and
    7. +
    8. Risk assessment procedures [Assignment: organization-defined frequency].
    @@ -70,9 +70,9 @@ The organization:
  • Employs vulnerability scanning tools and techniques that facilitate interoperability among tools and automate parts of the vulnerability management process by using standards for:
    1. -
    2. Enumerating platforms, software flaws, and improper configurations;
    3. -
    4. Formatting checklists and test procedures; and
    5. -
    6. Measuring vulnerability impact;
    7. +
    8. Enumerating platforms, software flaws, and improper configurations;
    9. +
    10. Formatting checklists and test procedures; and
    11. +
    12. Measuring vulnerability impact;
  • Analyzes vulnerability scan reports and results from security control assessments;
  • Remediates legitimate vulnerabilities [Assignment: organization-defined response times] in accordance with an organizational assessment of risk; and
  • diff --git a/docs/compliance/reference/800-53/SA.md b/docs/compliance/reference/800-53/SA.md index a02dee5..d805159 100644 --- a/docs/compliance/reference/800-53/SA.md +++ b/docs/compliance/reference/800-53/SA.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A system and services acquisition policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the system and services acquisition policy and associated system and services acquisition controls; and
    5. +
    6. A system and services acquisition policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the system and services acquisition policy and associated system and services acquisition controls; and
  • Reviews and updates the current:
    1. -
    2. System and services acquisition policy [Assignment: organization-defined frequency]; and
    3. -
    4. System and services acquisition procedures [Assignment: organization-defined frequency].
    5. +
    6. System and services acquisition policy [Assignment: organization-defined frequency]; and
    7. +
    8. System and services acquisition procedures [Assignment: organization-defined frequency].
    @@ -201,16 +201,16 @@ The organization:
  • Obtains administrator documentation for the information system, system component, or information system service that describes:
    1. -
    2. Secure configuration, installation, and operation of the system, component, or service;
    3. -
    4. Effective use and maintenance of security functions/mechanisms; and
    5. -
    6. Known vulnerabilities regarding configuration and use of administrative (i.e., privileged) functions;
    7. +
    8. Secure configuration, installation, and operation of the system, component, or service;
    9. +
    10. Effective use and maintenance of security functions/mechanisms; and
    11. +
    12. Known vulnerabilities regarding configuration and use of administrative (i.e., privileged) functions;
  • Obtains user documentation for the information system, system component, or information system service that describes:
    1. -
    2. User-accessible security functions/mechanisms and how to effectively use those security functions/mechanisms;
    3. -
    4. Methods for user interaction, which enables individuals to use the system, component, or service in a more secure manner; and
    5. -
    6. User responsibilities in maintaining the security of the system, component, or service;
    7. +
    8. User-accessible security functions/mechanisms and how to effectively use those security functions/mechanisms;
    9. +
    10. Methods for user interaction, which enables individuals to use the system, component, or service in a more secure manner; and
    11. +
    12. User responsibilities in maintaining the security of the system, component, or service;
  • Documents attempts to obtain information system, system component, or information system service documentation when such documentation is either unavailable or nonexistent and takes [Assignment: organization-defined actions] in response;
  • Protects documentation as required, in accordance with the risk management strategy; and
  • @@ -728,10 +728,10 @@ The organization:
  • Requires the developer of the information system, system component, or information system service to follow a documented development process that:
    1. -
    2. Explicitly addresses security requirements;
    3. -
    4. Identifies the standards and tools used in the development process;
    5. -
    6. Documents the specific tool options and tool configurations used in the development process; and
    7. -
    8. Documents, manages, and ensures the integrity of changes to the process and/or tools used in development; and
    9. +
    10. Explicitly addresses security requirements;
    11. +
    12. Identifies the standards and tools used in the development process;
    13. +
    14. Documents the specific tool options and tool configurations used in the development process; and
    15. +
    16. Documents, manages, and ensures the integrity of changes to the process and/or tools used in development; and
  • Reviews the development process, standards, tools, and tool options/configurations [Assignment: organization-defined frequency] to determine if the process, standards, tools, and tool options/configurations selected and employed can satisfy [Assignment: organization-defined security requirements].
  • diff --git a/docs/compliance/reference/800-53/SC.md b/docs/compliance/reference/800-53/SC.md index 20d0a6f..90bb8d0 100644 --- a/docs/compliance/reference/800-53/SC.md +++ b/docs/compliance/reference/800-53/SC.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A system and communications protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the system and communications protection policy and associated system and communications protection controls; and
    5. +
    6. A system and communications protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the system and communications protection policy and associated system and communications protection controls; and
  • Reviews and updates the current:
    1. -
    2. System and communications protection policy [Assignment: organization-defined frequency]; and
    3. -
    4. System and communications protection procedures [Assignment: organization-defined frequency].
    5. +
    6. System and communications protection policy [Assignment: organization-defined frequency]; and
    7. +
    8. System and communications protection procedures [Assignment: organization-defined frequency].
    diff --git a/docs/compliance/reference/800-53/SI.md b/docs/compliance/reference/800-53/SI.md index 1e125c5..41b7d4c 100644 --- a/docs/compliance/reference/800-53/SI.md +++ b/docs/compliance/reference/800-53/SI.md @@ -13,14 +13,14 @@ The organization:
  • Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]:
    1. -
    2. A system and information integrity policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    3. -
    4. Procedures to facilitate the implementation of the system and information integrity policy and associated system and information integrity controls; and
    5. +
    6. A system and information integrity policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and
    7. +
    8. Procedures to facilitate the implementation of the system and information integrity policy and associated system and information integrity controls; and
  • Reviews and updates the current:
    1. -
    2. System and information integrity policy [Assignment: organization-defined frequency]; and
    3. -
    4. System and information integrity procedures [Assignment: organization-defined frequency].
    5. +
    6. System and information integrity policy [Assignment: organization-defined frequency]; and
    7. +
    8. System and information integrity procedures [Assignment: organization-defined frequency].
    @@ -117,8 +117,8 @@ The organization:
  • Configures malicious code protection mechanisms to:
    1. -
    2. Perform periodic scans of the information system [Assignment: organization-defined frequency] and real-time scans of files from external sources at [Selection (one or more); endpoint; network entry/exit points] as the files are downloaded, opened, or executed in accordance with organizational security policy; and
    3. -
    4. [Selection (one or more): block malicious code; quarantine malicious code; send alert to administrator; [Assignment: organization-defined action]] in response to malicious code detection; and
    5. +
    6. Perform periodic scans of the information system [Assignment: organization-defined frequency] and real-time scans of files from external sources at [Selection (one or more); endpoint; network entry/exit points] as the files are downloaded, opened, or executed in accordance with organizational security policy; and
    7. +
    8. [Selection (one or more): block malicious code; quarantine malicious code; send alert to administrator; [Assignment: organization-defined action]] in response to malicious code detection; and
  • Addresses the receipt of false positives during malicious code detection and eradication and the resulting potential impact on the availability of the information system.
  • @@ -249,15 +249,15 @@ The organization:
  • Monitors the information system to detect:
    1. -
    2. Attacks and indicators of potential attacks in accordance with [Assignment: organization-defined monitoring objectives]; and
    3. -
    4. Unauthorized local, network, and remote connections;
    5. +
    6. Attacks and indicators of potential attacks in accordance with [Assignment: organization-defined monitoring objectives]; and
    7. +
    8. Unauthorized local, network, and remote connections;
  • Identifies unauthorized use of the information system through [Assignment: organization-defined techniques and methods];
  • Deploys monitoring devices:
    1. -
    2. Strategically within the information system to collect organization-determined essential information; and
    3. -
    4. At ad hoc locations within the system to track specific types of transactions of interest to the organization;
    5. +
    6. Strategically within the information system to collect organization-determined essential information; and
    7. +
    8. At ad hoc locations within the system to track specific types of transactions of interest to the organization;
  • Protects information obtained from intrusion-monitoring tools from unauthorized access, modification, and deletion;
  • Heightens the level of information system monitoring activity whenever there is an indication of increased risk to organizational operations and assets, individuals, other organizations, or the Nation based on law enforcement information, intelligence information, or other credible sources of information;
  • diff --git a/docs/generator/generator.go b/docs/generator/generator.go index 095f611..3d9ec12 100644 --- a/docs/generator/generator.go +++ b/docs/generator/generator.go @@ -19,6 +19,8 @@ import ( const componentPath = "./components" const xmlStandardPath = "./data/800-53-controls.xml" const tmplPath = "./tmpl/80053.test.tmpl" + +// Mount point within container const markdownOutputPath = "./800-53" func doesExist(path string) bool { diff --git a/docs/generator/tmpl/80053.test.tmpl b/docs/generator/tmpl/80053.test.tmpl index fbf49d4..66d4fd4 100644 --- a/docs/generator/tmpl/80053.test.tmpl +++ b/docs/generator/tmpl/80053.test.tmpl @@ -5,13 +5,14 @@ description: "{{ $family }} reference" keywords: "standards, compliance, security, 800-53, {{ $family }}" --- - {{- range $controls -}} From 9c64019d394c080c1f900b3eab6dc0d20bfff558 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 20:15:18 -0400 Subject: [PATCH 07/13] remove .dockerignore --- docs/generator/.dockerignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/generator/.dockerignore diff --git a/docs/generator/.dockerignore b/docs/generator/.dockerignore deleted file mode 100644 index f3c7a7c..0000000 --- a/docs/generator/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -Makefile From 7c8df6b51397cf4672e4c12ce1ba9aa66ecf8a74 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 20:15:33 -0400 Subject: [PATCH 08/13] add tests and comments --- docs/generator/generator.go | 34 ++++++--- docs/generator/generator_test.go | 116 +++++++++++++++++++++++++++++++ docs/generator/types.go | 9 +++ 3 files changed, 151 insertions(+), 8 deletions(-) create mode 100644 docs/generator/generator_test.go diff --git a/docs/generator/generator.go b/docs/generator/generator.go index 3d9ec12..6fc2e66 100644 --- a/docs/generator/generator.go +++ b/docs/generator/generator.go @@ -23,6 +23,7 @@ const tmplPath = "./tmpl/80053.test.tmpl" // Mount point within container const markdownOutputPath = "./800-53" +// doesExist checks path existence func doesExist(path string) bool { if _, err := os.Stat(path); err != nil { if os.IsNotExist(err) { @@ -33,10 +34,12 @@ func doesExist(path string) bool { return true } +// parseComponents parses OpenControl component.yml files func parseComponents(rootDir string) ([]cmcommon.Component, error) { var components []cmcommon.Component var filePaths []string + // Walk component directories componentDirs, _ := ioutil.ReadDir(rootDir) for _, root := range componentDirs { if err := filepath.Walk(path.Join(rootDir, root.Name()), func(path string, f os.FileInfo, err error) error { @@ -56,6 +59,7 @@ func parseComponents(rootDir string) ([]cmcommon.Component, error) { return nil, errors.New("No component files were parsed") } + // Load component.yml files in to type for _, file := range filePaths { component, err := cmcomponents.Load(file) if err != nil { @@ -67,14 +71,10 @@ func parseComponents(rootDir string) ([]cmcommon.Component, error) { return components, nil } -func parseStandard(standardFilePath string) (XMLStandard, error) { +// parseStandard parses NIST 800-53 standard +func parseStandard(data []byte) (XMLStandard, error) { var standard XMLStandard - data, err := ioutil.ReadFile(standardFilePath) - if err != nil { - return standard, err - } - if err := xml.Unmarshal(data, &standard); err != nil { return standard, err } @@ -82,11 +82,14 @@ func parseStandard(standardFilePath string) (XMLStandard, error) { return standard, nil } +// iterateControls recursively iterates over NIST 800-53 controls and +// identifies matching component narratives func iterateControls(family string, familyTitle string, controls []XMLControl, components []cmcommon.Component) ([]MarkdownTemplateControl, string) { var markdownTemplateControls []MarkdownTemplateControl var abbrev string for _, control := range controls { + // Ignore withdrawn controls if control.Family == family && len(control.Withdrawn.IncorporatedInto) <= 0 { if abbrev == "" { abbrev = strings.Split(control.Number, "-")[0] @@ -100,6 +103,7 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, c IsControlEnhancement: false, } + // Identify matching component narratives for _, component := range components { satisfies := component.GetAllSatisfies() for _, satisfy := range satisfies { @@ -117,6 +121,7 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, c markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControl) + // Convert XMLControlEnhancements to XMLControls for recursion xmlControlEnhancements := make([]XMLControl, len(control.ControlEnhancements)) for i, enhancement := range control.ControlEnhancements { xmlControlEnhancements[i] = XMLControl{ @@ -136,6 +141,7 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, c return markdownTemplateControls, abbrev } +// generateMarkdownFiles generates markdown files for each NIST 800-53 family func generateMarkdownFiles(standard XMLStandard, components []cmcommon.Component) error { // Get families var families []string @@ -170,12 +176,20 @@ func generateMarkdownFiles(standard XMLStandard, components []cmcommon.Component if err := tmpl.Execute(f, markdownTemplateMap); err != nil { return err } - } return nil } +func readFile(filePath string) ([]byte, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + + return data, nil +} + func main() { if !doesExist(componentPath) { log.Fatalf("Component directory path %s does not exist", componentPath) @@ -187,7 +201,11 @@ func main() { log.Fatalf("Markdown output path %s does not exist", markdownOutputPath) } - standard, err := parseStandard(xmlStandardPath) + xmlStandardData, err := readFile(xmlStandardPath) + if err != nil { + log.Fatalf("Error reading NIST 800-53 standard XML: %v", err) + } + standard, err := parseStandard(xmlStandardData) if err != nil { log.Fatalf("Error parsing standard: %v", err) } diff --git a/docs/generator/generator_test.go b/docs/generator/generator_test.go new file mode 100644 index 0000000..d578df8 --- /dev/null +++ b/docs/generator/generator_test.go @@ -0,0 +1,116 @@ +package main + +import ( + "encoding/xml" + "reflect" + "testing" +) + +func Test_doesExist(t *testing.T) { + type args struct { + path string + } + tests := []struct { + name string + args args + want bool + }{ + {"exsts", args{"./data/800-53-controls.xml"}, true}, + {"doesNotExist", args{"./data/800-53-controls.xml1"}, false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := doesExist(tt.args.path); got != tt.want { + t.Errorf("doesExist() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseStandard(t *testing.T) { + type args struct { + data []byte + } + + xmlStandard := XMLStandard{ + Controls: []XMLControl{ + { + Family: "ACCESS CONTROL", + Number: "AC-1", + Title: "ACCESS CONTROL POLICY AND PROCEDURES", + Priority: "P1", + BaselineImpact: []string{"LOW", "MODERATE", "HIGH"}, + }, + }, + XMLName: xml.Name{ + Space: "http://scap.nist.gov/schema/sp800-53/feed/2.0", + Local: "controls", + }, + } + + sampleXML := ` + + + + ACCESS CONTROL + AC-1 + ACCESS CONTROL POLICY AND PROCEDURES + P1 + LOW + MODERATE + HIGH + + +` + + tests := []struct { + name string + args args + want XMLStandard + wantErr bool + }{ + {"parseStandard", args{[]byte(sampleXML)}, xmlStandard, false}, + {"missingStandardfile", args{}, XMLStandard{}, true}, + {"nonXMLStandard", args{[]byte("fake")}, XMLStandard{}, true}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := parseStandard(tt.args.data) + if (err != nil) != tt.wantErr { + t.Errorf("parseStandard() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseStandard() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_readFile(t *testing.T) { + type args struct { + filePath string + } + tests := []struct { + name string + args args + wantErr bool + }{ + {"readFile", args{"./data/800-53-controls.xml"}, false}, + {"errorReadingFile", args{}, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err := readFile(tt.args.filePath) + if (err != nil) != tt.wantErr { + t.Errorf("readFile() error = %v, wantErr %v", err, tt.wantErr) + return + } + }) + } +} diff --git a/docs/generator/types.go b/docs/generator/types.go index 5801e11..6a3a415 100644 --- a/docs/generator/types.go +++ b/docs/generator/types.go @@ -2,11 +2,13 @@ package main import "encoding/xml" +// XMLStandard defines the NIST 800-53 XML root type XMLStandard struct { Controls []XMLControl `xml:"control"` XMLName xml.Name `xml:"http://scap.nist.gov/schema/sp800-53/feed/2.0 controls"` } +// XMLControl defines the NIST 800-53 control type XMLControl struct { Family string `xml:"family"` Number string `xml:"number"` @@ -20,21 +22,25 @@ type XMLControl struct { Withdrawn XMLWithdrawn `xml:"withdrawn"` } +// XMLWithdrawn defines the withdrawn type type XMLWithdrawn struct { IncorporatedInto []string `xml:"incorporated-into"` } +// XMLStatement defines the statement type type XMLStatement struct { Number string `xml:"number"` Description string `xml:"description"` Statements []XMLStatement `xml:"statement"` } +// XMLSupplementalGuidance defines the supplemental guidance type type XMLSupplementalGuidance struct { Description string `xml:"description"` Related []string `xml:"related"` } +// XMLControlEnhancement defines the control enhancement type type XMLControlEnhancement struct { Number string `xml:"number"` Title string `xml:"title"` @@ -43,11 +49,13 @@ type XMLControlEnhancement struct { Statements []XMLStatement `xml:"statement"` } +// XMLReference defines the reference type type XMLReference struct { Item string `xml:"item"` Link string `xml:"href,attr"` } +// MarkdownTemplateControl defines the markdown template file control type type MarkdownTemplateControl struct { Family string Number string @@ -57,6 +65,7 @@ type MarkdownTemplateControl struct { Components []MarkdownTemplateComponent } +// MarkdownTemplateComponent defines the markdown template file component type type MarkdownTemplateComponent struct { Name string ImplementationStatuses []string From 9afaec10e42793811283b9bceb8bc48a7b6766a0 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 23:47:43 -0400 Subject: [PATCH 09/13] update docs --- docs/Makefile | 9 +- docs/compliance/reference/800-53/AC.md | 1320 +++++++++++++++++------- docs/compliance/reference/800-53/AT.md | 44 +- docs/compliance/reference/800-53/AU.md | 1107 ++++++++++++++++---- docs/compliance/reference/800-53/CA.md | 120 +-- docs/compliance/reference/800-53/CM.md | 688 +++++++++--- docs/compliance/reference/800-53/CP.md | 270 ++--- docs/compliance/reference/800-53/IA.md | 755 ++++++++++---- docs/compliance/reference/800-53/IR.md | 170 ++- docs/compliance/reference/800-53/MA.md | 120 +-- docs/compliance/reference/800-53/MP.md | 104 +- docs/compliance/reference/800-53/PE.md | 238 ++--- docs/compliance/reference/800-53/PL.md | 36 +- docs/compliance/reference/800-53/PM.md | 48 +- docs/compliance/reference/800-53/PS.md | 50 +- docs/compliance/reference/800-53/RA.md | 145 ++- docs/compliance/reference/800-53/SA.md | 468 ++++----- docs/compliance/reference/800-53/SC.md | 756 +++++++------- docs/compliance/reference/800-53/SI.md | 487 ++++----- docs/generator/Gopkg.lock | 8 +- docs/generator/generator.go | 30 +- docs/generator/tmpl/80053.test.tmpl | 65 -- docs/generator/tmpl/80053.tmpl | 253 ++--- docs/generator/tmpl/nist80053.html | 197 ---- docs/generator/types.go | 2 + 25 files changed, 4493 insertions(+), 2997 deletions(-) delete mode 100644 docs/generator/tmpl/80053.test.tmpl delete mode 100644 docs/generator/tmpl/nist80053.html diff --git a/docs/Makefile b/docs/Makefile index 755c698..10adc22 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,6 +1,6 @@ .PHONY: vendor -default: run +default: generate vendor: cd generator; \ @@ -18,3 +18,10 @@ build: run: build docker run -it --rm -v "$$PWD/compliance/reference/800-53":/800-53 docker/compliance-doc-generator:latest rm -rf generator/components + +generate: run + cp -r compliance $$HOME/Development/docker.github.io/ + +clean: + docker rmi -f docker/compliance-doc-generator:latest + rm -rf generator/components diff --git a/docs/compliance/reference/800-53/AC.md b/docs/compliance/reference/800-53/AC.md index bdce548..aab8d4e 100644 --- a/docs/compliance/reference/800-53/AC.md +++ b/docs/compliance/reference/800-53/AC.md @@ -41,6 +41,32 @@ The organization: +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of +this control, one can control which users and teams are allowed to +create and manipulate Docker Enterprise Edition resources. By default, no one +can make changes to the cluster. Permissions can be granted and +managed to enforce fine-grained access control. Supporting +documentation can found at the following resources: + +UCP: +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ + +DTR: +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ + +
    +
    + ## AC-2 Account Management **Description:** @@ -89,13 +115,29 @@ The organization: -## AC-2 (1) Automated System Account Management +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, an external identity management system (such as Microsoft's +Active Directory or an LDAP endpoint) can be configured as mandated by +this control and can be integrated with Docker Enterprise Edition. +Supporting documentation can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ +
    +
    + +### AC-2 (1) Automated System Account Management **Description:** The organization employs automated mechanisms to support the management of information system accounts. -
      -
    **Control Information:** @@ -124,13 +166,47 @@ The organization employs automated mechanisms to support the management of infor -## AC-2 (2) Removal Of Temporary / Emergency Accounts +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, supporting documentation for managing users and teams can +found at the following resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-users/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-teams/ +
    +
    +To assist the organization in meeting the requirements of this +control, supporting documentation for managing users and teams can +found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/create-and-manage-users/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/create-and-manage-teams/ +
    +
    +To assist the organization in meeting the requirements of this +control, an external identity management system (such as Microsoft's +Active Directory or an LDAP endpoint) can be configured as mandated by +this control and can be integrated with Docker Enterprise Edition. +Supporting documentation can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ +
    +
    + +### AC-2 (2) Removal Of Temporary / Emergency Accounts **Description:** The information system automatically [Selection: removes; disables] temporary and emergency accounts after [Assignment: organization-defined time period for each type of account]. -
      -
    **Control Information:** @@ -149,13 +225,30 @@ The information system automatically [Selection: removes; disables] temporary an -## AC-2 (3) Disable Inactive Accounts +**Implemenation Details:** + + + +
    +
    +Using Docker Enterprise Edition's LDAP integration capabilities, one +can disable and/or remove temporary and emergency accounts in a +connected directory service (such as Active Directory) after an +organization-defined time period. When a user is removed from LDAP, +that user becomes inactive after the LDAP synchronization runs. +Supporting documentation can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ +
    +
    + +### AC-2 (3) Disable Inactive Accounts **Description:** The information system automatically disables inactive accounts after [Assignment: organization-defined time period]. -
      -
    **Control Information:** @@ -174,13 +267,29 @@ The information system automatically disables inactive accounts after [Assignmen -## AC-2 (4) Automated Audit Actions +**Implemenation Details:** + + + +
    +
    +Using Docker Enterprise Edition's LDAP integration capabilities, one +can automatically disable inactive accounts in a connected directory +service (such as Active Directory). When a user is removed from LDAP, +that user becomes inactive after the LDAP synchronization runs. +Supporting documentation can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ +
    +
    + +### AC-2 (4) Automated Audit Actions **Description:** The information system automatically audits account creation, modification, enabling, disabling, and removal actions, and notifies [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** @@ -199,13 +308,35 @@ The information system automatically audits account creation, modification, enab -## AC-2 (5) Inactivity Logout +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition logs various authentication and +authorization events to standard log files. One can configure Docker +Enterprise Edition to direct these event logs to a remote logging +service such as an Elasticsearch, Logstash and Kibana (ELK) stack and +subsequently alert on specific event types. When integrating Docker +Enterprise Edition with LDAP, one can refer the the directory +service's logging mechanisms for auditing the events defined by this +control. Supporting documentation can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AC-2 (5) Inactivity Logout **Description:** The organization requires that users log out when [Assignment: organization-defined time-period of expected inactivity or description of when to log out]. -
      -
    **Control Information:** @@ -224,19 +355,35 @@ The organization requires that users log out when [Assignment: organization-defi -## AC-2 (6) Dynamic Privilege Management +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, Docker Enterprise Edition can be configured to enforce automated +session termination of users after an organization-defined time period +of inactivity. By default, the initial lifetime of a user's session +is set to 72 hours and the renewal session for a user's session is +set to 24 hours. These values can both be changed in the "Auth" +section of the "Admin Settings" in Universal Control Plane. +
    +
    + +### AC-2 (6) Dynamic Privilege Management **Description:** The information system implements the following dynamic privilege management capabilities: [Assignment: organization-defined list of dynamic privilege management capabilities]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-2 (7) Role-Based Schemes + +### AC-2 (7) Role-Based Schemes **Description:** @@ -274,25 +421,65 @@ The organization: -## AC-2 (8) Dynamic Account Creation +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, supporting documentation can be found at the following +resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ +
    +
    +To assist the organization in meeting the requirements of this +control, supporting documentation can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ +
    +
    +To assist the organization in meeting the requirements of this +control, Docker Enterprise Edition supports various levels of user +permissions and role-based access control enforcements. Administrator +users have permissions to: manage other Docker Enterprise Edition +users, manage Docker Trusted Registry repositories and settings, and +manage the Universal Control Plane and underlying Docker Swarm Mode +cluster. Supporting documentation can be found at the following +resources: + +UCP: +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Identity_Management +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#RBAC + +DTR: +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC +
    +
    + +### AC-2 (8) Dynamic Account Creation **Description:** The information system creates [Assignment: organization-defined information system accounts] dynamically. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-2 (9) Restrictions On Use Of Shared / Group Accounts + +### AC-2 (9) Restrictions On Use Of Shared / Group Accounts **Description:** The organization only permits the use of shared/group accounts that meet [Assignment: organization-defined conditions for establishing shared/group accounts]. -
      -
    **Control Information:** @@ -311,13 +498,25 @@ The organization only permits the use of shared/group accounts that meet [Assign -## AC-2 (10) Shared / Group Account Credential Termination +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, users and/or groups synchronized to Docker Enterprise Edition +via LDAP can be configured at the directory service. +
    +
    + +### AC-2 (10) Shared / Group Account Credential Termination **Description:** The information system terminates shared/group account credentials when members leave the group. -
      -
    **Control Information:** @@ -336,13 +535,24 @@ The information system terminates shared/group account credentials when members -## AC-2 (11) Usage Conditions +**Implemenation Details:** + + + +
    +
    +Users and/or groups synchronized to Docker Enterprise Edition via +LDAP can be configured at the directory service. +
    +
    + +### AC-2 (11) Usage Conditions **Description:** The information system enforces [Assignment: organization-defined circumstances and/or usage conditions] for [Assignment: organization-defined information system accounts]. -
      -
    **Control Information:** @@ -361,7 +571,21 @@ The information system enforces [Assignment: organization-defined circumstances -## AC-2 (12) Account Monitoring / Atypical Usage +**Implemenation Details:** + + + +
    +
    +Information system accounts synchronized to Docker Enterprise Edition +via LDAP can be configured at the directory service to meet this +requirement as necessary. +
    +
    + +### AC-2 (12) Account Monitoring / Atypical Usage **Description:** @@ -403,13 +627,59 @@ The organization: -## AC-2 (13) Disable Accounts For High-Risk Individuals +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, supporting documentation can be found at the following +resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ +
    +
    +To assist the organization in meeting the requirements of this +control, Docker Enterprise Edition can be configured to aggregate +container and daemon events via a number of logging drivers. +Supporting documentation can be found at the following resources: + +- https://docs.docker.com/engine/admin/logging/view_container_logs/ +- https://docs.docker.com/engine/admin/logging/overview/ +- https://docs.docker.com/engine/admin/logging/log_tags/ + +
    +
    +To assist the organization in meeting the requirements of this +control, Universal Control Plane can be configured to send system +account log data to a remote logging service such as an Elasticsearch, +Logstash and Kibana (ELK) stack. Supporting documentation can be found +at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +To assist the organization in meeting the requirements of this +control, when Docker Enterprise Edition is configured for LDAP +integration, one can refer to the directory service's existing +monitoring tools. +
    +
    + +### AC-2 (13) Disable Accounts For High-Risk Individuals **Description:** The organization disables accounts of users posing a significant risk within [Assignment: organization-defined time period] of discovery of the risk. -
      -
    **Control Information:** @@ -428,13 +698,25 @@ The organization disables accounts of users posing a significant risk within [As +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, users and/or groups synchronized to Docker Enterprise Edition +via LDAP can be managed at the directory service. +
    +
    + ## AC-3 Access Enforcement **Description:** The information system enforces approved authorizations for logical access to information and system resources in accordance with applicable access control policies. -
      -
    **Control Information:** @@ -463,19 +745,58 @@ The information system enforces approved authorizations for logical access to in -## AC-3 (2) Dual Authorization +**Implemenation Details:** + + + +
    +
    +One can control which users and teams can create and manipulate +Docker Trusted Registry resources. By default, no one can make changes +to the cluster. Permissions can be granted and managed to enforce +fine-grained access control. Supporting documentation can be found at +the following resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC +
    +
    +One can control which users and teams can create and manipulate +Universal Control Plane resources. By default, no one can make changes +to the cluster. Permissions can be granted and managed to enforce +fine-grained access control. Supporting documentation can be found at +the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#RBAC_and_Managing_Team_Level_Access_to_Resources +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#RBAC +
    +
    +One can control which users and teams can create and manipulate +Docker Enterprise Edition resources. By default, no one can make +changes to the cluster. Permissions can be granted and managed to +enforce fine-grained access control. The eNZi component facilitates +authorizations as dictated by the system's administrators. +
    +
    + +### AC-3 (2) Dual Authorization **Description:** The information system enforces dual authorization for [Assignment: organization-defined privileged commands and/or other organization-defined actions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-3 (3) Mandatory Access Control + +### AC-3 (3) Mandatory Access Control **Description:** @@ -496,9 +817,9 @@ The information system enforces [Assignment: organization-defined mandatory acce **Control Information:** - **Responsible role(s)** - Organization -## AC-3 (4) Discretionary Access Control + +### AC-3 (4) Discretionary Access Control **Description:** @@ -513,45 +834,39 @@ The information system enforces [Assignment: organization-defined discretionary **Control Information:** - **Responsible role(s)** - Organization -## AC-3 (5) Security-Relevant Information + +### AC-3 (5) Security-Relevant Information **Description:** The information system prevents access to [Assignment: organization-defined security-relevant information] except during secure, non-operable system states. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-3 (7) Role-Based Access Control + +### AC-3 (7) Role-Based Access Control **Description:** The information system enforces a role-based access control policy over defined subjects and objects and controls access based upon [Assignment: organization-defined roles and users authorized to assume such roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-3 (8) Revocation Of Access Authorizations + +### AC-3 (8) Revocation Of Access Authorizations **Description:** The information system enforces the revocation of access authorizations resulting from changes to the security attributes of subjects and objects based on [Assignment: organization-defined rules governing the timing of revocations of access authorizations]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-3 (9) Controlled Release + +### AC-3 (9) Controlled Release **Description:** @@ -563,27 +878,23 @@ The information system does not release information outside of the established s **Control Information:** - **Responsible role(s)** - Organization -## AC-3 (10) Audited Override Of Access Control Mechanisms + +### AC-3 (10) Audited Override Of Access Control Mechanisms **Description:** The organization employs an audited override of automated access control mechanisms under [Assignment: organization-defined conditions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-4 Information Flow Enforcement **Description:** The information system enforces approved authorizations for controlling the flow of information within the system and between interconnected systems based on [Assignment: organization-defined information flow control policies]. -
      -
    **Control Information:** @@ -612,97 +923,123 @@ The information system enforces approved authorizations for controlling the flow -## AC-4 (1) Object Security Attributes +**Implemenation Details:** + + + +
    +
    +Supporting documentation to configure Docker Trusted Registry to meet +the requirements of this control can be found at the following +resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations +
    +
    +Docker Enterprise Edition can be configured to control the flow of information +that originates from applications running in containers. Supporting +documentation can be found at the following resources: + +- https://docs.docker.com/engine/userguide/networking/ +- http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks + +
    +
    +Supporting documentation to configure Universal Control Plane to meet +the requirements of this control can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/install/system-requirements/#/ports-used +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/use-domain-names-to-access-services/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/restrict-services-to-worker-nodes/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Universal_Control_Plane_2.0_Service_Discovery_and_Load_Balancing +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Networking +
    +
    + +### AC-4 (1) Object Security Attributes **Description:** The information system uses [Assignment: organization-defined security attributes] associated with [Assignment: organization-defined information, source, and destination objects] to enforce [Assignment: organization-defined information flow control policies] as a basis for flow control decisions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (2) Processing Domains + +### AC-4 (2) Processing Domains **Description:** The information system uses protected processing domains to enforce [Assignment: organization-defined information flow control policies] as a basis for flow control decisions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (3) Dynamic Information Flow Control + +### AC-4 (3) Dynamic Information Flow Control **Description:** The information system enforces dynamic information flow control based on [Assignment: organization-defined policies]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (4) Content Check Encrypted Information + +### AC-4 (4) Content Check Encrypted Information **Description:** The information system prevents encrypted information from bypassing content-checking mechanisms by [Selection (one or more): decrypting the information; blocking the flow of the encrypted information; terminating communications sessions attempting to pass encrypted information; [Assignment: organization-defined procedure or method]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (5) Embedded Data Types + +### AC-4 (5) Embedded Data Types **Description:** The information system enforces [Assignment: organization-defined limitations] on embedding data types within other data types. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (6) Metadata + +### AC-4 (6) Metadata **Description:** The information system enforces information flow control based on [Assignment: organization-defined metadata]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (7) One-Way Flow Mechanisms + +### AC-4 (7) One-Way Flow Mechanisms **Description:** The information system enforces [Assignment: organization-defined one-way information flows] using hardware mechanisms. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (8) Security Policy Filters + +### AC-4 (8) Security Policy Filters **Description:** The information system enforces information flow control using [Assignment: organization-defined security policy filters] as a basis for flow control decisions for [Assignment: organization-defined information flows]. -
      -
    **Control Information:** @@ -731,145 +1068,169 @@ The information system enforces information flow control using [Assignment: orga -## AC-4 (9) Human Reviews +**Implemenation Details:** + + + +
    +
    +Supporting documentation to configure Docker Trusted Registry to meet +the requirements of this control can be found at the following +resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations +
    +
    +Docker Enterprise Edition can be configured to control the flow of +information that originates from applications running in containers +per organization-defined security policy filters. Supporting +documentation can be found at the following resources: + +- https://docs.docker.com/engine/userguide/networking/ +- http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks + +There are also third-party behavioral activity monitoring tools (e.g. +Sysdig Falco <http://www.sysdig.org/falco/>) that can be used +alongside Docker Enterprise Edition to satisfy this control's +requirements. + +
    +
    +Supporting documentation to configure Universal Control Plane to meet +the requirements of this control can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/install/system-requirements/#/ports-used +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/use-domain-names-to-access-services/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/restrict-services-to-worker-nodes/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Universal_Control_Plane_2.0_Service_Discovery_and_Load_Balancing +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Networking +
    +
    + +### AC-4 (9) Human Reviews **Description:** The information system enforces the use of human reviews for [Assignment: organization-defined information flows] under the following conditions: [Assignment: organization-defined conditions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (10) Enable / Disable Security Policy Filters + +### AC-4 (10) Enable / Disable Security Policy Filters **Description:** The information system provides the capability for privileged administrators to enable/disable [Assignment: organization-defined security policy filters] under the following conditions: [Assignment: organization-defined conditions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (11) Configuration Of Security Policy Filters + +### AC-4 (11) Configuration Of Security Policy Filters **Description:** The information system provides the capability for privileged administrators to configure [Assignment: organization-defined security policy filters] to support different security policies. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (12) Data Type Identifiers + +### AC-4 (12) Data Type Identifiers **Description:** The information system, when transferring information between different security domains, uses [Assignment: organization-defined data type identifiers] to validate data essential for information flow decisions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (13) Decomposition Into Policy-Relevant Subcomponents + +### AC-4 (13) Decomposition Into Policy-Relevant Subcomponents **Description:** The information system, when transferring information between different security domains, decomposes information into [Assignment: organization-defined policy-relevant subcomponents] for submission to policy enforcement mechanisms. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (14) Security Policy Filter Constraints + +### AC-4 (14) Security Policy Filter Constraints **Description:** The information system, when transferring information between different security domains, implements [Assignment: organization-defined security policy filters] requiring fully enumerated formats that restrict data structure and content. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (15) Detection Of Unsanctioned Information + +### AC-4 (15) Detection Of Unsanctioned Information **Description:** The information system, when transferring information between different security domains, examines the information for the presence of [Assignment: organized-defined unsanctioned information] and prohibits the transfer of such information in accordance with the [Assignment: organization-defined security policy]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (17) Domain Authentication + +### AC-4 (17) Domain Authentication **Description:** The information system uniquely identifies and authenticates source and destination points by [Selection (one or more): organization, system, application, individual] for information transfer. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (18) Security Attribute Binding + +### AC-4 (18) Security Attribute Binding **Description:** The information system binds security attributes to information using [Assignment: organization-defined binding techniques] to facilitate information flow policy enforcement. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (19) Validation Of Metadata + +### AC-4 (19) Validation Of Metadata **Description:** The information system, when transferring information between different security domains, applies the same security policy filtering to metadata as it applies to data payloads. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (20) Approved Solutions + +### AC-4 (20) Approved Solutions **Description:** The organization employs [Assignment: organization-defined solutions in approved configurations] to control the flow of [Assignment: organization-defined information] across security domains. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-4 (21) Physical / Logical Separation Of Information Flows + +### AC-4 (21) Physical / Logical Separation Of Information Flows **Description:** The information system separates information flows logically or physically using [Assignment: organization-defined mechanisms and/or techniques] to accomplish [Assignment: organization-defined required separations by types of information]. -
      -
    **Control Information:** @@ -898,18 +1259,58 @@ The information system separates information flows logically or physically using -## AC-4 (22) Access Only +**Implemenation Details:** + + + +
    +
    +Supporting documentation to configure Docker Trusted Registry to meet +the requirements of this control can be found at the following +resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations +
    +
    +Docker Enterprise Edition can be configured to separate the flow of +information that originates from applications running in containers. +Supporting documentation can be found at the following resources: + +- https://docs.docker.com/engine/userguide/networking/ +- http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks + +
    +
    +Supporting documentation to configure Universal Control Plane to meet +the requirements of this control can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/install/system-requirements/#/ports-used +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/use-domain-names-to-access-services/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/restrict-services-to-worker-nodes/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Universal_Control_Plane_2.0_Service_Discovery_and_Load_Balancing +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Networking +
    +
    + +### AC-4 (22) Access Only **Description:** The information system provides access from a single device to computing platforms, applications, or data residing on multiple different security domains, while preventing any information flow between the different security domains. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-5 Separation Of Duties **Description:** @@ -943,91 +1344,112 @@ The organization: +**Implemenation Details:** + + + +
    +
    +To assist the organization in meeting the requirements of this +control, one can control which users and teams can create and +manipulate Docker Trusted Registry resources. By default, no one can +make changes to the cluster. Permissions can be granted and managed to +enforce fine-grained access control. Supporting documentation can be +found at the following resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC +
    +
    +To assist the organization in meeting the requirements of this +control, one can control which users and teams can create and +manipulate Universal Control Plane resources. By default, no one can +make changes to the cluster. Permissions can be granted and managed to +enforce fine-grained access control. Supporting documentation can be +found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#RBAC_and_Managing_Team_Level_Access_to_Resources +- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#RBAC +
    +
    + ## AC-6 Least Privilege **Description:** The organization employs the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) which are necessary to accomplish assigned tasks in accordance with organizational missions and business functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (1) Authorize Access To Security Functions + +### AC-6 (1) Authorize Access To Security Functions **Description:** The organization explicitly authorizes access to [Assignment: organization-defined security functions (deployed in hardware, software, and firmware) and security-relevant information]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (2) Non-Privileged Access For Nonsecurity Functions + +### AC-6 (2) Non-Privileged Access For Nonsecurity Functions **Description:** The organization requires that users of information system accounts, or roles, with access to [Assignment: organization-defined security functions or security-relevant information], use non-privileged accounts or roles, when accessing nonsecurity functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (3) Network Access To Privileged Commands + +### AC-6 (3) Network Access To Privileged Commands **Description:** The organization authorizes network access to [Assignment: organization-defined privileged commands] only for [Assignment: organization-defined compelling operational needs] and documents the rationale for such access in the security plan for the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (4) Separate Processing Domains + +### AC-6 (4) Separate Processing Domains **Description:** The information system provides separate processing domains to enable finer-grained allocation of user privileges. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (5) Privileged Accounts + +### AC-6 (5) Privileged Accounts **Description:** The organization restricts privileged accounts on the information system to [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (6) Privileged Access By Non-Organizational Users + +### AC-6 (6) Privileged Access By Non-Organizational Users **Description:** The organization prohibits privileged access to the information system by non-organizational users. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (7) Review Of User Privileges + +### AC-6 (7) Review Of User Privileges **Description:** @@ -1039,15 +1461,13 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-6 (8) Privilege Levels For Code Execution + +### AC-6 (8) Privilege Levels For Code Execution **Description:** The information system prevents [Assignment: organization-defined software] from executing at higher privilege levels than users executing the software. -
      -
    **Control Information:** @@ -1066,13 +1486,36 @@ The information system prevents [Assignment: organization-defined software] from -## AC-6 (9) Auditing Use Of Privileged Functions +**Implemenation Details:** + + + +
    +
    +Universal Control Plane users can be assigned to one of a number of +different permission levels. The permission level assigned to a +specific user determines that user's ability to execute certain +Docker functions within UCP. Only users mapped to either the "Full +Control" or "Admin" roles can execute Docker commands without any +restrictions. Users mapped to either the "View Only" or "No Access" +roles cannot execute any Docker commands. Users assigned to the +"Restricted Control" role can only run Docker commands under their own +purview and cannot see other users UCP resources nor run commands that +required privileged access to the host. Additional documentation +regarding the various permission levels within UCP can be found at the +following resource: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ +
    +
    + +### AC-6 (9) Auditing Use Of Privileged Functions **Description:** The information system audits the execution of privileged functions. -
      -
    **Control Information:** @@ -1091,13 +1534,33 @@ The information system audits the execution of privileged functions. -## AC-6 (10) Prohibit Non-Privileged Users From Executing Privileged Functions +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition logs privileged user events to standard log +files. One can configure Docker Enterprise Edition to direct these +event logs to a remote logging service such as an Elasticsearch, +Logstash and Kibana (ELK) stack and subsequently alert on specific +event types. When integrating Docker Enterprise Edition with LDAP, one +can refer the the directory service's logging mechanisms for auditing +the events defined by this control. Supporting documentation regarding +logging and monitoring can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.0/guides/monitor/ +- https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/configure-logs/ +
    +
    + +### AC-6 (10) Prohibit Non-Privileged Users From Executing Privileged Functions **Description:** The information system prevents non-privileged users from executing privileged functions to include disabling, circumventing, or altering implemented security safeguards/countermeasures. -
      -
    **Control Information:** @@ -1116,6 +1579,26 @@ The information system prevents non-privileged users from executing privileged f +**Implemenation Details:** + + + +
    +
    +One can control which users and teams can create and manipulate +Docker Enterprise Edition resources. By default, no one can make changes to +the cluster. Permissions can be granted and managed to enforce +fine-grained access control. Supporting documentation for the configuration of this functionality can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.0/guides/user-management/ +- https://docs.docker.com/datacenter/dtr/2.1/guides/user-management/ +- https://docs.docker.com/datacenter/ucp/2.0/guides/user-management/permission-levels/ +- https://docs.docker.com/datacenter/dtr/2.1/guides/user-management/permission-levels/ +
    +
    + ## AC-7 Unsuccessful Logon Attempts **Description:** @@ -1143,18 +1626,35 @@ The information system: -## AC-7 (2) Purge / Wipe Mobile Device +**Implemenation Details:** + + + +
    +
    +When Docker Enterprise Edition is integrated to a directory service via LDAP, +one can reference the functionality of the directory service to +configure the enforcement of a limit to the number of conesecutive +invalid logon attempts by a user during a specified time period.When Docker Enterprise Edition is integrated to a directory service +via LDAP, one can reference the functionality of the directory service +to configure he ability to automatically lock/disable an account for a +specified period of time after a consecutive invalid logon attempt +limit is reached. +
    +
    + +### AC-7 (2) Purge / Wipe Mobile Device **Description:** The information system purges/wipes information from [Assignment: organization-defined mobile devices] based on [Assignment: organization-defined purging/wiping requirements/techniques] after [Assignment: organization-defined number] consecutive, unsuccessful device logon attempts. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-8 System Use Notification **Description:** @@ -1181,75 +1681,63 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization + ## AC-9 Previous Logon (Access) Notification **Description:** The information system notifies the user, upon successful logon (access) to the system, of the date and time of the last logon (access). -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-9 (1) Unsuccessful Logons + +### AC-9 (1) Unsuccessful Logons **Description:** The information system notifies the user, upon successful logon/access, of the number of unsuccessful logon/access attempts since the last successful logon/access. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-9 (2) Successful / Unsuccessful Logons + +### AC-9 (2) Successful / Unsuccessful Logons **Description:** The information system notifies the user of the number of [Selection: successful logons/accesses; unsuccessful logon/access attempts; both] during [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-9 (3) Notification Of Account Changes + +### AC-9 (3) Notification Of Account Changes **Description:** The information system notifies the user of changes to [Assignment: organization-defined security-related characteristics/parameters of the user�s account] during [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-9 (4) Additional Logon Information + +### AC-9 (4) Additional Logon Information **Description:** The information system notifies the user, upon successful logon (access), of the following additional information: [Assignment: organization-defined information to be included in addition to the date and time of the last logon (access)]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-10 Concurrent Session Control **Description:** The information system limits the number of concurrent sessions for each [Assignment: organization-defined account and/or account type] to [Assignment: organization-defined number]. -
      -
    **Control Information:** @@ -1268,6 +1756,21 @@ The information system limits the number of concurrent sessions for each [Assign +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition can be configured to limit the number of +concurrent sessions for each account. These options can be found +within the Universal Control Plane Admin Settings under the "Auth" +section. +
    +
    + ## AC-11 Session Lock **Description:** @@ -1295,13 +1798,28 @@ The information system: -## AC-11 (1) Pattern-Hiding Displays +**Implemenation Details:** + + + +
    +
    +Per the requirements of AC-2 (5), Docker Enterprise Edition +can be configured to enforce user session lifetime limits and renewal +thresholds. These options can be found within the Universal Control +Plane Admin Settings under the "Auth" section. Configurable options +include the initial lifetime (in hours) of a user's session and the +renewal threshold of a session (in hours). +
    +
    + +### AC-11 (1) Pattern-Hiding Displays **Description:** The information system conceals, via the session lock, information previously visible on the display with a publicly viewable image. -
      -
    **Control Information:** @@ -1320,13 +1838,30 @@ The information system conceals, via the session lock, information previously vi +**Implemenation Details:** + + + +
    +
    +Per the requirements of AC-2 (5), Docker Enterprise Edition +can be configured to enforce user session lifetime limits and renewal +thresholds. These options can be found within the Universal Control +Plane Admin Settings under the "Auth" section. Configurable options +include the initial lifetime (in hours) of a user's session and the +renewal threshold of a session (in hours). Upon the expiration of the +configured session thresholds, a user will be locked out of his/her +session. +
    +
    + ## AC-12 Session Termination **Description:** The information system automatically terminates a user session after [Assignment: organization-defined conditions or trigger events requiring session disconnect]. -
      -
    **Control Information:** @@ -1345,7 +1880,26 @@ The information system automatically terminates a user session after [Assignment -## AC-12 (1) User-Initiated Logouts / Message Displays +**Implemenation Details:** + + + +
    +
    +Per the requirements of AC-2 (5), Docker Enterprise Edition +can be configured to enforce user session lifetime limits and renewal +thresholds. These options can be found within the Universal Control +Plane Admin Settings under the "Auth" section. Configurable options +include the initial lifetime (in hours) of a user's session and the +renewal threshold of a session (in hours). Upon the expiration of the +configured session thresholds, a user will be locked out of his/her +session. +
    +
    + +### AC-12 (1) User-Initiated Logouts / Message Displays **Description:** @@ -1372,6 +1926,19 @@ The information system: +**Implemenation Details:** + + + +
    +
    +Universal Control Plane includes a logout capability that allows a +user to terminate his/her current session. +
    +
    + ## AC-14 Permitted Actions Without Identification Or Authentication **Description:** @@ -1384,8 +1951,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## AC-16 Security Attributes **Description:** @@ -1400,128 +1967,108 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (1) Dynamic Attribute Association + +### AC-16 (1) Dynamic Attribute Association **Description:** The information system dynamically associates security attributes with [Assignment: organization-defined subjects and objects] in accordance with [Assignment: organization-defined security policies] as information is created and combined. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (2) Attribute Value Changes By Authorized Individuals + +### AC-16 (2) Attribute Value Changes By Authorized Individuals **Description:** The information system provides authorized individuals (or processes acting on behalf of individuals) the capability to define or change the value of associated security attributes. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (3) Maintenance Of Attribute Associations By Information System + +### AC-16 (3) Maintenance Of Attribute Associations By Information System **Description:** The information system maintains the association and integrity of [Assignment: organization-defined security attributes] to [Assignment: organization-defined subjects and objects]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (4) Association Of Attributes By Authorized Individuals + +### AC-16 (4) Association Of Attributes By Authorized Individuals **Description:** The information system supports the association of [Assignment: organization-defined security attributes] with [Assignment: organization-defined subjects and objects] by authorized individuals (or processes acting on behalf of individuals). -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (5) Attribute Displays For Output Devices + +### AC-16 (5) Attribute Displays For Output Devices **Description:** The information system displays security attributes in human-readable form on each object that the system transmits to output devices to identify [Assignment: organization-identified special dissemination, handling, or distribution instructions] using [Assignment: organization-identified human-readable, standard naming conventions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (6) Maintenance Of Attribute Association By Organization + +### AC-16 (6) Maintenance Of Attribute Association By Organization **Description:** The organization allows personnel to associate, and maintain the association of [Assignment: organization-defined security attributes] with [Assignment: organization-defined subjects and objects] in accordance with [Assignment: organization-defined security policies]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (7) Consistent Attribute Interpretation + +### AC-16 (7) Consistent Attribute Interpretation **Description:** The organization provides a consistent interpretation of security attributes transmitted between distributed information system components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (8) Association Techniques / Technologies + +### AC-16 (8) Association Techniques / Technologies **Description:** The information system implements [Assignment: organization-defined techniques or technologies] with [Assignment: organization-defined level of assurance] in associating security attributes to information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (9) Attribute Reassignment + +### AC-16 (9) Attribute Reassignment **Description:** The organization ensures that security attributes associated with information are reassigned only via re-grading mechanisms validated using [Assignment: organization-defined techniques or procedures]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-16 (10) Attribute Configuration By Authorized Individuals + +### AC-16 (10) Attribute Configuration By Authorized Individuals **Description:** The information system provides authorized individuals the capability to define or change the type and value of security attributes available for association with subjects and objects. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-17 Remote Access **Description:** @@ -1534,15 +2081,13 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-17 (1) Automated Monitoring / Control + +### AC-17 (1) Automated Monitoring / Control **Description:** The information system monitors and controls remote access methods. -
      -
    **Control Information:** @@ -1566,13 +2111,32 @@ The information system monitors and controls remote access methods. -## AC-17 (2) Protection Of Confidentiality / Integrity Using Encryption +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition logs and controls all local and remote +access events. In addition, auditing can be configured on the +underlying operating system to meet this control. + +
    +
    +Docker Enterprise Edition logs and controls all local and remote access +events. In addition, auditing can be configured on the underlying +operating system to meet this control. +
    +
    + +### AC-17 (2) Protection Of Confidentiality / Integrity Using Encryption **Description:** The information system implements cryptographic mechanisms to protect the confidentiality and integrity of remote access sessions. -
      -
    **Control Information:** @@ -1601,13 +2165,45 @@ The information system implements cryptographic mechanisms to protect the confid -## AC-17 (3) Managed Access Control Points +**Implemenation Details:** + + + +
    +
    +All remote access sessions to Docker Trusted Registry are protected +with Transport Layer Security (TLS) 1.2. This is included at both the +HTTPS application layer for access to the DTR user interface and for +command-line based connections to the registry. In addition to this, +all communication to DTR is enforced by way of two-way mutual TLS +authentication. +
    +
    +All remote access sessions to Docker Enterprise Edition are protected +with Transport Layer Security (TLS) 1.2. In addition to this, all +communication to Docker Enterprise Edition is enforced by way of +two-way mutual TLS authentication. + +
    +
    +All remote access sessions to Universal Control Plane are protected +with Transport Layer Security (TLS) 1.2. This is included at both the +HTTPS application layer for access to the UCP user interface and for +command-line based connections to the cluster. In addition to this, +all communication to UCP is enforced by way of two-way mutual TLS +authentication. +
    +
    + +### AC-17 (3) Managed Access Control Points **Description:** The information system routes all remote accesses through [Assignment: organization-defined number] managed network access control points. -
      -
    **Control Information:** @@ -1636,7 +2232,37 @@ The information system routes all remote accesses through [Assignment: organizat -## AC-17 (4) Privileged Commands / Access +**Implemenation Details:** + + + +
    +
    +A combination of managed load balancers, firewalls and access control +lists, and virtual networking resources can be used to ensure traffic +destined for Docker Trusted Registry replicas is routed through +managed network access control points. +
    +
    +A combination of managed load balancers, firewalls and access control +lists, and virtual networking resources can be used to ensure traffic +destined for Docker Enterprise Edition is routed through managed network access +control points. + +
    +
    +A combination of managed load balancers, firewalls and access control +lists, and virtual networking resources can be used to ensure traffic +destined for Universal Control Plane managers and worker nodes is +routed through managed network access control points. +
    +
    + +### AC-17 (4) Privileged Commands / Access **Description:** @@ -1648,27 +2274,23 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-17 (6) Protection Of Information + +### AC-17 (6) Protection Of Information **Description:** The organization ensures that users protect information about remote access mechanisms from unauthorized use and disclosure. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-17 (9) Disconnect / Disable Access + +### AC-17 (9) Disconnect / Disable Access **Description:** The organization provides the capability to expeditiously disconnect or disable remote access to the information system within [Assignment: organization-defined time period]. -
      -
    **Control Information:** @@ -1697,6 +2319,42 @@ The organization provides the capability to expeditiously disconnect or disable +**Implemenation Details:** + + + +
    +
    +Built-in firewall technology in Docker Trusted Registry's underlying +operating system can be used to force the disconnection of remote +connections to the host. In addition, UCP slave nodes running Docker +Trusted Registry replicas can be paused or drained, which subsequently +stops sessions to the DTR replica. +
    +
    +Built-in firewall technology in Docker Enterprise Edition's underlying +operating system can be used to force the disconnection of remote +connections to the host. In addition, Docker Enterprise Edition provides the +option to pause or drain a node in the cluster, which subsequently +stops and/or removes sessions to the node. Individual services and/or +applications running on Docker Enterprise Edition can also be stopped and/or +removed. + +
    +
    +Built-in firewall technology in Universal Control Plane's underlying +operating system can be used to force the disconnection of remote +connections to the host. In addition, UCP provides the option to pause +or drain a node in the cluster, which subsequently stops and/or +removes sessions to the node. Individual services and/or applications +running on a UCP cluster can also be stopped and/or removed. +
    +
    + ## AC-18 Wireless Access **Description:** @@ -1709,56 +2367,48 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-18 (1) Authentication And Encryption + +### AC-18 (1) Authentication And Encryption **Description:** The information system protects wireless access to the system using authentication of [Selection (one or more): users; devices] and encryption. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-18 (3) Disable Wireless Networking + +### AC-18 (3) Disable Wireless Networking **Description:** The organization disables, when not intended for use, wireless networking capabilities internally embedded within information system components prior to issuance and deployment. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-18 (4) Restrict Configurations By Users + +### AC-18 (4) Restrict Configurations By Users **Description:** The organization identifies and explicitly authorizes users allowed to independently configure wireless networking capabilities. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-18 (5) Antennas / Transmission Power Levels + +### AC-18 (5) Antennas / Transmission Power Levels **Description:** The organization selects radio antennas and calibrates transmission power levels to reduce the probability that usable signals can be received outside of organization-controlled boundaries. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-19 Access Control For Mobile Devices **Description:** @@ -1771,9 +2421,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-19 (4) Restrictions For Classified Information + +### AC-19 (4) Restrictions For Classified Information **Description:** @@ -1793,20 +2443,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-19 (5) Full Device / Container-Based Encryption + +### AC-19 (5) Full Device / Container-Based Encryption **Description:** The organization employs [Selection: full-device encryption; container encryption] to protect the confidentiality and integrity of information on [Assignment: organization-defined mobile devices]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-20 Use Of External Information Systems **Description:** @@ -1819,9 +2467,9 @@ The organization establishes terms and conditions, consistent with any trust rel **Control Information:** - **Responsible role(s)** - Organization -## AC-20 (1) Limits On Authorized Use + +### AC-20 (1) Limits On Authorized Use **Description:** @@ -1833,44 +2481,38 @@ The organization permits authorized individuals to use an external information s **Control Information:** - **Responsible role(s)** - Organization -## AC-20 (2) Portable Storage Devices + +### AC-20 (2) Portable Storage Devices **Description:** The organization [Selection: restricts; prohibits] the use of organization-controlled portable storage devices by authorized individuals on external information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-20 (3) Non-Organizationally Owned Systems / Components / Devices + +### AC-20 (3) Non-Organizationally Owned Systems / Components / Devices **Description:** The organization [Selection: restricts; prohibits] the use of non-organizationally owned information systems, system components, or devices to process, store, or transmit organizational information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-20 (4) Network Accessible Storage Devices + +### AC-20 (4) Network Accessible Storage Devices **Description:** The organization prohibits the use of [Assignment: organization-defined network accessible storage devices] in external information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-21 Information Sharing **Description:** @@ -1883,32 +2525,28 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AC-21 (1) Automated Decision Support + +### AC-21 (1) Automated Decision Support **Description:** The information system enforces information-sharing decisions by authorized users based on access authorizations of sharing partners and access restrictions on information to be shared. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-21 (2) Information Search And Retrieval + +### AC-21 (2) Information Search And Retrieval **Description:** The information system implements information search and retrieval services that enforce [Assignment: organization-defined information sharing restrictions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-22 Publicly Accessible Content **Description:** @@ -1923,65 +2561,55 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## AC-23 Data Mining Protection **Description:** The organization employs [Assignment: organization-defined data mining prevention and detection techniques] for [Assignment: organization-defined data storage objects] to adequately detect and protect against data mining. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-24 Access Control Decisions **Description:** The organization establishes procedures to ensure [Assignment: organization-defined access control decisions] are applied to each access request prior to access enforcement. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-24 (1) Transmit Access Authorization Information + +### AC-24 (1) Transmit Access Authorization Information **Description:** The information system transmits [Assignment: organization-defined access authorization information] using [Assignment: organization-defined security safeguards] to [Assignment: organization-defined information systems] that enforce access control decisions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AC-24 (2) No User Or Process Identity + +### AC-24 (2) No User Or Process Identity **Description:** The information system enforces access control decisions based on [Assignment: organization-defined security attributes] that do not include the identity of the user or process acting on behalf of the user. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AC-25 Reference Monitor **Description:** The information system implements a reference monitor for [Assignment: organization-defined access control policies] that is tamperproof, always invoked, and small enough to be subject to analysis and testing, the completeness of which can be assured. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/AT.md b/docs/compliance/reference/800-53/AT.md index 162f17d..8f4e151 100644 --- a/docs/compliance/reference/800-53/AT.md +++ b/docs/compliance/reference/800-53/AT.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## AT-2 Security Awareness Training **Description:** @@ -41,32 +41,28 @@ The organization provides basic security awareness training to information syste **Control Information:** - **Responsible role(s)** - Organization -## AT-2 (1) Practical Exercises + +### AT-2 (1) Practical Exercises **Description:** The organization includes practical exercises in security awareness training that simulate actual cyber attacks. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AT-2 (2) Insider Threat + +### AT-2 (2) Insider Threat **Description:** The organization includes security awareness training on recognizing and reporting potential indicators of insider threat. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AT-3 Role-Based Security Training **Description:** @@ -80,56 +76,48 @@ The organization provides role-based security training to personnel with assigne **Control Information:** - **Responsible role(s)** - Organization -## AT-3 (1) Environmental Controls + +### AT-3 (1) Environmental Controls **Description:** The organization provides [Assignment: organization-defined personnel or roles] with initial and [Assignment: organization-defined frequency] training in the employment and operation of environmental controls. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AT-3 (2) Physical Security Controls + +### AT-3 (2) Physical Security Controls **Description:** The organization provides [Assignment: organization-defined personnel or roles] with initial and [Assignment: organization-defined frequency] training in the employment and operation of physical security controls. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AT-3 (3) Practical Exercises + +### AT-3 (3) Practical Exercises **Description:** The organization includes practical exercises in security training that reinforce training objectives. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AT-3 (4) Suspicious Communications And Anomalous System Behavior + +### AT-3 (4) Suspicious Communications And Anomalous System Behavior **Description:** The organization provides training to its personnel on [Assignment: organization-defined indicators of malicious code] to recognize suspicious communications and anomalous behavior in organizational information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AT-4 Security Training Records **Description:** @@ -142,5 +130,5 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/AU.md b/docs/compliance/reference/800-53/AU.md index bb694d1..49ec928 100644 --- a/docs/compliance/reference/800-53/AU.md +++ b/docs/compliance/reference/800-53/AU.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## AU-2 Audit Events **Description:** @@ -67,25 +67,61 @@ The organization: -## AU-2 (3) Reviews And Updates +**Implemenation Details:** + + + +
    +
    +All of the event types indicated by this control are logged by a +combination of the backend ucp-controller service within Universal +Control Plane and the backend services that make up Docker Trusted +Registry. Additional documentation can be found at the following resource: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/ +
    +
    +Both Universal Control Plane and Docker Trusted Registry backend +service containers, all of which reside on Docker Enterprise Edition, +log all of the event types indicated by this control (as explained by +their component narratives). These and other application containers +that reside on Docker Enterprise Edition can be configured to log data +via an appropriate Docker logging driver. Instructions for configuring +logging drivers can be found at the following resource: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +All of the event types indicated by this control are logged by the +backend ucp-controller service within Universal Control Plane. In +addition, each container created on a Universal Control Plane cluster +logs event data. Supporting documentation for configuring UCP logging +can be referenced at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AU-2 (3) Reviews And Updates **Description:** The organization reviews and updates the audited events [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-3 Content Of Audit Records **Description:** The information system generates audit records containing information that establishes what type of event occurred, when the event occurred, where the event occurred, the source of the event, the outcome of the event, and the identity of any individuals or subjects associated with the event. -
      -
    **Control Information:** @@ -119,13 +155,69 @@ The information system generates audit records containing information that estab -## AU-3 (1) Additional Audit Information +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry generates all of the audit record information +indicated by this control. A sample audit event has been provided +below: + +{"level":"info","license_key":"123456789123456789123456789","msg":"eNZi:Password +based auth +suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth +ok","username":"dockeruser"} +
    +
    +Both Universal Control Plane and Docker Trusted Registry are +pre-configured to take advantage of Docker Enterprise Edition's +built-in logging mechanisms. A sample audit event recorded by Docker +Enterprise Edition has been provided below: + +{"level":"info","license_key":"123456789123456789123456789","msg":"eNZi:Password +based auth +suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth +ok","username":"dockeruser"} + +Additional documentation can be referenced at the following resource: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane generates all of the audit record information +indicated by this control. A sample audit event has been provided +below: + +{"level":"info","license_key":"123456789123456789123456789","msg":"eNZi:Password +based auth +suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth +ok","username":"dockeruser"} +
    +
    +Docker Enterprise Edition generates all of the audit record +information indicated by this control. A sample audit event has been +provided below: + +{"level":"info","license_key":"123456789123456789123456789","msg":"eNZi:Password +based auth +suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth +ok","username":"dockeruser"} +
    +
    + +### AU-3 (1) Additional Audit Information **Description:** The information system generates audit records containing the following additional information: [Assignment: organization-defined additional, more detailed information]. -
      -
    **Control Information:** @@ -154,13 +246,51 @@ The information system generates audit records containing the following addition -## AU-3 (2) Centralized Management Of Planned Audit Record Content +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +logging stack can subsequently be used to interpolate the information +defined by this control from the logged audit records. Additional +information can be found at the following resource: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The logging +stack can subsequently be used to interpolate the information defined +by this control from the logged audit records. Additional +documentation can be found at the following resource: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The logging stack can subsequently be used to +interpolate the information defined by this control from the logged +audit records. Additional documentation can be found at the following +resource: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AU-3 (2) Centralized Management Of Planned Audit Record Content **Description:** The information system provides centralized management and configuration of the content to be captured in audit records generated by [Assignment: organization-defined information system components]. -
      -
    **Control Information:** @@ -189,30 +319,66 @@ The information system provides centralized management and configuration of the +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +logging stack can subsequently be used to interpolate the information +defined by this control from the logged audit records. Additional +information can be found at the following resource: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The logging +stack can subsequently be used to interpolate the information defined +by this control from the logged audit records. Additional +documentation can be found at the following resource: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The logging stack can subsequently be used to +interpolate the information defined by this control from the logged +audit records. Additional documentation can be found at the following +resource: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + ## AU-4 Audit Storage Capacity **Description:** The organization allocates audit record storage capacity in accordance with [Assignment: organization-defined audit record storage requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-4 (1) Transfer To Alternate Storage + +### AU-4 (1) Transfer To Alternate Storage **Description:** The information system off-loads audit records [Assignment: organization-defined frequency] onto a different system or media than the system being audited. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-5 Response To Audit Processing Failures **Description:** @@ -250,13 +416,51 @@ The information system: -## AU-5 (1) Audit Storage Capacity +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +logging stack can subsequently be configured to alert individuals in +the event of log processing failures. Additional information can be +found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The logging +stack can be used to interpolate the information defined by this +control and also be configured to alert on any audit processing +failures. Additional information can be found at the following +resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The logging stack can subsequently be configured to +alert individuals in the event of log processing failures. Additional +information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AU-5 (1) Audit Storage Capacity **Description:** The information system provides a warning to [Assignment: organization-defined personnel, roles, and/or locations] within [Assignment: organization-defined time period] when allocated audit record storage volume reaches [Assignment: organization-defined percentage] of repository maximum audit record storage capacity. -
      -
    **Control Information:** @@ -285,13 +489,50 @@ The information system provides a warning to [Assignment: organization-defined p -## AU-5 (2) Real-Time Alerts +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +logging stack can subsequently be configured to warn the organization +when the allocated log storage is full. Additional information can be +found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The logging +stack can subsequently be configured to warn the organization when the +allocated log storage is full. Additional information can be found at +the following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The logging stack can subsequently be configured to +warn the organization when the allocated log storage is full. +Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AU-5 (2) Real-Time Alerts **Description:** The information system provides an alert in [Assignment: organization-defined real-time period] to [Assignment: organization-defined personnel, roles, and/or locations] when the following audit failure events occur: [Assignment: organization-defined audit failure events requiring real-time alerts]. -
      -
    **Control Information:** @@ -320,30 +561,65 @@ The information system provides an alert in [Assignment: organization-defined re -## AU-5 (3) Configurable Traffic Volume Thresholds +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +logging stack can subsequently be configured to warn the organization +when audit log failures occur. Additional information can be found at +the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The +logging stack can subsequently be configured to warn the organization +when audit log failures occur. Additional information can be found at +the following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The logging stack can subsequently be configured to +warn the organization when audit log failures occur. Additional +information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AU-5 (3) Configurable Traffic Volume Thresholds **Description:** The information system enforces configurable network communications traffic volume thresholds reflecting limits on auditing capacity and [Selection: rejects; delays] network traffic above those thresholds. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-5 (4) Shutdown On Failure + +### AU-5 (4) Shutdown On Failure **Description:** The information system invokes a [Selection: full system shutdown; partial system shutdown; degraded operational mode with limited mission/business functionality available] in the event of [Assignment: organization-defined audit failures], unless an alternate audit capability exists. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-6 Audit Review, Analysis, And Reporting **Description:** @@ -356,39 +632,33 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (1) Process Integration + +### AU-6 (1) Process Integration **Description:** The organization employs automated mechanisms to integrate audit review, analysis, and reporting processes to support organizational processes for investigation and response to suspicious activities. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (3) Correlate Audit Repositories + +### AU-6 (3) Correlate Audit Repositories **Description:** The organization analyzes and correlates audit records across different repositories to gain organization-wide situational awareness. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (4) Central Review And Analysis + +### AU-6 (4) Central Review And Analysis **Description:** The information system provides the capability to centrally review and analyze audit records from multiple components within the system. -
      -
    **Control Information:** @@ -417,78 +687,105 @@ The information system provides the capability to centrally review and analyze a -## AU-6 (5) Integration / Scanning And Monitoring Capabilities +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +organization can subsequently centrally review and analyze all of the +Docker EE audit records. Additional information can be found at the +following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The +organization can subsequently centrally review and analyze all of the +Docker EE audit records. Additional information can be found at the +following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The organization can subsequently centrally review and +analyze all of the Docker EE audit records. Additional information can +be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AU-6 (5) Integration / Scanning And Monitoring Capabilities **Description:** The organization integrates analysis of audit records with analysis of [Selection (one or more): vulnerability scanning information; performance data; information system monitoring information; [Assignment: organization-defined data/information collected from other sources]] to further enhance the ability to identify inappropriate or unusual activity. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (6) Correlation With Physical Monitoring + +### AU-6 (6) Correlation With Physical Monitoring **Description:** The organization correlates information from audit records with information obtained from monitoring physical access to further enhance the ability to identify suspicious, inappropriate, unusual, or malevolent activity. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (7) Permitted Actions + +### AU-6 (7) Permitted Actions **Description:** The organization specifies the permitted actions for each [Selection (one or more): information system process; role; user] associated with the review, analysis, and reporting of audit information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (8) Full Text Analysis Of Privileged Commands + +### AU-6 (8) Full Text Analysis Of Privileged Commands **Description:** The organization performs a full text analysis of audited privileged commands in a physically distinct component or subsystem of the information system, or other information system that is dedicated to that analysis. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (9) Correlation With Information From Nontechnical Sources + +### AU-6 (9) Correlation With Information From Nontechnical Sources **Description:** The organization correlates information from nontechnical sources with audit information to enhance organization-wide situational awareness. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-6 (10) Audit Level Adjustment + +### AU-6 (10) Audit Level Adjustment **Description:** The organization adjusts the level of audit review, analysis, and reporting within the information system when there is a change in risk based on law enforcement information, intelligence information, or other credible sources of information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-7 Audit Reduction And Report Generation **Description:** @@ -526,13 +823,58 @@ The information system provides an audit reduction and report generation capabil -## AU-7 (1) Automatic Processing +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +logging stack can subsequently be used to facilitate the audit +reduction and report generation requirements of this control. +Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/The underlying operating system chosen to support Docker Trusted +Registry should be certified to ensure that logs are not altered +during generation and transmission to a remote logging stack. +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The logging +stack can subsequently be used to facilitate the audit reduction and +report generation requirements of this control. Additional information +can be found at the following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ +The underlying operating system chosen to support Docker Enterprise +Edition should be certified to ensure that logs are not altered during +generation and transmission to a remote logging stack. + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The logging stack can subsequently be used to +facilitate the audit reduction and report generation requirements of +this control. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/The underlying operating system chosen to support Universal Control +Plane should be certified to ensure that logs are not altered during +generation and transmission to a remote logging stack. +
    +
    + +### AU-7 (1) Automatic Processing **Description:** The information system provides the capability to process audit records for events of interest based on [Assignment: organization-defined audit fields within audit records]. -
      -
    **Control Information:** @@ -561,18 +903,55 @@ The information system provides the capability to process audit records for even -## AU-7 (2) Automatic Sort And Search +**Implemenation Details:** + + + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack, which in turn, sends the Docker Trusted Registry +backend container audit records to the remote logging stack. The +logging stack can subsequently be configured to parse information by +organization-defined audit fields. Additional information can be found +at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. The logging +stack can subsequently be configured to parse information by +organization-defined audit fields. Additional information can be found +at the following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to log data to a remote +logging stack. The logging stack can subsequently be configured to +parse information by organization-defined audit fields. Additional +information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ +
    +
    + +### AU-7 (2) Automatic Sort And Search **Description:** The information system provides the capability to sort and search audit records for events of interest based on the content of [Assignment: organization-defined audit fields within audit records]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-8 Time Stamps **Description:** @@ -610,7 +989,41 @@ The information system: -## AU-8 (1) Synchronization With Authoritative Time Source +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry uses the system clock of the underlying +operating system on which it runs. This behavior cannot be modified.The underlying operating system on which Docker Trusted Registry runs +should be configured such that its system clock uses Coordinated +Universal Time (UTC) as indicated by this control. Refer to the +operating system's instructions for doing so. +
    +
    +Docker Enterprise Edition uses the system clock of the underlying +operating system on which it runs. This behavior cannot be modified. +The underlying operating system on which Docker Enterprise Edition +runs should be configured such that its system clock uses Coordinated +Universal Time (UTC) as indicated by this control. Refer to the +operating system's instructions for doing so. + +
    +
    +Universal Control Plane uses the system clock of the underlying +operating system on which it runs. This behavior cannot be modified.The underlying operating system on which Universal Control Plane runs +should be configured such that its system clock uses Coordinated +Universal Time (UTC) as indicated by this control. Refer to the +operating system's instructions for doing so. +
    +
    + +### AU-8 (1) Synchronization With Authoritative Time Source **Description:** @@ -647,25 +1060,73 @@ The information system: -## AU-8 (2) Secondary Authoritative Time Source +**Implemenation Details:** + + + +
    +
    +The underlying operating system on which Docker Trusted Registry runs +should be configured such that its system clock compares itself with +an authoritative time source as indicated by this control. This can be +accomplished by utilizing the Network Time Protocol (NTP). Refer to +the operating system's instructions for doing so.The underlying operating system on which Docker Trusted Registry runs +should be configured such that its system clock synchronizes itself to +an authoritative time source as defined by part (a) of this control +any time the time difference exceeds that of the organization-defined +time period. This can be accomplished by utilizing the Network Time +Protocol (NTP). Refer to the operating system's instructions for doing +so. +
    +
    +The underlying operating system on which Docker Enterprise Edition runs should +be configured such that its system clock compares itself with an +authoritative time source as indicated by this control. This can be +accomplished by utilizing the Network Time Protocol (NTP). Refer to +the operating system's instructions for doing so. +The underlying operating system on which Docker Enterprise Edition +runs should be configured such that its system clock synchronizes +itself to an authoritative time source as defined by part (a) of this +control any time the time difference exceeds that of the +organization-defined time period. This can be accomplished by +utilizing the Network Time Protocol (NTP). Refer to the operating +system's instructions for doing so. + +
    +
    +The underlying operating system on which Universal Control Plane runs +should be configured such that its system clock compares itself with +an authoritative time source as indicated by this control. This can be +accomplished by utilizing the Network Time Protocol (NTP). Refer to +the operating system's instructions for doing so.The underlying operating system on which Universal Control Plane runs +should be configured such that its system clock synchronizes itself to +an authoritative time source as defined by part (a) of this control +any time the time difference exceeds that of the organization-defined +time period. This can be accomplished by utilizing the Network Time +Protocol (NTP). Refer to the operating system's instructions for doing +so. +
    +
    + +### AU-8 (2) Secondary Authoritative Time Source **Description:** The information system identifies a secondary authoritative time source that is located in a different geographic region than the primary authoritative time source. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-9 Protection Of Audit Information **Description:** The information system protects audit information and audit tools from unauthorized access, modification, and deletion. -
      -
    **Control Information:** @@ -694,25 +1155,76 @@ The information system protects audit information and audit tools from unauthori -## AU-9 (1) Hardware Write-Once Media +**Implemenation Details:** + + + +
    +
    +By default, Docker Trusted Registry is configured to use the +underlying logging capabilities of Docker Enterprise Edition. As such, +on the underlying Linux operating system, only root and sudo users and +users that have been added to the 'docker' group have the ability to +access the logs generated by UCP backend service containers. In +addition, only UCP Administrator users can change the logging endpoint +of the system should it be decided that logs be sent to a remote +logging stack. In this case, the organization is responsible for +configuring the remote logging stack per the provisions of this +control. +
    +
    +On the underlying Linux operating system supporting Docker Enterprise +Edition, only root and sudo users and users that have been added to +the "docker" group have the ability to access the logs generated by +UCP backend service containers. Should the organization decide to +configure Docker Enterprise Edition to use a logging driver other than +the default json-file driver, the organization is subsequently +responsible for configuring the chosen logging stack per the +provisions of this control. Additional information can be found at the +following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +In addition, for Linux operating systems supporting Docker Enterprise +Edition that use the systemd daemon, it is imperative that the Journal +is secured per the requirements of this control. The same applies for +Linux operating systems supporting Docker Enterprise Edition that +instead use upstart. + +
    +
    +By default, Universal Control Plane is configured to use the +underlying logging capabilities of Docker Enterprise Edition. As such, +on the underlying Linux operating system, only root and sudo users and +users that have been added to the 'docker' group have the ability to +access the logs generated by UCP backend service containers. In +addition, only UCP Administrator users can change the logging endpoint +of the system should it be decided that logs be sent to a remote +logging stack. In this case, the organization is responsible for +configuring the remote logging stack per the provisions of this +control. +
    +
    + +### AU-9 (1) Hardware Write-Once Media **Description:** The information system writes audit trails to hardware-enforced, write-once media. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-9 (2) Audit Backup On Separate Physical Systems / Components + +### AU-9 (2) Audit Backup On Separate Physical Systems / Components **Description:** The information system backs up audit records [Assignment: organization-defined frequency] onto a physically different system or system component than the system or component being audited. -
      -
    **Control Information:** @@ -741,13 +1253,51 @@ The information system backs up audit records [Assignment: organization-defined -## AU-9 (3) Cryptographic Protection +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry resides as an Application on a Universal +Control Plane cluster, acan be configured to send logs to a remote +logging stack. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +The logging stack can subsequently be configured to back up audit +records per the schedule defined by this control. +
    +
    +Docker Enterprise Edition can be configured to use a logging driver +that can subsequently meet the backup requirements of this control. +Additional information can be found at the following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to send logs to a remote +logging stack. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +The logging stack can subsequently be configured to back up audit +records per the schedule defined by this control. +
    +
    + +### AU-9 (3) Cryptographic Protection **Description:** The information system implements cryptographic mechanisms to protect the integrity of audit information and audit tools. -
      -
    **Control Information:** @@ -771,49 +1321,71 @@ The information system implements cryptographic mechanisms to protect the integr -## AU-9 (4) Access By Subset Of Privileged Users +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry resides as an Application on a Universal +Control Plane cluster, acan be configured to send logs to a remote +logging stack. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +The logging stack can subsequently be configured to meet the +encryption mechanisms required by this control. +
    +
    +Docker Enterprise Edition can be configured to use a logging driver +that can subsequently meet the encryption mechanisms required by this +control. Additional information can be found at the following +resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    + +### AU-9 (4) Access By Subset Of Privileged Users **Description:** The organization authorizes access to management of audit functionality to only [Assignment: organization-defined subset of privileged users]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-9 (5) Dual Authorization + +### AU-9 (5) Dual Authorization **Description:** The organization enforces dual authorization for [Selection (one or more): movement; deletion] of [Assignment: organization-defined audit information]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-9 (6) Read Only Access + +### AU-9 (6) Read Only Access **Description:** The organization authorizes read-only access to audit information to [Assignment: organization-defined subset of privileged users]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-10 Non-Repudiation **Description:** The information system protects against an individual (or process acting on behalf of an individual) falsely denying having performed [Assignment: organization-defined actions to be covered by non-repudiation]. -
      -
    **Control Information:** @@ -832,7 +1404,33 @@ The information system protects against an individual (or process acting on beha -## AU-10 (1) Association Of Identities +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition includes functionality known as Docker +Content Trust which allows one to cryptographically sign Docker +images. It enforces client-side signing and verification of image tags +and provides the ability to use digital signatures for data sent to +and received from Docker Trusted Registry. This ultimately provides +one with the ability to verify both the integrity and the publisher of +all data received from DTR over any channel. With Docker Content +Trust, an organization can enforce signature verification of all +content and prohibit unsigned and unapproved content from being +manipulated; thus supproting the non-repudiation requirements of this +control. Additional information can be found at the following +resources: + +- https://docs.docker.com/engine/security/trust/content_trust/ + +
    +
    + +### AU-10 (1) Association Of Identities **Description:** @@ -844,9 +1442,9 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## AU-10 (2) Validate Binding Of Information Producer Identity + +### AU-10 (2) Validate Binding Of Information Producer Identity **Description:** @@ -858,21 +1456,19 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## AU-10 (3) Chain Of Custody + +### AU-10 (3) Chain Of Custody **Description:** The information system maintains reviewer/releaser identity and credentials within the established chain of custody for all information reviewed or released. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-10 (4) Validate Binding Of Information Reviewer Identity + +### AU-10 (4) Validate Binding Of Information Reviewer Identity **Description:** @@ -884,15 +1480,13 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization + ## AU-11 Audit Record Retention **Description:** The organization retains audit records for [Assignment: organization-defined time period consistent with records retention policy] to provide support for after-the-fact investigations of security incidents and to meet regulatory and organizational information retention requirements. -
      -
    **Control Information:** @@ -921,18 +1515,61 @@ The organization retains audit records for [Assignment: organization-defined tim -## AU-11 (1) Long-Term Retrieval Capability +**Implemenation Details:** + + + +
    +
    +The organization will be responsible for meeting the requirements of +this control. To assist with these requirements, Docker Trusted +Registry resides as an Application on a Universal Control Plane +cluster, and as such, can be configured to send logs to a remote +logging stack. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +This logging stack can subsequently be configured to retain logs for +the duration required by this control. +
    +
    +The organization will be responsible for meeting the requirements of +this control. To assist with these requirements, Docker Enterprise +Edition can be configured to use a logging driver that stores data in +a location for the duration specified by this control. Additional +information can be found at the following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +The organization will be responsible for meeting the requirements of +this control. To assist with these requirements, Universal Control +Plane can be configured to send logs to a remote logging stack. +Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +This logging stack can subsequently be configured retain logs for the +duration required by this control. +
    +
    + +### AU-11 (1) Long-Term Retrieval Capability **Description:** The organization employs [Assignment: organization-defined measures] to ensure that long-term audit records generated by the information system can be retrieved. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-12 Audit Generation **Description:** @@ -971,13 +1608,74 @@ The information system: -## AU-12 (1) System-Wide / Time-Correlated Audit Trail +**Implemenation Details:** + + + +
    +
    +All of the event types indicated by AU-2 a. are logged by a +combination of the backend services within Universal Control Plane and +Docker Trusted Registry. Additional information can be found at the +following resources: + +- https://docs.docker.com/datacenter/dtr/2.1/guides/monitor-troubleshoot/ + +The underlying Linux operating system supporting DTR can be configured +to audit Docker-specific events with the auditd daemon. Refer to the +specific Linux distribution in use for instructions on configuring +this service.Using auditd on the Linux operating system supporting DTR, the +organization can configure audit rules to select which Docker-specific +events are to be audited. Refer to the specific Linux distribution in +use for instructions on configuring this service. +
    +
    +Both Universal Control Plane and Docker Trusted Registry backend +service containers, all of which reside on Docker Enterprise Edition, +log all of the event types indicated by this AU-2 a. These and other +application containers that reside on Docker Enterprise Edition can be +configured to log data via an appropriate Docker logging driver. +Additional information can be found at the following resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +The underlying Linux operating system supporting Docker Enterprise +Edition can be configured to audit Docker-specific events with the +auditd daemon. Refer to the specific Linux distribution in use for +instructions on configuring this service. +Using auditd on the Linux operating system supporting CS Docker +Engine, the organization can configure audit rules to select which +Docker-specific events are to be audited. Refer to the specific Linux +distribution in use for instructions on configuring this service. + +
    +
    +All of the event types indicated by AU-2 a. are logged by the backend +ucp-controller service within Universal Control Plane. In addition, +each container created on a Universal Control Plane cluster logs event +data. Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +The underlying Linux operating system supporting UCP can be configured +to audit Docker-specific events with the auditd daemon. Refer to the +specific Linux distribution in use for instructions on configuring +this service.Using auditd on the Linux operating system supporting UCP, the +organization can configure audit rules to select which Docker-specific +events are to be audited. Refer to the specific Linux distribution in +use for instructions on configuring this service. +
    +
    + +### AU-12 (1) System-Wide / Time-Correlated Audit Trail **Description:** The information system compiles audit records from [Assignment: organization-defined information system components] into a system-wide (logical or physical) audit trail that is time-correlated to within [Assignment: organization-defined level of tolerance for the relationship between time stamps of individual records in the audit trail]. -
      -
    **Control Information:** @@ -1006,25 +1704,66 @@ The information system compiles audit records from [Assignment: organization-def -## AU-12 (2) Standardized Formats +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry resides as an Application on a Universal +Control Plane cluster, and as such, can be configured to send logs to +a remote logging stack. Additional information can be found at the +following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +This logging stack can subsequently be used to compile audit records +in to a system-wide audit trail that is time-correlated per the +requirements of this control. +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. This +logging stack can subsequently be used to compile audit records in to +a system-wide audit trail that is time-correlated per the requirements +of this control. Additional information can be found at the following +resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to send logs to a remote +logging stack. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +This logging stack can subsequently be used to compile audit records +in to a system-wide audit trail that is time-correlated per the +requirements of this control. +
    +
    + +### AU-12 (2) Standardized Formats **Description:** The information system produces a system-wide (logical or physical) audit trail composed of audit records in a standardized format. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-12 (3) Changes By Authorized Individuals + +### AU-12 (3) Changes By Authorized Individuals **Description:** The information system provides the capability for [Assignment: organization-defined individuals or roles] to change the auditing to be performed on [Assignment: organization-defined information system components] based on [Assignment: organization-defined selectable event criteria] within [Assignment: organization-defined time thresholds]. -
      -
    **Control Information:** @@ -1053,135 +1792,155 @@ The information system provides the capability for [Assignment: organization-def +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry resides as an Application on a Universal +Control Plane cluster, and as such, can be configured to send logs to +a remote logging stack. Additional information can be found at the +following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +This logging stack can subsequently be used to meet the requirements +of this control. +
    +
    +Docker Enterprise Edition can be configured with various logging +drivers to send audit events to an external logging stack. This +logging stack can subsequently be used to meet the requirements of +this control. Additional information can be found at the following +resources: + +- https://docs.docker.com/engine/admin/logging/overview/ + +
    +
    +Universal Control Plane can be configured to send logs to a remote +logging stack. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +This logging stack can subsequently be used to meet the requirements +of this control. +
    +
    + ## AU-13 Monitoring For Information Disclosure **Description:** The organization monitors [Assignment: organization-defined open source information and/or information sites] [Assignment: organization-defined frequency] for evidence of unauthorized disclosure of organizational information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-13 (1) Use Of Automated Tools + +### AU-13 (1) Use Of Automated Tools **Description:** The organization employs automated mechanisms to determine if organizational information has been disclosed in an unauthorized manner. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-13 (2) Review Of Monitored Sites + +### AU-13 (2) Review Of Monitored Sites **Description:** The organization reviews the open source information sites being monitored [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-14 Session Audit **Description:** The information system provides the capability for authorized users to select a user session to capture/record or view/hear. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-14 (1) System Start-Up + +### AU-14 (1) System Start-Up **Description:** The information system initiates session audits at system start-up. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-14 (2) Capture/Record And Log Content + +### AU-14 (2) Capture/Record And Log Content **Description:** The information system provides the capability for authorized users to capture/record and log content related to a user session. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-14 (3) Remote Viewing / Listening + +### AU-14 (3) Remote Viewing / Listening **Description:** The information system provides the capability for authorized users to remotely view/hear all content related to an established user session in real time. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-15 Alternate Audit Capability **Description:** The organization provides an alternate audit capability in the event of a failure in primary audit capability that provides [Assignment: organization-defined alternate audit functionality]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## AU-16 Cross-Organizational Auditing **Description:** The organization employs [Assignment: organization-defined methods] for coordinating [Assignment: organization-defined audit information] among external organizations when audit information is transmitted across organizational boundaries. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-16 (1) Identity Preservation + +### AU-16 (1) Identity Preservation **Description:** The organization requires that the identity of individuals be preserved in cross-organizational audit trails. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## AU-16 (2) Sharing Of Audit Information + +### AU-16 (2) Sharing Of Audit Information **Description:** The organization provides cross-organizational audit information to [Assignment: organization-defined organizations] based on [Assignment: organization-defined cross-organizational sharing agreements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/CA.md b/docs/compliance/reference/800-53/CA.md index 17abd7e..20f5b26 100644 --- a/docs/compliance/reference/800-53/CA.md +++ b/docs/compliance/reference/800-53/CA.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## CA-2 Security Assessments **Description:** @@ -48,44 +48,38 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CA-2 (1) Independent Assessors + +### CA-2 (1) Independent Assessors **Description:** The organization employs assessors or assessment teams with [Assignment: organization-defined level of independence] to conduct security control assessments. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-2 (2) Specialized Assessments + +### CA-2 (2) Specialized Assessments **Description:** The organization includes as part of security control assessments, [Assignment: organization-defined frequency], [Selection: announced; unannounced], [Selection (one or more): in-depth monitoring; vulnerability scanning; malicious user testing; insider threat assessment; performance/load testing; [Assignment: organization-defined other forms of security assessment]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-2 (3) External Organizations + +### CA-2 (3) External Organizations **Description:** The organization accepts the results of an assessment of [Assignment: organization-defined information system] performed by [Assignment: organization-defined external organization] when the assessment meets [Assignment: organization-defined requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CA-3 System Interconnections **Description:** @@ -99,68 +93,58 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CA-3 (1) Unclassified National Security System Connections + +### CA-3 (1) Unclassified National Security System Connections **Description:** The organization prohibits the direct connection of an [Assignment: organization-defined unclassified, national security system] to an external network without the use of [Assignment: organization-defined boundary protection device]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-3 (2) Classified National Security System Connections + +### CA-3 (2) Classified National Security System Connections **Description:** The organization prohibits the direct connection of a classified, national security system to an external network without the use of [Assignment: organization-defined boundary protection device]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-3 (3) Unclassified Non-National Security System Connections + +### CA-3 (3) Unclassified Non-National Security System Connections **Description:** The organization prohibits the direct connection of an [Assignment: organization-defined unclassified, non-national security system] to an external network without the use of [Assignment; organization-defined boundary protection device]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-3 (4) Connections To Public Networks + +### CA-3 (4) Connections To Public Networks **Description:** The organization prohibits the direct connection of an [Assignment: organization-defined information system] to a public network. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-3 (5) Restrictions On External System Connections + +### CA-3 (5) Restrictions On External System Connections **Description:** The organization employs [Selection: allow-all, deny-by-exception; deny-all, permit-by-exception] policy for allowing [Assignment: organization-defined information systems] to connect to external information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CA-5 Plan Of Action And Milestones **Description:** @@ -173,20 +157,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CA-5 (1) Automation Support For Accuracy / Currency + +### CA-5 (1) Automation Support For Accuracy / Currency **Description:** The organization employs automated mechanisms to help ensure that the plan of action and milestones for the information system is accurate, up to date, and readily available. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CA-6 Security Authorization **Description:** @@ -200,8 +182,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## CA-7 Continuous Monitoring **Description:** @@ -234,66 +216,76 @@ The organization develops a continuous monitoring strategy and implements a cont -## CA-7 (1) Independent Assessment +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing Docker +Enterprise Edition and for helping the organization meet the +continuous monitoring requirements of this control. Additional +information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CA-7 (1) Independent Assessment **Description:** The organization employs assessors or assessment teams with [Assignment: organization-defined level of independence] to monitor the security controls in the information system on an ongoing basis. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-7 (3) Trend Analyses + +### CA-7 (3) Trend Analyses **Description:** The organization employs trend analyses to determine if security control implementations, the frequency of continuous monitoring activities, and/or the types of activities used in the continuous monitoring process need to be modified based on empirical data. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CA-8 Penetration Testing **Description:** The organization conducts penetration testing [Assignment: organization-defined frequency] on [Assignment: organization-defined information systems or system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-8 (1) Independent Penetration Agent Or Team + +### CA-8 (1) Independent Penetration Agent Or Team **Description:** The organization employs an independent penetration agent or penetration team to perform penetration testing on the information system or system components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CA-8 (2) Red Team Exercises + +### CA-8 (2) Red Team Exercises **Description:** The organization employs [Assignment: organization-defined red team exercises] to simulate attempts by adversaries to compromise organizational information systems in accordance with [Assignment: organization-defined rules of engagement]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CA-9 Internal System Connections **Description:** @@ -306,17 +298,15 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CA-9 (1) Security Compliance Checks + +### CA-9 (1) Security Compliance Checks **Description:** The information system performs security compliance checks on constituent system components prior to the establishment of the internal connection. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/CM.md b/docs/compliance/reference/800-53/CM.md index 15b3211..0cf9804 100644 --- a/docs/compliance/reference/800-53/CM.md +++ b/docs/compliance/reference/800-53/CM.md @@ -41,13 +41,31 @@ The organization: +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing Docker +Enterprise Edition and for helping the organization meet the +configurmation management requirements of this control. Additional +information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + ## CM-2 Baseline Configuration **Description:** The organization develops, documents, and maintains under configuration control, a current baseline configuration of the information system. -
      -
    **Control Information:** @@ -66,7 +84,27 @@ The organization develops, documents, and maintains under configuration control, -## CM-2 (1) Reviews And Updates +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing Docker +Enterprise Edition and for helping the organization meet the +configurmation management requirements of this control. Additional +information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-2 (1) Reviews And Updates **Description:** @@ -94,13 +132,31 @@ The organization reviews and updates the baseline configuration of the informati -## CM-2 (2) Automation Support For Accuracy / Currency +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing Docker +Enterprise Edition and for helping the organization meet the +configurmation management requirements of this control. Additional +information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-2 (2) Automation Support For Accuracy / Currency **Description:** The organization employs automated mechanisms to maintain an up-to-date, complete, accurate, and readily available baseline configuration of the information system. -
      -
    **Control Information:** @@ -119,13 +175,36 @@ The organization employs automated mechanisms to maintain an up-to-date, complet -## CM-2 (3) Retention Of Previous Configurations +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing Docker +Enterprise Edition and for helping the organization meet the +configurmation management requirements of this control. CIS regularly +updates their benchmark to reflect the latest updates in the stable +release of Docker Engine. Various configuration management tools such +as Inspec (http://inspec.io/) can be used to audit Docker Enterprise +Edition system configuration to ensure that the secure baseline +configurations have been applied in an automated fashion. Additional +information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-2 (3) Retention Of Previous Configurations **Description:** The organization retains [Assignment: organization-defined previous versions of baseline configurations of the information system] to support rollback. -
      -
    **Control Information:** @@ -144,19 +223,43 @@ The organization retains [Assignment: organization-defined previous versions of -## CM-2 (6) Development And Test Environments +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing +Docker Enterprise Edition and for helping the organization meet the +configurmation management requirements of this control. CIS regularly +updates their benchmark to reflect the latest updates in the stable +release of Docker Engine. Various configuration management tools such +as Inspec (http://inspec.io/) can be used to audit Docker Enterprise +Edition system configuration to ensure that the secure baseline +configurations have been applied in an automated fashion and can be +rolled back as required by this control. Additional information can be +found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-2 (6) Development And Test Environments **Description:** The organization maintains a baseline configuration for information system development and test environments that is managed separately from the operational baseline configuration. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-2 (7) Configure Systems, Components, Or Devices For High-Risk Areas + +### CM-2 (7) Configure Systems, Components, Or Devices For High-Risk Areas **Description:** @@ -168,8 +271,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## CM-3 Configuration Change Control **Description:** @@ -202,7 +305,27 @@ The organization: -## CM-3 (1) Automated Document / Notification / Prohibition Of Changes +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing +Docker Enterprise Edition and for helping the organization meet the +configurmation management change control requirements of this control. +Additional information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-3 (1) Automated Document / Notification / Prohibition Of Changes **Description:** @@ -233,13 +356,35 @@ The organization employs automated mechanisms to: -## CM-3 (2) Test / Validate / Document Changes +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing +Docker Enterprise Edition and for helping the organization meet the +configurmation management change control requirements of this control. +Various configuration management tools such as Inspec +(http://inspec.io/) can be used to audit Docker Enterprise Edition +system configuration to ensure that the secure baseline configurations +have been applied in an automated fashion. Additional information can +be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-3 (2) Test / Validate / Document Changes **Description:** The organization tests, validates, and documents changes to the information system before implementing the changes on the operational system. -
      -
    **Control Information:** @@ -258,49 +403,65 @@ The organization tests, validates, and documents changes to the information syst -## CM-3 (3) Automated Change Implementation +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing +Docker Enterprise Edition and for helping the organization meet the +configurmation management change control requirements of this control. +Various configuration management tools such as Inspec +(http://inspec.io/) can be used to audit Docker Enterprise Edition +system configuration to ensure that the secure baseline configurations +have been applied in an automated fashion. Additional information can +be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-3 (3) Automated Change Implementation **Description:** The organization employs automated mechanisms to implement changes to the current information system baseline and deploys the updated baseline across the installed base. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-3 (4) Security Representative + +### CM-3 (4) Security Representative **Description:** The organization requires an information security representative to be a member of the [Assignment: organization-defined configuration change control element]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-3 (5) Automated Security Response + +### CM-3 (5) Automated Security Response **Description:** The information system implements [Assignment: organization-defined security responses] automatically if baseline configurations are changed in an unauthorized manner. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-3 (6) Cryptography Management + +### CM-3 (6) Cryptography Management **Description:** The organization ensures that cryptographic mechanisms used to provide [Assignment: organization-defined security safeguards] are under configuration management. -
      -
    **Control Information:** @@ -319,61 +480,71 @@ The organization ensures that cryptographic mechanisms used to provide [Assignme +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing +Docker Enterprise Edition and for helping the organization meet the +cryptography management requirements of this control. Additional +information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + ## CM-4 Security Impact Analysis **Description:** The organization analyzes changes to the information system to determine potential security impacts prior to change implementation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-4 (1) Separate Test Environments + +### CM-4 (1) Separate Test Environments **Description:** The organization analyzes changes to the information system in a separate test environment before implementation in an operational environment, looking for security impacts due to flaws, weaknesses, incompatibility, or intentional malice. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-4 (2) Verification Of Security Functions + +### CM-4 (2) Verification Of Security Functions **Description:** The organization, after the information system is changed, checks the security functions to verify that the functions are implemented correctly, operating as intended, and producing the desired outcome with regard to meeting the security requirements for the system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CM-5 Access Restrictions For Change **Description:** The organization defines, documents, approves, and enforces physical and logical access restrictions associated with changes to the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-5 (1) Automated Access Enforcement / Auditing + +### CM-5 (1) Automated Access Enforcement / Auditing **Description:** The information system enforces access restrictions and supports auditing of the enforcement actions. -
      -
    **Control Information:** @@ -397,13 +568,40 @@ The information system enforces access restrictions and supports auditing of the -## CM-5 (2) Review System Changes +**Implemenation Details:** + + + +
    +
    +Role-based access control can be configured within Docker Trusted +Registry to meet the requirements of this control. Additional +information can be found at the following resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC +
    +
    +Role-based access control can be configured within Universal Control +Plane to meet the requirements of this control. Additional information +can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#RBAC_and_Managing_Team_Level_Access_to_Resources +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#RBAC +
    +
    + +### CM-5 (2) Review System Changes **Description:** The organization reviews information system changes [Assignment: organization-defined frequency] and [Assignment: organization-defined circumstances] to determine whether unauthorized changes have occurred. -
      -
    **Control Information:** @@ -422,13 +620,31 @@ The organization reviews information system changes [Assignment: organization-de -## CM-5 (3) Signed Components +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing +Docker Enterprise Edition and for helping the organization meet the +system change requirements of this control. Additional information can +be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-5 (3) Signed Components **Description:** The information system prevents the installation of [Assignment: organization-defined software and firmware components] without verification that the component has been digitally signed using a certificate that is recognized and approved by the organization. -
      -
    **Control Information:** @@ -457,19 +673,84 @@ The information system prevents the installation of [Assignment: organization-de -## CM-5 (4) Dual Authorization +**Implemenation Details:** + + + +
    +
    +Docker Content Trust is a capability provided by Docker Enterprise +Edition that enforces client-side signing and verification of Docker +image tags. It provides the ability to use digital signatures for data +sent to and received from Docker Trusted Registry and the public +Docker Store. These signatures allow client-side verification of the +integrity and publisher of specific image tags. All Docker Trusted +Registry Docker images are officially signed and verified by Docker, +Inc. + +When installing Docker Trusted Registry, you should enable Docker +Content Trust and subsequently pull the the signed DTR image tag. +Additional information can be found at teh following resources: + +- https://docs.docker.com/engine/security/trust/content_trust/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/manage-trusted-repositories/ +
    +
    +Before installing Docker Enterprise Edition, ensure that your +supporting Linux operating system's packager manager supports package +signature verification and that it is enabled. It is also required +that you import the Docker public key for CS packages so as to +retrieve the validated and signed package from Docker, Inc. Refer to +your Linux OS documentation for instructions on completing the above +steps. + +In addition, Docker Content Trust is a capability provided by CS +Docker Engine that enforces client-side signing and verification of +Docker image tags. It provides the ability to use digital signatures +for data sent to and received from Docker Trusted Registry and the +public Docker Store. These signatures allow client-side verification +of the integrity and publisher of specific image tags. When enabling +Docker Content Trust in Docker Enterprise Edition you can enforce the +use of signed Docker images. Additional information can be found at +the following resources: + +- https://docs.docker.com/engine/security/trust/content_trust/ + +
    +
    +Docker Content Trust is a capability provided by Docker Enterprise Edition +that enforces client-side signing and verification of Docker image +tags. It provides the ability to use digital signatures for data sent +to and received from Docker Trusted Registry and the public Docker +Store. These signatures allow client-side verification of the +integrity and publisher of specific image tags. All Universal Control +Plane Docker images are officially signed and verified by Docker, Inc. + +When configuring Universal Control Plane, you should enforce +applications to only use Docker images signed by trusted UCP users +within your organization. Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/manage-trusted-repositories/ +- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/continuous-integration/ +
    +
    + +### CM-5 (4) Dual Authorization **Description:** The organization enforces dual authorization for implementing changes to [Assignment: organization-defined information system components and system-level information]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-5 (5) Limit Production / Operational Privileges + +### CM-5 (5) Limit Production / Operational Privileges **Description:** @@ -481,20 +762,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-5 (6) Limit Library Privileges + +### CM-5 (6) Limit Library Privileges **Description:** The organization limits privileges to change software resident within software libraries. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CM-6 Configuration Settings **Description:** @@ -509,15 +788,13 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-6 (1) Automated Central Management / Application / Verification + +### CM-6 (1) Automated Central Management / Application / Verification **Description:** The organization employs automated mechanisms to centrally manage, apply, and verify configuration settings for [Assignment: organization-defined information system components]. -
      -
    **Control Information:** @@ -546,18 +823,46 @@ The organization employs automated mechanisms to centrally manage, apply, and ve -## CM-6 (2) Respond To Unauthorized Changes +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with these requirements, the organization can +incorporate the use of an external configuration management system to +meet the requirements of this control. +
    +
    +The organization is responsible for meeting the requirements of this +control. The organization can incorporate the use of an external +configuration management system to meet the requirements of this +control. + +
    +
    +The organization is responsible for meeting the requirements of this + control. To assist with these requirements, the organization can + incorporate the use of an external configuration management system to + meet the requirements of this control. +
    +
    + +### CM-6 (2) Respond To Unauthorized Changes **Description:** The organization employs [Assignment: organization-defined security safeguards] to respond to unauthorized changes to [Assignment: organization-defined configuration settings]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CM-7 Least Functionality **Description:** @@ -570,9 +875,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-7 (1) Periodic Review + +### CM-7 (1) Periodic Review **Description:** @@ -584,15 +889,13 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-7 (2) Prevent Program Execution + +### CM-7 (2) Prevent Program Execution **Description:** The information system prevents program execution in accordance with [Selection (one or more): [Assignment: organization-defined policies regarding software program usage and restrictions]; rules authorizing the terms and conditions of software program usage]. -
      -
    **Control Information:** @@ -621,19 +924,49 @@ The information system prevents program execution in accordance with [Selection -## CM-7 (3) Registration Compliance +**Implemenation Details:** + + + +
    +
    +The organization can define a list of allowed base Docker images and +make them available via Docker Trusted Registry. The organization can +also prevent users from being able to pull Docker images from +untrusted sources. +
    +
    +In order to restrict which Docker images can be used to deploy +applications to Docker Enterprise Edition, the organization must define a list +of allowed base Docker images and make them available via Docker +Trusted Registry. The organization must also prevent users from being +able to pull Docker images from untrusted sources. + +
    +
    +In order to restrict which Docker images can be used to deploy +applications to Universal Control Plane, the organization must define a +list of allowed base Docker images and make them available via Docker +Trusted Registry. The organization must also prevent users from being +able to pull Docker images from untrusted sources. +
    +
    + +### CM-7 (3) Registration Compliance **Description:** The organization ensures compliance with [Assignment: organization-defined registration requirements for functions, ports, protocols, and services]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-7 (4) Unauthorized Software / Blacklisting + +### CM-7 (4) Unauthorized Software / Blacklisting **Description:** @@ -646,9 +979,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-7 (5) Authorized Software / Whitelisting + +### CM-7 (5) Authorized Software / Whitelisting **Description:** @@ -686,6 +1019,57 @@ The organization: +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with these requirements, the organization can +define a list of allowed base Docker images and make them available +via Docker Trusted Registry. The organization must also prevent users +from being able to pull Docker images from untrusted sources.The organization is responsible for meeting the requirements of this +control. To assist with these requirements, the organization can +configure its systems to ensure that only approved Docker images are +stored in Docker Trusted Registry. This can be accomplished by using +Docker Content Trust to sign Docker images which can subsequently be +stored in Docker Trusted Registry. +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with these requirements and in order to restrict +which Docker images can be used to deploy applications to CS Docker +Engine, the organization must define a list of allowed base Docker +images and make them available via Docker Trusted Registry. The +organization must also prevent users from being able to pull Docker +images from untrusted sources. + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with these requirements and in order to restrict +which Docker images can be used to deploy applications to Universal +Control Plane, the organization must define a list of allowed base +Docker images and make them available via Docker Trusted Registry. The +organization must also prevent users from being able to pull Docker +images from untrusted sources.The organization is responsible for meeting the requirements of this +control. To assist with these requirements, the organization can +configure its systems to ensure that only approved Docker images +stored in Docker Trusted Registry can be run on Universal Control +Plane. This can be accomplished by using Docker Content Trust to sign +Docker images, and configure UCP to enforce only signed images from +specific Teams at runtime. Additional information can be found at the +following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/ +
    +
    + ## CM-8 Information System Component Inventory **Description:** @@ -705,33 +1089,29 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (1) Updates During Installations / Removals + +### CM-8 (1) Updates During Installations / Removals **Description:** The organization updates the inventory of information system components as an integral part of component installations, removals, and information system updates. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (2) Automated Maintenance + +### CM-8 (2) Automated Maintenance **Description:** The organization employs automated mechanisms to help maintain an up-to-date, complete, accurate, and readily available inventory of information system components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (3) Automated Unauthorized Component Detection + +### CM-8 (3) Automated Unauthorized Component Detection **Description:** @@ -743,69 +1123,59 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (4) Accountability Information + +### CM-8 (4) Accountability Information **Description:** The organization includes in the information system component inventory information, a means for identifying by [Selection (one or more): name; position; role], individuals responsible/accountable for administering those components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (5) No Duplicate Accounting Of Components + +### CM-8 (5) No Duplicate Accounting Of Components **Description:** The organization verifies that all components within the authorization boundary of the information system are not duplicated in other information system component inventories. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (6) Assessed Configurations / Approved Deviations + +### CM-8 (6) Assessed Configurations / Approved Deviations **Description:** The organization includes assessed component configurations and any approved deviations to current deployed configurations in the information system component inventory. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (7) Centralized Repository + +### CM-8 (7) Centralized Repository **Description:** The organization provides a centralized repository for the inventory of information system components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (8) Automated Location Tracking + +### CM-8 (8) Automated Location Tracking **Description:** The organization employs automated mechanisms to support tracking of information system components by geographic location. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CM-8 (9) Assignment Of Components To Systems + +### CM-8 (9) Assignment Of Components To Systems **Description:** @@ -817,8 +1187,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## CM-9 Configuration Management Plan **Description:** @@ -848,18 +1218,36 @@ The organization develops, documents, and implements a configuration management -## CM-9 (1) Assignment Of Responsibility +**Implemenation Details:** + + + +
    +
    +The CIS Docker Benchmark can be used as a baseline for securing +Docker Enterprise Edition and for helping the organization meet the +configuration management plan requirements of this control. Additional +information can be found at the following resources: + +- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf +- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark + +
    +
    + +### CM-9 (1) Assignment Of Responsibility **Description:** The organization assigns responsibility for developing the configuration management process to organizational personnel that are not directly involved in information system development. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CM-10 Software Usage Restrictions **Description:** @@ -873,20 +1261,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CM-10 (1) Open Source Software + +### CM-10 (1) Open Source Software **Description:** The organization establishes the following restrictions on the use of open source software: [Assignment: organization-defined restrictions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CM-11 User-Installed Software **Description:** @@ -915,13 +1301,27 @@ The organization: -## CM-11 (1) Alerts For Unauthorized Installations +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with these requirements, the organization can +define a list of allowed base Docker images and make them available +via Docker Trusted Registry. The organization can also prevent users +from being able to pull Docker images from untrusted sources. +
    +
    + +### CM-11 (1) Alerts For Unauthorized Installations **Description:** The information system alerts [Assignment: organization-defined personnel or roles] when the unauthorized installation of software is detected. -
      -
    **Control Information:** @@ -940,15 +1340,29 @@ The information system alerts [Assignment: organization-defined personnel or rol -## CM-11 (2) Prohibit Installation Without Privileged Status +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with these requirements, the organization can +define a list of allowed base Docker images and make them available +via Docker Trusted Registry. The organization can also prevent users +from being able to pull Docker images from untrusted sources. +
    +
    + +### CM-11 (2) Prohibit Installation Without Privileged Status **Description:** The information system prohibits user installation of software without explicit privileged status. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/CP.md b/docs/compliance/reference/800-53/CP.md index 5406754..7807d88 100644 --- a/docs/compliance/reference/800-53/CP.md +++ b/docs/compliance/reference/800-53/CP.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## CP-2 Contingency Plan **Description:** @@ -54,104 +54,88 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (1) Coordinate With Related Plans + +### CP-2 (1) Coordinate With Related Plans **Description:** The organization coordinates contingency plan development with organizational elements responsible for related plans. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (2) Capacity Planning + +### CP-2 (2) Capacity Planning **Description:** The organization conducts capacity planning so that necessary capacity for information processing, telecommunications, and environmental support exists during contingency operations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (3) Resume Essential Missions / Business Functions + +### CP-2 (3) Resume Essential Missions / Business Functions **Description:** The organization plans for the resumption of essential missions and business functions within [Assignment: organization-defined time period] of contingency plan activation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (4) Resume All Missions / Business Functions + +### CP-2 (4) Resume All Missions / Business Functions **Description:** The organization plans for the resumption of all missions and business functions within [Assignment: organization-defined time period] of contingency plan activation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (5) Continue Essential Missions / Business Functions + +### CP-2 (5) Continue Essential Missions / Business Functions **Description:** The organization plans for the continuance of essential missions and business functions with little or no loss of operational continuity and sustains that continuity until full information system restoration at primary processing and/or storage sites. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (6) Alternate Processing / Storage Site + +### CP-2 (6) Alternate Processing / Storage Site **Description:** The organization plans for the transfer of essential missions and business functions to alternate processing and/or storage sites with little or no loss of operational continuity and sustains that continuity through information system restoration to primary processing and/or storage sites. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (7) Coordinate With External Service Providers + +### CP-2 (7) Coordinate With External Service Providers **Description:** The organization coordinates its contingency plan with the contingency plans of external service providers to ensure that contingency requirements can be satisfied. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-2 (8) Identify Critical Assets + +### CP-2 (8) Identify Critical Assets **Description:** The organization identifies critical information system assets supporting essential missions and business functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-3 Contingency Training **Description:** @@ -165,32 +149,28 @@ The organization provides contingency training to information system users consi **Control Information:** - **Responsible role(s)** - Organization -## CP-3 (1) Simulated Events + +### CP-3 (1) Simulated Events **Description:** The organization incorporates simulated events into contingency training to facilitate effective response by personnel in crisis situations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-3 (2) Automated Training Environments + +### CP-3 (2) Automated Training Environments **Description:** The organization employs automated mechanisms to provide a more thorough and realistic contingency training environment. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-4 Contingency Plan Testing **Description:** @@ -204,21 +184,19 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CP-4 (1) Coordinate With Related Plans + +### CP-4 (1) Coordinate With Related Plans **Description:** The organization coordinates contingency plan testing with organizational elements responsible for related plans. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-4 (2) Alternate Processing Site + +### CP-4 (2) Alternate Processing Site **Description:** @@ -230,32 +208,28 @@ The organization tests the contingency plan at the alternate processing site: **Control Information:** - **Responsible role(s)** - Organization -## CP-4 (3) Automated Testing + +### CP-4 (3) Automated Testing **Description:** The organization employs automated mechanisms to more thoroughly and effectively test the contingency plan. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-4 (4) Full Recovery / Reconstitution + +### CP-4 (4) Full Recovery / Reconstitution **Description:** The organization includes a full recovery and reconstitution of the information system to a known state as part of contingency plan testing. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-6 Alternate Storage Site **Description:** @@ -268,44 +242,38 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CP-6 (1) Separation From Primary Site + +### CP-6 (1) Separation From Primary Site **Description:** The organization identifies an alternate storage site that is separated from the primary storage site to reduce susceptibility to the same threats. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-6 (2) Recovery Time / Point Objectives + +### CP-6 (2) Recovery Time / Point Objectives **Description:** The organization configures the alternate storage site to facilitate recovery operations in accordance with recovery time and recovery point objectives. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-6 (3) Accessibility + +### CP-6 (3) Accessibility **Description:** The organization identifies potential accessibility problems to the alternate storage site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-7 Alternate Processing Site **Description:** @@ -319,81 +287,69 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CP-7 (1) Separation From Primary Site + +### CP-7 (1) Separation From Primary Site **Description:** The organization identifies an alternate processing site that is separated from the primary processing site to reduce susceptibility to the same threats. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-7 (2) Accessibility + +### CP-7 (2) Accessibility **Description:** The organization identifies potential accessibility problems to the alternate processing site in the event of an area-wide disruption or disaster and outlines explicit mitigation actions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-7 (3) Priority Of Service + +### CP-7 (3) Priority Of Service **Description:** The organization develops alternate processing site agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives). -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-7 (4) Preparation For Use + +### CP-7 (4) Preparation For Use **Description:** The organization prepares the alternate processing site so that the site is ready to be used as the operational site supporting essential missions and business functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-7 (6) Inability To Return To Primary Site + +### CP-7 (6) Inability To Return To Primary Site **Description:** The organization plans and prepares for circumstances that preclude returning to the primary processing site. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-8 Telecommunications Services **Description:** The organization establishes alternate telecommunications services including necessary agreements to permit the resumption of [Assignment: organization-defined information system operations] for essential missions and business functions within [Assignment: organization-defined time period] when the primary telecommunications capabilities are unavailable at either the primary or alternate processing or storage sites. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-8 (1) Priority Of Service Provisions + +### CP-8 (1) Priority Of Service Provisions **Description:** @@ -405,33 +361,29 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CP-8 (2) Single Points Of Failure + +### CP-8 (2) Single Points Of Failure **Description:** The organization obtains alternate telecommunications services to reduce the likelihood of sharing a single point of failure with primary telecommunications services. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-8 (3) Separation Of Primary / Alternate Providers + +### CP-8 (3) Separation Of Primary / Alternate Providers **Description:** The organization obtains alternate telecommunications services from providers that are separated from primary service providers to reduce susceptibility to the same threats. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-8 (4) Provider Contingency Plan + +### CP-8 (4) Provider Contingency Plan **Description:** @@ -444,20 +396,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CP-8 (5) Alternate Telecommunication Service Testing + +### CP-8 (5) Alternate Telecommunication Service Testing **Description:** The organization tests alternate telecommunication services [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-9 Information System Backup **Description:** @@ -472,99 +422,83 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## CP-9 (1) Testing For Reliability / Integrity + +### CP-9 (1) Testing For Reliability / Integrity **Description:** The organization tests backup information [Assignment: organization-defined frequency] to verify media reliability and information integrity. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-9 (2) Test Restoration Using Sampling + +### CP-9 (2) Test Restoration Using Sampling **Description:** The organization uses a sample of backup information in the restoration of selected information system functions as part of contingency plan testing. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-9 (3) Separate Storage For Critical Information + +### CP-9 (3) Separate Storage For Critical Information **Description:** The organization stores backup copies of [Assignment: organization-defined critical information system software and other security-related information] in a separate facility or in a fire-rated container that is not collocated with the operational system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-9 (5) Transfer To Alternate Storage Site + +### CP-9 (5) Transfer To Alternate Storage Site **Description:** The organization transfers information system backup information to the alternate storage site [Assignment: organization-defined time period and transfer rate consistent with the recovery time and recovery point objectives]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-9 (6) Redundant Secondary System + +### CP-9 (6) Redundant Secondary System **Description:** The organization accomplishes information system backup by maintaining a redundant secondary system that is not collocated with the primary system and that can be activated without loss of information or disruption to operations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-9 (7) Dual Authorization + +### CP-9 (7) Dual Authorization **Description:** The organization enforces dual authorization for the deletion or destruction of [Assignment: organization-defined backup information]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-10 Information System Recovery And Reconstitution **Description:** The organization provides for the recovery and reconstitution of the information system to a known state after a disruption, compromise, or failure. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-10 (2) Transaction Recovery + +### CP-10 (2) Transaction Recovery **Description:** The information system implements transaction recovery for systems that are transaction-based. -
      -
    **Control Information:** @@ -588,63 +522,81 @@ The information system implements transaction recovery for systems that are tran -## CP-10 (4) Restore Within Time Period +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry maintains its cluster state via an internal +key-value store. This, and other DTR transactions can be backed up and +recovered. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/backups-and-disaster-recovery/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#DTR_Backup +
    +
    +Universal Control Plane maintains its cluster state via an internal +key-value store. This, and other UCP transactions can be backed up and +recovered. Additional information can be found at the following +resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/backups-and-disaster-recovery/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#UCP_Backup +
    +
    + +### CP-10 (4) Restore Within Time Period **Description:** The organization provides the capability to restore information system components within [Assignment: organization-defined restoration time-periods] from configuration-controlled and integrity-protected information representing a known, operational state for the components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## CP-10 (6) Component Protection + +### CP-10 (6) Component Protection **Description:** The organization protects backup and restoration hardware, firmware, and software. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-11 Alternate Communications Protocols **Description:** The information system provides the capability to employ [Assignment: organization-defined alternative communications protocols] in support of maintaining continuity of operations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-12 Safe Mode **Description:** The information system, when [Assignment: organization-defined conditions] are detected, enters a safe mode of operation with [Assignment: organization-defined restrictions of safe mode of operation]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## CP-13 Alternative Security Mechanisms **Description:** The organization employs [Assignment: organization-defined alternative or supplemental security mechanisms] for satisfying [Assignment: organization-defined security functions] when the primary means of implementing the security function is unavailable or compromised. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/IA.md b/docs/compliance/reference/800-53/IA.md index c70682e..23a2511 100644 --- a/docs/compliance/reference/800-53/IA.md +++ b/docs/compliance/reference/800-53/IA.md @@ -26,15 +26,13 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## IA-2 Identification And Authentication (Organizational Users) **Description:** The information system uniquely identifies and authenticates organizational users (or processes acting on behalf of organizational users). -
      -
    **Control Information:** @@ -53,61 +51,72 @@ The information system uniquely identifies and authenticates organizational user -## IA-2 (1) Network Access To Privileged Accounts +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition can be configured to identify and authenticate +users via it's integrated support for LDAP. Users and groups managed +within the organization's LDAP directory service (e.g. Active +Directory) can be synchronized to UCP and DTR on a regular interval. When a +user is removed from the LDAP-backed directory, that user becomes +inactive within UCP and DTR. In addition, UCP and DTR teams can be mapped to groups +synchronized via LDAP. When a user is added/removed to/from the LDAP +group, that same user is automatically added/removed to/from the UCP and DTR +team. Instructions for configuring LDAP integration can be found at +https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/integrate-with-ldap/. +
    +
    + +### IA-2 (1) Network Access To Privileged Accounts **Description:** The information system implements multifactor authentication for network access to privileged accounts. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (2) Network Access To Non-Privileged Accounts + +### IA-2 (2) Network Access To Non-Privileged Accounts **Description:** The information system implements multifactor authentication for network access to non-privileged accounts. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (3) Local Access To Privileged Accounts + +### IA-2 (3) Local Access To Privileged Accounts **Description:** The information system implements multifactor authentication for local access to privileged accounts. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (4) Local Access To Non-Privileged Accounts + +### IA-2 (4) Local Access To Non-Privileged Accounts **Description:** The information system implements multifactor authentication for local access to non-privileged accounts. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (5) Group Authentication + +### IA-2 (5) Group Authentication **Description:** The organization requires individuals to be authenticated with an individual authenticator when a group authenticator is employed. -
      -
    **Control Information:** @@ -136,37 +145,63 @@ The organization requires individuals to be authenticated with an individual aut -## IA-2 (6) Network Access To Privileged Accounts - Separate Device +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, Docker Trusted +Registry requires individual users to be authenticated in order to +gain access to the system. Any permissions granted to the team(s) that +which the user is a member are subsequently applied. +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, Universal Control +Plane requires individual users to be authenticated in order to gain +access to the system. Any permissions granted to the team(s) that +which the user is a member are subsequently applied. +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, Docker Enterprise Edition +requires individual users to be authenticated in order to gain access +to the system. Any permissions granted to the team(s) that which the +user is a member are subsequently applied. +
    +
    + +### IA-2 (6) Network Access To Privileged Accounts - Separate Device **Description:** The information system implements multifactor authentication for network access to privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (7) Network Access To Non-Privileged Accounts - Separate Device + +### IA-2 (7) Network Access To Non-Privileged Accounts - Separate Device **Description:** The information system implements multifactor authentication for network access to non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (8) Network Access To Privileged Accounts - Replay Resistant + +### IA-2 (8) Network Access To Privileged Accounts - Replay Resistant **Description:** The information system implements replay-resistant authentication mechanisms for network access to privileged accounts. -
      -
    **Control Information:** @@ -185,13 +220,26 @@ The information system implements replay-resistant authentication mechanisms for -## IA-2 (9) Network Access To Non-Privileged Accounts - Replay Resistant +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition integrates with LDAP for authenticating users to an +external directory service. You should configure your external +directory service for ensuring that you are protected against replay +attacks. +
    +
    + +### IA-2 (9) Network Access To Non-Privileged Accounts - Replay Resistant **Description:** The information system implements replay-resistant authentication mechanisms for network access to non-privileged accounts. -
      -
    **Control Information:** @@ -210,61 +258,66 @@ The information system implements replay-resistant authentication mechanisms for -## IA-2 (10) Single Sign-On +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition integrates with LDAP for authenticating users to an +external directory service. You should configure your external +directory service for ensuring that you are protected against replay +attacks. +
    +
    + +### IA-2 (10) Single Sign-On **Description:** The information system provides a single sign-on capability for [Assignment: organization-defined information system accounts and services]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (11) Remote Access - Separate Device + +### IA-2 (11) Remote Access - Separate Device **Description:** The information system implements multifactor authentication for remote access to privileged and non-privileged accounts such that one of the factors is provided by a device separate from the system gaining access and the device meets [Assignment: organization-defined strength of mechanism requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (12) Acceptance Of Piv Credentials + +### IA-2 (12) Acceptance Of Piv Credentials **Description:** The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-2 (13) Out-Of-Band Authentication + +### IA-2 (13) Out-Of-Band Authentication **Description:** The information system implements [Assignment: organization-defined out-of-band authentication] under [Assignment: organization-defined conditions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IA-3 Device Identification And Authentication **Description:** The information system uniquely identifies and authenticates [Assignment: organization-defined specific and/or types of devices] before establishing a [Selection (one or more): local; remote; network] connection. -
      -
    **Control Information:** @@ -293,19 +346,53 @@ The information system uniquely identifies and authenticates [Assignment: organi -## IA-3 (1) Cryptographic Bidirectional Authentication +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry replicas reside on Universal Control Plane +worker nodes. In order for UCP worker nodes to join a Universal +Control Plane cluster, they must be identified and authenticated via a +worker token. Additional Docker Trusted Registry replicas can only be +added after a UCP administrator user has authenticated in to the UCP +cluster and when mutual TLS authentication between the UCP worker and +manager nodes has been established. Reference documentation can be +found at +https://docs.docker.com/datacenter/dtr/2.1/guides/install/#/step-7-join-replicas-to-the-cluster. +
    +
    +In order for other CS Engine nodes to be able to join a cluster +managed by Universal Control Plane, they must be identified and +authenticated via either a manager or worker token. Use of the token +includes trust on first use mutual TLS. + +
    +
    +In order for nodes to join a Universal Control Plane cluster, they +must be identified and authenticated via either a manager or worker +token. Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/scale-your-cluster/ +
    +
    + +### IA-3 (1) Cryptographic Bidirectional Authentication **Description:** The information system authenticates [Assignment: organization-defined specific devices and/or types of devices] before establishing [Selection (one or more): local; remote; network] connection using bidirectional authentication that is cryptographically based. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-3 (3) Dynamic Address Allocation + +### IA-3 (3) Dynamic Address Allocation **Description:** @@ -317,20 +404,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## IA-3 (4) Device Attestation + +### IA-3 (4) Device Attestation **Description:** The organization ensures that device identification and authentication based on attestation is handled by [Assignment: organization-defined configuration management process]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IA-4 Identifier Management **Description:** @@ -361,49 +446,68 @@ The organization manages information system identifiers by: -## IA-4 (1) Prohibit Account Identifiers As Public Identifiers +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to prevent the reuse of user identifiers for a specified +period of time. Refer to your directory service's documentation for +configuring thisThe organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to prevent the reuse of user identifiers for a specified +period of time. Refer to your directory service's documentation for +configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to prevent the reuse of user identifiers for a specified +period of time. Refer to your directory service's documentation for +configuring this. +
    +
    + +### IA-4 (1) Prohibit Account Identifiers As Public Identifiers **Description:** The organization prohibits the use of information system account identifiers that are the same as public identifiers for individual electronic mail accounts. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-4 (2) Supervisor Authorization + +### IA-4 (2) Supervisor Authorization **Description:** The organization requires that the registration process to receive an individual identifier includes supervisor authorization. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-4 (3) Multiple Forms Of Certification + +### IA-4 (3) Multiple Forms Of Certification **Description:** The organization requires multiple forms of certification of individual identification be presented to the registration authority. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-4 (4) Identify User Status + +### IA-4 (4) Identify User Status **Description:** The organization manages individual identifiers by uniquely identifying each individual as [Assignment: organization-defined characteristic identifying individual status]. -
      -
    **Control Information:** @@ -422,42 +526,53 @@ The organization manages individual identifiers by uniquely identifying each ind -## IA-4 (5) Dynamic Management +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to uniquely identify each individual according to the +requirements of this control. Refer to your directory service's +documentation for configuring this. +
    +
    + +### IA-4 (5) Dynamic Management **Description:** The information system dynamically manages identifiers. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-4 (6) Cross-Organization Management + +### IA-4 (6) Cross-Organization Management **Description:** The organization coordinates with [Assignment: organization-defined external organizations] for cross-organization management of identifiers. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-4 (7) In-Person Registration + +### IA-4 (7) In-Person Registration **Description:** The organization requires that the registration process to receive an individual identifier be conducted in person before a designated registration authority. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IA-5 Authenticator Management **Description:** @@ -493,7 +608,67 @@ The organization manages information system authenticators by: -## IA-5 (1) Password-Based Authentication +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to establish initial authenticator content according to the +requirements of this control. Refer to your directory service's +documentation for configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to enforce strength requirements for authenticators +according to the requirements of this control. Refer to your directory +service's documentation for configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to distribute, redistribute, and revoke authenticators +according to the requirements of this control. Refer to your directory +service's documentation for configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to change default authenticator content according to the +requirements of this control. Refer to your directory service's +documentation for configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to set minimum and maximum lifetime restrictions and reuse +conditions for authenticators according to the requirements of this +control. Refer to your directory service's documentation for +configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to refresh authenticators at a regular cadence according to +the requirements of this control. Refer to your directory service's +documentation for configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to protect authenticator content from unauthorized +disclosure or modification according to the requirements of this +control. Refer to your directory service's documentation for +configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to implement specific security safeguards to protect +authentications according to the requirements of this control. Refer +to your directory service's documentation for configuring this.The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to change authenticators for group or role accounts when +membership to those groups or roles changes according to the +requirements of this control. Refer to your directory service's +documentation for configuring this. +
    +
    + +### IA-5 (1) Password-Based Authentication **Description:** @@ -524,7 +699,42 @@ The information system, for password-based authentication: -## IA-5 (2) Pki-Based Authentication +**Implemenation Details:** + + + +
    +
    +An external directory service integrated with Docker Enterprise +Edition via LDAP can be configured to enforce minimum password +complexity requirements. Refer to your directory service's +documentation for configuring this.An external directory service integrated with Docker Enterprise +Edition via LDAP can be configured to enforce the requirement to +change at least one character when changing passwords according to the +requirements of this control. Refer to your directory service's +documentation for configuring this.An external directory service integrated with Docker Enterprise +Edition via LDAP can be configured to store and transmit +cryptographically protected passwords according to the requirements of +this control. Refer to your directory service's documentation for +configuring this.An external directory service integrated with Docker Enterprise +Edition via LDAP can be configured to enforce the required minimum and +maximum lifetime restrictions according to the requirements of this +control. Refer to your directory service's documentation for +configuring this.An external directory service integrated with Docker Enterprise +Edition via LDAP can be configured to enforce the required number of +generations before password reuse according to the requirements of +this control. Refer to your directory service's documentation for +configuring this.An external directory service integrated with Docker Enterprise +Edition via LDAP can be configured to enforce the requirement to +change initial/temporary passwords upon first login according to the +requirements of this control. Refer to your directory service's +documentation for configuring this. +
    +
    + +### IA-5 (2) Pki-Based Authentication **Description:** @@ -563,25 +773,108 @@ The information system, for PKI-based authentication: -## IA-5 (3) In-Person Or Trusted Third-Party Registration +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry includes a Docker volume which holds the root +key material for the DTR root CA that issues certificats. In addition +Universal Control Plane contains two, built-in root certificate +authorities. One CA is used for signing client bundles generated by +users. The other CA is used for TLS communication between UCP cluster +nodes. Should you choose to use certificates signed by an external CA, +in order to successfully authenticate in to the system, those +certificates must include a root CA public certificate, a service +certificate and any intermediate CA public certificates (in addition +to SANs for all addresses used to reach the UCP controller), and a +private key for the server. When adding DTR replicas, the UCP nodes on +which they're installed are authenticated to the cluster via the +appropriate built-in CA.Access to Docker Trusted Registry is only granted when a user has a +valid certificate bundle. This is enforced with the public/private key +pair included with the user's certificate bundle in Universal Control +Plane.Only after a client bundle has been generated or an existing public +key has been added for a particular user is that user able to execute +commands against Docker Trusted Registry. This bundle maps the +authenticated identity to that of the user's profile in Universal +Control Plane.When a client bundle has been generated or an existing public key has +been added for a particular Universal Control Plane user which +subsequently grants that user access to Docker Trusted Registry, it is +attached to that user's Universal Control Plane profile. Bundles/keys +can be revoked by an Administrator or the user themselves. The +cluster's internal certificates can also be revoked and updated. +Instructions for doing so can be found at +https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/#/replace-the-server-certificates. +In addition, Docker Trusted Registry's server certificates can be +replaced by following the instructions at +https://docs.docker.com/datacenter/dtr/2.1/guides/configure/. +
    +
    +Universal Control Plane contains two, built-in root certificate +authorities. One CA is used for signing client bundles generated by +users. The other CA is used for TLS communication between UCP cluster +nodes. Should you choose to use certificates signed by an external CA, +in order to successfully authenticate in to the system, those +certificates must include a root CA public certificate, a service +certificate and any intermediate CA public certificates (in addition +to SANs for all addresses used to reach the UCP controller), and a +private key for the server.Access to a Universal Control Plane cluster is only granted when a +user has a valid certificate bundle. This is enforced with the +public/private key pair included with the user's certificate bundle.Only after a client bundle has been generated or an existing public +key has been added for a particular user is that user able to execute +commands against the Universal Control Plane cluster. This bundle maps +the authenticated identity to that of the user.When a client bundle has been generated or an existing public key has +been added for a particular Universal Control Plane user, it is +attached to that user's profile. Bundles/keys can be revoked by an +Administrator or the user themselves. The cluster's internal +certificates can also be revoked and updated. Additional information +can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/#/replace-the-server-certificates +
    +
    +All users within a Docker Enterprise Edition cluster can create a +client certificate bundle for authenticating in to the cluster from +the Docker client tooling. When a user attempts to authenticate in to +the Docker cluster, the system validates the certificates per the +requirements of this control.All users within a Docker Enterprise Edition cluster can create a +client certificate bundle for authenticating in to the cluster from +the Docker client tooling. When a user attempts to authenticate in to +the Docker cluster, the system enforces authorized access to the +corresponding private key per the requirements of this control.All users within a Docker Enterprise Edition cluster can create a +client certificate bundle for authenticating in to the cluster from +the Docker client tooling. When a user attempts to authenticate in to +the Docker cluster, the system maps the authenticated identity to the +account of the individual or group per the requirements of this +control.All users within a Docker Enterprise Edition cluster can create a +client certificate bundle for authenticating in to the cluster from +the Docker client tooling. When a user attempts to authenticate in to +the Docker cluster, it is up to the underlying operating system +hosting Docker Enterprise Edition to ensure that it implements a local +cache of revocation data per the requirements of this control. +
    +
    + +### IA-5 (3) In-Person Or Trusted Third-Party Registration **Description:** The organization requires that the registration process to receive [Assignment: organization-defined types of and/or specific authenticators] be conducted [Selection: in person; by a trusted third party] before [Assignment: organization-defined registration authority] with authorization by [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (4) Automated Support For Password Strength Determination + +### IA-5 (4) Automated Support For Password Strength Determination **Description:** The organization employs automated tools to determine if password authenticators are sufficiently strong to satisfy [Assignment: organization-defined requirements]. -
      -
    **Control Information:** @@ -600,25 +893,38 @@ The organization employs automated tools to determine if password authenticators -## IA-5 (5) Change Authenticators Prior To Delivery +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured with automation to ensure that password authenticators meet +strength requirements as defined by this control. Refer to your +directory service's documentation for configuring this. +
    +
    + +### IA-5 (5) Change Authenticators Prior To Delivery **Description:** The organization requires developers/installers of information system components to provide unique authenticators or change default authenticators prior to delivery/installation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (6) Protection Of Authenticators + +### IA-5 (6) Protection Of Authenticators **Description:** The organization protects authenticators commensurate with the security category of the information to which use of the authenticator permits access. -
      -
    **Control Information:** @@ -637,121 +943,117 @@ The organization protects authenticators commensurate with the security category -## IA-5 (7) No Embedded Unencrypted Static Authenticators +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to protect authenticators as required by this control. +Refer to your directory service's documentation for configuring this. +
    +
    + +### IA-5 (7) No Embedded Unencrypted Static Authenticators **Description:** The organization ensures that unencrypted static authenticators are not embedded in applications or access scripts or stored on function keys. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (8) Multiple Information System Accounts + +### IA-5 (8) Multiple Information System Accounts **Description:** The organization implements [Assignment: organization-defined security safeguards] to manage the risk of compromise due to individuals having accounts on multiple information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (9) Cross-Organization Credential Management + +### IA-5 (9) Cross-Organization Credential Management **Description:** The organization coordinates with [Assignment: organization-defined external organizations] for cross-organization management of credentials. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (10) Dynamic Credential Association + +### IA-5 (10) Dynamic Credential Association **Description:** The information system dynamically provisions identities. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (11) Hardware Token-Based Authentication + +### IA-5 (11) Hardware Token-Based Authentication **Description:** The information system, for hardware token-based authentication, employs mechanisms that satisfy [Assignment: organization-defined token quality requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (12) Biometric-Based Authentication + +### IA-5 (12) Biometric-Based Authentication **Description:** The information system, for biometric-based authentication, employs mechanisms that satisfy [Assignment: organization-defined biometric quality requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (13) Expiration Of Cached Authenticators + +### IA-5 (13) Expiration Of Cached Authenticators **Description:** The information system prohibits the use of cached authenticators after [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (14) Managing Content Of Pki Trust Stores + +### IA-5 (14) Managing Content Of Pki Trust Stores **Description:** The organization, for PKI-based authentication, employs a deliberate organization-wide methodology for managing the content of PKI trust stores installed across all platforms including networks, operating systems, browsers, and applications. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-5 (15) Ficam-Approved Products And Services + +### IA-5 (15) Ficam-Approved Products And Services **Description:** The organization uses only FICAM-approved path discovery and validation products and services. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IA-6 Authenticator Feedback **Description:** The information system obscures feedback of authentication information during the authentication process to protect the information from possible exploitation/use by unauthorized individuals. -
      -
    **Control Information:** @@ -775,13 +1077,31 @@ The information system obscures feedback of authentication information during th +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry obscures all feedback of authentication +information during the authentication process. This includes both +authentication via the web UI and the CLI. +
    +
    +Universal Control Plane obscures all feedback of authentication +information during the authentication process. This includes both +authentication via the web UI and the CLI. +
    +
    + ## IA-7 Cryptographic Module Authentication **Description:** The information system implements mechanisms for authentication to a cryptographic module that meet the requirements of applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance for such authentication. -
      -
    **Control Information:** @@ -805,13 +1125,33 @@ The information system implements mechanisms for authentication to a cryptograph +**Implemenation Details:** + + + +
    +
    +All access to Docker Trusted Registry is protected with Transport +Layer Security (TLS) 1.2 with the AES-GCM cipher. This includes both +SSH access to the individual UCP nodes and CLI-/web-based access to +the UCP management functions with mutual TLS and HTTPS respectively. +
    +
    +All access to Universal Control Plane is protected with Transport +Layer Security (TLS) 1.2 with the AES GCM cipher. This includes both +SSH access to the individual UCP nodes and CLI-/web-based access to +the UCP management functions with mutual TLS and HTTPS respectively. +
    +
    + ## IA-8 Identification And Authentication (Non-Organizational Users) **Description:** The information system uniquely identifies and authenticates non-organizational users (or processes acting on behalf of non-organizational users). -
      -
    **Control Information:** @@ -835,25 +1175,41 @@ The information system uniquely identifies and authenticates non-organizational -## IA-8 (1) Acceptance Of Piv Credentials From Other Agencies +**Implemenation Details:** + + + +
    +
    +Users managed by Docker Trusted Registry can be grouped per the +requirements of the organization and as defined by this control. This +can include groupings for non-organizational users. +
    +
    +Users managed by Universal Control Plane can be grouped per the +requirements of the organization and as defined by this control. This +can include groupings for non-organizational users. +
    +
    + +### IA-8 (1) Acceptance Of Piv Credentials From Other Agencies **Description:** The information system accepts and electronically verifies Personal Identity Verification (PIV) credentials from other federal agencies. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-8 (2) Acceptance Of Third-Party Credentials + +### IA-8 (2) Acceptance Of Third-Party Credentials **Description:** The information system accepts only FICAM-approved third-party credentials. -
      -
    **Control Information:** @@ -872,13 +1228,26 @@ The information system accepts only FICAM-approved third-party credentials. -## IA-8 (3) Use Of Ficam-Approved Products +**Implemenation Details:** + + + +
    +
    +An external directory service integrated with Docker Enterprise Edition via +LDAP can be configured to meet the FICAM requirements as indicated by +this control. Refer to your directory service's documentation for +configuring this. +
    +
    + +### IA-8 (3) Use Of Ficam-Approved Products **Description:** The organization employs only FICAM-approved information system components in [Assignment: organization-defined information systems] to accept third-party credentials. -
      -
    **Control Information:** @@ -897,13 +1266,28 @@ The organization employs only FICAM-approved information system components in [A -## IA-8 (4) Use Of Ficam-Issued Profiles +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to meet the FICAM requirements as indicated by this +control. Refer to your directory service's documentation for +configuring this. +
    +
    + +### IA-8 (4) Use Of Ficam-Issued Profiles **Description:** The information system conforms to FICAM-issued profiles. -
      -
    **Control Information:** @@ -922,75 +1306,80 @@ The information system conforms to FICAM-issued profiles. -## IA-8 (5) Acceptance Of Piv-I Credentials +**Implemenation Details:** + + + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with meeting these requirements, an external +directory service integrated with Docker Enterprise Edition via LDAP can be +configured to meet the FICAM requirements as indicated by this +control. Refer to your directory service's documentation for +configuring this. +
    +
    + +### IA-8 (5) Acceptance Of Piv-I Credentials **Description:** The information system accepts and electronically verifies Personal Identity Verification-I (PIV-I) credentials. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IA-9 Service Identification And Authentication **Description:** The organization identifies and authenticates [Assignment: organization-defined information system services] using [Assignment: organization-defined security safeguards]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-9 (1) Information Exchange + +### IA-9 (1) Information Exchange **Description:** The organization ensures that service providers receive, validate, and transmit identification and authentication information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IA-9 (2) Transmission Of Decisions + +### IA-9 (2) Transmission Of Decisions **Description:** The organization ensures that identification and authentication decisions are transmitted between [Assignment: organization-defined services] consistent with organizational policies. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IA-10 Adaptive Identification And Authentication **Description:** The organization requires that individuals accessing the information system employ [Assignment: organization-defined supplemental authentication techniques or mechanisms] under specific [Assignment: organization-defined circumstances or situations]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IA-11 Re-Authentication **Description:** The organization requires users and devices to re-authenticate when [Assignment: organization-defined circumstances or situations requiring re-authentication]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/IR.md b/docs/compliance/reference/800-53/IR.md index 7861c9d..9546bee 100644 --- a/docs/compliance/reference/800-53/IR.md +++ b/docs/compliance/reference/800-53/IR.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## IR-2 Incident Response Training **Description:** @@ -41,68 +41,58 @@ The organization provides incident response training to information system users **Control Information:** - **Responsible role(s)** - Organization -## IR-2 (1) Simulated Events + +### IR-2 (1) Simulated Events **Description:** The organization incorporates simulated events into incident response training to facilitate effective response by personnel in crisis situations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-2 (2) Automated Training Environments + +### IR-2 (2) Automated Training Environments **Description:** The organization employs automated mechanisms to provide a more thorough and realistic incident response training environment. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IR-3 Incident Response Testing **Description:** The organization tests the incident response capability for the information system [Assignment: organization-defined frequency] using [Assignment: organization-defined tests] to determine the incident response effectiveness and documents the results. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-3 (1) Automated Testing + +### IR-3 (1) Automated Testing **Description:** The organization employs automated mechanisms to more thoroughly and effectively test the incident response capability. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-3 (2) Coordination With Related Plans + +### IR-3 (2) Coordination With Related Plans **Description:** The organization coordinates incident response testing with organizational elements responsible for related plans. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IR-4 Incident Handling **Description:** @@ -116,152 +106,128 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (1) Automated Incident Handling Processes + +### IR-4 (1) Automated Incident Handling Processes **Description:** The organization employs automated mechanisms to support the incident handling process. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (2) Dynamic Reconfiguration + +### IR-4 (2) Dynamic Reconfiguration **Description:** The organization includes dynamic reconfiguration of [Assignment: organization-defined information system components] as part of the incident response capability. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (3) Continuity Of Operations + +### IR-4 (3) Continuity Of Operations **Description:** The organization identifies [Assignment: organization-defined classes of incidents] and [Assignment: organization-defined actions to take in response to classes of incidents] to ensure continuation of organizational missions and business functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (4) Information Correlation + +### IR-4 (4) Information Correlation **Description:** The organization correlates incident information and individual incident responses to achieve an organization-wide perspective on incident awareness and response. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (5) Automatic Disabling Of Information System + +### IR-4 (5) Automatic Disabling Of Information System **Description:** The organization implements a configurable capability to automatically disable the information system if [Assignment: organization-defined security violations] are detected. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (6) Insider Threats - Specific Capabilities + +### IR-4 (6) Insider Threats - Specific Capabilities **Description:** The organization implements incident handling capability for insider threats. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (7) Insider Threats - Intra-Organization Coordination + +### IR-4 (7) Insider Threats - Intra-Organization Coordination **Description:** The organization coordinates incident handling capability for insider threats across [Assignment: organization-defined components or elements of the organization]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (8) Correlation With External Organizations + +### IR-4 (8) Correlation With External Organizations **Description:** The organization coordinates with [Assignment: organization-defined external organizations] to correlate and share [Assignment: organization-defined incident information] to achieve a cross-organization perspective on incident awareness and more effective incident responses. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (9) Dynamic Response Capability + +### IR-4 (9) Dynamic Response Capability **Description:** The organization employs [Assignment: organization-defined dynamic response capabilities] to effectively respond to security incidents. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-4 (10) Supply Chain Coordination + +### IR-4 (10) Supply Chain Coordination **Description:** The organization coordinates incident handling activities involving supply chain events with other organizations involved in the supply chain. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IR-5 Incident Monitoring **Description:** The organization tracks and documents information system security incidents. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-5 (1) Automated Tracking / Data Collection / Analysis + +### IR-5 (1) Automated Tracking / Data Collection / Analysis **Description:** The organization employs automated mechanisms to assist in the tracking of security incidents and in the collection and analysis of incident information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IR-6 Incident Reporting **Description:** @@ -274,69 +240,59 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## IR-6 (1) Automated Reporting + +### IR-6 (1) Automated Reporting **Description:** The organization employs automated mechanisms to assist in the reporting of security incidents. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-6 (2) Vulnerabilities Related To Incidents + +### IR-6 (2) Vulnerabilities Related To Incidents **Description:** The organization reports information system vulnerabilities associated with reported security incidents to [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-6 (3) Coordination With Supply Chain + +### IR-6 (3) Coordination With Supply Chain **Description:** The organization provides security incident information to other organizations involved in the supply chain for information systems or information system components related to the incident. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IR-7 Incident Response Assistance **Description:** The organization provides an incident response support resource, integral to the organizational incident response capability that offers advice and assistance to users of the information system for the handling and reporting of security incidents. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-7 (1) Automation Support For Availability Of Information / Support + +### IR-7 (1) Automation Support For Availability Of Information / Support **Description:** The organization employs automated mechanisms to increase the availability of incident response-related information and support. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-7 (2) Coordination With External Providers + +### IR-7 (2) Coordination With External Providers **Description:** @@ -348,8 +304,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## IR-8 Incident Response Plan **Description:** @@ -377,8 +333,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## IR-9 Information Spillage Response **Description:** @@ -395,65 +351,55 @@ The organization responds to information spills by: **Control Information:** - **Responsible role(s)** - Organization -## IR-9 (1) Responsible Personnel + +### IR-9 (1) Responsible Personnel **Description:** The organization assigns [Assignment: organization-defined personnel or roles] with responsibility for responding to information spills. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-9 (2) Training + +### IR-9 (2) Training **Description:** The organization provides information spillage response training [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-9 (3) Post-Spill Operations + +### IR-9 (3) Post-Spill Operations **Description:** The organization implements [Assignment: organization-defined procedures] to ensure that organizational personnel impacted by information spills can continue to carry out assigned tasks while contaminated systems are undergoing corrective actions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## IR-9 (4) Exposure To Unauthorized Personnel + +### IR-9 (4) Exposure To Unauthorized Personnel **Description:** The organization employs [Assignment: organization-defined security safeguards] for personnel exposed to information not within assigned access authorizations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## IR-10 Integrated Information Security Analysis Team **Description:** The organization establishes an integrated team of forensic/malicious code analysts, tool developers, and real-time operations personnel. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/MA.md b/docs/compliance/reference/800-53/MA.md index ecf719a..19f798a 100644 --- a/docs/compliance/reference/800-53/MA.md +++ b/docs/compliance/reference/800-53/MA.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## MA-2 Controlled Maintenance **Description:** @@ -44,9 +44,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MA-2 (2) Automated Maintenance Activities + +### MA-2 (2) Automated Maintenance Activities **Description:** @@ -58,45 +58,39 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## MA-3 Maintenance Tools **Description:** The organization approves, controls, and monitors information system maintenance tools. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-3 (1) Inspect Tools + +### MA-3 (1) Inspect Tools **Description:** The organization inspects the maintenance tools carried into a facility by maintenance personnel for improper or unauthorized modifications. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-3 (2) Inspect Media + +### MA-3 (2) Inspect Media **Description:** The organization checks media containing diagnostic and test programs for malicious code before the media are used in the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-3 (3) Prevent Unauthorized Removal + +### MA-3 (3) Prevent Unauthorized Removal **Description:** @@ -110,20 +104,18 @@ The organization prevents the unauthorized removal of maintenance equipment cont **Control Information:** - **Responsible role(s)** - Organization -## MA-3 (4) Restricted Tool Use + +### MA-3 (4) Restricted Tool Use **Description:** The information system restricts the use of maintenance tools to authorized personnel only. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MA-4 Nonlocal Maintenance **Description:** @@ -139,9 +131,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MA-4 (1) Auditing And Review + +### MA-4 (1) Auditing And Review **Description:** @@ -153,21 +145,19 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MA-4 (2) Document Nonlocal Maintenance + +### MA-4 (2) Document Nonlocal Maintenance **Description:** The organization documents in the security plan for the information system, the policies and procedures for the establishment and use of nonlocal maintenance and diagnostic connections. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-4 (3) Comparable Security / Sanitization + +### MA-4 (3) Comparable Security / Sanitization **Description:** @@ -179,9 +169,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MA-4 (4) Authentication / Separation Of Maintenance Sessions + +### MA-4 (4) Authentication / Separation Of Maintenance Sessions **Description:** @@ -198,9 +188,9 @@ The organization protects nonlocal maintenance sessions by: **Control Information:** - **Responsible role(s)** - Organization -## MA-4 (5) Approvals And Notifications + +### MA-4 (5) Approvals And Notifications **Description:** @@ -212,32 +202,28 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MA-4 (6) Cryptographic Protection + +### MA-4 (6) Cryptographic Protection **Description:** The information system implements cryptographic mechanisms to protect the integrity and confidentiality of nonlocal maintenance and diagnostic communications. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-4 (7) Remote Disconnect Verification + +### MA-4 (7) Remote Disconnect Verification **Description:** The information system implements remote disconnect verification at the termination of nonlocal maintenance and diagnostic sessions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MA-5 Maintenance Personnel **Description:** @@ -251,9 +237,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MA-5 (1) Individuals Without Appropriate Access + +### MA-5 (1) Individuals Without Appropriate Access **Description:** @@ -270,33 +256,29 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MA-5 (2) Security Clearances For Classified Systems + +### MA-5 (2) Security Clearances For Classified Systems **Description:** The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information possess security clearances and formal access approvals for at least the highest classification level and for all compartments of information on the system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-5 (3) Citizenship Requirements For Classified Systems + +### MA-5 (3) Citizenship Requirements For Classified Systems **Description:** The organization ensures that personnel performing maintenance and diagnostic activities on an information system processing, storing, or transmitting classified information are U.S. citizens. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-5 (4) Foreign Nationals + +### MA-5 (4) Foreign Nationals **Description:** @@ -308,65 +290,55 @@ The organization ensures that: **Control Information:** - **Responsible role(s)** - Organization -## MA-5 (5) Nonsystem-Related Maintenance + +### MA-5 (5) Nonsystem-Related Maintenance **Description:** The organization ensures that non-escorted personnel performing maintenance activities not directly associated with the information system but in the physical proximity of the system, have required access authorizations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MA-6 Timely Maintenance **Description:** The organization obtains maintenance support and/or spare parts for [Assignment: organization-defined information system components] within [Assignment: organization-defined time period] of failure. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-6 (1) Preventive Maintenance + +### MA-6 (1) Preventive Maintenance **Description:** The organization performs preventive maintenance on [Assignment: organization-defined information system components] at [Assignment: organization-defined time intervals]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-6 (2) Predictive Maintenance + +### MA-6 (2) Predictive Maintenance **Description:** The organization performs predictive maintenance on [Assignment: organization-defined information system components] at [Assignment: organization-defined time intervals]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MA-6 (3) Automated Support For Predictive Maintenance + +### MA-6 (3) Automated Support For Predictive Maintenance **Description:** The organization employs automated mechanisms to transfer predictive maintenance data to a computerized maintenance management system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/MP.md b/docs/compliance/reference/800-53/MP.md index 20c79d1..1564a0e 100644 --- a/docs/compliance/reference/800-53/MP.md +++ b/docs/compliance/reference/800-53/MP.md @@ -26,20 +26,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## MP-2 Media Access **Description:** The organization restricts access to [Assignment: organization-defined types of digital and/or non-digital media] to [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MP-3 Media Marking **Description:** @@ -52,8 +50,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## MP-4 Media Storage **Description:** @@ -66,20 +64,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MP-4 (2) Automated Restricted Access + +### MP-4 (2) Automated Restricted Access **Description:** The organization employs automated mechanisms to restrict access to media storage areas and to audit access attempts and access granted. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MP-5 Media Transport **Description:** @@ -94,32 +90,28 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MP-5 (3) Custodians + +### MP-5 (3) Custodians **Description:** The organization employs an identified custodian during transport of information system media outside of controlled areas. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-5 (4) Cryptographic Protection + +### MP-5 (4) Cryptographic Protection **Description:** The information system implements cryptographic mechanisms to protect the confidentiality and integrity of information stored on digital media during transport outside of controlled areas. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MP-6 Media Sanitization **Description:** @@ -132,104 +124,88 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MP-6 (1) Review / Approve / Track / Document / Verify + +### MP-6 (1) Review / Approve / Track / Document / Verify **Description:** The organization reviews, approves, tracks, documents, and verifies media sanitization and disposal actions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-6 (2) Equipment Testing + +### MP-6 (2) Equipment Testing **Description:** The organization tests sanitization equipment and procedures [Assignment: organization-defined frequency] to verify that the intended sanitization is being achieved. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-6 (3) Nondestructive Techniques + +### MP-6 (3) Nondestructive Techniques **Description:** The organization applies nondestructive sanitization techniques to portable storage devices prior to connecting such devices to the information system under the following circumstances: [Assignment: organization-defined circumstances requiring sanitization of portable storage devices]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-6 (7) Dual Authorization + +### MP-6 (7) Dual Authorization **Description:** The organization enforces dual authorization for the sanitization of [Assignment: organization-defined information system media]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-6 (8) Remote Purging / Wiping Of Information + +### MP-6 (8) Remote Purging / Wiping Of Information **Description:** The organization provides the capability to purge/wipe information from [Assignment: organization-defined information systems, system components, or devices] either remotely or under the following conditions: [Assignment: organization-defined conditions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MP-7 Media Use **Description:** The organization [Selection: restricts; prohibits] the use of [Assignment: organization-defined types of information system media] on [Assignment: organization-defined information systems or system components] using [Assignment: organization-defined security safeguards]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-7 (1) Prohibit Use Without Owner + +### MP-7 (1) Prohibit Use Without Owner **Description:** The organization prohibits the use of portable storage devices in organizational information systems when such devices have no identifiable owner. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-7 (2) Prohibit Use Of Sanitization-Resistant Media + +### MP-7 (2) Prohibit Use Of Sanitization-Resistant Media **Description:** The organization prohibits the use of sanitization-resistant media in organizational information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## MP-8 Media Downgrading **Description:** @@ -244,53 +220,45 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## MP-8 (1) Documentation Of Process + +### MP-8 (1) Documentation Of Process **Description:** The organization documents information system media downgrading actions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-8 (2) Equipment Testing + +### MP-8 (2) Equipment Testing **Description:** The organization employs [Assignment: organization-defined tests] of downgrading equipment and procedures to verify correct performance [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-8 (3) Controlled Unclassified Information + +### MP-8 (3) Controlled Unclassified Information **Description:** The organization downgrades information system media containing [Assignment: organization-defined Controlled Unclassified Information (CUI)] prior to public release in accordance with applicable federal and organizational standards and policies. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## MP-8 (4) Classified Information + +### MP-8 (4) Classified Information **Description:** The organization downgrades information system media containing classified information prior to release to individuals without required access authorizations in accordance with NSA standards and policies. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/PE.md b/docs/compliance/reference/800-53/PE.md index e8098cb..3fab2aa 100644 --- a/docs/compliance/reference/800-53/PE.md +++ b/docs/compliance/reference/800-53/PE.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PE-2 Physical Access Authorizations **Description:** @@ -42,44 +42,38 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PE-2 (1) Access By Position / Role + +### PE-2 (1) Access By Position / Role **Description:** The organization authorizes physical access to the facility where the information system resides based on position or role. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-2 (2) Two Forms Of Identification + +### PE-2 (2) Two Forms Of Identification **Description:** The organization requires two forms of identification from [Assignment: organization-defined list of acceptable forms of identification] for visitor access to the facility where the information system resides. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-2 (3) Restrict Unescorted Access + +### PE-2 (3) Restrict Unescorted Access **Description:** The organization restricts unescorted access to the facility where the information system resides to personnel with [Selection (one or more): security clearances for all information contained within the system; formal access authorizations for all information contained within the system; need for access to all information contained within the system; [Assignment: organization-defined credentials]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-3 Physical Access Control **Description:** @@ -102,105 +96,89 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PE-3 (1) Information System Access + +### PE-3 (1) Information System Access **Description:** The organization enforces physical access authorizations to the information system in addition to the physical access controls for the facility at [Assignment: organization-defined physical spaces containing one or more components of the information system]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-3 (2) Facility / Information System Boundaries + +### PE-3 (2) Facility / Information System Boundaries **Description:** The organization performs security checks [Assignment: organization-defined frequency] at the physical boundary of the facility or information system for unauthorized exfiltration of information or removal of information system components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-3 (3) Continuous Guards / Alarms / Monitoring + +### PE-3 (3) Continuous Guards / Alarms / Monitoring **Description:** The organization employs guards and/or alarms to monitor every physical access point to the facility where the information system resides 24 hours per day, 7 days per week. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-3 (4) Lockable Casings + +### PE-3 (4) Lockable Casings **Description:** The organization uses lockable physical casings to protect [Assignment: organization-defined information system components] from unauthorized physical access. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-3 (5) Tamper Protection + +### PE-3 (5) Tamper Protection **Description:** The organization employs [Assignment: organization-defined security safeguards] to [Selection (one or more): detect; prevent] physical tampering or alteration of [Assignment: organization-defined hardware components] within the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-3 (6) Facility Penetration Testing + +### PE-3 (6) Facility Penetration Testing **Description:** The organization employs a penetration testing process that includes [Assignment: organization-defined frequency], unannounced attempts to bypass or circumvent security controls associated with physical access points to the facility. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-4 Access Control For Transmission Medium **Description:** The organization controls physical access to [Assignment: organization-defined information system distribution and transmission lines] within organizational facilities using [Assignment: organization-defined security safeguards]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-5 Access Control For Output Devices **Description:** The organization controls physical access to information system output devices to prevent unauthorized individuals from obtaining the output. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-5 (1) Access To Output By Authorized Individuals + +### PE-5 (1) Access To Output By Authorized Individuals **Description:** @@ -212,9 +190,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PE-5 (2) Access To Output By Individual Identity + +### PE-5 (2) Access To Output By Individual Identity **Description:** @@ -226,20 +204,18 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## PE-5 (3) Marking Output Devices + +### PE-5 (3) Marking Output Devices **Description:** The organization marks [Assignment: organization-defined information system output devices] indicating the appropriate security marking of the information permitted to be output from the device. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-6 Monitoring Physical Access **Description:** @@ -253,56 +229,48 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PE-6 (1) Intrusion Alarms / Surveillance Equipment + +### PE-6 (1) Intrusion Alarms / Surveillance Equipment **Description:** The organization monitors physical intrusion alarms and surveillance equipment. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-6 (2) Automated Intrusion Recognition / Responses + +### PE-6 (2) Automated Intrusion Recognition / Responses **Description:** The organization employs automated mechanisms to recognize [Assignment: organization-defined classes/types of intrusions] and initiate [Assignment: organization-defined response actions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-6 (3) Video Surveillance + +### PE-6 (3) Video Surveillance **Description:** The organization employs video surveillance of [Assignment: organization-defined operational areas] and retains video recordings for [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-6 (4) Monitoring Physical Access To Information Systems + +### PE-6 (4) Monitoring Physical Access To Information Systems **Description:** The organization monitors physical access to the information system in addition to the physical access monitoring of the facility as [Assignment: organization-defined physical spaces containing one or more components of the information system]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-8 Visitor Access Records **Description:** @@ -315,56 +283,48 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PE-8 (1) Automated Records Maintenance / Review + +### PE-8 (1) Automated Records Maintenance / Review **Description:** The organization employs automated mechanisms to facilitate the maintenance and review of visitor access records. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-9 Power Equipment And Cabling **Description:** The organization protects power equipment and power cabling for the information system from damage and destruction. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-9 (1) Redundant Cabling + +### PE-9 (1) Redundant Cabling **Description:** The organization employs redundant power cabling paths that are physically separated by [Assignment: organization-defined distance]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-9 (2) Automatic Voltage Controls + +### PE-9 (2) Automatic Voltage Controls **Description:** The organization employs automatic voltage controls for [Assignment: organization-defined critical information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-10 Emergency Shutoff **Description:** @@ -378,33 +338,29 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PE-11 Emergency Power **Description:** The organization provides a short-term uninterruptible power supply to facilitate [Selection (one or more): an orderly shutdown of the information system; transition of the information system to long-term alternate power] in the event of a primary power source loss. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-11 (1) Long-Term Alternate Power Supply - Minimal Operational Capability + +### PE-11 (1) Long-Term Alternate Power Supply - Minimal Operational Capability **Description:** The organization provides a long-term alternate power supply for the information system that is capable of maintaining minimally required operational capability in the event of an extended loss of the primary power source. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-11 (2) Long-Term Alternate Power Supply - Self-Contained + +### PE-11 (2) Long-Term Alternate Power Supply - Self-Contained **Description:** @@ -417,92 +373,78 @@ The organization provides a long-term alternate power supply for the information **Control Information:** - **Responsible role(s)** - Organization + ## PE-12 Emergency Lighting **Description:** The organization employs and maintains automatic emergency lighting for the information system that activates in the event of a power outage or disruption and that covers emergency exits and evacuation routes within the facility. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-12 (1) Essential Missions / Business Functions + +### PE-12 (1) Essential Missions / Business Functions **Description:** The organization provides emergency lighting for all areas within the facility supporting essential missions and business functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-13 Fire Protection **Description:** The organization employs and maintains fire suppression and detection devices/systems for the information system that are supported by an independent energy source. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-13 (1) Detection Devices / Systems + +### PE-13 (1) Detection Devices / Systems **Description:** The organization employs fire detection devices/systems for the information system that activate automatically and notify [Assignment: organization-defined personnel or roles] and [Assignment: organization-defined emergency responders] in the event of a fire. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-13 (2) Suppression Devices / Systems + +### PE-13 (2) Suppression Devices / Systems **Description:** The organization employs fire suppression devices/systems for the information system that provide automatic notification of any activation to Assignment: organization-defined personnel or roles] and [Assignment: organization-defined emergency responders]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-13 (3) Automatic Fire Suppression + +### PE-13 (3) Automatic Fire Suppression **Description:** The organization employs an automatic fire suppression capability for the information system when the facility is not staffed on a continuous basis. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-13 (4) Inspections + +### PE-13 (4) Inspections **Description:** The organization ensures that the facility undergoes [Assignment: organization-defined frequency] inspections by authorized and qualified inspectors and resolves identified deficiencies within [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-14 Temperature And Humidity Controls **Description:** @@ -515,68 +457,58 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PE-14 (1) Automatic Controls + +### PE-14 (1) Automatic Controls **Description:** The organization employs automatic temperature and humidity controls in the facility to prevent fluctuations potentially harmful to the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-14 (2) Monitoring With Alarms / Notifications + +### PE-14 (2) Monitoring With Alarms / Notifications **Description:** The organization employs temperature and humidity monitoring that provides an alarm or notification of changes potentially harmful to personnel or equipment. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-15 Water Damage Protection **Description:** The organization protects the information system from damage resulting from water leakage by providing master shutoff or isolation valves that are accessible, working properly, and known to key personnel. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-15 (1) Automation Support + +### PE-15 (1) Automation Support **Description:** The organization employs automated mechanisms to detect the presence of water in the vicinity of the information system and alerts [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-16 Delivery And Removal **Description:** The organization authorizes, monitors, and controls [Assignment: organization-defined types of information system components] entering and exiting the facility and maintains records of those items. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-17 Alternate Work Site **Description:** @@ -590,56 +522,48 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PE-18 Location Of Information System Components **Description:** The organization positions information system components within the facility to minimize potential damage from [Assignment: organization-defined physical and environmental hazards] and to minimize the opportunity for unauthorized access. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-18 (1) Facility Site + +### PE-18 (1) Facility Site **Description:** The organization plans the location or site of the facility where the information system resides with regard to physical and environmental hazards and for existing facilities, considers the physical and environmental hazards in its risk mitigation strategy. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-19 Information Leakage **Description:** The organization protects the information system from information leakage due to electromagnetic signals emanations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PE-19 (1) National Emissions / Tempest Policies And Procedures + +### PE-19 (1) National Emissions / Tempest Policies And Procedures **Description:** The organization ensures that information system components, associated data communications, and networks are protected in accordance with national emissions and TEMPEST policies and procedures based on the security category or classification of the information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PE-20 Asset Monitoring And Tracking **Description:** @@ -652,5 +576,5 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/PL.md b/docs/compliance/reference/800-53/PL.md index 5cf1a95..b65aaa7 100644 --- a/docs/compliance/reference/800-53/PL.md +++ b/docs/compliance/reference/800-53/PL.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PL-2 System Security Plan **Description:** @@ -55,20 +55,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PL-2 (3) Plan / Coordinate With Other Organizational Entities + +### PL-2 (3) Plan / Coordinate With Other Organizational Entities **Description:** The organization plans and coordinates security-related activities affecting the information system with [Assignment: organization-defined individuals or groups] before conducting such activities in order to reduce the impact on other organizational entities. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PL-4 Rules Of Behavior **Description:** @@ -83,20 +81,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PL-4 (1) Social Media And Networking Restrictions + +### PL-4 (1) Social Media And Networking Restrictions **Description:** The organization includes in the rules of behavior, explicit restrictions on the use of social media/networking sites and posting organizational information on public websites. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PL-7 Security Concept Of Operations **Description:** @@ -109,8 +105,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PL-8 Information Security Architecture **Description:** @@ -130,9 +126,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PL-8 (1) Defense-In-Depth + +### PL-8 (1) Defense-In-Depth **Description:** @@ -144,29 +140,25 @@ The organization designs its security architecture using a defense-in-depth appr **Control Information:** - **Responsible role(s)** - Organization -## PL-8 (2) Supplier Diversity + +### PL-8 (2) Supplier Diversity **Description:** The organization requires that [Assignment: organization-defined security safeguards] allocated to [Assignment: organization-defined locations and architectural layers] are obtained from different suppliers. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PL-9 Central Management **Description:** The organization centrally manages [Assignment: organization-defined security controls and related processes]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/PM.md b/docs/compliance/reference/800-53/PM.md index 441b337..fb23f4c 100644 --- a/docs/compliance/reference/800-53/PM.md +++ b/docs/compliance/reference/800-53/PM.md @@ -25,20 +25,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PM-2 Senior Information Security Officer **Description:** The organization appoints a senior information security officer with the mission and resources to coordinate, develop, implement, and maintain an organization-wide information security program. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PM-3 Information Security Resources **Description:** @@ -52,8 +50,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PM-4 Plan Of Action And Milestones Process **Description:** @@ -72,56 +70,48 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PM-5 Information System Inventory **Description:** The organization develops and maintains an inventory of its information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PM-6 Information Security Measures Of Performance **Description:** The organization develops, monitors, and reports on the results of information security measures of performance. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PM-7 Enterprise Architecture **Description:** The organization develops an enterprise architecture with consideration for information security and the resulting risk to organizational operations, organizational assets, individuals, other organizations, and the Nation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PM-8 Critical Infrastructure Plan **Description:** The organization addresses information security issues in the development, documentation, and updating of a critical infrastructure and key resources protection plan. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PM-9 Risk Management Strategy **Description:** @@ -135,8 +125,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PM-10 Security Authorization Process **Description:** @@ -150,8 +140,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PM-11 Mission/Business Process Definition **Description:** @@ -164,32 +154,28 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PM-12 Insider Threat Program **Description:** The organization implements an insider threat program that includes a cross-discipline insider threat incident handling team. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PM-13 Information Security Workforce **Description:** The organization establishes an information security workforce development and improvement program. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PM-14 Testing, Training, And Monitoring **Description:** @@ -207,8 +193,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PM-15 Contacts With Security Groups And Associations **Description:** @@ -222,17 +208,15 @@ The organization establishes and institutionalizes contact with selected groups **Control Information:** - **Responsible role(s)** - Organization + ## PM-16 Threat Awareness Program **Description:** The organization implements a threat awareness program that includes a cross-organization information-sharing capability. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/PS.md b/docs/compliance/reference/800-53/PS.md index 20f7bbe..5ffca05 100644 --- a/docs/compliance/reference/800-53/PS.md +++ b/docs/compliance/reference/800-53/PS.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PS-2 Position Risk Designation **Description:** @@ -41,8 +41,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PS-3 Personnel Screening **Description:** @@ -55,33 +55,29 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PS-3 (1) Classified Information + +### PS-3 (1) Classified Information **Description:** The organization ensures that individuals accessing an information system processing, storing, or transmitting classified information are cleared and indoctrinated to the highest classification level of the information to which they have access on the system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PS-3 (2) Formal Indoctrination + +### PS-3 (2) Formal Indoctrination **Description:** The organization ensures that individuals accessing an information system processing, storing, or transmitting types of classified information which require formal indoctrination, are formally indoctrinated for all of the relevant types of information to which they have access on the system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## PS-3 (3) Information With Special Protection Measures + +### PS-3 (3) Information With Special Protection Measures **Description:** @@ -93,8 +89,8 @@ The organization ensures that individuals accessing an information system proces **Control Information:** - **Responsible role(s)** - Organization + ## PS-4 Personnel Termination **Description:** @@ -111,9 +107,9 @@ The organization, upon termination of individual employment: **Control Information:** - **Responsible role(s)** - Organization -## PS-4 (1) Post-Employment Requirements + +### PS-4 (1) Post-Employment Requirements **Description:** @@ -125,20 +121,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PS-4 (2) Automated Notification + +### PS-4 (2) Automated Notification **Description:** The organization employs automated mechanisms to notify [Assignment: organization-defined personnel or roles] upon termination of an individual. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## PS-5 Personnel Transfer **Description:** @@ -153,8 +147,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PS-6 Access Agreements **Description:** @@ -173,9 +167,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## PS-6 (2) Classified Information Requiring Special Protection + +### PS-6 (2) Classified Information Requiring Special Protection **Description:** @@ -188,9 +182,9 @@ The organization ensures that access to classified information requiring special **Control Information:** - **Responsible role(s)** - Organization -## PS-6 (3) Post-Employment Requirements + +### PS-6 (3) Post-Employment Requirements **Description:** @@ -202,8 +196,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PS-7 Third-Party Personnel Security **Description:** @@ -219,8 +213,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## PS-8 Personnel Sanctions **Description:** @@ -233,5 +227,5 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/RA.md b/docs/compliance/reference/800-53/RA.md index ba58921..77d4c73 100644 --- a/docs/compliance/reference/800-53/RA.md +++ b/docs/compliance/reference/800-53/RA.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## RA-2 Security Categorization **Description:** @@ -41,8 +41,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## RA-3 Risk Assessment **Description:** @@ -58,8 +58,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## RA-5 Vulnerability Scanning **Description:** @@ -81,15 +81,13 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## RA-5 (1) Update Tool Capability + +### RA-5 (1) Update Tool Capability **Description:** The organization employs vulnerability scanning tools that include the capability to readily update the information system vulnerabilities to be scanned. -
      -
    **Control Information:** @@ -113,13 +111,33 @@ The organization employs vulnerability scanning tools that include the capabilit -## RA-5 (2) Update By Frequency / Prior To New Scan / When Identified +**Implemenation Details:** + + + +
    +
    +To assist the orgnization in meeting the requirements of this control, the Docker Security Scanning (DSS) component of Docker Trusted Registry +(DTR) that is included with the Docker Enterprise Edition Advanced +tier can be used to scan Docker images for vulnerabilities against +known vulnerability databases. Scans can be triggered either manually +or when Docker images are pushed to DTR. +
    +
    +The Docker Security Scanning tool allows for the scanning of Docker +images in Docker Trusted Registry against the Common Vulnerabilities +and Exposures (CVE) dictionary. +
    +
    + +### RA-5 (2) Update By Frequency / Prior To New Scan / When Identified **Description:** The organization updates the information system vulnerabilities scanned [Selection (one or more): [Assignment: organization-defined frequency]; prior to a new scan; when new vulnerabilities are identified and reported]. -
      -
    **Control Information:** @@ -138,13 +156,32 @@ The organization updates the information system vulnerabilities scanned [Selecti -## RA-5 (3) Breadth / Depth Of Coverage +**Implemenation Details:** + + + +
    +
    +To assist the orgnization in meeting the requirements of this +control, the Docker Security Scanning component of Docker Trusted +Registry (DTR) that is included with the Docker Enterprise Edition +Advanced tier compiles a bill of materials (BOM) for each Docker image +that it scans. DSS is also synchronized to an aggregate listing of +known vulnerabilities that is compiled from both the MITRE and NVD CVE +databases. Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Image_Scanning +
    +
    + +### RA-5 (3) Breadth / Depth Of Coverage **Description:** The organization employs vulnerability scanning procedures that can identify the breadth and depth of coverage (i.e., information system components scanned and vulnerabilities checked). -
      -
    **Control Information:** @@ -168,25 +205,43 @@ The organization employs vulnerability scanning procedures that can identify the -## RA-5 (4) Discoverable Information +**Implemenation Details:** + + + +
    +
    +To assist the orgnization in meeting the requirements of this +control, the Docker Security Scanning component of Docker Trusted +Registry (DTR) that is included with the Docker Enterprise Edition +Advanced tier identifies vulnerabilities in a Docker image and marks +them against predefined criticality levels; critical major and minor. +
    +
    +The Docker Security Scanning tool allows for the scanning of Docker +images in Docker Trusted Registry against the Common Vulnerabilities +and Exposures (CVE).' dictionary +
    +
    + +### RA-5 (4) Discoverable Information **Description:** The organization determines what information about the information system is discoverable by adversaries and subsequently takes [Assignment: organization-defined corrective actions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## RA-5 (5) Privileged Access + +### RA-5 (5) Privileged Access **Description:** The information system implements privileged access authorization to [Assignment: organization-identified information system components] for selected [Assignment: organization-defined vulnerability scanning activities]. -
      -
    **Control Information:** @@ -205,13 +260,25 @@ The information system implements privileged access authorization to [Assignment -## RA-5 (6) Automated Trend Analyses +**Implemenation Details:** + + + +
    +
    +Only the appropriate users that the organization has provided Docker +Trusted Registry access to are able to view and interpret +vulnerability scan results. +
    +
    + +### RA-5 (6) Automated Trend Analyses **Description:** The organization employs automated mechanisms to compare the results of vulnerability scans over time to determine trends in information system vulnerabilities. -
      -
    **Control Information:** @@ -230,39 +297,49 @@ The organization employs automated mechanisms to compare the results of vulnerab -## RA-5 (8) Review Historic Audit Logs +**Implemenation Details:** + + + +
    +
    +For each Docker image pushed to Docker Trusted Registry at a given +time, Docker Security Scaninng retains a list of vulnerabilities +detected. The DTR API can be queried to retrieve the vulnerability +scan results over a period of time for a given Docker image such that +the results can be compared per the requirements of this control. +
    +
    + +### RA-5 (8) Review Historic Audit Logs **Description:** The organization reviews historic audit logs to determine if a vulnerability identified in the information system has been previously exploited. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## RA-5 (10) Correlate Scanning Information + +### RA-5 (10) Correlate Scanning Information **Description:** The organization correlates the output from vulnerability scanning tools to determine the presence of multi-vulnerability/multi-hop attack vectors. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## RA-6 Technical Surveillance Countermeasures Survey **Description:** The organization employs a technical surveillance countermeasures survey at [Assignment: organization-defined locations] [Selection (one or more): [Assignment: organization-defined frequency]; [Assignment: organization-defined events or indicators occur]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/SA.md b/docs/compliance/reference/800-53/SA.md index d805159..f1eecaa 100644 --- a/docs/compliance/reference/800-53/SA.md +++ b/docs/compliance/reference/800-53/SA.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SA-2 Allocation Of Resources **Description:** @@ -41,8 +41,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SA-3 System Development Life Cycle **Description:** @@ -57,8 +57,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SA-4 Acquisition Process **Description:** @@ -76,45 +76,39 @@ The organization includes the following requirements, descriptions, and criteria **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (1) Functional Properties Of Security Controls + +### SA-4 (1) Functional Properties Of Security Controls **Description:** The organization requires the developer of the information system, system component, or information system service to provide a description of the functional properties of the security controls to be employed. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (2) Design / Implementation Information For Security Controls + +### SA-4 (2) Design / Implementation Information For Security Controls **Description:** The organization requires the developer of the information system, system component, or information system service to provide design and implementation information for the security controls to be employed that includes: [Selection (one or more): security-relevant external system interfaces; high-level design; low-level design; source code or hardware schematics; [Assignment: organization-defined design/implementation information]] at [Assignment: organization-defined level of detail]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (3) Development Methods / Techniques / Practices + +### SA-4 (3) Development Methods / Techniques / Practices **Description:** The organization requires the developer of the information system, system component, or information system service to demonstrate the use of a system development life cycle that includes [Assignment: organization-defined state-of-the-practice system/security engineering methods, software development methods, testing/evaluation/validation techniques, and quality control processes]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (5) System / Component / Service Configurations + +### SA-4 (5) System / Component / Service Configurations **Description:** @@ -126,9 +120,9 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (6) Use Of Information Assurance Products + +### SA-4 (6) Use Of Information Assurance Products **Description:** @@ -140,9 +134,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (7) Niap-Approved Protection Profiles + +### SA-4 (7) Niap-Approved Protection Profiles **Description:** @@ -154,44 +148,38 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (8) Continuous Monitoring Plan + +### SA-4 (8) Continuous Monitoring Plan **Description:** The organization requires the developer of the information system, system component, or information system service to produce a plan for the continuous monitoring of security control effectiveness that contains [Assignment: organization-defined level of detail]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (9) Functions / Ports / Protocols / Services In Use + +### SA-4 (9) Functions / Ports / Protocols / Services In Use **Description:** The organization requires the developer of the information system, system component, or information system service to identify early in the system development life cycle, the functions, ports, protocols, and services intended for organizational use. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-4 (10) Use Of Approved Piv Products + +### SA-4 (10) Use Of Approved Piv Products **Description:** The organization employs only information technology products on the FIPS 201-approved products list for Personal Identity Verification (PIV) capability implemented within organizational information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-5 Information System Documentation **Description:** @@ -219,20 +207,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SA-8 Security Engineering Principles **Description:** The organization applies information system security engineering principles in the specification, design, development, implementation, and modification of the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-9 External Information System Services **Description:** @@ -246,9 +232,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-9 (1) Risk Assessments / Organizational Approvals + +### SA-9 (1) Risk Assessments / Organizational Approvals **Description:** @@ -260,56 +246,48 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-9 (2) Identification Of Functions / Ports / Protocols / Services + +### SA-9 (2) Identification Of Functions / Ports / Protocols / Services **Description:** The organization requires providers of [Assignment: organization-defined external information system services] to identify the functions, ports, protocols, and other services required for the use of such services. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-9 (3) Establish / Maintain Trust Relationship With Providers + +### SA-9 (3) Establish / Maintain Trust Relationship With Providers **Description:** The organization establishes, documents, and maintains trust relationships with external service providers based on [Assignment: organization-defined security requirements, properties, factors, or conditions defining acceptable trust relationships]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-9 (4) Consistent Interests Of Consumers And Providers + +### SA-9 (4) Consistent Interests Of Consumers And Providers **Description:** The organization employs [Assignment: organization-defined security safeguards] to ensure that the interests of [Assignment: organization-defined external service providers] are consistent with and reflect organizational interests. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-9 (5) Processing, Storage, And Service Location + +### SA-9 (5) Processing, Storage, And Service Location **Description:** The organization restricts the location of [Selection (one or more): information processing; information/data; information system services] to [Assignment: organization-defined locations] based on [Assignment: organization-defined requirements or conditions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-10 Developer Configuration Management **Description:** @@ -325,15 +303,13 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-10 (1) Software / Firmware Integrity Verification + +### SA-10 (1) Software / Firmware Integrity Verification **Description:** The organization requires the developer of the information system, system component, or information system service to enable integrity verification of software and firmware components. -
      -
    **Control Information:** @@ -362,66 +338,104 @@ The organization requires the developer of the information system, system compon -## SA-10 (2) Alternative Configuration Management Processes +**Implemenation Details:** + + + +
    +
    +Docker Content Trust gives you the ability to verify both the +integrity and the publisher of all the data received from a Docker +Trusted Registry over any channel. It allows operations with a remote +DTR instance to enforce client-side signing and verification of image +tags. It provides for the ability to use digital signatures for data +sent to and receive from remote DTR instances. These signatures allow +client-side verification of the integrity and publisher of specific +image tags. Docker Trusted Registry includes an integrated imaging +signing service. +
    +
    +Docker Content Trust gives you the ability to verify both the +integrity and the publisher of all the data received from a Docker +Trusted Registry over any channel. It allows operations with a remote +DTR instance to enforce client-side signing and verification of image +tags. It provides for the ability to use digital signatures for data +sent to and receive from remote DTR instances. These signatures allow +client-side verification of the integrity and publisher of specific +image tags. + +
    +
    +The organization is responsible for meeting the requirements of this +control. To assist with these requirements, Docker Content Trust gives +you the ability to verify both the integrity and the publisher of all +the data received from a Docker Trusted Registry over any channel. It +allows operations with a remote DTR instance to enforce client-side +signing and verification of image tags. It provides for the ability to +use digital signatures for data sent to and receive from remote DTR +instances. These signatures allow client-side verification of the +integrity and publisher of specific image tags. Universal Control +Plane can be configured to only run trusted and signed images. +Additional information can be found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/run-only-the-images-you-trust/ +
    +
    + +### SA-10 (2) Alternative Configuration Management Processes **Description:** The organization provides an alternate configuration management process using organizational personnel in the absence of a dedicated developer configuration management team. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-10 (3) Hardware Integrity Verification + +### SA-10 (3) Hardware Integrity Verification **Description:** The organization requires the developer of the information system, system component, or information system service to enable integrity verification of hardware components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-10 (4) Trusted Generation + +### SA-10 (4) Trusted Generation **Description:** The organization requires the developer of the information system, system component, or information system service to employ tools for comparing newly generated versions of security-relevant hardware descriptions and software/firmware source and object code with previous versions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-10 (5) Mapping Integrity For Version Control + +### SA-10 (5) Mapping Integrity For Version Control **Description:** The organization requires the developer of the information system, system component, or information system service to maintain the integrity of the mapping between the master build data (hardware drawings and software/firmware code) describing the current version of security-relevant hardware, software, and firmware and the on-site master copy of the data for the current version. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-10 (6) Trusted Distribution + +### SA-10 (6) Trusted Distribution **Description:** The organization requires the developer of the information system, system component, or information system service to execute procedures for ensuring that security-relevant hardware, software, and firmware updates distributed to the organization are exactly as specified by the master copies. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-11 Developer Security Testing And Evaluation **Description:** @@ -437,33 +451,29 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (1) Static Code Analysis + +### SA-11 (1) Static Code Analysis **Description:** The organization requires the developer of the information system, system component, or information system service to employ static code analysis tools to identify common flaws and document the results of the analysis. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (2) Threat And Vulnerability Analyses + +### SA-11 (2) Threat And Vulnerability Analyses **Description:** The organization requires the developer of the information system, system component, or information system service to perform threat and vulnerability analyses and subsequent testing/evaluation of the as-built system, component, or service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (3) Independent Verification Of Assessment Plans / Evidence + +### SA-11 (3) Independent Verification Of Assessment Plans / Evidence **Description:** @@ -475,224 +485,188 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (4) Manual Code Reviews + +### SA-11 (4) Manual Code Reviews **Description:** The organization requires the developer of the information system, system component, or information system service to perform a manual code review of [Assignment: organization-defined specific code] using [Assignment: organization-defined processes, procedures, and/or techniques]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (5) Penetration Testing + +### SA-11 (5) Penetration Testing **Description:** The organization requires the developer of the information system, system component, or information system service to perform penetration testing at [Assignment: organization-defined breadth/depth] and with [Assignment: organization-defined constraints]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (6) Attack Surface Reviews + +### SA-11 (6) Attack Surface Reviews **Description:** The organization requires the developer of the information system, system component, or information system service to perform attack surface reviews. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (7) Verify Scope Of Testing / Evaluation + +### SA-11 (7) Verify Scope Of Testing / Evaluation **Description:** The organization requires the developer of the information system, system component, or information system service to verify that the scope of security testing/evaluation provides complete coverage of required security controls at [Assignment: organization-defined depth of testing/evaluation]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-11 (8) Dynamic Code Analysis + +### SA-11 (8) Dynamic Code Analysis **Description:** The organization requires the developer of the information system, system component, or information system service to employ dynamic code analysis tools to identify common flaws and document the results of the analysis. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-12 Supply Chain Protection **Description:** The organization protects against supply chain threats to the information system, system component, or information system service by employing [Assignment: organization-defined security safeguards] as part of a comprehensive, defense-in-breadth information security strategy. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (1) Acquisition Strategies / Tools / Methods + +### SA-12 (1) Acquisition Strategies / Tools / Methods **Description:** The organization employs [Assignment: organization-defined tailored acquisition strategies, contract tools, and procurement methods] for the purchase of the information system, system component, or information system service from suppliers. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (2) Supplier Reviews + +### SA-12 (2) Supplier Reviews **Description:** The organization conducts a supplier review prior to entering into a contractual agreement to acquire the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (5) Limitation Of Harm + +### SA-12 (5) Limitation Of Harm **Description:** The organization employs [Assignment: organization-defined security safeguards] to limit harm from potential adversaries identifying and targeting the organizational supply chain. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (7) Assessments Prior To Selection / Acceptance / Update + +### SA-12 (7) Assessments Prior To Selection / Acceptance / Update **Description:** The organization conducts an assessment of the information system, system component, or information system service prior to selection, acceptance, or update. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (8) Use Of All-Source Intelligence + +### SA-12 (8) Use Of All-Source Intelligence **Description:** The organization uses all-source intelligence analysis of suppliers and potential suppliers of the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (9) Operations Security + +### SA-12 (9) Operations Security **Description:** The organization employs [Assignment: organization-defined Operations Security (OPSEC) safeguards] in accordance with classification guides to protect supply chain-related information for the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (10) Validate As Genuine And Not Altered + +### SA-12 (10) Validate As Genuine And Not Altered **Description:** The organization employs [Assignment: organization-defined security safeguards] to validate that the information system or system component received is genuine and has not been altered. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (11) Penetration Testing / Analysis Of Elements, Processes, And Actors + +### SA-12 (11) Penetration Testing / Analysis Of Elements, Processes, And Actors **Description:** The organization employs [Selection (one or more): organizational analysis, independent third-party analysis, organizational penetration testing, independent third-party penetration testing] of [Assignment: organization-defined supply chain elements, processes, and actors] associated with the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (12) Inter-Organizational Agreements + +### SA-12 (12) Inter-Organizational Agreements **Description:** The organization establishes inter-organizational agreements and procedures with entities involved in the supply chain for the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (13) Critical Information System Components + +### SA-12 (13) Critical Information System Components **Description:** The organization employs [Assignment: organization-defined security safeguards] to ensure an adequate supply of [Assignment: organization-defined critical information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (14) Identity And Traceability + +### SA-12 (14) Identity And Traceability **Description:** The organization establishes and retains unique identification of [Assignment: organization-defined supply chain elements, processes, and actors] for the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-12 (15) Processes To Address Weaknesses Or Deficiencies + +### SA-12 (15) Processes To Address Weaknesses Or Deficiencies **Description:** The organization establishes a process to address weaknesses or deficiencies in supply chain elements identified during independent or organizational assessments of such elements. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-13 Trustworthiness **Description:** @@ -705,20 +679,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SA-14 Criticality Analysis **Description:** The organization identifies critical information system components and functions by performing a criticality analysis for [Assignment: organization-defined information systems, information system components, or information system services] at [Assignment: organization-defined decision points in the system development life cycle]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-15 Development Process, Standards, And Tools **Description:** @@ -738,9 +710,9 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (1) Quality Metrics + +### SA-15 (1) Quality Metrics **Description:** @@ -752,33 +724,29 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (2) Security Tracking Tools + +### SA-15 (2) Security Tracking Tools **Description:** The organization requires the developer of the information system, system component, or information system service to select and employ a security tracking tool for use during the development process. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (3) Criticality Analysis + +### SA-15 (3) Criticality Analysis **Description:** The organization requires the developer of the information system, system component, or information system service to perform a criticality analysis at [Assignment: organization-defined breadth/depth] and at [Assignment: organization-defined decision points in the system development life cycle]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (4) Threat Modeling / Vulnerability Analysis + +### SA-15 (4) Threat Modeling / Vulnerability Analysis **Description:** @@ -791,33 +759,29 @@ The organization requires that developers perform threat modeling and a vulnerab **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (5) Attack Surface Reduction + +### SA-15 (5) Attack Surface Reduction **Description:** The organization requires the developer of the information system, system component, or information system service to reduce attack surfaces to [Assignment: organization-defined thresholds]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (6) Continuous Improvement + +### SA-15 (6) Continuous Improvement **Description:** The organization requires the developer of the information system, system component, or information system service to implement an explicit process to continuously improve the development process. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (7) Automated Vulnerability Analysis + +### SA-15 (7) Automated Vulnerability Analysis **Description:** @@ -831,68 +795,58 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (8) Reuse Of Threat / Vulnerability Information + +### SA-15 (8) Reuse Of Threat / Vulnerability Information **Description:** The organization requires the developer of the information system, system component, or information system service to use threat modeling and vulnerability analyses from similar systems, components, or services to inform the current development process. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (9) Use Of Live Data + +### SA-15 (9) Use Of Live Data **Description:** The organization approves, documents, and controls the use of live data in development and test environments for the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (10) Incident Response Plan + +### SA-15 (10) Incident Response Plan **Description:** The organization requires the developer of the information system, system component, or information system service to provide an incident response plan. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-15 (11) Archive Information System / Component + +### SA-15 (11) Archive Information System / Component **Description:** The organization requires the developer of the information system or system component to archive the system or component to be released or delivered together with the corresponding evidence supporting the final security review. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-16 Developer-Provided Training **Description:** The organization requires the developer of the information system, system component, or information system service to provide [Assignment: organization-defined training] on the correct use and operation of the implemented security functions, controls, and/or mechanisms. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-17 Developer Security Architecture And Design **Description:** @@ -906,9 +860,9 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-17 (1) Formal Policy Model + +### SA-17 (1) Formal Policy Model **Description:** @@ -920,9 +874,9 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-17 (2) Security-Relevant Components + +### SA-17 (2) Security-Relevant Components **Description:** @@ -934,9 +888,9 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-17 (3) Formal Correspondence + +### SA-17 (3) Formal Correspondence **Description:** @@ -951,9 +905,9 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-17 (4) Informal Correspondence + +### SA-17 (4) Informal Correspondence **Description:** @@ -968,9 +922,9 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-17 (5) Conceptually Simple Design + +### SA-17 (5) Conceptually Simple Design **Description:** @@ -982,68 +936,58 @@ The organization requires the developer of the information system, system compon **Control Information:** - **Responsible role(s)** - Organization -## SA-17 (6) Structure For Testing + +### SA-17 (6) Structure For Testing **Description:** The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate testing. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-17 (7) Structure For Least Privilege + +### SA-17 (7) Structure For Least Privilege **Description:** The organization requires the developer of the information system, system component, or information system service to structure security-relevant hardware, software, and firmware to facilitate controlling access with least privilege. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-18 Tamper Resistance And Detection **Description:** The organization implements a tamper protection program for the information system, system component, or information system service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-18 (1) Multiple Phases Of Sdlc + +### SA-18 (1) Multiple Phases Of Sdlc **Description:** The organization employs anti-tamper technologies and techniques during multiple phases in the system development life cycle including design, development, integration, operations, and maintenance. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-18 (2) Inspection Of Information Systems, Components, Or Devices + +### SA-18 (2) Inspection Of Information Systems, Components, Or Devices **Description:** The organization inspects [Assignment: organization-defined information systems, system components, or devices] [Selection (one or more): at random; at [Assignment: organization-defined frequency], upon [Assignment: organization-defined indications of need for inspection]] to detect tampering. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-19 Component Authenticity **Description:** @@ -1056,68 +1000,58 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-19 (1) Anti-Counterfeit Training + +### SA-19 (1) Anti-Counterfeit Training **Description:** The organization trains [Assignment: organization-defined personnel or roles] to detect counterfeit information system components (including hardware, software, and firmware). -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-19 (2) Configuration Control For Component Service / Repair + +### SA-19 (2) Configuration Control For Component Service / Repair **Description:** The organization maintains configuration control over [Assignment: organization-defined information system components] awaiting service/repair and serviced/repaired components awaiting return to service. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-19 (3) Component Disposal + +### SA-19 (3) Component Disposal **Description:** The organization disposes of information system components using [Assignment: organization-defined techniques and methods]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SA-19 (4) Anti-Counterfeit Scanning + +### SA-19 (4) Anti-Counterfeit Scanning **Description:** The organization scans for counterfeit information system components [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-20 Customized Development Of Critical Components **Description:** The organization re-implements or custom develops [Assignment: organization-defined critical information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-21 Developer Screening **Description:** @@ -1130,20 +1064,18 @@ The organization requires that the developer of [Assignment: organization-define **Control Information:** - **Responsible role(s)** - Organization -## SA-21 (1) Validation Of Screening + +### SA-21 (1) Validation Of Screening **Description:** The organization requires the developer of the information system, system component, or information system service take [Assignment: organization-defined actions] to ensure that the required access authorizations and screening criteria are satisfied. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SA-22 Unsupported System Components **Description:** @@ -1156,17 +1088,15 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SA-22 (1) Alternative Sources For Continued Support + +### SA-22 (1) Alternative Sources For Continued Support **Description:** The organization provides [Selection (one or more): in-house support; [Assignment: organization-defined support from external providers]] for unsupported information system components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/SC.md b/docs/compliance/reference/800-53/SC.md index 90bb8d0..e27f39e 100644 --- a/docs/compliance/reference/800-53/SC.md +++ b/docs/compliance/reference/800-53/SC.md @@ -26,15 +26,13 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SC-2 Application Partitioning **Description:** The information system separates user functionality (including user interface services) from information system management functionality. -
      -
    **Control Information:** @@ -58,151 +56,157 @@ The information system separates user functionality (including user interface se -## SC-2 (1) Interfaces For Non-Privileged Users +**Implemenation Details:** + + + +
    +
    +Docker Trusted Registry is made up of a number of backend services +that provide for both user functionality (including user interface +services) and system management functionality. Each of these services +operates independently of one another. Additional information can be +found at the following resources: + +- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#Docker_Trusted_Registry +
    +
    +Universal Control Plane is made up of a number of backend services +that provide for both user functionality (including user interface +services) and system management functionality. Each of these services +operates independently of one another. Additional information can be +found at the following resources: + +- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#Universal_Control_Plane +
    +
    + +### SC-2 (1) Interfaces For Non-Privileged Users **Description:** The information system prevents the presentation of information system management-related functionality at an interface for non-privileged users. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-3 Security Function Isolation **Description:** The information system isolates security functions from nonsecurity functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-3 (1) Hardware Separation + +### SC-3 (1) Hardware Separation **Description:** The information system utilizes underlying hardware separation mechanisms to implement security function isolation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-3 (2) Access / Flow Control Functions + +### SC-3 (2) Access / Flow Control Functions **Description:** The information system isolates security functions enforcing access and information flow control from nonsecurity functions and from other security functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-3 (3) Minimize Nonsecurity Functionality + +### SC-3 (3) Minimize Nonsecurity Functionality **Description:** The organization minimizes the number of nonsecurity functions included within the isolation boundary containing security functions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-3 (4) Module Coupling And Cohesiveness + +### SC-3 (4) Module Coupling And Cohesiveness **Description:** The organization implements security functions as largely independent modules that maximize internal cohesiveness within modules and minimize coupling between modules. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-3 (5) Layered Structures + +### SC-3 (5) Layered Structures **Description:** The organization implements security functions as a layered structure minimizing interactions between layers of the design and avoiding any dependence by lower layers on the functionality or correctness of higher layers. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-4 Information In Shared Resources **Description:** The information system prevents unauthorized and unintended information transfer via shared system resources. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-4 (2) Periods Processing + +### SC-4 (2) Periods Processing **Description:** The information system prevents unauthorized information transfer via shared resources in accordance with [Assignment: organization-defined procedures] when system processing explicitly switches between different information classification levels or security categories. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-5 Denial Of Service Protection **Description:** The information system protects against or limits the effects of the following types of denial of service attacks: [Assignment: organization-defined types of denial of service attacks or references to sources for such information] by employing [Assignment: organization-defined security safeguards]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-5 (1) Restrict Internal Users + +### SC-5 (1) Restrict Internal Users **Description:** The information system restricts the ability of individuals to launch [Assignment: organization-defined denial of service attacks] against other information systems. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-5 (2) Excess Capacity / Bandwidth / Redundancy + +### SC-5 (2) Excess Capacity / Bandwidth / Redundancy **Description:** The information system manages excess capacity, bandwidth, or other redundancy to limit the effects of information flooding denial of service attacks. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-5 (3) Detection / Monitoring + +### SC-5 (3) Detection / Monitoring **Description:** @@ -214,20 +218,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SC-6 Resource Availability **Description:** The information system protects the availability of resources by allocating [Assignment: organization-defined resources] by [Selection (one or more); priority; quota; [Assignment: organization-defined security safeguards]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-7 Boundary Protection **Description:** @@ -241,21 +243,19 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (3) Access Points + +### SC-7 (3) Access Points **Description:** The organization limits the number of external network connections to the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (4) External Telecommunications Services + +### SC-7 (4) External Telecommunications Services **Description:** @@ -270,45 +270,39 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (5) Deny By Default / Allow By Exception + +### SC-7 (5) Deny By Default / Allow By Exception **Description:** The information system at managed interfaces denies network communications traffic by default and allows network communications traffic by exception (i.e., deny all, permit by exception). -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (7) Prevent Split Tunneling For Remote Devices + +### SC-7 (7) Prevent Split Tunneling For Remote Devices **Description:** The information system, in conjunction with a remote device, prevents the device from simultaneously establishing non-remote connections with the system and communicating via some other connection to resources in external networks. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (8) Route Traffic To Authenticated Proxy Servers + +### SC-7 (8) Route Traffic To Authenticated Proxy Servers **Description:** The information system routes [Assignment: organization-defined internal communications traffic] to [Assignment: organization-defined external networks] through authenticated proxy servers at managed interfaces. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (9) Restrict Threatening Outgoing Communications Traffic + +### SC-7 (9) Restrict Threatening Outgoing Communications Traffic **Description:** @@ -320,135 +314,113 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (10) Prevent Unauthorized Exfiltration + +### SC-7 (10) Prevent Unauthorized Exfiltration **Description:** The organization prevents the unauthorized exfiltration of information across managed interfaces. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (11) Restrict Incoming Communications Traffic + +### SC-7 (11) Restrict Incoming Communications Traffic **Description:** The information system only allows incoming communications from [Assignment: organization-defined authorized sources] to be routed to [Assignment: organization-defined authorized destinations]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (12) Host-Based Protection + +### SC-7 (12) Host-Based Protection **Description:** The organization implements [Assignment: organization-defined host-based boundary protection mechanisms] at [Assignment: organization-defined information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (13) Isolation Of Security Tools / Mechanisms / Support Components + +### SC-7 (13) Isolation Of Security Tools / Mechanisms / Support Components **Description:** The organization isolates [Assignment: organization-defined information security tools, mechanisms, and support components] from other internal information system components by implementing physically separate subnetworks with managed interfaces to other components of the system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (14) Protects Against Unauthorized Physical Connections + +### SC-7 (14) Protects Against Unauthorized Physical Connections **Description:** The organization protects against unauthorized physical connections at [Assignment: organization-defined managed interfaces]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (15) Route Privileged Network Accesses + +### SC-7 (15) Route Privileged Network Accesses **Description:** The information system routes all networked, privileged accesses through a dedicated, managed interface for purposes of access control and auditing. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (16) Prevent Discovery Of Components / Devices + +### SC-7 (16) Prevent Discovery Of Components / Devices **Description:** The information system prevents discovery of specific system components composing a managed interface. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (17) Automated Enforcement Of Protocol Formats + +### SC-7 (17) Automated Enforcement Of Protocol Formats **Description:** The information system enforces adherence to protocol formats. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (18) Fail Secure + +### SC-7 (18) Fail Secure **Description:** The information system fails securely in the event of an operational failure of a boundary protection device. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (19) Blocks Communication From Non-Organizationally Configured Hosts + +### SC-7 (19) Blocks Communication From Non-Organizationally Configured Hosts **Description:** The information system blocks both inbound and outbound communications traffic between [Assignment: organization-defined communication clients] that are independently configured by end users and external service providers. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (20) Dynamic Isolation / Segregation + +### SC-7 (20) Dynamic Isolation / Segregation **Description:** The information system provides the capability to dynamically isolate/segregate [Assignment: organization-defined information system components] from other components of the system. -
      -
    **Control Information:** @@ -467,169 +439,163 @@ The information system provides the capability to dynamically isolate/segregate -## SC-7 (21) Isolation Of Information System Components +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition is designed to run application containers +whose content can be completely isolated/segregated from other +application containers within the same node/cluster. This is +accomplished by way of Linux kernel primitives and various security +profiles that can be applied to the underlying host OS. Additional +information can be found at the following resources: + +- https://docs.docker.com/engine/security/security/ +- https://docs.docker.com/engine/userguide/networking/overlay-security-model/ +- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Engine_and_Node_Security + +
    +
    + +### SC-7 (21) Isolation Of Information System Components **Description:** The organization employs boundary protection mechanisms to separate [Assignment: organization-defined information system components] supporting [Assignment: organization-defined missions and/or business functions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (22) Separate Subnets For Connecting To Different Security Domains + +### SC-7 (22) Separate Subnets For Connecting To Different Security Domains **Description:** The information system implements separate network addresses (i.e., different subnets) to connect to systems in different security domains. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-7 (23) Disable Sender Feedback On Protocol Validation Failure + +### SC-7 (23) Disable Sender Feedback On Protocol Validation Failure **Description:** The information system disables feedback to senders on protocol format validation failure. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-8 Transmission Confidentiality And Integrity **Description:** The information system protects the [Selection (one or more): confidentiality; integrity] of transmitted information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-8 (1) Cryptographic Or Alternate Physical Protection + +### SC-8 (1) Cryptographic Or Alternate Physical Protection **Description:** The information system implements cryptographic mechanisms to [Selection (one or more): prevent unauthorized disclosure of information; detect changes to information] during transmission unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-8 (2) Pre / Post Transmission Handling + +### SC-8 (2) Pre / Post Transmission Handling **Description:** The information system maintains the [Selection (one or more): confidentiality; integrity] of information during preparation for transmission and during reception. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-8 (3) Cryptographic Protection For Message Externals + +### SC-8 (3) Cryptographic Protection For Message Externals **Description:** The information system implements cryptographic mechanisms to protect message externals unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-8 (4) Conceal / Randomize Communications + +### SC-8 (4) Conceal / Randomize Communications **Description:** The information system implements cryptographic mechanisms to conceal or randomize communication patterns unless otherwise protected by [Assignment: organization-defined alternative physical safeguards]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-10 Network Disconnect **Description:** The information system terminates the network connection associated with a communications session at the end of the session or after [Assignment: organization-defined time period] of inactivity. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-11 Trusted Path **Description:** The information system establishes a trusted communications path between the user and the following security functions of the system: [Assignment: organization-defined security functions to include at a minimum, information system authentication and re-authentication]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-11 (1) Logical Isolation + +### SC-11 (1) Logical Isolation **Description:** The information system provides a trusted communications path that is logically isolated and distinguishable from other paths. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-12 Cryptographic Key Establishment And Management **Description:** The organization establishes and manages cryptographic keys for required cryptography employed within the information system in accordance with [Assignment: organization-defined requirements for key generation, distribution, storage, access, and destruction]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-12 (1) Availability + +### SC-12 (1) Availability **Description:** The organization maintains availability of information in the event of the loss of cryptographic keys by users. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-12 (2) Symmetric Keys + +### SC-12 (2) Symmetric Keys **Description:** The organization produces, controls, and distributes symmetric cryptographic keys using [Selection: NIST FIPS-compliant; NSA-approved] key management technology and processes. -
      -
    **Control Information:** @@ -648,25 +614,38 @@ The organization produces, controls, and distributes symmetric cryptographic key -## SC-12 (3) Asymmetric Keys +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition can be installed on the following operating systems: +CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and +SUSE Linux Enterprise 12+. In order to meet the requirements of this +control, reference the chosen operating system's documentation to +ensure it is configured in FIPS mode. + +
    +
    + +### SC-12 (3) Asymmetric Keys **Description:** The organization produces, controls, and distributes asymmetric cryptographic keys using [Selection: NSA-approved key management technology and processes; approved PKI Class 3 certificates or prepositioned keying material; approved PKI Class 3 or Class 4 certificates and hardware security tokens that protect the user�s private key]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-13 Cryptographic Protection **Description:** The information system implements [Assignment: organization-defined cryptographic uses and type of cryptography required for each use] in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, and standards. -
      -
    **Control Information:** @@ -685,6 +664,23 @@ The information system implements [Assignment: organization-defined cryptographi +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition can be installed on the following operating systems: +CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and +SUSE Linux Enterprise 12+. In order to meet the requirements of this +control, reference the chosen operating system's documentation to +ensure it is configured in FIPS mode. + +
    +
    + ## SC-15 Collaborative Computing Devices **Description:** @@ -697,80 +693,68 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## SC-15 (1) Physical Disconnect + +### SC-15 (1) Physical Disconnect **Description:** The information system provides physical disconnect of collaborative computing devices in a manner that supports ease of use. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-15 (3) Disabling / Removal In Secure Work Areas + +### SC-15 (3) Disabling / Removal In Secure Work Areas **Description:** The organization disables or removes collaborative computing devices from [Assignment: organization-defined information systems or information system components] in [Assignment: organization-defined secure work areas]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-15 (4) Explicitly Indicate Current Participants + +### SC-15 (4) Explicitly Indicate Current Participants **Description:** The information system provides an explicit indication of current participants in [Assignment: organization-defined online meetings and teleconferences]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-16 Transmission Of Security Attributes **Description:** The information system associates [Assignment: organization-defined security attributes] with information exchanged between information systems and between system components. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-16 (1) Integrity Validation + +### SC-16 (1) Integrity Validation **Description:** The information system validates the integrity of transmitted security attributes. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-17 Public Key Infrastructure Certificates **Description:** The organization issues public key certificates under an [Assignment: organization-defined certificate policy] or obtains public key certificates from an approved service provider. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-18 Mobile Code **Description:** @@ -784,68 +768,58 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SC-18 (1) Identify Unacceptable Code / Take Corrective Actions + +### SC-18 (1) Identify Unacceptable Code / Take Corrective Actions **Description:** The information system identifies [Assignment: organization-defined unacceptable mobile code] and takes [Assignment: organization-defined corrective actions]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-18 (2) Acquisition / Development / Use + +### SC-18 (2) Acquisition / Development / Use **Description:** The organization ensures that the acquisition, development, and use of mobile code to be deployed in the information system meets [Assignment: organization-defined mobile code requirements]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-18 (3) Prevent Downloading / Execution + +### SC-18 (3) Prevent Downloading / Execution **Description:** The information system prevents the download and execution of [Assignment: organization-defined unacceptable mobile code]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-18 (4) Prevent Automatic Execution + +### SC-18 (4) Prevent Automatic Execution **Description:** The information system prevents the automatic execution of mobile code in [Assignment: organization-defined software applications] and enforces [Assignment: organization-defined actions] prior to executing the code. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-18 (5) Allow Execution Only In Confined Environments + +### SC-18 (5) Allow Execution Only In Confined Environments **Description:** The organization allows execution of permitted mobile code only in confined virtual machine environments. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-19 Voice Over Internet Protocol **Description:** @@ -858,8 +832,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SC-20 Secure Name / Address Resolution Service (Authoritative Source) **Description:** @@ -872,51 +846,43 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## SC-20 (2) Data Origin / Integrity + +### SC-20 (2) Data Origin / Integrity **Description:** The information system provides data origin and integrity protection artifacts for internal name/address resolution queries. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-21 Secure Name / Address Resolution Service (Recursive Or Caching Resolver) **Description:** The information system requests and performs data origin authentication and data integrity verification on the name/address resolution responses the system receives from authoritative sources. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-22 Architecture And Provisioning For Name / Address Resolution Service **Description:** The information systems that collectively provide name/address resolution service for an organization are fault-tolerant and implement internal/external role separation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-23 Session Authenticity **Description:** The information system protects the authenticity of communications sessions. -
      -
    **Control Information:** @@ -945,13 +911,45 @@ The information system protects the authenticity of communications sessions. -## SC-23 (1) Invalidate Session Identifiers At Logout +**Implemenation Details:** + + + +
    +
    +All remote access sessions to Docker Trusted Registry are protected +with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This +is included at both the HTTPS application layer for access to the DTR +user interface and for command-line based connections to the registry. +In addition to this, all communication to DTR is enforced by way of +two-way mutual TLS authentication. +
    +
    +All remote access sessions to Docker Enterprise Edition are protected with +Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In +addition to this, all communication to and between Docker Enterprise Editions +is enforced by way of two-way mutual TLS authentication. + +
    +
    +All remote access sessions to Universal Control Plane are protected +with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This +is included at both the HTTPS application layer for access to the UCP +user interface and for command-line based connections to the cluster. +In addition to this, all communication to UCP is enforced by way of +two-way mutual TLS authentication. +
    +
    + +### SC-23 (1) Invalidate Session Identifiers At Logout **Description:** The information system invalidates session identifiers upon user logout or other session termination. -
      -
    **Control Information:** @@ -970,85 +968,84 @@ The information system invalidates session identifiers upon user logout or other -## SC-23 (3) Unique Session Identifiers With Randomization +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition invalidates session identifiers upon user +logout per the requirements of this control. +
    +
    + +### SC-23 (3) Unique Session Identifiers With Randomization **Description:** The information system generates a unique session identifier for each session with [Assignment: organization-defined randomness requirements] and recognizes only session identifiers that are system-generated. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-23 (5) Allowed Certificate Authorities + +### SC-23 (5) Allowed Certificate Authorities **Description:** The information system only allows the use of [Assignment: organization-defined certificate authorities] for verification of the establishment of protected sessions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-24 Fail In Known State **Description:** The information system fails to a [Assignment: organization-defined known-state] for [Assignment: organization-defined types of failures] preserving [Assignment: organization-defined system state information] in failure. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-25 Thin Nodes **Description:** The organization employs [Assignment: organization-defined information system components] with minimal functionality and information storage. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-26 Honeypots **Description:** The information system includes components specifically designed to be the target of malicious attacks for the purpose of detecting, deflecting, and analyzing such attacks. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-27 Platform-Independent Applications **Description:** The information system includes: [Assignment: organization-defined platform-independent applications]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-28 Protection Of Information At Rest **Description:** The information system protects the [Selection (one or more): confidentiality; integrity] of [Assignment: organization-defined information at rest]. -
      -
    **Control Information:** @@ -1067,13 +1064,30 @@ The information system protects the [Selection (one or more): confidentiality; i -## SC-28 (1) Cryptographic Protection +**Implemenation Details:** + + + +
    +
    +All remote access sessions to Docker Enterprise Edition are protected +with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In +addition to this, all communication to/from and between Docker +Enterprise Edition nodes is enforced by way of two-way mutual TLS +authentication. All Swarm Mode manager nodes in a Docker Enterprise +Edition cluster store state metadata and user secrets encrypted at +rest using the AES GCM cipher. + +
    +
    + +### SC-28 (1) Cryptographic Protection **Description:** The information system implements cryptographic mechanisms to prevent unauthorized disclosure and modification of [Assignment: organization-defined information] on [Assignment: organization-defined information system components]. -
      -
    **Control Information:** @@ -1102,102 +1116,120 @@ The information system implements cryptographic mechanisms to prevent unauthoriz -## SC-28 (2) Off-Line Storage +**Implemenation Details:** + + + +
    +
    +All remote access sessions to Docker Trusted Registry are protected +with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This +is included at both the HTTPS application layer for access to the DTR +user interface and for command-line based connections to the registry. +In addition to this, all communication to DTR is enforced by way of +two-way mutual TLS authentication. +
    +
    +All remote access sessions to Docker Enterprise Edition are protected with +Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In +addition to this, all communication to and between Docker Enterprise Editions +is enforced by way of two-way mutual TLS authentication. + +
    +
    +All remote access sessions to Universal Control Plane are protected +with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This +is included at both the HTTPS application layer for access to the UCP +user interface and for command-line based connections to the cluster. +In addition to this, all communication to UCP is enforced by way of +two-way mutual TLS authentication. +
    +
    + +### SC-28 (2) Off-Line Storage **Description:** The organization removes from online storage and stores off-line in a secure location [Assignment: organization-defined information]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-29 Heterogeneity **Description:** The organization employs a diverse set of information technologies for [Assignment: organization-defined information system components] in the implementation of the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-29 (1) Virtualization Techniques + +### SC-29 (1) Virtualization Techniques **Description:** The organization employs virtualization techniques to support the deployment of a diversity of operating systems and applications that are changed [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-30 Concealment And Misdirection **Description:** The organization employs [Assignment: organization-defined concealment and misdirection techniques] for [Assignment: organization-defined information systems] at [Assignment: organization-defined time periods] to confuse and mislead adversaries. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-30 (2) Randomness + +### SC-30 (2) Randomness **Description:** The organization employs [Assignment: organization-defined techniques] to introduce randomness into organizational operations and assets. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-30 (3) Change Processing / Storage Locations + +### SC-30 (3) Change Processing / Storage Locations **Description:** The organization changes the location of [Assignment: organization-defined processing and/or storage] [Selection: [Assignment: organization-defined time frequency]; at random time intervals]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-30 (4) Misleading Information + +### SC-30 (4) Misleading Information **Description:** The organization employs realistic, but misleading information in [Assignment: organization-defined information system components] with regard to its security state or posture. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-30 (5) Concealment Of System Components + +### SC-30 (5) Concealment Of System Components **Description:** The organization employs [Assignment: organization-defined techniques] to hide or conceal [Assignment: organization-defined information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-31 Covert Channel Analysis **Description:** @@ -1210,56 +1242,48 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SC-31 (1) Test Covert Channels For Exploitability + +### SC-31 (1) Test Covert Channels For Exploitability **Description:** The organization tests a subset of the identified covert channels to determine which channels are exploitable. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-31 (2) Maximum Bandwidth + +### SC-31 (2) Maximum Bandwidth **Description:** The organization reduces the maximum bandwidth for identified covert [Selection (one or more); storage; timing] channels to [Assignment: organization-defined values]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-31 (3) Measure Bandwidth In Operational Environments + +### SC-31 (3) Measure Bandwidth In Operational Environments **Description:** The organization measures the bandwidth of [Assignment: organization-defined subset of identified covert channels] in the operational environment of the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-32 Information System Partitioning **Description:** The organization partitions the information system into [Assignment: organization-defined information system components] residing in separate physical domains or environments based on [Assignment: organization-defined circumstances for physical separation of components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-34 Non-Modifiable Executable Programs **Description:** @@ -1272,33 +1296,29 @@ The information system at [Assignment: organization-defined information system c **Control Information:** - **Responsible role(s)** - Organization -## SC-34 (1) No Writable Storage + +### SC-34 (1) No Writable Storage **Description:** The organization employs [Assignment: organization-defined information system components] with no writeable storage that is persistent across component restart or power on/off. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-34 (2) Integrity Protection / Read-Only Media + +### SC-34 (2) Integrity Protection / Read-Only Media **Description:** The organization protects the integrity of information prior to storage on read-only media and controls the media after such information has been recorded onto the media. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-34 (3) Hardware-Based Protection + +### SC-34 (3) Hardware-Based Protection **Description:** @@ -1310,188 +1330,158 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SC-35 Honeyclients **Description:** The information system includes components that proactively seek to identify malicious websites and/or web-based malicious code. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-36 Distributed Processing And Storage **Description:** The organization distributes [Assignment: organization-defined processing and storage] across multiple physical locations. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-36 (1) Polling Techniques + +### SC-36 (1) Polling Techniques **Description:** The organization employs polling techniques to identify potential faults, errors, or compromises to [Assignment: organization-defined distributed processing and storage components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-37 Out-Of-Band Channels **Description:** The organization employs [Assignment: organization-defined out-of-band channels] for the physical delivery or electronic transmission of [Assignment: organization-defined information, information system components, or devices] to [Assignment: organization-defined individuals or information systems]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-37 (1) Ensure Delivery / Transmission + +### SC-37 (1) Ensure Delivery / Transmission **Description:** The organization employs [Assignment: organization-defined security safeguards] to ensure that only [Assignment: organization-defined individuals or information systems] receive the [Assignment: organization-defined information, information system components, or devices]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-38 Operations Security **Description:** The organization employs [Assignment: organization-defined operations security safeguards] to protect key organizational information throughout the system development life cycle. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-39 Process Isolation **Description:** The information system maintains a separate execution domain for each executing process. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-39 (1) Hardware Separation + +### SC-39 (1) Hardware Separation **Description:** The information system implements underlying hardware separation mechanisms to facilitate process separation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-39 (2) Thread Isolation + +### SC-39 (2) Thread Isolation **Description:** The information system maintains a separate execution domain for each thread in [Assignment: organization-defined multi-threaded processing]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-40 Wireless Link Protection **Description:** The information system protects external and internal [Assignment: organization-defined wireless links] from [Assignment: organization-defined types of signal parameter attacks or references to sources for such attacks]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-40 (1) Electromagnetic Interference + +### SC-40 (1) Electromagnetic Interference **Description:** The information system implements cryptographic mechanisms that achieve [Assignment: organization-defined level of protection] against the effects of intentional electromagnetic interference. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-40 (2) Reduce Detection Potential + +### SC-40 (2) Reduce Detection Potential **Description:** The information system implements cryptographic mechanisms to reduce the detection potential of wireless links to [Assignment: organization-defined level of reduction]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-40 (3) Imitative Or Manipulative Communications Deception + +### SC-40 (3) Imitative Or Manipulative Communications Deception **Description:** The information system implements cryptographic mechanisms to identify and reject wireless transmissions that are deliberate attempts to achieve imitative or manipulative communications deception based on signal parameters. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-40 (4) Signal Parameter Identification + +### SC-40 (4) Signal Parameter Identification **Description:** The information system implements cryptographic mechanisms to prevent the identification of [Assignment: organization-defined wireless transmitters] by using the transmitter signal parameters. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-41 Port And I/O Device Access **Description:** The organization physically disables or removes [Assignment: organization-defined connection ports or input/output devices] on [Assignment: organization-defined information systems or information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-42 Sensor Capability And Data **Description:** @@ -1504,44 +1494,38 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## SC-42 (1) Reporting To Authorized Individuals Or Roles + +### SC-42 (1) Reporting To Authorized Individuals Or Roles **Description:** The organization ensures that the information system is configured so that data or information collected by the [Assignment: organization-defined sensors] is only reported to authorized individuals or roles. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-42 (2) Authorized Use + +### SC-42 (2) Authorized Use **Description:** The organization employs the following measures: [Assignment: organization-defined measures], so that data or information collected by [Assignment: organization-defined sensors] is only used for authorized purposes. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SC-42 (3) Prohibit Use Of Devices + +### SC-42 (3) Prohibit Use Of Devices **Description:** The organization prohibits the use of devices possessing [Assignment: organization-defined environmental sensing capabilities] in [Assignment: organization-defined facilities, areas, or systems]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SC-43 Usage Restrictions **Description:** @@ -1554,17 +1538,15 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SC-44 Detonation Chambers **Description:** The organization employs a detonation chamber capability within [Assignment: organization-defined information system, system component, or location]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/compliance/reference/800-53/SI.md b/docs/compliance/reference/800-53/SI.md index 41b7d4c..8a2363f 100644 --- a/docs/compliance/reference/800-53/SI.md +++ b/docs/compliance/reference/800-53/SI.md @@ -26,8 +26,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SI-2 Flaw Remediation **Description:** @@ -42,33 +42,29 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-2 (1) Central Management + +### SI-2 (1) Central Management **Description:** The organization centrally manages the flaw remediation process. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-2 (2) Automated Flaw Remediation Status + +### SI-2 (2) Automated Flaw Remediation Status **Description:** The organization employs automated mechanisms [Assignment: organization-defined frequency] to determine the state of information system components with regard to flaw remediation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-2 (3) Time To Remediate Flaws / Benchmarks For Corrective Actions + +### SI-2 (3) Time To Remediate Flaws / Benchmarks For Corrective Actions **Description:** @@ -80,32 +76,28 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-2 (5) Automatic Software / Firmware Updates + +### SI-2 (5) Automatic Software / Firmware Updates **Description:** The organization installs [Assignment: organization-defined security-relevant software and firmware updates] automatically to [Assignment: organization-defined information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-2 (6) Removal Of Previous Versions Of Software / Firmware + +### SI-2 (6) Removal Of Previous Versions Of Software / Firmware **Description:** The organization removes [Assignment: organization-defined software and firmware components] after updated versions have been installed. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-3 Malicious Code Protection **Description:** @@ -125,27 +117,23 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-3 (1) Central Management + +### SI-3 (1) Central Management **Description:** The organization centrally manages malicious code protection mechanisms. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-3 (2) Automatic Updates + +### SI-3 (2) Automatic Updates **Description:** The information system automatically updates malicious code protection mechanisms. -
      -
    **Control Information:** @@ -164,19 +152,34 @@ The information system automatically updates malicious code protection mechanism -## SI-3 (4) Updates Only By Privileged Users +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition packages for supported underlying operating +systems can only be obtained from Docker, Inc. The Docker EE +repositories from which Docker EE packages are obtained are protected +with official GPG keys. Each Docker package is also validated with a +signature definition. + +
    +
    + +### SI-3 (4) Updates Only By Privileged Users **Description:** The information system updates malicious code protection mechanisms only when directed by a privileged user. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-3 (6) Testing / Verification + +### SI-3 (6) Testing / Verification **Description:** @@ -188,45 +191,39 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-3 (7) Nonsignature-Based Detection + +### SI-3 (7) Nonsignature-Based Detection **Description:** The information system implements nonsignature-based malicious code detection mechanisms. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-3 (8) Detect Unauthorized Commands + +### SI-3 (8) Detect Unauthorized Commands **Description:** The information system detects [Assignment: organization-defined unauthorized operating system commands] through the kernel application programming interface at [Assignment: organization-defined information system hardware components] and [Selection (one or more): issues a warning; audits the command execution; prevents the execution of the command]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-3 (9) Authenticate Remote Commands + +### SI-3 (9) Authenticate Remote Commands **Description:** The information system implements [Assignment: organization-defined security safeguards] to authenticate [Assignment: organization-defined remote commands]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-3 (10) Malicious Code Analysis + +### SI-3 (10) Malicious Code Analysis **Description:** @@ -238,8 +235,8 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization + ## SI-4 Information System Monitoring **Description:** @@ -267,129 +264,109 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (1) System-Wide Intrusion Detection System + +### SI-4 (1) System-Wide Intrusion Detection System **Description:** The organization connects and configures individual intrusion detection tools into an information system-wide intrusion detection system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (2) Automated Tools For Real-Time Analysis + +### SI-4 (2) Automated Tools For Real-Time Analysis **Description:** The organization employs automated tools to support near real-time analysis of events. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (3) Automated Tool Integration + +### SI-4 (3) Automated Tool Integration **Description:** The organization employs automated tools to integrate intrusion detection tools into access control and flow control mechanisms for rapid response to attacks by enabling reconfiguration of these mechanisms in support of attack isolation and elimination. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (4) Inbound And Outbound Communications Traffic + +### SI-4 (4) Inbound And Outbound Communications Traffic **Description:** The information system monitors inbound and outbound communications traffic [Assignment: organization-defined frequency] for unusual or unauthorized activities or conditions. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (5) System-Generated Alerts + +### SI-4 (5) System-Generated Alerts **Description:** The information system alerts [Assignment: organization-defined personnel or roles] when the following indications of compromise or potential compromise occur: [Assignment: organization-defined compromise indicators]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (7) Automated Response To Suspicious Events + +### SI-4 (7) Automated Response To Suspicious Events **Description:** The information system notifies [Assignment: organization-defined incident response personnel (identified by name and/or by role)] of detected suspicious events and takes [Assignment: organization-defined least-disruptive actions to terminate suspicious events]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (9) Testing Of Monitoring Tools + +### SI-4 (9) Testing Of Monitoring Tools **Description:** The organization tests intrusion-monitoring tools [Assignment: organization-defined frequency]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (10) Visibility Of Encrypted Communications + +### SI-4 (10) Visibility Of Encrypted Communications **Description:** The organization makes provisions so that [Assignment: organization-defined encrypted communications traffic] is visible to [Assignment: organization-defined information system monitoring tools]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (11) Analyze Communications Traffic Anomalies + +### SI-4 (11) Analyze Communications Traffic Anomalies **Description:** The organization analyzes outbound communications traffic at the external boundary of the information system and selected [Assignment: organization-defined interior points within the system (e.g., subnetworks, subsystems)] to discover anomalies. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (12) Automated Alerts + +### SI-4 (12) Automated Alerts **Description:** The organization employs automated mechanisms to alert security personnel of the following inappropriate or unusual activities with security implications: [Assignment: organization-defined activities that trigger alerts]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (13) Analyze Traffic / Event Patterns + +### SI-4 (13) Analyze Traffic / Event Patterns **Description:** @@ -402,140 +379,118 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (14) Wireless Intrusion Detection + +### SI-4 (14) Wireless Intrusion Detection **Description:** The organization employs a wireless intrusion detection system to identify rogue wireless devices and to detect attack attempts and potential compromises/breaches to the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (15) Wireless To Wireline Communications + +### SI-4 (15) Wireless To Wireline Communications **Description:** The organization employs an intrusion detection system to monitor wireless communications traffic as the traffic passes from wireless to wireline networks. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (16) Correlate Monitoring Information + +### SI-4 (16) Correlate Monitoring Information **Description:** The organization correlates information from monitoring tools employed throughout the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (17) Integrated Situational Awareness + +### SI-4 (17) Integrated Situational Awareness **Description:** The organization correlates information from monitoring physical, cyber, and supply chain activities to achieve integrated, organization-wide situational awareness. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (18) Analyze Traffic / Covert Exfiltration + +### SI-4 (18) Analyze Traffic / Covert Exfiltration **Description:** The organization analyzes outbound communications traffic at the external boundary of the information system (i.e., system perimeter) and at [Assignment: organization-defined interior points within the system (e.g., subsystems, subnetworks)] to detect covert exfiltration of information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (19) Individuals Posing Greater Risk + +### SI-4 (19) Individuals Posing Greater Risk **Description:** The organization implements [Assignment: organization-defined additional monitoring] of individuals who have been identified by [Assignment: organization-defined sources] as posing an increased level of risk. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (20) Privileged Users + +### SI-4 (20) Privileged Users **Description:** The organization implements [Assignment: organization-defined additional monitoring] of privileged users. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (21) Probationary Periods + +### SI-4 (21) Probationary Periods **Description:** The organization implements [Assignment: organization-defined additional monitoring] of individuals during [Assignment: organization-defined probationary period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (22) Unauthorized Network Services + +### SI-4 (22) Unauthorized Network Services **Description:** The information system detects network services that have not been authorized or approved by [Assignment: organization-defined authorization or approval processes] and [Selection (one or more): audits; alerts [Assignment: organization-defined personnel or roles]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (23) Host-Based Devices + +### SI-4 (23) Host-Based Devices **Description:** The organization implements [Assignment: organization-defined host-based monitoring mechanisms] at [Assignment: organization-defined information system components]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-4 (24) Indicators Of Compromise + +### SI-4 (24) Indicators Of Compromise **Description:** The information system discovers, collects, distributes, and uses indicators of compromise. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-5 Security Alerts, Advisories, And Directives **Description:** @@ -550,20 +505,18 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-5 (1) Automated Alerts And Advisories + +### SI-5 (1) Automated Alerts And Advisories **Description:** The organization employs automated mechanisms to make security alert and advisory information available throughout the organization. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-6 Security Function Verification **Description:** @@ -578,189 +531,159 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## SI-6 (2) Automation Support For Distributed Testing + +### SI-6 (2) Automation Support For Distributed Testing **Description:** The information system implements automated mechanisms to support the management of distributed security testing. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-6 (3) Report Verification Results + +### SI-6 (3) Report Verification Results **Description:** The organization reports the results of security function verification to [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-7 Software, Firmware, And Information Integrity **Description:** The organization employs integrity verification tools to detect unauthorized changes to [Assignment: organization-defined software, firmware, and information]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (1) Integrity Checks + +### SI-7 (1) Integrity Checks **Description:** The information system performs an integrity check of [Assignment: organization-defined software, firmware, and information] [Selection (one or more): at startup; at [Assignment: organization-defined transitional states or security-relevant events]; [Assignment: organization-defined frequency]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (2) Automated Notifications Of Integrity Violations + +### SI-7 (2) Automated Notifications Of Integrity Violations **Description:** The organization employs automated tools that provide notification to [Assignment: organization-defined personnel or roles] upon discovering discrepancies during integrity verification. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (3) Centrally-Managed Integrity Tools + +### SI-7 (3) Centrally-Managed Integrity Tools **Description:** The organization employs centrally managed integrity verification tools. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (5) Automated Response To Integrity Violations + +### SI-7 (5) Automated Response To Integrity Violations **Description:** The information system automatically [Selection (one or more): shuts the information system down; restarts the information system; implements [Assignment: organization-defined security safeguards]] when integrity violations are discovered. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (6) Cryptographic Protection + +### SI-7 (6) Cryptographic Protection **Description:** The information system implements cryptographic mechanisms to detect unauthorized changes to software, firmware, and information. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (7) Integration Of Detection And Response + +### SI-7 (7) Integration Of Detection And Response **Description:** The organization incorporates the detection of unauthorized [Assignment: organization-defined security-relevant changes to the information system] into the organizational incident response capability. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (8) Auditing Capability For Significant Events + +### SI-7 (8) Auditing Capability For Significant Events **Description:** The information system, upon detection of a potential integrity violation, provides the capability to audit the event and initiates the following actions: [Selection (one or more): generates an audit record; alerts current user; alerts [Assignment: organization-defined personnel or roles]; [Assignment: organization-defined other actions]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (9) Verify Boot Process + +### SI-7 (9) Verify Boot Process **Description:** The information system verifies the integrity of the boot process of [Assignment: organization-defined devices]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (10) Protection Of Boot Firmware + +### SI-7 (10) Protection Of Boot Firmware **Description:** The information system implements [Assignment: organization-defined security safeguards] to protect the integrity of boot firmware in [Assignment: organization-defined devices]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (11) Confined Environments With Limited Privileges + +### SI-7 (11) Confined Environments With Limited Privileges **Description:** The organization requires that [Assignment: organization-defined user-installed software] execute in a confined physical or virtual machine environment with limited privileges. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (12) Integrity Verification + +### SI-7 (12) Integrity Verification **Description:** The organization requires that the integrity of [Assignment: organization-defined user-installed software] be verified prior to execution. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (13) Code Execution In Protected Environments + +### SI-7 (13) Code Execution In Protected Environments **Description:** The organization allows execution of binary or machine-executable code obtained from sources with limited or no warranty and without the provision of source code only in confined physical or virtual machine environments and with the explicit approval of [Assignment: organization-defined personnel or roles]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (14) Binary Or Machine Executable Code + +### SI-7 (14) Binary Or Machine Executable Code **Description:** @@ -772,32 +695,28 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (15) Code Authentication + +### SI-7 (15) Code Authentication **Description:** The information system implements cryptographic mechanisms to authenticate [Assignment: organization-defined software or firmware components] prior to installation. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-7 (16) Time Limit On Process Execution W/O Supervision + +### SI-7 (16) Time Limit On Process Execution W/O Supervision **Description:** The organization does not allow processes to execute without supervision for more than [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-8 Spam Protection **Description:** @@ -810,57 +729,49 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-8 (1) Central Management + +### SI-8 (1) Central Management **Description:** The organization centrally manages spam protection mechanisms. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-8 (2) Automatic Updates + +### SI-8 (2) Automatic Updates **Description:** The information system automatically updates spam protection mechanisms. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-8 (3) Continuous Learning Capability + +### SI-8 (3) Continuous Learning Capability **Description:** The information system implements spam protection mechanisms with a learning capability to more effectively identify legitimate communications traffic. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-10 Information Input Validation **Description:** The information system checks the validity of [Assignment: organization-defined information inputs]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-10 (1) Manual Override Capability + +### SI-10 (1) Manual Override Capability **Description:** @@ -873,56 +784,48 @@ The information system: **Control Information:** - **Responsible role(s)** - Organization -## SI-10 (2) Review / Resolution Of Errors + +### SI-10 (2) Review / Resolution Of Errors **Description:** The organization ensures that input validation errors are reviewed and resolved within [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-10 (3) Predictable Behavior + +### SI-10 (3) Predictable Behavior **Description:** The information system behaves in a predictable and documented manner that reflects organizational and system objectives when invalid inputs are received. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-10 (4) Review / Timing Interactions + +### SI-10 (4) Review / Timing Interactions **Description:** The organization accounts for timing interactions among information system components in determining appropriate responses for invalid inputs. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-10 (5) Restrict Inputs To Trusted Sources And Approved Formats + +### SI-10 (5) Restrict Inputs To Trusted Sources And Approved Formats **Description:** The organization restricts the use of information inputs to [Assignment: organization-defined trusted sources] and/or [Assignment: organization-defined formats]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-11 Error Handling **Description:** @@ -960,18 +863,46 @@ The information system: +**Implemenation Details:** + + + +
    +
    +All error messages generated via the configured logging mechanism of +Docker Trusted Registry are displayed such that they meet the +requirements of this control. Only users that are authorized the +appropriate level of access can view these error messages. +
    +
    +All error messages generated via the logging mechanisms of the Docker +Enterprise Edition engine are displayed such that they meet the +requirements of this control. Only users that are authorized the +appropriate level of access can view these error messages. + +
    +
    +All error messages generated via the configured logging mechanism of +Universal Control Plane are displayed such that they meet the +requirements of this control. Only users that are authorized the +appropriate level of access can view these error messages. +
    +
    + ## SI-12 Information Handling And Retention **Description:** The organization handles and retains information within the information system and information output from the system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and operational requirements. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-13 Predictable Failure Prevention **Description:** @@ -984,33 +915,29 @@ The organization: **Control Information:** - **Responsible role(s)** - Organization -## SI-13 (1) Transferring Component Responsibilities + +### SI-13 (1) Transferring Component Responsibilities **Description:** The organization takes information system components out of service by transferring component responsibilities to substitute components no later than [Assignment: organization-defined fraction or percentage] of mean time to failure. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-13 (3) Manual Transfer Between Components + +### SI-13 (3) Manual Transfer Between Components **Description:** The organization manually initiates transfers between active and standby information system components [Assignment: organization-defined frequency] if the mean time to failure exceeds [Assignment: organization-defined time period]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-13 (4) Standby Component Installation / Notification + +### SI-13 (4) Standby Component Installation / Notification **Description:** @@ -1022,63 +949,53 @@ The organization, if information system component failures are detected: **Control Information:** - **Responsible role(s)** - Organization -## SI-13 (5) Failover Capability + +### SI-13 (5) Failover Capability **Description:** The organization provides [Selection: real-time; near real-time] [Assignment: organization-defined failover capability] for the information system. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-14 Non-Persistence **Description:** The organization implements non-persistent [Assignment: organization-defined information system components and services] that are initiated in a known state and terminated [Selection (one or more): upon end of session of use; periodically at [Assignment: organization-defined frequency]]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization -## SI-14 (1) Refresh From Trusted Sources + +### SI-14 (1) Refresh From Trusted Sources **Description:** The organization ensures that software and data employed during information system component and service refreshes are obtained from [Assignment: organization-defined trusted sources]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-15 Information Output Filtering **Description:** The information system validates information output from [Assignment: organization-defined software programs and/or applications] to ensure that the information is consistent with the expected content. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + ## SI-16 Memory Protection **Description:** The information system implements [Assignment: organization-defined security safeguards] to protect its memory from unauthorized code execution. -
      -
    **Control Information:** @@ -1097,15 +1014,31 @@ The information system implements [Assignment: organization-defined security saf +**Implemenation Details:** + + + +
    +
    +Docker Enterprise Edition can be installed on the following operating systems: +CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and +SUSE Linux Enterprise 12+. In order to meet the requirements of this +control, reference the chosen operating system's security +documentation for information regarding the protection of memory from +unauthorized code execution. + +
    +
    + ## SI-17 Fail-Safe Procedures **Description:** The information system implements [Assignment: organization-defined fail-safe procedures] when [Assignment: organization-defined failure conditions occur]. -
      -
    **Control Information:** - **Responsible role(s)** - Organization + diff --git a/docs/generator/Gopkg.lock b/docs/generator/Gopkg.lock index d5f24e6..c6433bb 100644 --- a/docs/generator/Gopkg.lock +++ b/docs/generator/Gopkg.lock @@ -43,6 +43,12 @@ packages = ["lib/common","lib/components","lib/components/versions/2_0_0","lib/components/versions/3_0_0","lib/components/versions/3_1_0","tools/constants","tools/fs"] revision = "cafffbccc21846dc4e1da4bbd893039b93f6d78a" +[[projects]] + name = "github.com/rs/xid" + packages = ["."] + revision = "02dd45c33376f85d1064355dc790dcc4850596b1" + version = "v1.1" + [[projects]] name = "gopkg.in/fatih/set.v0" packages = ["."] @@ -58,6 +64,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "12a56b6783ddf76dcb9d04f7f57314b14202bc126e1738939abbc458f9f7dd60" + inputs-digest = "d5a1e08624a1411558fb50d6da5182fd29c9c49cdbc251250cc6424bd0693061" solver-name = "gps-cdcl" solver-version = 1 diff --git a/docs/generator/generator.go b/docs/generator/generator.go index 6fc2e66..fca4051 100644 --- a/docs/generator/generator.go +++ b/docs/generator/generator.go @@ -14,11 +14,12 @@ import ( cmcommon "github.com/opencontrol/compliance-masonry/lib/common" cmcomponents "github.com/opencontrol/compliance-masonry/lib/components" + "github.com/rs/xid" ) const componentPath = "./components" const xmlStandardPath = "./data/800-53-controls.xml" -const tmplPath = "./tmpl/80053.test.tmpl" +const tmplPath = "./tmpl/80053.tmpl" // Mount point within container const markdownOutputPath = "./800-53" @@ -84,7 +85,7 @@ func parseStandard(data []byte) (XMLStandard, error) { // iterateControls recursively iterates over NIST 800-53 controls and // identifies matching component narratives -func iterateControls(family string, familyTitle string, controls []XMLControl, components []cmcommon.Component) ([]MarkdownTemplateControl, string) { +func iterateControls(family string, familyTitle string, controls []XMLControl, isControlEnhancement bool, components []cmcommon.Component) ([]MarkdownTemplateControl, string) { var markdownTemplateControls []MarkdownTemplateControl var abbrev string @@ -100,7 +101,7 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, c Number: control.Number, Title: strings.Title(strings.ToLower(control.Title)), Statements: control.Statements, - IsControlEnhancement: false, + IsControlEnhancement: isControlEnhancement, } // Identify matching component narratives @@ -108,11 +109,25 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, c satisfies := component.GetAllSatisfies() for _, satisfy := range satisfies { if satisfy.GetControlKey() == control.Number { + id := xid.New() + + narratives := make([]string, len(satisfy.GetNarratives())) + for _, narrative := range satisfy.GetNarratives() { + narrativeText := narrative.GetText() + if strings.Index(narrativeText, "'") == 0 { + narrativeText = narrativeText[1 : len(narrativeText)-2] + narrativeText = strings.Replace(narrativeText, "''", "'", -1) + } + narratives = append(narratives, narrativeText) + } + markdownTemplateControl.Components = append(markdownTemplateControl.Components, MarkdownTemplateComponent{ + ID: id.String(), Name: component.GetName(), ImplementationStatuses: satisfy.GetImplementationStatuses(), - ControlOrigins: satisfy.GetControlOrigins()}, - ) + ControlOrigins: satisfy.GetControlOrigins(), + Narratives: narratives, + }) break } @@ -133,7 +148,7 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, c Statements: enhancement.Statements, } } - markdownTemplateControlEnhancements, _ := iterateControls(family, familyTitle, xmlControlEnhancements, components) + markdownTemplateControlEnhancements, _ := iterateControls(family, familyTitle, xmlControlEnhancements, true, components) markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControlEnhancements...) } } @@ -157,7 +172,7 @@ func generateMarkdownFiles(standard XMLStandard, components []cmcommon.Component for _, family := range families { familyTitle := strings.Title(strings.ToLower(family)) - markdownTemplateControls, abbrev := iterateControls(family, familyTitle, standard.Controls, components) + markdownTemplateControls, abbrev := iterateControls(family, familyTitle, standard.Controls, false, components) markdownTemplateMap := map[string][]MarkdownTemplateControl{ familyTitle: markdownTemplateControls, } @@ -181,6 +196,7 @@ func generateMarkdownFiles(standard XMLStandard, components []cmcommon.Component return nil } +// readFile returns file contents func readFile(filePath string) ([]byte, error) { data, err := ioutil.ReadFile(filePath) if err != nil { diff --git a/docs/generator/tmpl/80053.test.tmpl b/docs/generator/tmpl/80053.test.tmpl deleted file mode 100644 index 66d4fd4..0000000 --- a/docs/generator/tmpl/80053.test.tmpl +++ /dev/null @@ -1,65 +0,0 @@ -{{range $family, $controls := . -}} ---- -title: "{{ $family }}" -description: "{{ $family }} reference" -keywords: "standards, compliance, security, 800-53, {{ $family }}" ---- - - - -{{- range $controls -}} -{{if .IsControlEnhancement -}} -### {{ .Number }} {{ .Title }} -{{else -}} -## {{ .Number }} {{ .Title }} -{{end}} -**Description:** - -{{range .Statements -}} -{{ .Description }} -
      -{{range .Statements -}} -
    1. {{ .Description }}
    2. -{{if .Statements}} -
        -{{range .Statements -}} -
      1. {{ .Description }}
      2. -{{end -}} -
      -{{end -}} -{{end -}} -
    -{{end}} -**Control Information:** - -{{if .Components -}} -**Responsible role(s)** - Docker system - - - - - - - -{{range $component := .Components -}} - - - - - -{{end -}} -
    ComponentImplementation Status(es)Control Origin(s)
    {{ $component.Name }}{{range $component.ImplementationStatuses}}{{ . }}
    {{end}}
    {{range $component.ControlOrigins}}{{ . }}
    {{end}}
    - -{{else}} -**Responsible role(s)** - Organization -{{end -}} -{{end -}} -{{end -}} diff --git a/docs/generator/tmpl/80053.tmpl b/docs/generator/tmpl/80053.tmpl index ff90ba2..1d05ce6 100644 --- a/docs/generator/tmpl/80053.tmpl +++ b/docs/generator/tmpl/80053.tmpl @@ -1,192 +1,97 @@ +{{range $family, $controls := . -}} --- -layout: docs +title: "{{ $family }}" +description: "{{ $family }} reference" +keywords: "standards, compliance, security, 800-53, {{ $family }}" --- -{{if .IsControlEnhancement}} -### {{ .ControlNumber }} {{ .ControlTitle }} -{{else}} -### {{ .ControlNumber }} {{ .ControlTitle }} + + +{{- range $controls -}} +{{if .IsControlEnhancement -}} +### {{ .Number }} {{ .Title }} +{{else -}} +## {{ .Number }} {{ .Title }} {{end}} +**Description:** - -Description -
    -{% for toplevel_statement in control.statements %} -{{ toplevel_statement.description }} +{{range .Statements -}} +{{ .Description }} +{{$length := len .Statements}}{{if gt $length 1 -}}
      - {% for secondlevel_statement in toplevel_statement.statements %} -
    1. {{ secondlevel_statement.description }}
    2. - {% if secondlevel_statement.statements != null %} -
        - {% for thirdlevel_statement in secondlevel_statement.statements %} -
      1. {{ thirdlevel_statement.description }}
      2. - {% endfor %} -
      - {% endif %} - {% endfor %} +{{range .Statements -}} +
    3. {{ .Description }}
    4. +{{if .Statements}} +
        +{{range .Statements -}} +
      1. {{ .Description }}
      2. +{{end -}} +
      +{{end -}} +{{end -}}
    -{% endfor %} +{{end}} +{{end -}} +**Control Information:** + +{{if .Components -}} -Control information +**Responsible role(s)** - Docker system - - - - - - - - - - + + + + + +{{range $component := .Components -}} + + + + + +{{end -}}
    Responsible role(s)Implementation status(es)Control origination(s)
    - {% if control.statements[0].description contains "The organization" %} - Organization - {% elsif control.statements[0].description contains "The information system" %} - Docker EE system - {% endif %} - - {% for component_hash in site.data.compliance.components %} - {% assign component = component_hash[1] %} - {% assign component_name_array = component.name | split: " " | %} - {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% if satisfied_control.implementation_status %} - {{ component_name }} - {{ satisfied_control.implementation_status }}
    - {% elsif satisfied_control.implementation_statuses %} - {{ component_name }} - {{ satisfied_control.implementation_statuses | join: ", " }}
    - {% endif %} - {% break %} - {% endif %} - {% endfor %} - {% endfor %} -
    - {% for component_hash in site.data.compliance.components %} - {% assign component = component_hash[1] %} - {% assign component_name_array = component.name | split: " " | %} - {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% if satisfied_control.control_origin %} - {{ component_name }} - {{ satisfied_control.control_origin }}
    - {% elsif satisfied_control.control_origins %} - {{ component_name }} - {{ satisfied_control.control_origins | join: ", " }}
    - {% endif %} - {% break %} - {% endif %} - {% endfor %} - {% endfor %} -
    ComponentImplementation Status(es)Control Origin(s)
    {{ $component.Name }}{{range $component.ImplementationStatuses}}{{ . }}
    {{end}}
    {{range $component.ControlOrigins}}{{ . }}
    {{end}}
    -{{ control.number }} What is the solution and how is it implemented - -{% assign control_id = control.number | replace: " ", "" | replace: "(", "-" | replace: ")", "" %} +**Implemenation Details:** -
    - {% for component_hash in site.data.compliance.components %} - {% assign component = component_hash[1] %} - - {% case component.name %} - {% when "Docker Enterprise Edition (Engine)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Docker Engine component. - {% endif %} -
    - - {% when "Docker Trusted Registry (DTR)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Docker Trusted Registry component. - {% endif %} -
    - - {% when "Docker Security Scanning (DSS)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Docker Security Scanning component. - {% endif %} -
    - - {% when "Authentication and Authorization Service (eNZi)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Authentication and Authorization Service (eNZi) component. - {% endif %} -
    - - {% when "Universal Control Plane (UCP)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Universal Control Plane component. - {% endif %} -
    - {% endcase %} - - {% endfor %} +{{range $i, $component := .Components -}} +{{if eq $i 0 -}} +
    +{{else -}} +
    +{{end -}} +{{range $component.Narratives}}{{ . }}{{end}}
    - -{% endif %} -{% endfor %} -{% endif %} \ No newline at end of file +{{end -}} +
    +{{else -}} +**Responsible role(s)** - Organization +{{end}} +{{end -}} +{{end -}} diff --git a/docs/generator/tmpl/nist80053.html b/docs/generator/tmpl/nist80053.html deleted file mode 100644 index 41745e7..0000000 --- a/docs/generator/tmpl/nist80053.html +++ /dev/null @@ -1,197 +0,0 @@ ---- -layout: docs ---- - -{% if page.datafile %} - -{% for control in site.data.compliance.standards[page.datafile] %} - -{% if control.family == page.family %} -{% assign header_id = control.number | replace: ".", "" | replace: "(", "-" | replace: ")", "" | replace: " ", "" %} -{% if control.number contains "(" %} -

    {{ control.number }} {{ control.title }}

    -{% else %} -

    {{ control.number }} {{ control.title }}

    -{% endif %} - -Description -
    -{% for toplevel_statement in control.statements %} -{{ toplevel_statement.description }} -
      - {% for secondlevel_statement in toplevel_statement.statements %} -
    1. {{ secondlevel_statement.description }}
    2. - {% if secondlevel_statement.statements != null %} -
        - {% for thirdlevel_statement in secondlevel_statement.statements %} -
      1. {{ thirdlevel_statement.description }}
      2. - {% endfor %} -
      - {% endif %} - {% endfor %} -
    -{% endfor %} - -Control information - - - - - - - - - - - - -
    Responsible role(s)Implementation status(es)Control origination(s)
    - {% if control.statements[0].description contains "The organization" %} - Organization - {% elsif control.statements[0].description contains "The information system" %} - Docker EE system - {% endif %} - - {% for component_hash in site.data.compliance.components %} - {% assign component = component_hash[1] %} - {% assign component_name_array = component.name | split: " " | %} - {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% if satisfied_control.implementation_status %} - {{ component_name }} - {{ satisfied_control.implementation_status }}
    - {% elsif satisfied_control.implementation_statuses %} - {{ component_name }} - {{ satisfied_control.implementation_statuses | join: ", " }}
    - {% endif %} - {% break %} - {% endif %} - {% endfor %} - {% endfor %} -
    - {% for component_hash in site.data.compliance.components %} - {% assign component = component_hash[1] %} - {% assign component_name_array = component.name | split: " " | %} - {% assign component_name = component_name_array.last | replace: "(", "" | replace: ")", "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% if satisfied_control.control_origin %} - {{ component_name }} - {{ satisfied_control.control_origin }}
    - {% elsif satisfied_control.control_origins %} - {{ component_name }} - {{ satisfied_control.control_origins | join: ", " }}
    - {% endif %} - {% break %} - {% endif %} - {% endfor %} - {% endfor %} -
    - -{{ control.number }} What is the solution and how is it implemented - -{% assign control_id = control.number | replace: " ", "" | replace: "(", "-" | replace: ")", "" %} - - - - -
    - {% for component_hash in site.data.compliance.components %} - {% assign component = component_hash[1] %} - - {% case component.name %} - {% when "Docker Enterprise Edition (Engine)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Docker Engine component. - {% endif %} -
    - - {% when "Docker Trusted Registry (DTR)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Docker Trusted Registry component. - {% endif %} -
    - - {% when "Docker Security Scanning (DSS)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Docker Security Scanning component. - {% endif %} -
    - - {% when "Authentication and Authorization Service (eNZi)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Authentication and Authorization Service (eNZi) component. - {% endif %} -
    - - {% when "Universal Control Plane (UCP)" %} -
    - {% assign narrative_text = "" %} - {% for satisfied_control in component.satisfies %} - {% if satisfied_control.control_key == control.number %} - {% for narrative in satisfied_control.narrative %} - {% assign narrative_text = narrative.text %} - {{ narrative_text }} - {% endfor %} - {% break %} - {% endif %} - {% endfor %} - {% if narrative_text == "" %} - The control is not applicable to the Universal Control Plane component. - {% endif %} -
    - {% endcase %} - - {% endfor %} -
    - -{% endif %} -{% endfor %} -{% endif %} \ No newline at end of file diff --git a/docs/generator/types.go b/docs/generator/types.go index 6a3a415..66c5cd3 100644 --- a/docs/generator/types.go +++ b/docs/generator/types.go @@ -67,7 +67,9 @@ type MarkdownTemplateControl struct { // MarkdownTemplateComponent defines the markdown template file component type type MarkdownTemplateComponent struct { + ID string Name string ImplementationStatuses []string ControlOrigins []string + Narratives []string } From 0562313f62fba6d32cee95c909e85099ac6bd1e9 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 23:47:54 -0400 Subject: [PATCH 10/13] index --- docs/compliance/reference/800-53/index.md | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 docs/compliance/reference/800-53/index.md diff --git a/docs/compliance/reference/800-53/index.md b/docs/compliance/reference/800-53/index.md new file mode 100644 index 0000000..53bf938 --- /dev/null +++ b/docs/compliance/reference/800-53/index.md @@ -0,0 +1,33 @@ +--- +title: NIST 800-53 Control Reference +--- + +All of the NIST 800-53 Rev. 4 controls applicable to Docker Enterprise Edition can be referenced in this section. For generating your own security documentation using the OpenControl-formatted version of these controls, please refer to our compliance repository at [https://github.com/docker/compliance](https://github.com/docker/compliance). + +The controls have been broken out by family and each control's origin is mapped to one of the following: + +| Control origination | Definition | +|:------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------| +| Organization | A control satisfied by the organization. | +| Docker Enterprise Edition (EE) system | A control specific to the Docker Enterprise Edition system itself | +| Docker Enterprise Edition (EE) application | A control specific to an application(s) hosted on Docker Enterprise Edition | +| Inherited from pre-existing Provisional Authorization | A control that is inherited from another provider system that has already received a Provisional Authorization | + +The following Docker EE system components are referenced by the controls: + +- Docker EE Engine +- Universal Control Plane (UCP) +- Docker Trusted Registry (DTR) +- Authentication and Authorization Service (eNZi) +- Docker Security Scanning (DSS) + +In addition, each control is assigned one of the following implementation statuses: + +| Implementation status | Definition | +|:------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------| +| Complete | The control is fully in place and meets all requirements | +| Partial | The control is only partially in place or does not meet all requirements. A plan for achieving full implementation should be included in the Plan of Action & Milestone documentation | +| Planned | The control is not in place. A plan for achieving full implementation should be included int he Plan of Action & Milestone documentation | +| None | The control is not applicable within the environment. A description of why the requirement does not apply should be included | + +Control narratives that include an `[Assignment: ...]` block should be substituted by your organization's requirements or by the FedRAMP requirements. From eb66fb1c73c51a96ecb912e3bb645d12ee4e6edf Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 23:48:07 -0400 Subject: [PATCH 11/13] update deps --- .../vendor/github.com/rs/xid/.travis.yml | 7 + .../vendor/github.com/rs/xid/LICENSE | 19 ++ .../vendor/github.com/rs/xid/README.md | 107 +++++++ docs/generator/vendor/github.com/rs/xid/id.go | 264 ++++++++++++++++++ .../vendor/github.com/rs/xid/id_test.go | 198 +++++++++++++ 5 files changed, 595 insertions(+) create mode 100644 docs/generator/vendor/github.com/rs/xid/.travis.yml create mode 100644 docs/generator/vendor/github.com/rs/xid/LICENSE create mode 100644 docs/generator/vendor/github.com/rs/xid/README.md create mode 100644 docs/generator/vendor/github.com/rs/xid/id.go create mode 100644 docs/generator/vendor/github.com/rs/xid/id_test.go diff --git a/docs/generator/vendor/github.com/rs/xid/.travis.yml b/docs/generator/vendor/github.com/rs/xid/.travis.yml new file mode 100644 index 0000000..b65c7a9 --- /dev/null +++ b/docs/generator/vendor/github.com/rs/xid/.travis.yml @@ -0,0 +1,7 @@ +language: go +go: +- 1.5 +- tip +matrix: + allow_failures: + - go: tip diff --git a/docs/generator/vendor/github.com/rs/xid/LICENSE b/docs/generator/vendor/github.com/rs/xid/LICENSE new file mode 100644 index 0000000..47c5e9d --- /dev/null +++ b/docs/generator/vendor/github.com/rs/xid/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 Olivier Poitrey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/docs/generator/vendor/github.com/rs/xid/README.md b/docs/generator/vendor/github.com/rs/xid/README.md new file mode 100644 index 0000000..b475c7f --- /dev/null +++ b/docs/generator/vendor/github.com/rs/xid/README.md @@ -0,0 +1,107 @@ +# Globally Unique ID Generator + +[![godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/rs/xid) [![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/rs/xid/master/LICENSE) [![Build Status](https://travis-ci.org/rs/xid.svg?branch=master)](https://travis-ci.org/rs/xid) [![Coverage](http://gocover.io/_badge/github.com/rs/xid)](http://gocover.io/github.com/rs/xid) + +Package xid is a globally unique id generator library, ready to be used safely directly in your server code. + +Xid is using Mongo Object ID algorithm to generate globally unique ids with a different serialization (bast64) to make it shorter when transported as a string: +https://docs.mongodb.org/manual/reference/object-id/ + +- 4-byte value representing the seconds since the Unix epoch, +- 3-byte machine identifier, +- 2-byte process id, and +- 3-byte counter, starting with a random value. + +The binary representation of the id is compatible with Mongo 12 bytes Object IDs. +The string representation is using base32 hex (w/o padding) for better space efficiency +when stored in that form (20 bytes). The hex variant of base32 is used to retain the +sortable property of the id. + +Xid doesn't use base64 because case sensitivity and the 2 non alphanum chars may be an +issue when transported as a string between various systems. Base36 wasn't retained either +because 1/ it's not standard 2/ the resulting size is not predictable (not bit aligned) +and 3/ it would not remain sortable. To validate a base32 `xid`, expect a 20 chars long, +all lowercase sequence of `a` to `v` letters and `0` to `9` numbers (`[0-9a-v]{20}`). + +UUIDs are 16 bytes (128 bits) and 36 chars as string representation. Twitter Snowflake +ids are 8 bytes (64 bits) but require machine/data-center configuration and/or central +generator servers. xid stands in between with 12 bytes (96 bits) and a more compact +URL-safe string representation (20 chars). No configuration or central generator server +is required so it can be used directly in server's code. + +| Name | Binary Size | String Size | Features +|-------------|-------------|----------------|---------------- +| [UUID] | 16 bytes | 36 chars | configuration free, not sortable +| [shortuuid] | 16 bytes | 22 chars | configuration free, not sortable +| [Snowflake] | 8 bytes | up to 20 chars | needs machin/DC configuration, needs central server, sortable +| [MongoID] | 12 bytes | 24 chars | configuration free, sortable +| xid | 12 bytes | 20 chars | configuration free, sortable + +[UUID]: https://en.wikipedia.org/wiki/Universally_unique_identifier +[shortuuid]: https://github.com/stochastic-technologies/shortuuid +[Snowflake]: https://blog.twitter.com/2010/announcing-snowflake +[MongoID]: https://docs.mongodb.org/manual/reference/object-id/ + +Features: + +- Size: 12 bytes (96 bits), smaller than UUID, larger than snowflake +- Base32 hex encoded by default (20 chars when transported as printable string, still sortable) +- Non configured, you don't need set a unique machine and/or data center id +- K-ordered +- Embedded time with 1 second precision +- Unicity guaranteed for 16,777,216 (24 bits) unique ids per second and per host/process +- Lock-free (i.e.: unlike UUIDv1 and v2) + +Best used with [xlog](https://github.com/rs/xlog)'s +[RequestIDHandler](https://godoc.org/github.com/rs/xlog#RequestIDHandler). + +References: + +- http://www.slideshare.net/davegardnerisme/unique-id-generation-in-distributed-systems +- https://en.wikipedia.org/wiki/Universally_unique_identifier +- https://blog.twitter.com/2010/announcing-snowflake +- Python port by [Graham Abbott](https://github.com/graham): https://github.com/graham/python_xid + +## Install + + go get github.com/rs/xid + +## Usage + +```go +guid := xid.New() + +println(guid.String()) +// Output: 9m4e2mr0ui3e8a215n4g +``` + +Get `xid` embedded info: + +```go +guid.Machine() +guid.Pid() +guid.Time() +guid.Counter() +``` + +## Benchmark + +Benchmark against Go [Maxim Bublis](https://github.com/satori)'s [UUID](https://github.com/satori/go.uuid). + +``` +BenchmarkXID 20000000 91.1 ns/op 32 B/op 1 allocs/op +BenchmarkXID-2 20000000 55.9 ns/op 32 B/op 1 allocs/op +BenchmarkXID-4 50000000 32.3 ns/op 32 B/op 1 allocs/op +BenchmarkUUIDv1 10000000 204 ns/op 48 B/op 1 allocs/op +BenchmarkUUIDv1-2 10000000 160 ns/op 48 B/op 1 allocs/op +BenchmarkUUIDv1-4 10000000 195 ns/op 48 B/op 1 allocs/op +BenchmarkUUIDv4 1000000 1503 ns/op 64 B/op 2 allocs/op +BenchmarkUUIDv4-2 1000000 1427 ns/op 64 B/op 2 allocs/op +BenchmarkUUIDv4-4 1000000 1452 ns/op 64 B/op 2 allocs/op +``` + +Note: UUIDv1 requires a global lock, hence the performence degrading as we add more CPUs. + +## Licenses + +All source code is licensed under the [MIT License](https://raw.github.com/rs/xid/master/LICENSE). diff --git a/docs/generator/vendor/github.com/rs/xid/id.go b/docs/generator/vendor/github.com/rs/xid/id.go new file mode 100644 index 0000000..e76f9ef --- /dev/null +++ b/docs/generator/vendor/github.com/rs/xid/id.go @@ -0,0 +1,264 @@ +// Package xid is a globally unique id generator suited for web scale +// +// Xid is using Mongo Object ID algorithm to generate globally unique ids: +// https://docs.mongodb.org/manual/reference/object-id/ +// +// - 4-byte value representing the seconds since the Unix epoch, +// - 3-byte machine identifier, +// - 2-byte process id, and +// - 3-byte counter, starting with a random value. +// +// The binary representation of the id is compatible with Mongo 12 bytes Object IDs. +// The string representation is using base32 hex (w/o padding) for better space efficiency +// when stored in that form (20 bytes). The hex variant of base32 is used to retain the +// sortable property of the id. +// +// Xid doesn't use base64 because case sensitivity and the 2 non alphanum chars may be an +// issue when transported as a string between various systems. Base36 wasn't retained either +// because 1/ it's not standard 2/ the resulting size is not predictable (not bit aligned) +// and 3/ it would not remain sortable. To validate a base32 `xid`, expect a 20 chars long, +// all lowercase sequence of `a` to `v` letters and `0` to `9` numbers (`[0-9a-v]{20}`). +// +// UUID is 16 bytes (128 bits), snowflake is 8 bytes (64 bits), xid stands in between +// with 12 bytes with a more compact string representation ready for the web and no +// required configuration or central generation server. +// +// Features: +// +// - Size: 12 bytes (96 bits), smaller than UUID, larger than snowflake +// - Base32 hex encoded by default (16 bytes storage when transported as printable string) +// - Non configured, you don't need set a unique machine and/or data center id +// - K-ordered +// - Embedded time with 1 second precision +// - Unicity guaranted for 16,777,216 (24 bits) unique ids per second and per host/process +// +// Best used with xlog's RequestIDHandler (https://godoc.org/github.com/rs/xlog#RequestIDHandler). +// +// References: +// +// - http://www.slideshare.net/davegardnerisme/unique-id-generation-in-distributed-systems +// - https://en.wikipedia.org/wiki/Universally_unique_identifier +// - https://blog.twitter.com/2010/announcing-snowflake +package xid + +import ( + "crypto/md5" + "crypto/rand" + "database/sql/driver" + "encoding/binary" + "errors" + "fmt" + "os" + "sync/atomic" + "time" +) + +// Code inspired from mgo/bson ObjectId + +// ID represents a unique request id +type ID [rawLen]byte + +const ( + encodedLen = 20 // string encoded len + decodedLen = 15 // len after base32 decoding with the padded data + rawLen = 12 // binary raw len + + // encoding stores a custom version of the base32 encoding with lower case + // letters. + encoding = "0123456789abcdefghijklmnopqrstuv" +) + +// ErrInvalidID is returned when trying to unmarshal an invalid ID +var ErrInvalidID = errors.New("xid: invalid ID") + +// objectIDCounter is atomically incremented when generating a new ObjectId +// using NewObjectId() function. It's used as a counter part of an id. +// This id is initialized with a random value. +var objectIDCounter = randInt() + +// machineId stores machine id generated once and used in subsequent calls +// to NewObjectId function. +var machineID = readMachineID() + +// pid stores the current process id +var pid = os.Getpid() + +// dec is the decoding map for base32 encoding +var dec [256]byte + +func init() { + for i := 0; i < len(dec); i++ { + dec[i] = 0xFF + } + for i := 0; i < len(encoding); i++ { + dec[encoding[i]] = byte(i) + } +} + +// readMachineId generates machine id and puts it into the machineId global +// variable. If this function fails to get the hostname, it will cause +// a runtime error. +func readMachineID() []byte { + id := make([]byte, 3) + if hostname, err := os.Hostname(); err == nil { + hw := md5.New() + hw.Write([]byte(hostname)) + copy(id, hw.Sum(nil)) + } else { + // Fallback to rand number if machine id can't be gathered + if _, randErr := rand.Reader.Read(id); randErr != nil { + panic(fmt.Errorf("xid: cannot get hostname nor generate a random number: %v; %v", err, randErr)) + } + } + return id +} + +// randInt generates a random uint32 +func randInt() uint32 { + b := make([]byte, 3) + if _, err := rand.Reader.Read(b); err != nil { + panic(fmt.Errorf("xid: cannot generate random number: %v;", err)) + } + return uint32(b[0])<<16 | uint32(b[1])<<8 | uint32(b[2]) +} + +// New generates a globaly unique ID +func New() ID { + var id ID + // Timestamp, 4 bytes, big endian + binary.BigEndian.PutUint32(id[:], uint32(time.Now().Unix())) + // Machine, first 3 bytes of md5(hostname) + id[4] = machineID[0] + id[5] = machineID[1] + id[6] = machineID[2] + // Pid, 2 bytes, specs don't specify endianness, but we use big endian. + id[7] = byte(pid >> 8) + id[8] = byte(pid) + // Increment, 3 bytes, big endian + i := atomic.AddUint32(&objectIDCounter, 1) + id[9] = byte(i >> 16) + id[10] = byte(i >> 8) + id[11] = byte(i) + return id +} + +// FromString reads an ID from its string representation +func FromString(id string) (ID, error) { + i := &ID{} + err := i.UnmarshalText([]byte(id)) + return *i, err +} + +// String returns a base32 hex lowercased with no padding representation of the id (char set is 0-9, a-v). +func (id ID) String() string { + text := make([]byte, encodedLen) + encode(text, id[:]) + return string(text) +} + +// MarshalText implements encoding/text TextMarshaler interface +func (id ID) MarshalText() ([]byte, error) { + text := make([]byte, encodedLen) + encode(text, id[:]) + return text, nil +} + +// encode by unrolling the stdlib base32 algorithm + removing all safe checks +func encode(dst, id []byte) { + dst[0] = encoding[id[0]>>3] + dst[1] = encoding[(id[1]>>6)&0x1F|(id[0]<<2)&0x1F] + dst[2] = encoding[(id[1]>>1)&0x1F] + dst[3] = encoding[(id[2]>>4)&0x1F|(id[1]<<4)&0x1F] + dst[4] = encoding[id[3]>>7|(id[2]<<1)&0x1F] + dst[5] = encoding[(id[3]>>2)&0x1F] + dst[6] = encoding[id[4]>>5|(id[3]<<3)&0x1F] + dst[7] = encoding[id[4]&0x1F] + dst[8] = encoding[id[5]>>3] + dst[9] = encoding[(id[6]>>6)&0x1F|(id[5]<<2)&0x1F] + dst[10] = encoding[(id[6]>>1)&0x1F] + dst[11] = encoding[(id[7]>>4)&0x1F|(id[6]<<4)&0x1F] + dst[12] = encoding[id[8]>>7|(id[7]<<1)&0x1F] + dst[13] = encoding[(id[8]>>2)&0x1F] + dst[14] = encoding[(id[9]>>5)|(id[8]<<3)&0x1F] + dst[15] = encoding[id[9]&0x1F] + dst[16] = encoding[id[10]>>3] + dst[17] = encoding[(id[11]>>6)&0x1F|(id[10]<<2)&0x1F] + dst[18] = encoding[(id[11]>>1)&0x1F] + dst[19] = encoding[(id[11]<<4)&0x1F] +} + +// UnmarshalText implements encoding/text TextUnmarshaler interface +func (id *ID) UnmarshalText(text []byte) error { + if len(text) != encodedLen { + return ErrInvalidID + } + for _, c := range text { + if dec[c] == 0xFF { + return ErrInvalidID + } + } + decode(id, text) + return nil +} + +// decode by unrolling the stdlib base32 algorithm + removing all safe checks +func decode(id *ID, src []byte) { + id[0] = dec[src[0]]<<3 | dec[src[1]]>>2 + id[1] = dec[src[1]]<<6 | dec[src[2]]<<1 | dec[src[3]]>>4 + id[2] = dec[src[3]]<<4 | dec[src[4]]>>1 + id[3] = dec[src[4]]<<7 | dec[src[5]]<<2 | dec[src[6]]>>3 + id[4] = dec[src[6]]<<5 | dec[src[7]] + id[5] = dec[src[8]]<<3 | dec[src[9]]>>2 + id[6] = dec[src[9]]<<6 | dec[src[10]]<<1 | dec[src[11]]>>4 + id[7] = dec[src[11]]<<4 | dec[src[12]]>>1 + id[8] = dec[src[12]]<<7 | dec[src[13]]<<2 | dec[src[14]]>>3 + id[9] = dec[src[14]]<<5 | dec[src[15]] + id[10] = dec[src[16]]<<3 | dec[src[17]]>>2 + id[11] = dec[src[17]]<<6 | dec[src[18]]<<1 | dec[src[19]]>>4 +} + +// Time returns the timestamp part of the id. +// It's a runtime error to call this method with an invalid id. +func (id ID) Time() time.Time { + // First 4 bytes of ObjectId is 32-bit big-endian seconds from epoch. + secs := int64(binary.BigEndian.Uint32(id[0:4])) + return time.Unix(secs, 0) +} + +// Machine returns the 3-byte machine id part of the id. +// It's a runtime error to call this method with an invalid id. +func (id ID) Machine() []byte { + return id[4:7] +} + +// Pid returns the process id part of the id. +// It's a runtime error to call this method with an invalid id. +func (id ID) Pid() uint16 { + return binary.BigEndian.Uint16(id[7:9]) +} + +// Counter returns the incrementing value part of the id. +// It's a runtime error to call this method with an invalid id. +func (id ID) Counter() int32 { + b := id[9:12] + // Counter is stored as big-endian 3-byte value + return int32(uint32(b[0])<<16 | uint32(b[1])<<8 | uint32(b[2])) +} + +// Value implements the driver.Valuer interface. +func (id ID) Value() (driver.Value, error) { + b, err := id.MarshalText() + return string(b), err +} + +// Scan implements the sql.Scanner interface. +func (id *ID) Scan(value interface{}) (err error) { + switch val := value.(type) { + case string: + return id.UnmarshalText([]byte(val)) + case []byte: + return id.UnmarshalText(val) + default: + return fmt.Errorf("xid: scanning unsupported type: %T", value) + } +} diff --git a/docs/generator/vendor/github.com/rs/xid/id_test.go b/docs/generator/vendor/github.com/rs/xid/id_test.go new file mode 100644 index 0000000..799c224 --- /dev/null +++ b/docs/generator/vendor/github.com/rs/xid/id_test.go @@ -0,0 +1,198 @@ +package xid + +import ( + "encoding/json" + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +const strInvalidID = "xid: invalid ID" + +type IDParts struct { + id ID + timestamp int64 + machine []byte + pid uint16 + counter int32 +} + +var IDs = []IDParts{ + IDParts{ + ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9}, + 1300816219, + []byte{0x60, 0xf4, 0x86}, + 0xe428, + 4271561, + }, + IDParts{ + ID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + 0, + []byte{0x00, 0x00, 0x00}, + 0x0000, + 0, + }, + IDParts{ + ID{0x00, 0x00, 0x00, 0x00, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0x00, 0x00, 0x01}, + 0, + []byte{0xaa, 0xbb, 0xcc}, + 0xddee, + 1, + }, +} + +func TestIDPartsExtraction(t *testing.T) { + for i, v := range IDs { + assert.Equal(t, v.id.Time(), time.Unix(v.timestamp, 0), "#%d timestamp", i) + assert.Equal(t, v.id.Machine(), v.machine, "#%d machine", i) + assert.Equal(t, v.id.Pid(), v.pid, "#%d pid", i) + assert.Equal(t, v.id.Counter(), v.counter, "#%d counter", i) + } +} + +func TestNew(t *testing.T) { + // Generate 10 ids + ids := make([]ID, 10) + for i := 0; i < 10; i++ { + ids[i] = New() + } + for i := 1; i < 10; i++ { + prevID := ids[i-1] + id := ids[i] + // Test for uniqueness among all other 9 generated ids + for j, tid := range ids { + if j != i { + assert.NotEqual(t, id, tid, "Generated ID is not unique") + } + } + // Check that timestamp was incremented and is within 30 seconds of the previous one + secs := id.Time().Sub(prevID.Time()).Seconds() + assert.Equal(t, (secs >= 0 && secs <= 30), true, "Wrong timestamp in generated ID") + // Check that machine ids are the same + assert.Equal(t, id.Machine(), prevID.Machine()) + // Check that pids are the same + assert.Equal(t, id.Pid(), prevID.Pid()) + // Test for proper increment + delta := int(id.Counter() - prevID.Counter()) + assert.Equal(t, delta, 1, "Wrong increment in generated ID") + } +} + +func TestIDString(t *testing.T) { + id := ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9} + assert.Equal(t, "9m4e2mr0ui3e8a215n4g", id.String()) +} + +func TestFromString(t *testing.T) { + id, err := FromString("9m4e2mr0ui3e8a215n4g") + assert.NoError(t, err) + assert.Equal(t, ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9}, id) +} + +func TestFromStringInvalid(t *testing.T) { + id, err := FromString("invalid") + assert.EqualError(t, err, strInvalidID) + assert.Equal(t, ID{}, id) +} + +type jsonType struct { + ID *ID + Str string +} + +func TestIDJSONMarshaling(t *testing.T) { + id := ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9} + v := jsonType{ID: &id, Str: "test"} + data, err := json.Marshal(&v) + assert.NoError(t, err) + assert.Equal(t, `{"ID":"9m4e2mr0ui3e8a215n4g","Str":"test"}`, string(data)) +} + +func TestIDJSONUnmarshaling(t *testing.T) { + data := []byte(`{"ID":"9m4e2mr0ui3e8a215n4g","Str":"test"}`) + v := jsonType{} + err := json.Unmarshal(data, &v) + assert.NoError(t, err) + assert.Equal(t, ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9}, *v.ID) +} + +func TestIDJSONUnmarshalingError(t *testing.T) { + v := jsonType{} + err := json.Unmarshal([]byte(`{"ID":"9M4E2MR0UI3E8A215N4G"}`), &v) + assert.EqualError(t, err, strInvalidID) + err = json.Unmarshal([]byte(`{"ID":"TYjhW2D0huQoQS"}`), &v) + assert.EqualError(t, err, strInvalidID) + err = json.Unmarshal([]byte(`{"ID":"TYjhW2D0huQoQS3kdk"}`), &v) + assert.EqualError(t, err, strInvalidID) +} + +func TestIDDriverValue(t *testing.T) { + id := ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9} + data, err := id.Value() + assert.NoError(t, err) + assert.Equal(t, "9m4e2mr0ui3e8a215n4g", data) +} + +func TestIDDriverScan(t *testing.T) { + id := ID{} + err := id.Scan("9m4e2mr0ui3e8a215n4g") + assert.NoError(t, err) + assert.Equal(t, ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9}, id) +} + +func TestIDDriverScanError(t *testing.T) { + id := ID{} + err := id.Scan(0) + assert.EqualError(t, err, "xid: scanning unsupported type: int") + err = id.Scan("0") + assert.EqualError(t, err, strInvalidID) +} + +func TestIDDriverScanByteFromDatabase(t *testing.T) { + id := ID{} + bs := []byte("9m4e2mr0ui3e8a215n4g") + err := id.Scan(bs) + assert.NoError(t, err) + assert.Equal(t, ID{0x4d, 0x88, 0xe1, 0x5b, 0x60, 0xf4, 0x86, 0xe4, 0x28, 0x41, 0x2d, 0xc9}, id) +} + +func BenchmarkNew(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + _ = New() + } + }) +} + +func BenchmarkNewString(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + _ = New().String() + } + }) +} + +func BenchmarkFromString(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + _, _ = FromString("9m4e2mr0ui3e8a215n4g") + } + }) +} + +// func BenchmarkUUIDv1(b *testing.B) { +// b.RunParallel(func(pb *testing.PB) { +// for pb.Next() { +// _ = uuid.NewV1().String() +// } +// }) +// } + +// func BenchmarkUUIDv4(b *testing.B) { +// b.RunParallel(func(pb *testing.PB) { +// for pb.Next() { +// _ = uuid.NewV4().String() +// } +// }) +// } From 753ff9991cc9e884f18ccba33c7825ddeba82601 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Mon, 31 Jul 2017 00:07:33 -0400 Subject: [PATCH 12/13] narrative links --- docs/compliance/reference/800-53/AC.md | 216 +++++++++++------------ docs/compliance/reference/800-53/AU.md | 232 ++++++++++++------------- docs/compliance/reference/800-53/CA.md | 4 +- docs/compliance/reference/800-53/CM.md | 108 ++++++------ docs/compliance/reference/800-53/CP.md | 8 +- docs/compliance/reference/800-53/IA.md | 108 ++++++------ docs/compliance/reference/800-53/RA.md | 28 +-- docs/compliance/reference/800-53/SA.md | 12 +- docs/compliance/reference/800-53/SC.md | 52 +++--- docs/compliance/reference/800-53/SI.md | 20 +-- docs/generator/generator.go | 16 ++ docs/generator/types.go | 1 + 12 files changed, 411 insertions(+), 394 deletions(-) diff --git a/docs/compliance/reference/800-53/AC.md b/docs/compliance/reference/800-53/AC.md index aab8d4e..8f1854d 100644 --- a/docs/compliance/reference/800-53/AC.md +++ b/docs/compliance/reference/800-53/AC.md @@ -44,11 +44,11 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, one can control which users and teams are allowed to create and manipulate Docker Enterprise Edition resources. By default, no one @@ -118,11 +118,11 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, an external identity management system (such as Microsoft's Active Directory or an LDAP endpoint) can be configured as mandated by @@ -169,13 +169,13 @@ The organization employs automated mechanisms to support the management of infor **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation for managing users and teams can found at the following resources: @@ -183,7 +183,7 @@ found at the following resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-users/ - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-teams/
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation for managing users and teams can found at the following resources: @@ -191,7 +191,7 @@ found at the following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/create-and-manage-users/ - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/create-and-manage-teams/
    -
    +
    To assist the organization in meeting the requirements of this control, an external identity management system (such as Microsoft's Active Directory or an LDAP endpoint) can be configured as mandated by @@ -228,11 +228,11 @@ The information system automatically [Selection: removes; disables] temporary an **Implemenation Details:**
    -
    +
    Using Docker Enterprise Edition's LDAP integration capabilities, one can disable and/or remove temporary and emergency accounts in a connected directory service (such as Active Directory) after an @@ -270,11 +270,11 @@ The information system automatically disables inactive accounts after [Assignmen **Implemenation Details:**
    -
    +
    Using Docker Enterprise Edition's LDAP integration capabilities, one can automatically disable inactive accounts in a connected directory service (such as Active Directory). When a user is removed from LDAP, @@ -311,11 +311,11 @@ The information system automatically audits account creation, modification, enab **Implemenation Details:**
    -
    +
    Docker Enterprise Edition logs various authentication and authorization events to standard log files. One can configure Docker Enterprise Edition to direct these event logs to a remote logging @@ -358,11 +358,11 @@ The organization requires that users log out when [Assignment: organization-defi **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, Docker Enterprise Edition can be configured to enforce automated session termination of users after an organization-defined time period @@ -424,27 +424,27 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation can be found at the following resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation can be found at the following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/
    -
    +
    To assist the organization in meeting the requirements of this control, Docker Enterprise Edition supports various levels of user permissions and role-based access control enforcements. Administrator @@ -501,11 +501,11 @@ The organization only permits the use of shared/group accounts that meet [Assign **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, users and/or groups synchronized to Docker Enterprise Edition via LDAP can be configured at the directory service. @@ -538,11 +538,11 @@ The information system terminates shared/group account credentials when members **Implemenation Details:**
    -
    +
    Users and/or groups synchronized to Docker Enterprise Edition via LDAP can be configured at the directory service.
    @@ -574,11 +574,11 @@ The information system enforces [Assignment: organization-defined circumstances **Implemenation Details:**
    -
    +
    Information system accounts synchronized to Docker Enterprise Edition via LDAP can be configured at the directory service to meet this requirement as necessary. @@ -630,14 +630,14 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation can be found at the following resources: @@ -645,7 +645,7 @@ resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/ - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/
    -
    +
    To assist the organization in meeting the requirements of this control, Docker Enterprise Edition can be configured to aggregate container and daemon events via a number of logging drivers. @@ -656,7 +656,7 @@ Supporting documentation can be found at the following resources: - https://docs.docker.com/engine/admin/logging/log_tags/
    -
    +
    To assist the organization in meeting the requirements of this control, Universal Control Plane can be configured to send system account log data to a remote logging service such as an Elasticsearch, @@ -667,7 +667,7 @@ at the following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    To assist the organization in meeting the requirements of this control, when Docker Enterprise Edition is configured for LDAP integration, one can refer to the directory service's existing @@ -701,11 +701,11 @@ The organization disables accounts of users posing a significant risk within [As **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, users and/or groups synchronized to Docker Enterprise Edition via LDAP can be managed at the directory service. @@ -748,13 +748,13 @@ The information system enforces approved authorizations for logical access to in **Implemenation Details:**
    -
    +
    One can control which users and teams can create and manipulate Docker Trusted Registry resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to enforce @@ -765,7 +765,7 @@ the following resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ - https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC
    -
    +
    One can control which users and teams can create and manipulate Universal Control Plane resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to enforce @@ -777,7 +777,7 @@ the following resources: - https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#RBAC_and_Managing_Team_Level_Access_to_Resources - https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#RBAC
    -
    +
    One can control which users and teams can create and manipulate Docker Enterprise Edition resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to @@ -926,13 +926,13 @@ The information system enforces approved authorizations for controlling the flow **Implemenation Details:**
    -
    +
    Supporting documentation to configure Docker Trusted Registry to meet the requirements of this control can be found at the following resources: @@ -941,7 +941,7 @@ resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used - https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations
    -
    +
    Docker Enterprise Edition can be configured to control the flow of information that originates from applications running in containers. Supporting documentation can be found at the following resources: @@ -950,7 +950,7 @@ documentation can be found at the following resources: - http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks
    -
    +
    Supporting documentation to configure Universal Control Plane to meet the requirements of this control can be found at the following resources: @@ -1071,13 +1071,13 @@ The information system enforces information flow control using [Assignment: orga **Implemenation Details:**
    -
    +
    Supporting documentation to configure Docker Trusted Registry to meet the requirements of this control can be found at the following resources: @@ -1086,7 +1086,7 @@ resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used - https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations
    -
    +
    Docker Enterprise Edition can be configured to control the flow of information that originates from applications running in containers per organization-defined security policy filters. Supporting @@ -1101,7 +1101,7 @@ alongside Docker Enterprise Edition to satisfy this control's requirements.
    -
    +
    Supporting documentation to configure Universal Control Plane to meet the requirements of this control can be found at the following resources: @@ -1262,13 +1262,13 @@ The information system separates information flows logically or physically using **Implemenation Details:**
    -
    +
    Supporting documentation to configure Docker Trusted Registry to meet the requirements of this control can be found at the following resources: @@ -1277,7 +1277,7 @@ resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used - https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations
    -
    +
    Docker Enterprise Edition can be configured to separate the flow of information that originates from applications running in containers. Supporting documentation can be found at the following resources: @@ -1286,7 +1286,7 @@ Supporting documentation can be found at the following resources: - http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks
    -
    +
    Supporting documentation to configure Universal Control Plane to meet the requirements of this control can be found at the following resources: @@ -1347,12 +1347,12 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, one can control which users and teams can create and manipulate Docker Trusted Registry resources. By default, no one can @@ -1364,7 +1364,7 @@ found at the following resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ - https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC
    -
    +
    To assist the organization in meeting the requirements of this control, one can control which users and teams can create and manipulate Universal Control Plane resources. By default, no one can @@ -1489,11 +1489,11 @@ The information system prevents [Assignment: organization-defined software] from **Implemenation Details:**
    -
    +
    Universal Control Plane users can be assigned to one of a number of different permission levels. The permission level assigned to a specific user determines that user's ability to execute certain @@ -1537,11 +1537,11 @@ The information system audits the execution of privileged functions. **Implemenation Details:**
    -
    +
    Docker Enterprise Edition logs privileged user events to standard log files. One can configure Docker Enterprise Edition to direct these event logs to a remote logging service such as an Elasticsearch, @@ -1582,11 +1582,11 @@ The information system prevents non-privileged users from executing privileged f **Implemenation Details:**
    -
    +
    One can control which users and teams can create and manipulate Docker Enterprise Edition resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to enforce @@ -1629,11 +1629,11 @@ The information system: **Implemenation Details:**
    -
    +
    When Docker Enterprise Edition is integrated to a directory service via LDAP, one can reference the functionality of the directory service to configure the enforcement of a limit to the number of conesecutive @@ -1759,11 +1759,11 @@ The information system limits the number of concurrent sessions for each [Assign **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be configured to limit the number of concurrent sessions for each account. These options can be found within the Universal Control Plane Admin Settings under the "Auth" @@ -1801,11 +1801,11 @@ The information system: **Implemenation Details:**
    -
    +
    Per the requirements of AC-2 (5), Docker Enterprise Edition can be configured to enforce user session lifetime limits and renewal thresholds. These options can be found within the Universal Control @@ -1841,11 +1841,11 @@ The information system conceals, via the session lock, information previously vi **Implemenation Details:**
    -
    +
    Per the requirements of AC-2 (5), Docker Enterprise Edition can be configured to enforce user session lifetime limits and renewal thresholds. These options can be found within the Universal Control @@ -1883,11 +1883,11 @@ The information system automatically terminates a user session after [Assignment **Implemenation Details:**
    -
    +
    Per the requirements of AC-2 (5), Docker Enterprise Edition can be configured to enforce user session lifetime limits and renewal thresholds. These options can be found within the Universal Control @@ -1929,11 +1929,11 @@ The information system: **Implemenation Details:**
    -
    +
    Universal Control Plane includes a logout capability that allows a user to terminate his/her current session.
    @@ -2114,18 +2114,18 @@ The information system monitors and controls remote access methods. **Implemenation Details:**
    -
    +
    Docker Enterprise Edition logs and controls all local and remote access events. In addition, auditing can be configured on the underlying operating system to meet this control.
    -
    +
    Docker Enterprise Edition logs and controls all local and remote access events. In addition, auditing can be configured on the underlying operating system to meet this control. @@ -2168,13 +2168,13 @@ The information system implements cryptographic mechanisms to protect the confid **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Trusted Registry are protected with Transport Layer Security (TLS) 1.2. This is included at both the HTTPS application layer for access to the DTR user interface and for @@ -2182,14 +2182,14 @@ command-line based connections to the registry. In addition to this, all communication to DTR is enforced by way of two-way mutual TLS authentication.
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2. In addition to this, all communication to Docker Enterprise Edition is enforced by way of two-way mutual TLS authentication.
    -
    +
    All remote access sessions to Universal Control Plane are protected with Transport Layer Security (TLS) 1.2. This is included at both the HTTPS application layer for access to the UCP user interface and for @@ -2235,26 +2235,26 @@ The information system routes all remote accesses through [Assignment: organizat **Implemenation Details:**
    -
    +
    A combination of managed load balancers, firewalls and access control lists, and virtual networking resources can be used to ensure traffic destined for Docker Trusted Registry replicas is routed through managed network access control points.
    -
    +
    A combination of managed load balancers, firewalls and access control lists, and virtual networking resources can be used to ensure traffic destined for Docker Enterprise Edition is routed through managed network access control points.
    -
    +
    A combination of managed load balancers, firewalls and access control lists, and virtual networking resources can be used to ensure traffic destined for Universal Control Plane managers and worker nodes is @@ -2322,20 +2322,20 @@ The organization provides the capability to expeditiously disconnect or disable **Implemenation Details:**
    -
    +
    Built-in firewall technology in Docker Trusted Registry's underlying operating system can be used to force the disconnection of remote connections to the host. In addition, UCP slave nodes running Docker Trusted Registry replicas can be paused or drained, which subsequently stops sessions to the DTR replica.
    -
    +
    Built-in firewall technology in Docker Enterprise Edition's underlying operating system can be used to force the disconnection of remote connections to the host. In addition, Docker Enterprise Edition provides the @@ -2345,7 +2345,7 @@ applications running on Docker Enterprise Edition can also be stopped and/or removed.
    -
    +
    Built-in firewall technology in Universal Control Plane's underlying operating system can be used to force the disconnection of remote connections to the host. In addition, UCP provides the option to pause diff --git a/docs/compliance/reference/800-53/AU.md b/docs/compliance/reference/800-53/AU.md index 49ec928..dc6794d 100644 --- a/docs/compliance/reference/800-53/AU.md +++ b/docs/compliance/reference/800-53/AU.md @@ -70,13 +70,13 @@ The organization: **Implemenation Details:**
    -
    +
    All of the event types indicated by this control are logged by a combination of the backend ucp-controller service within Universal Control Plane and the backend services that make up Docker Trusted @@ -84,7 +84,7 @@ Registry. Additional documentation can be found at the following resource: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/
    -
    +
    Both Universal Control Plane and Docker Trusted Registry backend service containers, all of which reside on Docker Enterprise Edition, log all of the event types indicated by this control (as explained by @@ -96,7 +96,7 @@ logging drivers can be found at the following resource: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    All of the event types indicated by this control are logged by the backend ucp-controller service within Universal Control Plane. In addition, each container created on a Universal Control Plane cluster @@ -158,14 +158,14 @@ The information system generates audit records containing information that estab **Implemenation Details:**
    -
    +
    Docker Trusted Registry generates all of the audit record information indicated by this control. A sample audit event has been provided below: @@ -175,7 +175,7 @@ based auth suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth ok","username":"dockeruser"}
    -
    +
    Both Universal Control Plane and Docker Trusted Registry are pre-configured to take advantage of Docker Enterprise Edition's built-in logging mechanisms. A sample audit event recorded by Docker @@ -191,7 +191,7 @@ Additional documentation can be referenced at the following resource: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane generates all of the audit record information indicated by this control. A sample audit event has been provided below: @@ -201,7 +201,7 @@ based auth suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth ok","username":"dockeruser"}
    -
    +
    Docker Enterprise Edition generates all of the audit record information indicated by this control. A sample audit event has been provided below: @@ -249,13 +249,13 @@ The information system generates audit records containing the following addition **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -265,7 +265,7 @@ information can be found at the following resource: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be used to interpolate the information defined @@ -275,7 +275,7 @@ documentation can be found at the following resource: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be used to interpolate the information defined by this control from the logged @@ -322,13 +322,13 @@ The information system provides centralized management and configuration of the **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -338,7 +338,7 @@ information can be found at the following resource: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be used to interpolate the information defined @@ -348,7 +348,7 @@ documentation can be found at the following resource: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be used to interpolate the information defined by this control from the logged @@ -419,13 +419,13 @@ The information system: **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -435,7 +435,7 @@ found at the following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can be used to interpolate the information defined by this @@ -446,7 +446,7 @@ resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to alert individuals in the event of log processing failures. Additional @@ -492,13 +492,13 @@ The information system provides a warning to [Assignment: organization-defined p **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -508,7 +508,7 @@ found at the following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be configured to warn the organization when the @@ -518,7 +518,7 @@ the following resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to warn the organization when the allocated log storage is full. @@ -564,13 +564,13 @@ The information system provides an alert in [Assignment: organization-defined re **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -580,7 +580,7 @@ the following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be configured to warn the organization @@ -590,7 +590,7 @@ the following resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to warn the organization when audit log failures occur. Additional @@ -690,13 +690,13 @@ The information system provides the capability to centrally review and analyze a **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -706,7 +706,7 @@ following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The organization can subsequently centrally review and analyze all of the @@ -716,7 +716,7 @@ following resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The organization can subsequently centrally review and analyze all of the Docker EE audit records. Additional information can @@ -826,13 +826,13 @@ The information system provides an audit reduction and report generation capabil **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -844,7 +844,7 @@ Additional information can be found at the following resources: Registry should be certified to ensure that logs are not altered during generation and transmission to a remote logging stack.
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be used to facilitate the audit reduction and @@ -857,7 +857,7 @@ Edition should be certified to ensure that logs are not altered during generation and transmission to a remote logging stack.
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be used to facilitate the audit reduction and report generation requirements of @@ -906,13 +906,13 @@ The information system provides the capability to process audit records for even **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -922,7 +922,7 @@ at the following resources: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be configured to parse information by @@ -932,7 +932,7 @@ at the following resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to parse information by organization-defined audit fields. Additional @@ -992,20 +992,20 @@ The information system: **Implemenation Details:**
    -
    +
    Docker Trusted Registry uses the system clock of the underlying operating system on which it runs. This behavior cannot be modified.The underlying operating system on which Docker Trusted Registry runs should be configured such that its system clock uses Coordinated Universal Time (UTC) as indicated by this control. Refer to the operating system's instructions for doing so.
    -
    +
    Docker Enterprise Edition uses the system clock of the underlying operating system on which it runs. This behavior cannot be modified. The underlying operating system on which Docker Enterprise Edition @@ -1014,7 +1014,7 @@ Universal Time (UTC) as indicated by this control. Refer to the operating system's instructions for doing so.
    -
    +
    Universal Control Plane uses the system clock of the underlying operating system on which it runs. This behavior cannot be modified.The underlying operating system on which Universal Control Plane runs should be configured such that its system clock uses Coordinated @@ -1063,13 +1063,13 @@ The information system: **Implemenation Details:**
    -
    +
    The underlying operating system on which Docker Trusted Registry runs should be configured such that its system clock compares itself with an authoritative time source as indicated by this control. This can be @@ -1082,7 +1082,7 @@ time period. This can be accomplished by utilizing the Network Time Protocol (NTP). Refer to the operating system's instructions for doing so.
    -
    +
    The underlying operating system on which Docker Enterprise Edition runs should be configured such that its system clock compares itself with an authoritative time source as indicated by this control. This can be @@ -1097,7 +1097,7 @@ utilizing the Network Time Protocol (NTP). Refer to the operating system's instructions for doing so.
    -
    +
    The underlying operating system on which Universal Control Plane runs should be configured such that its system clock compares itself with an authoritative time source as indicated by this control. This can be @@ -1158,13 +1158,13 @@ The information system protects audit information and audit tools from unauthori **Implemenation Details:**
    -
    +
    By default, Docker Trusted Registry is configured to use the underlying logging capabilities of Docker Enterprise Edition. As such, on the underlying Linux operating system, only root and sudo users and @@ -1176,7 +1176,7 @@ logging stack. In this case, the organization is responsible for configuring the remote logging stack per the provisions of this control.
    -
    +
    On the underlying Linux operating system supporting Docker Enterprise Edition, only root and sudo users and users that have been added to the "docker" group have the ability to access the logs generated by @@ -1196,7 +1196,7 @@ Linux operating systems supporting Docker Enterprise Edition that instead use upstart.
    -
    +
    By default, Universal Control Plane is configured to use the underlying logging capabilities of Docker Enterprise Edition. As such, on the underlying Linux operating system, only root and sudo users and @@ -1256,13 +1256,13 @@ The information system backs up audit records [Assignment: organization-defined **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, acan be configured to send logs to a remote logging stack. Additional information can be found at the following @@ -1273,7 +1273,7 @@ resources: The logging stack can subsequently be configured to back up audit records per the schedule defined by this control.
    -
    +
    Docker Enterprise Edition can be configured to use a logging driver that can subsequently meet the backup requirements of this control. Additional information can be found at the following resources: @@ -1281,7 +1281,7 @@ Additional information can be found at the following resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: @@ -1324,12 +1324,12 @@ The information system implements cryptographic mechanisms to protect the integr **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, acan be configured to send logs to a remote logging stack. Additional information can be found at the following @@ -1340,7 +1340,7 @@ resources: The logging stack can subsequently be configured to meet the encryption mechanisms required by this control.
    -
    +
    Docker Enterprise Edition can be configured to use a logging driver that can subsequently meet the encryption mechanisms required by this control. Additional information can be found at the following @@ -1407,11 +1407,11 @@ The information system protects against an individual (or process acting on beha **Implemenation Details:**
    -
    +
    Docker Enterprise Edition includes functionality known as Docker Content Trust which allows one to cryptographically sign Docker images. It enforces client-side signing and verification of image tags @@ -1518,13 +1518,13 @@ The organization retains audit records for [Assignment: organization-defined tim **Implemenation Details:**
    -
    +
    The organization will be responsible for meeting the requirements of this control. To assist with these requirements, Docker Trusted Registry resides as an Application on a Universal Control Plane @@ -1537,7 +1537,7 @@ resources: This logging stack can subsequently be configured to retain logs for the duration required by this control.
    -
    +
    The organization will be responsible for meeting the requirements of this control. To assist with these requirements, Docker Enterprise Edition can be configured to use a logging driver that stores data in @@ -1547,7 +1547,7 @@ information can be found at the following resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    The organization will be responsible for meeting the requirements of this control. To assist with these requirements, Universal Control Plane can be configured to send logs to a remote logging stack. @@ -1611,13 +1611,13 @@ The information system: **Implemenation Details:**
    -
    +
    All of the event types indicated by AU-2 a. are logged by a combination of the backend services within Universal Control Plane and Docker Trusted Registry. Additional information can be found at the @@ -1633,7 +1633,7 @@ organization can configure audit rules to select which Docker-specific events are to be audited. Refer to the specific Linux distribution in use for instructions on configuring this service.
    -
    +
    Both Universal Control Plane and Docker Trusted Registry backend service containers, all of which reside on Docker Enterprise Edition, log all of the event types indicated by this AU-2 a. These and other @@ -1653,7 +1653,7 @@ Docker-specific events are to be audited. Refer to the specific Linux distribution in use for instructions on configuring this service.
    -
    +
    All of the event types indicated by AU-2 a. are logged by the backend ucp-controller service within Universal Control Plane. In addition, each container created on a Universal Control Plane cluster logs event @@ -1707,13 +1707,13 @@ The information system compiles audit records from [Assignment: organization-def **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, and as such, can be configured to send logs to a remote logging stack. Additional information can be found at the @@ -1725,7 +1725,7 @@ This logging stack can subsequently be used to compile audit records in to a system-wide audit trail that is time-correlated per the requirements of this control.
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. This logging stack can subsequently be used to compile audit records in to @@ -1736,7 +1736,7 @@ resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: @@ -1795,13 +1795,13 @@ The information system provides the capability for [Assignment: organization-def **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, and as such, can be configured to send logs to a remote logging stack. Additional information can be found at the @@ -1812,7 +1812,7 @@ following resources: This logging stack can subsequently be used to meet the requirements of this control.
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. This logging stack can subsequently be used to meet the requirements of @@ -1822,7 +1822,7 @@ resources: - https://docs.docker.com/engine/admin/logging/overview/
    -
    +
    Universal Control Plane can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: diff --git a/docs/compliance/reference/800-53/CA.md b/docs/compliance/reference/800-53/CA.md index 20f5b26..8d52a15 100644 --- a/docs/compliance/reference/800-53/CA.md +++ b/docs/compliance/reference/800-53/CA.md @@ -219,11 +219,11 @@ The organization develops a continuous monitoring strategy and implements a cont **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the continuous monitoring requirements of this control. Additional diff --git a/docs/compliance/reference/800-53/CM.md b/docs/compliance/reference/800-53/CM.md index 0cf9804..8b913fb 100644 --- a/docs/compliance/reference/800-53/CM.md +++ b/docs/compliance/reference/800-53/CM.md @@ -44,11 +44,11 @@ The organization: **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. Additional @@ -87,11 +87,11 @@ The organization develops, documents, and maintains under configuration control, **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. Additional @@ -135,11 +135,11 @@ The organization reviews and updates the baseline configuration of the informati **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. Additional @@ -178,11 +178,11 @@ The organization employs automated mechanisms to maintain an up-to-date, complet **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. CIS regularly @@ -226,11 +226,11 @@ The organization retains [Assignment: organization-defined previous versions of **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. CIS regularly @@ -308,11 +308,11 @@ The organization: **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management change control requirements of this control. @@ -359,11 +359,11 @@ The organization employs automated mechanisms to: **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management change control requirements of this control. @@ -406,11 +406,11 @@ The organization tests, validates, and documents changes to the information syst **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management change control requirements of this control. @@ -483,11 +483,11 @@ The organization ensures that cryptographic mechanisms used to provide [Assignme **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the cryptography management requirements of this control. Additional @@ -571,12 +571,12 @@ The information system enforces access restrictions and supports auditing of the **Implemenation Details:**
    -
    +
    Role-based access control can be configured within Docker Trusted Registry to meet the requirements of this control. Additional information can be found at the following resources: @@ -585,7 +585,7 @@ information can be found at the following resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ - https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC
    -
    +
    Role-based access control can be configured within Universal Control Plane to meet the requirements of this control. Additional information can be found at the following resources: @@ -623,11 +623,11 @@ The organization reviews information system changes [Assignment: organization-de **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the system change requirements of this control. Additional information can @@ -676,13 +676,13 @@ The information system prevents the installation of [Assignment: organization-de **Implemenation Details:**
    -
    +
    Docker Content Trust is a capability provided by Docker Enterprise Edition that enforces client-side signing and verification of Docker image tags. It provides the ability to use digital signatures for data @@ -699,7 +699,7 @@ Additional information can be found at teh following resources: - https://docs.docker.com/engine/security/trust/content_trust/ - https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/manage-trusted-repositories/
    -
    +
    Before installing Docker Enterprise Edition, ensure that your supporting Linux operating system's packager manager supports package signature verification and that it is enabled. It is also required @@ -721,7 +721,7 @@ the following resources: - https://docs.docker.com/engine/security/trust/content_trust/
    -
    +
    Docker Content Trust is a capability provided by Docker Enterprise Edition that enforces client-side signing and verification of Docker image tags. It provides the ability to use digital signatures for data sent @@ -826,26 +826,26 @@ The organization employs automated mechanisms to centrally manage, apply, and ve **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can incorporate the use of an external configuration management system to meet the requirements of this control.
    -
    +
    The organization is responsible for meeting the requirements of this control. The organization can incorporate the use of an external configuration management system to meet the requirements of this control.
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can incorporate the use of an external configuration management system to @@ -927,19 +927,19 @@ The information system prevents program execution in accordance with [Selection **Implemenation Details:**
    -
    +
    The organization can define a list of allowed base Docker images and make them available via Docker Trusted Registry. The organization can also prevent users from being able to pull Docker images from untrusted sources.
    -
    +
    In order to restrict which Docker images can be used to deploy applications to Docker Enterprise Edition, the organization must define a list of allowed base Docker images and make them available via Docker @@ -947,7 +947,7 @@ Trusted Registry. The organization must also prevent users from being able to pull Docker images from untrusted sources.
    -
    +
    In order to restrict which Docker images can be used to deploy applications to Universal Control Plane, the organization must define a list of allowed base Docker images and make them available via Docker @@ -1022,13 +1022,13 @@ The organization: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can define a list of allowed base Docker images and make them available @@ -1040,7 +1040,7 @@ stored in Docker Trusted Registry. This can be accomplished by using Docker Content Trust to sign Docker images which can subsequently be stored in Docker Trusted Registry.
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements and in order to restrict which Docker images can be used to deploy applications to CS Docker @@ -1050,7 +1050,7 @@ organization must also prevent users from being able to pull Docker images from untrusted sources.
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements and in order to restrict which Docker images can be used to deploy applications to Universal @@ -1221,11 +1221,11 @@ The organization develops, documents, and implements a configuration management **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configuration management plan requirements of this control. Additional @@ -1304,11 +1304,11 @@ The organization: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can define a list of allowed base Docker images and make them available @@ -1343,11 +1343,11 @@ The information system alerts [Assignment: organization-defined personnel or rol **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can define a list of allowed base Docker images and make them available diff --git a/docs/compliance/reference/800-53/CP.md b/docs/compliance/reference/800-53/CP.md index 7807d88..32d71c7 100644 --- a/docs/compliance/reference/800-53/CP.md +++ b/docs/compliance/reference/800-53/CP.md @@ -525,12 +525,12 @@ The information system implements transaction recovery for systems that are tran **Implemenation Details:**
    -
    +
    Docker Trusted Registry maintains its cluster state via an internal key-value store. This, and other DTR transactions can be backed up and recovered. Additional information can be found at the following @@ -539,7 +539,7 @@ resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/backups-and-disaster-recovery/ - https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#DTR_Backup
    -
    +
    Universal Control Plane maintains its cluster state via an internal key-value store. This, and other UCP transactions can be backed up and recovered. Additional information can be found at the following diff --git a/docs/compliance/reference/800-53/IA.md b/docs/compliance/reference/800-53/IA.md index 23a2511..cec0a4b 100644 --- a/docs/compliance/reference/800-53/IA.md +++ b/docs/compliance/reference/800-53/IA.md @@ -54,11 +54,11 @@ The information system uniquely identifies and authenticates organizational user **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be configured to identify and authenticate users via it's integrated support for LDAP. Users and groups managed within the organization's LDAP directory service (e.g. Active @@ -148,27 +148,27 @@ The organization requires individuals to be authenticated with an individual aut **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, Docker Trusted Registry requires individual users to be authenticated in order to gain access to the system. Any permissions granted to the team(s) that which the user is a member are subsequently applied.
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, Universal Control Plane requires individual users to be authenticated in order to gain access to the system. Any permissions granted to the team(s) that which the user is a member are subsequently applied.
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, Docker Enterprise Edition requires individual users to be authenticated in order to gain access @@ -223,11 +223,11 @@ The information system implements replay-resistant authentication mechanisms for **Implemenation Details:**
    -
    +
    Docker Enterprise Edition integrates with LDAP for authenticating users to an external directory service. You should configure your external directory service for ensuring that you are protected against replay @@ -261,11 +261,11 @@ The information system implements replay-resistant authentication mechanisms for **Implemenation Details:**
    -
    +
    Docker Enterprise Edition integrates with LDAP for authenticating users to an external directory service. You should configure your external directory service for ensuring that you are protected against replay @@ -349,13 +349,13 @@ The information system uniquely identifies and authenticates [Assignment: organi **Implemenation Details:**
    -
    +
    Docker Trusted Registry replicas reside on Universal Control Plane worker nodes. In order for UCP worker nodes to join a Universal Control Plane cluster, they must be identified and authenticated via a @@ -366,14 +366,14 @@ manager nodes has been established. Reference documentation can be found at https://docs.docker.com/datacenter/dtr/2.1/guides/install/#/step-7-join-replicas-to-the-cluster.
    -
    +
    In order for other CS Engine nodes to be able to join a cluster managed by Universal Control Plane, they must be identified and authenticated via either a manager or worker token. Use of the token includes trust on first use mutual TLS.
    -
    +
    In order for nodes to join a Universal Control Plane cluster, they must be identified and authenticated via either a manager or worker token. Additional information can be found at the following resources: @@ -449,11 +449,11 @@ The organization manages information system identifiers by: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -529,11 +529,11 @@ The organization manages individual identifiers by uniquely identifying each ind **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -611,11 +611,11 @@ The organization manages information system authenticators by: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -702,11 +702,11 @@ The information system, for password-based authentication: **Implemenation Details:**
    -
    +
    An external directory service integrated with Docker Enterprise Edition via LDAP can be configured to enforce minimum password complexity requirements. Refer to your directory service's @@ -776,13 +776,13 @@ The information system, for PKI-based authentication: **Implemenation Details:**
    -
    +
    Docker Trusted Registry includes a Docker volume which holds the root key material for the DTR root CA that issues certificats. In addition Universal Control Plane contains two, built-in root certificate @@ -814,7 +814,7 @@ In addition, Docker Trusted Registry's server certificates can be replaced by following the instructions at https://docs.docker.com/datacenter/dtr/2.1/guides/configure/.
    -
    +
    Universal Control Plane contains two, built-in root certificate authorities. One CA is used for signing client bundles generated by users. The other CA is used for TLS communication between UCP cluster @@ -837,7 +837,7 @@ can be found at the following resources: - https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/#/replace-the-server-certificates
    -
    +
    All users within a Docker Enterprise Edition cluster can create a client certificate bundle for authenticating in to the cluster from the Docker client tooling. When a user attempts to authenticate in to @@ -896,11 +896,11 @@ The organization employs automated tools to determine if password authenticators **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -946,11 +946,11 @@ The organization protects authenticators commensurate with the security category **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -1080,17 +1080,17 @@ The information system obscures feedback of authentication information during th **Implemenation Details:**
    -
    +
    Docker Trusted Registry obscures all feedback of authentication information during the authentication process. This includes both authentication via the web UI and the CLI.
    -
    +
    Universal Control Plane obscures all feedback of authentication information during the authentication process. This includes both authentication via the web UI and the CLI. @@ -1128,18 +1128,18 @@ The information system implements mechanisms for authentication to a cryptograph **Implemenation Details:**
    -
    +
    All access to Docker Trusted Registry is protected with Transport Layer Security (TLS) 1.2 with the AES-GCM cipher. This includes both SSH access to the individual UCP nodes and CLI-/web-based access to the UCP management functions with mutual TLS and HTTPS respectively.
    -
    +
    All access to Universal Control Plane is protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This includes both SSH access to the individual UCP nodes and CLI-/web-based access to @@ -1178,17 +1178,17 @@ The information system uniquely identifies and authenticates non-organizational **Implemenation Details:**
    -
    +
    Users managed by Docker Trusted Registry can be grouped per the requirements of the organization and as defined by this control. This can include groupings for non-organizational users.
    -
    +
    Users managed by Universal Control Plane can be grouped per the requirements of the organization and as defined by this control. This can include groupings for non-organizational users. @@ -1231,11 +1231,11 @@ The information system accepts only FICAM-approved third-party credentials. **Implemenation Details:**
    -
    +
    An external directory service integrated with Docker Enterprise Edition via LDAP can be configured to meet the FICAM requirements as indicated by this control. Refer to your directory service's documentation for @@ -1269,11 +1269,11 @@ The organization employs only FICAM-approved information system components in [A **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -1309,11 +1309,11 @@ The information system conforms to FICAM-issued profiles. **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be diff --git a/docs/compliance/reference/800-53/RA.md b/docs/compliance/reference/800-53/RA.md index 77d4c73..cbe660f 100644 --- a/docs/compliance/reference/800-53/RA.md +++ b/docs/compliance/reference/800-53/RA.md @@ -114,19 +114,19 @@ The organization employs vulnerability scanning tools that include the capabilit **Implemenation Details:**
    -
    +
    To assist the orgnization in meeting the requirements of this control, the Docker Security Scanning (DSS) component of Docker Trusted Registry (DTR) that is included with the Docker Enterprise Edition Advanced tier can be used to scan Docker images for vulnerabilities against known vulnerability databases. Scans can be triggered either manually or when Docker images are pushed to DTR.
    -
    +
    The Docker Security Scanning tool allows for the scanning of Docker images in Docker Trusted Registry against the Common Vulnerabilities and Exposures (CVE) dictionary. @@ -159,11 +159,11 @@ The organization updates the information system vulnerabilities scanned [Selecti **Implemenation Details:**
    -
    +
    To assist the orgnization in meeting the requirements of this control, the Docker Security Scanning component of Docker Trusted Registry (DTR) that is included with the Docker Enterprise Edition @@ -208,19 +208,19 @@ The organization employs vulnerability scanning procedures that can identify the **Implemenation Details:**
    -
    +
    To assist the orgnization in meeting the requirements of this control, the Docker Security Scanning component of Docker Trusted Registry (DTR) that is included with the Docker Enterprise Edition Advanced tier identifies vulnerabilities in a Docker image and marks them against predefined criticality levels; critical major and minor.
    -
    +
    The Docker Security Scanning tool allows for the scanning of Docker images in Docker Trusted Registry against the Common Vulnerabilities and Exposures (CVE).' dictionary @@ -263,11 +263,11 @@ The information system implements privileged access authorization to [Assignment **Implemenation Details:**
    -
    +
    Only the appropriate users that the organization has provided Docker Trusted Registry access to are able to view and interpret vulnerability scan results. @@ -300,11 +300,11 @@ The organization employs automated mechanisms to compare the results of vulnerab **Implemenation Details:**
    -
    +
    For each Docker image pushed to Docker Trusted Registry at a given time, Docker Security Scaninng retains a list of vulnerabilities detected. The DTR API can be queried to retrieve the vulnerability diff --git a/docs/compliance/reference/800-53/SA.md b/docs/compliance/reference/800-53/SA.md index f1eecaa..dea60f4 100644 --- a/docs/compliance/reference/800-53/SA.md +++ b/docs/compliance/reference/800-53/SA.md @@ -341,13 +341,13 @@ The organization requires the developer of the information system, system compon **Implemenation Details:**
    -
    +
    Docker Content Trust gives you the ability to verify both the integrity and the publisher of all the data received from a Docker Trusted Registry over any channel. It allows operations with a remote @@ -358,7 +358,7 @@ client-side verification of the integrity and publisher of specific image tags. Docker Trusted Registry includes an integrated imaging signing service.
    -
    +
    Docker Content Trust gives you the ability to verify both the integrity and the publisher of all the data received from a Docker Trusted Registry over any channel. It allows operations with a remote @@ -369,7 +369,7 @@ client-side verification of the integrity and publisher of specific image tags.
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, Docker Content Trust gives you the ability to verify both the integrity and the publisher of all diff --git a/docs/compliance/reference/800-53/SC.md b/docs/compliance/reference/800-53/SC.md index e27f39e..20b82c8 100644 --- a/docs/compliance/reference/800-53/SC.md +++ b/docs/compliance/reference/800-53/SC.md @@ -59,12 +59,12 @@ The information system separates user functionality (including user interface se **Implemenation Details:**
    -
    +
    Docker Trusted Registry is made up of a number of backend services that provide for both user functionality (including user interface services) and system management functionality. Each of these services @@ -74,7 +74,7 @@ found at the following resources: - https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ - https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#Docker_Trusted_Registry
    -
    +
    Universal Control Plane is made up of a number of backend services that provide for both user functionality (including user interface services) and system management functionality. Each of these services @@ -442,11 +442,11 @@ The information system provides the capability to dynamically isolate/segregate **Implemenation Details:**
    -
    +
    Docker Enterprise Edition is designed to run application containers whose content can be completely isolated/segregated from other application containers within the same node/cluster. This is @@ -617,11 +617,11 @@ The organization produces, controls, and distributes symmetric cryptographic key **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be installed on the following operating systems: CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and SUSE Linux Enterprise 12+. In order to meet the requirements of this @@ -667,11 +667,11 @@ The information system implements [Assignment: organization-defined cryptographi **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be installed on the following operating systems: CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and SUSE Linux Enterprise 12+. In order to meet the requirements of this @@ -914,13 +914,13 @@ The information system protects the authenticity of communications sessions. **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Trusted Registry are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the DTR @@ -928,14 +928,14 @@ user interface and for command-line based connections to the registry. In addition to this, all communication to DTR is enforced by way of two-way mutual TLS authentication.
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In addition to this, all communication to and between Docker Enterprise Editions is enforced by way of two-way mutual TLS authentication.
    -
    +
    All remote access sessions to Universal Control Plane are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the UCP @@ -971,11 +971,11 @@ The information system invalidates session identifiers upon user logout or other **Implemenation Details:**
    -
    +
    Docker Enterprise Edition invalidates session identifiers upon user logout per the requirements of this control.
    @@ -1067,11 +1067,11 @@ The information system protects the [Selection (one or more): confidentiality; i **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In addition to this, all communication to/from and between Docker @@ -1119,13 +1119,13 @@ The information system implements cryptographic mechanisms to prevent unauthoriz **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Trusted Registry are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the DTR @@ -1133,14 +1133,14 @@ user interface and for command-line based connections to the registry. In addition to this, all communication to DTR is enforced by way of two-way mutual TLS authentication.
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In addition to this, all communication to and between Docker Enterprise Editions is enforced by way of two-way mutual TLS authentication.
    -
    +
    All remote access sessions to Universal Control Plane are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the UCP diff --git a/docs/compliance/reference/800-53/SI.md b/docs/compliance/reference/800-53/SI.md index 8a2363f..784d6f5 100644 --- a/docs/compliance/reference/800-53/SI.md +++ b/docs/compliance/reference/800-53/SI.md @@ -155,11 +155,11 @@ The information system automatically updates malicious code protection mechanism **Implemenation Details:**
    -
    +
    Docker Enterprise Edition packages for supported underlying operating systems can only be obtained from Docker, Inc. The Docker EE repositories from which Docker EE packages are obtained are protected @@ -866,26 +866,26 @@ The information system: **Implemenation Details:**
    -
    +
    All error messages generated via the configured logging mechanism of Docker Trusted Registry are displayed such that they meet the requirements of this control. Only users that are authorized the appropriate level of access can view these error messages.
    -
    +
    All error messages generated via the logging mechanisms of the Docker Enterprise Edition engine are displayed such that they meet the requirements of this control. Only users that are authorized the appropriate level of access can view these error messages.
    -
    +
    All error messages generated via the configured logging mechanism of Universal Control Plane are displayed such that they meet the requirements of this control. Only users that are authorized the @@ -1017,11 +1017,11 @@ The information system implements [Assignment: organization-defined security saf **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be installed on the following operating systems: CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and SUSE Linux Enterprise 12+. In order to meet the requirements of this diff --git a/docs/generator/generator.go b/docs/generator/generator.go index fca4051..ecb677b 100644 --- a/docs/generator/generator.go +++ b/docs/generator/generator.go @@ -111,22 +111,38 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, i if satisfy.GetControlKey() == control.Number { id := xid.New() + // Format narratives + // **Need to clean up narrative links narratives := make([]string, len(satisfy.GetNarratives())) + narrativeLinks := []string{} for _, narrative := range satisfy.GetNarratives() { narrativeText := narrative.GetText() + if strings.Index(narrativeText, "'") == 0 { narrativeText = narrativeText[1 : len(narrativeText)-2] narrativeText = strings.Replace(narrativeText, "''", "'", -1) } + narrativeLinksIndex := strings.Index(narrativeText, "- http") + if narrativeLinksIndex >= 0 { + narrativeLinks = strings.Split(narrativeText[narrativeLinksIndex:], "\n") + for i, link := range narrativeLinks { + if strings.Index(link, "- ") >= 0 { + narrativeLinks[i] = link[strings.Index(link, "- ")+2:] + } + } + } narratives = append(narratives, narrativeText) } + fmt.Println(narrativeLinks) + markdownTemplateControl.Components = append(markdownTemplateControl.Components, MarkdownTemplateComponent{ ID: id.String(), Name: component.GetName(), ImplementationStatuses: satisfy.GetImplementationStatuses(), ControlOrigins: satisfy.GetControlOrigins(), Narratives: narratives, + NarrativeLinks: narrativeLinks, }) break diff --git a/docs/generator/types.go b/docs/generator/types.go index 66c5cd3..de48752 100644 --- a/docs/generator/types.go +++ b/docs/generator/types.go @@ -72,4 +72,5 @@ type MarkdownTemplateComponent struct { ImplementationStatuses []string ControlOrigins []string Narratives []string + NarrativeLinks []string } From 7c8b3f5778cabbd9b71da7e5ff574493307ac1ca Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Mon, 31 Jul 2017 13:03:32 -0400 Subject: [PATCH 13/13] update docs and script --- docs/compliance/reference/800-53/AC.md | 533 ++++++++++++-------- docs/compliance/reference/800-53/AU.md | 537 +++++++++++++-------- docs/compliance/reference/800-53/CA.md | 13 +- docs/compliance/reference/800-53/CM.md | 268 ++++++---- docs/compliance/reference/800-53/CP.md | 24 +- docs/compliance/reference/800-53/IA.md | 145 +++--- docs/compliance/reference/800-53/RA.md | 42 +- docs/compliance/reference/800-53/SA.md | 20 +- docs/compliance/reference/800-53/SC.md | 87 ++-- docs/compliance/reference/800-53/SI.md | 25 +- docs/generator/generator.go | 17 +- docs/generator/tmpl/80053.tmpl | 11 +- opencontrol/components/eNZi/component.yaml | 3 - 13 files changed, 1072 insertions(+), 653 deletions(-) diff --git a/docs/compliance/reference/800-53/AC.md b/docs/compliance/reference/800-53/AC.md index 8f1854d..4bd9244 100644 --- a/docs/compliance/reference/800-53/AC.md +++ b/docs/compliance/reference/800-53/AC.md @@ -44,11 +44,11 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, one can control which users and teams are allowed to create and manipulate Docker Enterprise Edition resources. By default, no one @@ -56,14 +56,14 @@ can make changes to the cluster. Permissions can be granted and managed to enforce fine-grained access control. Supporting documentation can found at the following resources: -UCP: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ -DTR: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ +
    @@ -118,18 +118,22 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, an external identity management system (such as Microsoft's Active Directory or an LDAP endpoint) can be configured as mandated by this control and can be integrated with Docker Enterprise Edition. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ + +
    @@ -169,36 +173,48 @@ The organization employs automated mechanisms to support the management of infor **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation for managing users and teams can found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-users/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-teams/ + +
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation for managing users and teams can found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/create-and-manage-users/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/create-and-manage-teams/ + +
    -
    +
    To assist the organization in meeting the requirements of this control, an external identity management system (such as Microsoft's Active Directory or an LDAP endpoint) can be configured as mandated by this control and can be integrated with Docker Enterprise Edition. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ + +
    @@ -228,11 +244,11 @@ The information system automatically [Selection: removes; disables] temporary an **Implemenation Details:**
    -
    +
    Using Docker Enterprise Edition's LDAP integration capabilities, one can disable and/or remove temporary and emergency accounts in a connected directory service (such as Active Directory) after an @@ -240,7 +256,11 @@ organization-defined time period. When a user is removed from LDAP, that user becomes inactive after the LDAP synchronization runs. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ + +
    @@ -270,18 +290,22 @@ The information system automatically disables inactive accounts after [Assignmen **Implemenation Details:**
    -
    +
    Using Docker Enterprise Edition's LDAP integration capabilities, one can automatically disable inactive accounts in a connected directory service (such as Active Directory). When a user is removed from LDAP, that user becomes inactive after the LDAP synchronization runs. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/external-auth/ + +
    @@ -311,11 +335,11 @@ The information system automatically audits account creation, modification, enab **Implemenation Details:**
    -
    +
    Docker Enterprise Edition logs various authentication and authorization events to standard log files. One can configure Docker Enterprise Edition to direct these event logs to a remote logging @@ -326,9 +350,13 @@ service's logging mechanisms for auditing the events defined by this control. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -358,11 +386,11 @@ The organization requires that users log out when [Assignment: organization-defi **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, Docker Enterprise Edition can be configured to enforce automated session termination of users after an organization-defined time period @@ -370,6 +398,7 @@ of inactivity. By default, the initial lifetime of a user's session is set to 72 hours and the renewal session for a user's session is set to 24 hours. These values can both be changed in the "Auth" section of the "Admin Settings" in Universal Control Plane. +
    @@ -424,27 +453,35 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ + +
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ + +
    -
    +
    To assist the organization in meeting the requirements of this control, Docker Enterprise Edition supports various levels of user permissions and role-based access control enforcements. Administrator @@ -455,13 +492,15 @@ cluster. Supporting documentation can be found at the following resources: UCP: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Identity_Management -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#RBAC -DTR: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC +
    @@ -501,14 +540,15 @@ The organization only permits the use of shared/group accounts that meet [Assign **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, users and/or groups synchronized to Docker Enterprise Edition via LDAP can be configured at the directory service. +
    @@ -538,13 +578,14 @@ The information system terminates shared/group account credentials when members **Implemenation Details:**
    -
    +
    Users and/or groups synchronized to Docker Enterprise Edition via LDAP can be configured at the directory service. +
    @@ -574,14 +615,15 @@ The information system enforces [Assignment: organization-defined circumstances **Implemenation Details:**
    -
    +
    Information system accounts synchronized to Docker Enterprise Edition via LDAP can be configured at the directory service to meet this requirement as necessary. +
    @@ -630,48 +672,60 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ + +
    -
    +
    To assist the organization in meeting the requirements of this control, Docker Enterprise Edition can be configured to aggregate container and daemon events via a number of logging drivers. Supporting documentation can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/view_container_logs/ -- https://docs.docker.com/engine/admin/logging/overview/ -- https://docs.docker.com/engine/admin/logging/log_tags/ +
    -
    +
    To assist the organization in meeting the requirements of this control, Universal Control Plane can be configured to send system account log data to a remote logging service such as an Elasticsearch, Logstash and Kibana (ELK) stack. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    To assist the organization in meeting the requirements of this control, when Docker Enterprise Edition is configured for LDAP integration, one can refer to the directory service's existing monitoring tools. +
    @@ -701,14 +755,15 @@ The organization disables accounts of users posing a significant risk within [As **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, users and/or groups synchronized to Docker Enterprise Edition via LDAP can be managed at the directory service. +
    @@ -748,41 +803,50 @@ The information system enforces approved authorizations for logical access to in **Implemenation Details:**
    -
    +
    One can control which users and teams can create and manipulate Docker Trusted Registry resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to enforce fine-grained access control. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC + +
    -
    +
    One can control which users and teams can create and manipulate Universal Control Plane resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to enforce fine-grained access control. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#RBAC_and_Managing_Team_Level_Access_to_Resources -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#RBAC + +
    -
    +
    One can control which users and teams can create and manipulate Docker Enterprise Edition resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to enforce fine-grained access control. The eNZi component facilitates authorizations as dictated by the system's administrators. +
    @@ -926,42 +990,53 @@ The information system enforces approved authorizations for controlling the flow **Implemenation Details:**
    -
    +
    Supporting documentation to configure Docker Trusted Registry to meet the requirements of this control can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations + +
    -
    +
    Docker Enterprise Edition can be configured to control the flow of information that originates from applications running in containers. Supporting documentation can be found at the following resources: -- https://docs.docker.com/engine/userguide/networking/ -- http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks +
    -
    +
    Supporting documentation to configure Universal Control Plane to meet the requirements of this control can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/install/system-requirements/#/ports-used -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/use-domain-names-to-access-services/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/restrict-services-to-worker-nodes/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Universal_Control_Plane_2.0_Service_Discovery_and_Load_Balancing -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Networking + +
    @@ -1071,48 +1146,54 @@ The information system enforces information flow control using [Assignment: orga **Implemenation Details:**
    -
    +
    Supporting documentation to configure Docker Trusted Registry to meet the requirements of this control can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations + +
    -
    +
    Docker Enterprise Edition can be configured to control the flow of information that originates from applications running in containers per organization-defined security policy filters. Supporting documentation can be found at the following resources: -- https://docs.docker.com/engine/userguide/networking/ -- http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks -There are also third-party behavioral activity monitoring tools (e.g. -Sysdig Falco <http://www.sysdig.org/falco/>) that can be used -alongside Docker Enterprise Edition to satisfy this control's -requirements. +
    -
    +
    Supporting documentation to configure Universal Control Plane to meet the requirements of this control can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/install/system-requirements/#/ports-used -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/use-domain-names-to-access-services/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/restrict-services-to-worker-nodes/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Universal_Control_Plane_2.0_Service_Discovery_and_Load_Balancing -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Networking + +
    @@ -1262,42 +1343,53 @@ The information system separates information flows logically or physically using **Implemenation Details:**
    -
    +
    Supporting documentation to configure Docker Trusted Registry to meet the requirements of this control can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/install/system-requirements/#/ports-used -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations + +
    -
    +
    Docker Enterprise Edition can be configured to separate the flow of information that originates from applications running in containers. Supporting documentation can be found at the following resources: -- https://docs.docker.com/engine/userguide/networking/ -- http://success.docker.com/Datacenter/Apply/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks +
    -
    +
    Supporting documentation to configure Universal Control Plane to meet the requirements of this control can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/install/system-requirements/#/ports-used -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/use-domain-names-to-access-services/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/restrict-services-to-worker-nodes/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Universal_Control_Plane_2.0_Service_Discovery_and_Load_Balancing -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#Infrastructure_Considerations -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Networking + +
    @@ -1347,12 +1439,12 @@ The organization: **Implemenation Details:**
    -
    +
    To assist the organization in meeting the requirements of this control, one can control which users and teams can create and manipulate Docker Trusted Registry resources. By default, no one can @@ -1360,11 +1452,15 @@ make changes to the cluster. Permissions can be granted and managed to enforce fine-grained access control. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC + +
    -
    +
    To assist the organization in meeting the requirements of this control, one can control which users and teams can create and manipulate Universal Control Plane resources. By default, no one can @@ -1372,10 +1468,14 @@ make changes to the cluster. Permissions can be granted and managed to enforce fine-grained access control. Supporting documentation can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Docker_Datacenter_Best_Practices_and_Design_Considerations#RBAC_and_Managing_Team_Level_Access_to_Resources -- https://success.docker.com/KBase/Docker_Reference_Architecture%3A_Securing_Docker_Datacenter_and_Security_Best_Practices#RBAC + +
    @@ -1489,11 +1589,11 @@ The information system prevents [Assignment: organization-defined software] from **Implemenation Details:**
    -
    +
    Universal Control Plane users can be assigned to one of a number of different permission levels. The permission level assigned to a specific user determines that user's ability to execute certain @@ -1507,7 +1607,11 @@ required privileged access to the host. Additional documentation regarding the various permission levels within UCP can be found at the following resource: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ + +
    @@ -1537,11 +1641,11 @@ The information system audits the execution of privileged functions. **Implemenation Details:**
    -
    +
    Docker Enterprise Edition logs privileged user events to standard log files. One can configure Docker Enterprise Edition to direct these event logs to a remote logging service such as an Elasticsearch, @@ -1551,8 +1655,12 @@ can refer the the directory service's logging mechanisms for auditing the events defined by this control. Supporting documentation regarding logging and monitoring can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.0/guides/monitor/ -- https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/configure-logs/ + +
    @@ -1582,20 +1690,24 @@ The information system prevents non-privileged users from executing privileged f **Implemenation Details:**
    -
    +
    One can control which users and teams can create and manipulate Docker Enterprise Edition resources. By default, no one can make changes to the cluster. Permissions can be granted and managed to enforce fine-grained access control. Supporting documentation for the configuration of this functionality can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.0/guides/user-management/ -- https://docs.docker.com/datacenter/dtr/2.1/guides/user-management/ -- https://docs.docker.com/datacenter/ucp/2.0/guides/user-management/permission-levels/ -- https://docs.docker.com/datacenter/dtr/2.1/guides/user-management/permission-levels/ + +
    @@ -1629,11 +1741,11 @@ The information system: **Implemenation Details:**
    -
    +
    When Docker Enterprise Edition is integrated to a directory service via LDAP, one can reference the functionality of the directory service to configure the enforcement of a limit to the number of conesecutive @@ -1642,6 +1754,7 @@ via LDAP, one can reference the functionality of the directory service to configure he ability to automatically lock/disable an account for a specified period of time after a consecutive invalid logon attempt limit is reached. +
    @@ -1759,15 +1872,16 @@ The information system limits the number of concurrent sessions for each [Assign **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be configured to limit the number of concurrent sessions for each account. These options can be found within the Universal Control Plane Admin Settings under the "Auth" section. +
    @@ -1801,17 +1915,18 @@ The information system: **Implemenation Details:**
    -
    +
    Per the requirements of AC-2 (5), Docker Enterprise Edition can be configured to enforce user session lifetime limits and renewal thresholds. These options can be found within the Universal Control Plane Admin Settings under the "Auth" section. Configurable options include the initial lifetime (in hours) of a user's session and the renewal threshold of a session (in hours). +
    @@ -1841,11 +1956,11 @@ The information system conceals, via the session lock, information previously vi **Implemenation Details:**
    -
    +
    Per the requirements of AC-2 (5), Docker Enterprise Edition can be configured to enforce user session lifetime limits and renewal thresholds. These options can be found within the Universal Control @@ -1854,6 +1969,7 @@ include the initial lifetime (in hours) of a user's session and the renewal threshold of a session (in hours). Upon the expiration of the configured session thresholds, a user will be locked out of his/her session. +
    @@ -1883,11 +1999,11 @@ The information system automatically terminates a user session after [Assignment **Implemenation Details:**
    -
    +
    Per the requirements of AC-2 (5), Docker Enterprise Edition can be configured to enforce user session lifetime limits and renewal thresholds. These options can be found within the Universal Control @@ -1896,6 +2012,7 @@ include the initial lifetime (in hours) of a user's session and the renewal threshold of a session (in hours). Upon the expiration of the configured session thresholds, a user will be locked out of his/her session. +
    @@ -1929,13 +2046,14 @@ The information system: **Implemenation Details:**
    -
    +
    Universal Control Plane includes a logout capability that allows a user to terminate his/her current session. +
    @@ -2114,21 +2232,23 @@ The information system monitors and controls remote access methods. **Implemenation Details:**
    -
    +
    Docker Enterprise Edition logs and controls all local and remote access events. In addition, auditing can be configured on the underlying operating system to meet this control. +
    -
    +
    Docker Enterprise Edition logs and controls all local and remote access events. In addition, auditing can be configured on the underlying operating system to meet this control. +
    @@ -2168,34 +2288,37 @@ The information system implements cryptographic mechanisms to protect the confid **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Trusted Registry are protected with Transport Layer Security (TLS) 1.2. This is included at both the HTTPS application layer for access to the DTR user interface and for command-line based connections to the registry. In addition to this, all communication to DTR is enforced by way of two-way mutual TLS authentication. +
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2. In addition to this, all communication to Docker Enterprise Edition is enforced by way of two-way mutual TLS authentication. +
    -
    +
    All remote access sessions to Universal Control Plane are protected with Transport Layer Security (TLS) 1.2. This is included at both the HTTPS application layer for access to the UCP user interface and for command-line based connections to the cluster. In addition to this, all communication to UCP is enforced by way of two-way mutual TLS authentication. +
    @@ -2235,30 +2358,33 @@ The information system routes all remote accesses through [Assignment: organizat **Implemenation Details:**
    -
    +
    A combination of managed load balancers, firewalls and access control lists, and virtual networking resources can be used to ensure traffic destined for Docker Trusted Registry replicas is routed through managed network access control points. +
    -
    +
    A combination of managed load balancers, firewalls and access control lists, and virtual networking resources can be used to ensure traffic destined for Docker Enterprise Edition is routed through managed network access control points. +
    -
    +
    A combination of managed load balancers, firewalls and access control lists, and virtual networking resources can be used to ensure traffic destined for Universal Control Plane managers and worker nodes is routed through managed network access control points. +
    @@ -2322,20 +2448,21 @@ The organization provides the capability to expeditiously disconnect or disable **Implemenation Details:**
    -
    +
    Built-in firewall technology in Docker Trusted Registry's underlying operating system can be used to force the disconnection of remote connections to the host. In addition, UCP slave nodes running Docker Trusted Registry replicas can be paused or drained, which subsequently stops sessions to the DTR replica. +
    -
    +
    Built-in firewall technology in Docker Enterprise Edition's underlying operating system can be used to force the disconnection of remote connections to the host. In addition, Docker Enterprise Edition provides the @@ -2344,14 +2471,16 @@ stops and/or removes sessions to the node. Individual services and/or applications running on Docker Enterprise Edition can also be stopped and/or removed. +
    -
    +
    Built-in firewall technology in Universal Control Plane's underlying operating system can be used to force the disconnection of remote connections to the host. In addition, UCP provides the option to pause or drain a node in the cluster, which subsequently stops and/or removes sessions to the node. Individual services and/or applications running on a UCP cluster can also be stopped and/or removed. +
    diff --git a/docs/compliance/reference/800-53/AU.md b/docs/compliance/reference/800-53/AU.md index dc6794d..ed57c10 100644 --- a/docs/compliance/reference/800-53/AU.md +++ b/docs/compliance/reference/800-53/AU.md @@ -70,21 +70,25 @@ The organization: **Implemenation Details:**
    -
    +
    All of the event types indicated by this control are logged by a combination of the backend ucp-controller service within Universal Control Plane and the backend services that make up Docker Trusted Registry. Additional documentation can be found at the following resource: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/ + +
    -
    +
    Both Universal Control Plane and Docker Trusted Registry backend service containers, all of which reside on Docker Enterprise Edition, log all of the event types indicated by this control (as explained by @@ -93,17 +97,24 @@ that reside on Docker Enterprise Edition can be configured to log data via an appropriate Docker logging driver. Instructions for configuring logging drivers can be found at the following resource: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    All of the event types indicated by this control are logged by the backend ucp-controller service within Universal Control Plane. In addition, each container created on a Universal Control Plane cluster logs event data. Supporting documentation for configuring UCP logging can be referenced at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -158,14 +169,14 @@ The information system generates audit records containing information that estab **Implemenation Details:**
    -
    +
    Docker Trusted Registry generates all of the audit record information indicated by this control. A sample audit event has been provided below: @@ -174,8 +185,9 @@ below: based auth suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth ok","username":"dockeruser"} +
    -
    +
    Both Universal Control Plane and Docker Trusted Registry are pre-configured to take advantage of Docker Enterprise Edition's built-in logging mechanisms. A sample audit event recorded by Docker @@ -188,10 +200,13 @@ ok","username":"dockeruser"} Additional documentation can be referenced at the following resource: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane generates all of the audit record information indicated by this control. A sample audit event has been provided below: @@ -200,8 +215,9 @@ below: based auth suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth ok","username":"dockeruser"} +
    -
    +
    Docker Enterprise Edition generates all of the audit record information indicated by this control. A sample audit event has been provided below: @@ -210,6 +226,7 @@ provided below: based auth suceeded","remote_addr":"192.168.33.1:55905","time":"2016-11-09T22:41:01Z","type":"auth ok","username":"dockeruser"} +
    @@ -249,13 +266,13 @@ The information system generates audit records containing the following addition **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -263,26 +280,37 @@ logging stack can subsequently be used to interpolate the information defined by this control from the logged audit records. Additional information can be found at the following resource: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be used to interpolate the information defined by this control from the logged audit records. Additional documentation can be found at the following resource: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be used to interpolate the information defined by this control from the logged audit records. Additional documentation can be found at the following resource: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -322,13 +350,13 @@ The information system provides centralized management and configuration of the **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -336,26 +364,37 @@ logging stack can subsequently be used to interpolate the information defined by this control from the logged audit records. Additional information can be found at the following resource: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be used to interpolate the information defined by this control from the logged audit records. Additional documentation can be found at the following resource: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be used to interpolate the information defined by this control from the logged audit records. Additional documentation can be found at the following resource: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -419,13 +458,13 @@ The information system: **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -433,9 +472,13 @@ logging stack can subsequently be configured to alert individuals in the event of log processing failures. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can be used to interpolate the information defined by this @@ -443,16 +486,23 @@ control and also be configured to alert on any audit processing failures. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to alert individuals in the event of log processing failures. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -492,13 +542,13 @@ The information system provides a warning to [Assignment: organization-defined p **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -506,25 +556,36 @@ logging stack can subsequently be configured to warn the organization when the allocated log storage is full. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be configured to warn the organization when the allocated log storage is full. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to warn the organization when the allocated log storage is full. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -564,13 +625,13 @@ The information system provides an alert in [Assignment: organization-defined re **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -578,25 +639,36 @@ logging stack can subsequently be configured to warn the organization when audit log failures occur. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be configured to warn the organization when audit log failures occur. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to warn the organization when audit log failures occur. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -690,13 +762,13 @@ The information system provides the capability to centrally review and analyze a **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -704,25 +776,36 @@ organization can subsequently centrally review and analyze all of the Docker EE audit records. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The organization can subsequently centrally review and analyze all of the Docker EE audit records. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The organization can subsequently centrally review and analyze all of the Docker EE audit records. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -826,13 +909,13 @@ The information system provides an audit reduction and report generation capabil **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -840,33 +923,44 @@ logging stack can subsequently be used to facilitate the audit reduction and report generation requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/The underlying operating system chosen to support Docker Trusted +The underlying operating system chosen to support Docker Trusted Registry should be certified to ensure that logs are not altered during generation and transmission to a remote logging stack. +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be used to facilitate the audit reduction and report generation requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ The underlying operating system chosen to support Docker Enterprise Edition should be certified to ensure that logs are not altered during generation and transmission to a remote logging stack. +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be used to facilitate the audit reduction and report generation requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/The underlying operating system chosen to support Universal Control +The underlying operating system chosen to support Universal Control Plane should be certified to ensure that logs are not altered during generation and transmission to a remote logging stack. +
    @@ -906,13 +1000,13 @@ The information system provides the capability to process audit records for even **Implemenation Details:**
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack, which in turn, sends the Docker Trusted Registry backend container audit records to the remote logging stack. The @@ -920,25 +1014,36 @@ logging stack can subsequently be configured to parse information by organization-defined audit fields. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. The logging stack can subsequently be configured to parse information by organization-defined audit fields. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to log data to a remote logging stack. The logging stack can subsequently be configured to parse information by organization-defined audit fields. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ + +
    @@ -992,20 +1097,21 @@ The information system: **Implemenation Details:**
    -
    +
    Docker Trusted Registry uses the system clock of the underlying operating system on which it runs. This behavior cannot be modified.The underlying operating system on which Docker Trusted Registry runs should be configured such that its system clock uses Coordinated Universal Time (UTC) as indicated by this control. Refer to the operating system's instructions for doing so. +
    -
    +
    Docker Enterprise Edition uses the system clock of the underlying operating system on which it runs. This behavior cannot be modified. The underlying operating system on which Docker Enterprise Edition @@ -1013,13 +1119,15 @@ runs should be configured such that its system clock uses Coordinated Universal Time (UTC) as indicated by this control. Refer to the operating system's instructions for doing so. +
    -
    +
    Universal Control Plane uses the system clock of the underlying operating system on which it runs. This behavior cannot be modified.The underlying operating system on which Universal Control Plane runs should be configured such that its system clock uses Coordinated Universal Time (UTC) as indicated by this control. Refer to the operating system's instructions for doing so. +
    @@ -1063,13 +1171,13 @@ The information system: **Implemenation Details:**
    -
    +
    The underlying operating system on which Docker Trusted Registry runs should be configured such that its system clock compares itself with an authoritative time source as indicated by this control. This can be @@ -1081,8 +1189,9 @@ any time the time difference exceeds that of the organization-defined time period. This can be accomplished by utilizing the Network Time Protocol (NTP). Refer to the operating system's instructions for doing so. +
    -
    +
    The underlying operating system on which Docker Enterprise Edition runs should be configured such that its system clock compares itself with an authoritative time source as indicated by this control. This can be @@ -1096,8 +1205,9 @@ organization-defined time period. This can be accomplished by utilizing the Network Time Protocol (NTP). Refer to the operating system's instructions for doing so. +
    -
    +
    The underlying operating system on which Universal Control Plane runs should be configured such that its system clock compares itself with an authoritative time source as indicated by this control. This can be @@ -1109,6 +1219,7 @@ any time the time difference exceeds that of the organization-defined time period. This can be accomplished by utilizing the Network Time Protocol (NTP). Refer to the operating system's instructions for doing so. +
    @@ -1158,13 +1269,13 @@ The information system protects audit information and audit tools from unauthori **Implemenation Details:**
    -
    +
    By default, Docker Trusted Registry is configured to use the underlying logging capabilities of Docker Enterprise Edition. As such, on the underlying Linux operating system, only root and sudo users and @@ -1175,8 +1286,9 @@ of the system should it be decided that logs be sent to a remote logging stack. In this case, the organization is responsible for configuring the remote logging stack per the provisions of this control. +
    -
    +
    On the underlying Linux operating system supporting Docker Enterprise Edition, only root and sudo users and users that have been added to the "docker" group have the ability to access the logs generated by @@ -1187,16 +1299,13 @@ responsible for configuring the chosen logging stack per the provisions of this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ -In addition, for Linux operating systems supporting Docker Enterprise -Edition that use the systemd daemon, it is imperative that the Journal -is secured per the requirements of this control. The same applies for -Linux operating systems supporting Docker Enterprise Edition that -instead use upstart. +
    -
    +
    By default, Universal Control Plane is configured to use the underlying logging capabilities of Docker Enterprise Edition. As such, on the underlying Linux operating system, only root and sudo users and @@ -1207,6 +1316,7 @@ of the system should it be decided that logs be sent to a remote logging stack. In this case, the organization is responsible for configuring the remote logging stack per the provisions of this control. +
    @@ -1256,40 +1366,45 @@ The information system backs up audit records [Assignment: organization-defined **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, acan be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -The logging stack can subsequently be configured to back up audit -records per the schedule defined by this control. +
    -
    +
    Docker Enterprise Edition can be configured to use a logging driver that can subsequently meet the backup requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -The logging stack can subsequently be configured to back up audit -records per the schedule defined by this control. +
    @@ -1324,30 +1439,34 @@ The information system implements cryptographic mechanisms to protect the integr **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, acan be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -The logging stack can subsequently be configured to meet the -encryption mechanisms required by this control. +
    -
    +
    Docker Enterprise Edition can be configured to use a logging driver that can subsequently meet the encryption mechanisms required by this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    @@ -1407,11 +1526,11 @@ The information system protects against an individual (or process acting on beha **Implemenation Details:**
    -
    +
    Docker Enterprise Edition includes functionality known as Docker Content Trust which allows one to cryptographically sign Docker images. It enforces client-side signing and verification of image tags @@ -1425,8 +1544,11 @@ manipulated; thus supproting the non-repudiation requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/security/trust/content_trust/ +
    @@ -1518,13 +1640,13 @@ The organization retains audit records for [Assignment: organization-defined tim **Implemenation Details:**
    -
    +
    The organization will be responsible for meeting the requirements of this control. To assist with these requirements, Docker Trusted Registry resides as an Application on a Universal Control Plane @@ -1532,31 +1654,36 @@ cluster, and as such, can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -This logging stack can subsequently be configured to retain logs for -the duration required by this control. +
    -
    +
    The organization will be responsible for meeting the requirements of this control. To assist with these requirements, Docker Enterprise Edition can be configured to use a logging driver that stores data in a location for the duration specified by this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    The organization will be responsible for meeting the requirements of this control. To assist with these requirements, Universal Control Plane can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -This logging stack can subsequently be configured retain logs for the -duration required by this control. +
    @@ -1611,29 +1738,28 @@ The information system: **Implemenation Details:**
    -
    +
    All of the event types indicated by AU-2 a. are logged by a combination of the backend services within Universal Control Plane and Docker Trusted Registry. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.1/guides/monitor-troubleshoot/ - -The underlying Linux operating system supporting DTR can be configured -to audit Docker-specific events with the auditd daemon. Refer to the -specific Linux distribution in use for instructions on configuring -this service.Using auditd on the Linux operating system supporting DTR, the +Using auditd on the Linux operating system supporting DTR, the organization can configure audit rules to select which Docker-specific events are to be audited. Refer to the specific Linux distribution in use for instructions on configuring this service. +
    -
    +
    Both Universal Control Plane and Docker Trusted Registry backend service containers, all of which reside on Docker Enterprise Edition, log all of the event types indicated by this AU-2 a. These and other @@ -1641,33 +1767,30 @@ application containers that reside on Docker Enterprise Edition can be configured to log data via an appropriate Docker logging driver. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ - -The underlying Linux operating system supporting Docker Enterprise -Edition can be configured to audit Docker-specific events with the -auditd daemon. Refer to the specific Linux distribution in use for -instructions on configuring this service. Using auditd on the Linux operating system supporting CS Docker Engine, the organization can configure audit rules to select which Docker-specific events are to be audited. Refer to the specific Linux distribution in use for instructions on configuring this service. +
    -
    +
    All of the event types indicated by AU-2 a. are logged by the backend ucp-controller service within Universal Control Plane. In addition, each container created on a Universal Control Plane cluster logs event data. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ - -The underlying Linux operating system supporting UCP can be configured -to audit Docker-specific events with the auditd daemon. Refer to the -specific Linux distribution in use for instructions on configuring -this service.Using auditd on the Linux operating system supporting UCP, the +Using auditd on the Linux operating system supporting UCP, the organization can configure audit rules to select which Docker-specific events are to be audited. Refer to the specific Linux distribution in use for instructions on configuring this service. +
    @@ -1707,25 +1830,25 @@ The information system compiles audit records from [Assignment: organization-def **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, and as such, can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -This logging stack can subsequently be used to compile audit records -in to a system-wide audit trail that is time-correlated per the -requirements of this control. +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. This logging stack can subsequently be used to compile audit records in to @@ -1733,19 +1856,22 @@ a system-wide audit trail that is time-correlated per the requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -This logging stack can subsequently be used to compile audit records -in to a system-wide audit trail that is time-correlated per the -requirements of this control. +
    @@ -1795,42 +1921,47 @@ The information system provides the capability for [Assignment: organization-def **Implemenation Details:**
    -
    +
    Docker Trusted Registry resides as an Application on a Universal Control Plane cluster, and as such, can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -This logging stack can subsequently be used to meet the requirements -of this control. +
    -
    +
    Docker Enterprise Edition can be configured with various logging drivers to send audit events to an external logging stack. This logging stack can subsequently be used to meet the requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/engine/admin/logging/overview/ +
    -
    +
    Universal Control Plane can be configured to send logs to a remote logging stack. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/store-logs-in-an-external-system/ -This logging stack can subsequently be used to meet the requirements -of this control. +
    diff --git a/docs/compliance/reference/800-53/CA.md b/docs/compliance/reference/800-53/CA.md index 8d52a15..85a3184 100644 --- a/docs/compliance/reference/800-53/CA.md +++ b/docs/compliance/reference/800-53/CA.md @@ -219,20 +219,23 @@ The organization develops a continuous monitoring strategy and implements a cont **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the continuous monitoring requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    diff --git a/docs/compliance/reference/800-53/CM.md b/docs/compliance/reference/800-53/CM.md index 8b913fb..a12268a 100644 --- a/docs/compliance/reference/800-53/CM.md +++ b/docs/compliance/reference/800-53/CM.md @@ -44,20 +44,23 @@ The organization: **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -87,20 +90,23 @@ The organization develops, documents, and maintains under configuration control, **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -135,20 +141,23 @@ The organization reviews and updates the baseline configuration of the informati **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -178,11 +187,11 @@ The organization employs automated mechanisms to maintain an up-to-date, complet **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. CIS regularly @@ -193,10 +202,13 @@ Edition system configuration to ensure that the secure baseline configurations have been applied in an automated fashion. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -226,11 +238,11 @@ The organization retains [Assignment: organization-defined previous versions of **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management requirements of this control. CIS regularly @@ -242,10 +254,13 @@ configurations have been applied in an automated fashion and can be rolled back as required by this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -308,20 +323,23 @@ The organization: **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management change control requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -359,11 +377,11 @@ The organization employs automated mechanisms to: **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management change control requirements of this control. @@ -373,10 +391,13 @@ system configuration to ensure that the secure baseline configurations have been applied in an automated fashion. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -406,11 +427,11 @@ The organization tests, validates, and documents changes to the information syst **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configurmation management change control requirements of this control. @@ -420,10 +441,13 @@ system configuration to ensure that the secure baseline configurations have been applied in an automated fashion. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -483,20 +507,23 @@ The organization ensures that cryptographic mechanisms used to provide [Assignme **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the cryptography management requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -571,29 +598,37 @@ The information system enforces access restrictions and supports auditing of the **Implemenation Details:**
    -
    +
    Role-based access control can be configured within Docker Trusted Registry to meet the requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Organizations_.E2.80.94_RBAC + +
    -
    +
    Role-based access control can be configured within Universal Control Plane to meet the requirements of this control. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#RBAC_and_Managing_Team_Level_Access_to_Resources -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#RBAC + +
    @@ -623,20 +658,23 @@ The organization reviews information system changes [Assignment: organization-de **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the system change requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -676,13 +714,13 @@ The information system prevents the installation of [Assignment: organization-de **Implemenation Details:**
    -
    +
    Docker Content Trust is a capability provided by Docker Enterprise Edition that enforces client-side signing and verification of Docker image tags. It provides the ability to use digital signatures for data @@ -696,10 +734,14 @@ When installing Docker Trusted Registry, you should enable Docker Content Trust and subsequently pull the the signed DTR image tag. Additional information can be found at teh following resources: -- https://docs.docker.com/engine/security/trust/content_trust/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/manage-trusted-repositories/ + +
    -
    +
    Before installing Docker Enterprise Edition, ensure that your supporting Linux operating system's packager manager supports package signature verification and that it is enabled. It is also required @@ -718,10 +760,13 @@ Docker Content Trust in Docker Enterprise Edition you can enforce the use of signed Docker images. Additional information can be found at the following resources: -- https://docs.docker.com/engine/security/trust/content_trust/ +
    -
    +
    Docker Content Trust is a capability provided by Docker Enterprise Edition that enforces client-side signing and verification of Docker image tags. It provides the ability to use digital signatures for data sent @@ -734,9 +779,13 @@ When configuring Universal Control Plane, you should enforce applications to only use Docker images signed by trusted UCP users within your organization. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/manage-trusted-repositories/ -- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/continuous-integration/ + +
    @@ -826,30 +875,33 @@ The organization employs automated mechanisms to centrally manage, apply, and ve **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can incorporate the use of an external configuration management system to meet the requirements of this control. +
    -
    +
    The organization is responsible for meeting the requirements of this control. The organization can incorporate the use of an external configuration management system to meet the requirements of this control. +
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can incorporate the use of an external configuration management system to meet the requirements of this control. +
    @@ -927,32 +979,35 @@ The information system prevents program execution in accordance with [Selection **Implemenation Details:**
    -
    +
    The organization can define a list of allowed base Docker images and make them available via Docker Trusted Registry. The organization can also prevent users from being able to pull Docker images from untrusted sources. +
    -
    +
    In order to restrict which Docker images can be used to deploy applications to Docker Enterprise Edition, the organization must define a list of allowed base Docker images and make them available via Docker Trusted Registry. The organization must also prevent users from being able to pull Docker images from untrusted sources. +
    -
    +
    In order to restrict which Docker images can be used to deploy applications to Universal Control Plane, the organization must define a list of allowed base Docker images and make them available via Docker Trusted Registry. The organization must also prevent users from being able to pull Docker images from untrusted sources. +
    @@ -1022,13 +1077,13 @@ The organization: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can define a list of allowed base Docker images and make them available @@ -1039,8 +1094,9 @@ configure its systems to ensure that only approved Docker images are stored in Docker Trusted Registry. This can be accomplished by using Docker Content Trust to sign Docker images which can subsequently be stored in Docker Trusted Registry. +
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements and in order to restrict which Docker images can be used to deploy applications to CS Docker @@ -1049,8 +1105,9 @@ images and make them available via Docker Trusted Registry. The organization must also prevent users from being able to pull Docker images from untrusted sources. +
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements and in order to restrict which Docker images can be used to deploy applications to Universal @@ -1066,7 +1123,11 @@ Docker images, and configure UCP to enforce only signed images from specific Teams at runtime. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/user/content-trust/ + +
    @@ -1221,20 +1282,23 @@ The organization develops, documents, and implements a configuration management **Implemenation Details:**
    -
    +
    The CIS Docker Benchmark can be used as a baseline for securing Docker Enterprise Edition and for helping the organization meet the configuration management plan requirements of this control. Additional information can be found at the following resources: -- https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.13.0_Benchmark_v1.0.0.pdf -- http://www.cisecurity.org/critical-controls/tools/CISControlsv4_MaptoNIST800-53rev4.xlsx -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Controls_from_the_CIS_Benchmark +
    @@ -1304,16 +1368,17 @@ The organization: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can define a list of allowed base Docker images and make them available via Docker Trusted Registry. The organization can also prevent users from being able to pull Docker images from untrusted sources. +
    @@ -1343,16 +1408,17 @@ The information system alerts [Assignment: organization-defined personnel or rol **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, the organization can define a list of allowed base Docker images and make them available via Docker Trusted Registry. The organization can also prevent users from being able to pull Docker images from untrusted sources. +
    diff --git a/docs/compliance/reference/800-53/CP.md b/docs/compliance/reference/800-53/CP.md index 32d71c7..d258adb 100644 --- a/docs/compliance/reference/800-53/CP.md +++ b/docs/compliance/reference/800-53/CP.md @@ -525,28 +525,36 @@ The information system implements transaction recovery for systems that are tran **Implemenation Details:**
    -
    +
    Docker Trusted Registry maintains its cluster state via an internal key-value store. This, and other DTR transactions can be backed up and recovered. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/backups-and-disaster-recovery/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#DTR_Backup + +
    -
    +
    Universal Control Plane maintains its cluster state via an internal key-value store. This, and other UCP transactions can be backed up and recovered. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/backups-and-disaster-recovery/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#UCP_Backup + +
    diff --git a/docs/compliance/reference/800-53/IA.md b/docs/compliance/reference/800-53/IA.md index cec0a4b..2ce4878 100644 --- a/docs/compliance/reference/800-53/IA.md +++ b/docs/compliance/reference/800-53/IA.md @@ -54,11 +54,11 @@ The information system uniquely identifies and authenticates organizational user **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be configured to identify and authenticate users via it's integrated support for LDAP. Users and groups managed within the organization's LDAP directory service (e.g. Active @@ -69,6 +69,7 @@ synchronized via LDAP. When a user is added/removed to/from the LDAP group, that same user is automatically added/removed to/from the UCP and DTR team. Instructions for configuring LDAP integration can be found at https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/integrate-with-ldap/. +
    @@ -148,32 +149,35 @@ The organization requires individuals to be authenticated with an individual aut **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, Docker Trusted Registry requires individual users to be authenticated in order to gain access to the system. Any permissions granted to the team(s) that which the user is a member are subsequently applied. +
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, Universal Control Plane requires individual users to be authenticated in order to gain access to the system. Any permissions granted to the team(s) that which the user is a member are subsequently applied. +
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, Docker Enterprise Edition requires individual users to be authenticated in order to gain access to the system. Any permissions granted to the team(s) that which the user is a member are subsequently applied. +
    @@ -223,15 +227,16 @@ The information system implements replay-resistant authentication mechanisms for **Implemenation Details:**
    -
    +
    Docker Enterprise Edition integrates with LDAP for authenticating users to an external directory service. You should configure your external directory service for ensuring that you are protected against replay attacks. +
    @@ -261,15 +266,16 @@ The information system implements replay-resistant authentication mechanisms for **Implemenation Details:**
    -
    +
    Docker Enterprise Edition integrates with LDAP for authenticating users to an external directory service. You should configure your external directory service for ensuring that you are protected against replay attacks. +
    @@ -349,13 +355,13 @@ The information system uniquely identifies and authenticates [Assignment: organi **Implemenation Details:**
    -
    +
    Docker Trusted Registry replicas reside on Universal Control Plane worker nodes. In order for UCP worker nodes to join a Universal Control Plane cluster, they must be identified and authenticated via a @@ -365,20 +371,26 @@ cluster and when mutual TLS authentication between the UCP worker and manager nodes has been established. Reference documentation can be found at https://docs.docker.com/datacenter/dtr/2.1/guides/install/#/step-7-join-replicas-to-the-cluster. +
    -
    +
    In order for other CS Engine nodes to be able to join a cluster managed by Universal Control Plane, they must be identified and authenticated via either a manager or worker token. Use of the token includes trust on first use mutual TLS. +
    -
    +
    In order for nodes to join a Universal Control Plane cluster, they must be identified and authenticated via either a manager or worker token. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/scale-your-cluster/ + +
    @@ -449,11 +461,11 @@ The organization manages information system identifiers by: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -470,6 +482,7 @@ directory service integrated with Docker Enterprise Edition via LDAP can be configured to prevent the reuse of user identifiers for a specified period of time. Refer to your directory service's documentation for configuring this. +
    @@ -529,17 +542,18 @@ The organization manages individual identifiers by uniquely identifying each ind **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be configured to uniquely identify each individual according to the requirements of this control. Refer to your directory service's documentation for configuring this. +
    @@ -611,11 +625,11 @@ The organization manages information system authenticators by: **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be @@ -665,6 +679,7 @@ configured to change authenticators for group or role accounts when membership to those groups or roles changes according to the requirements of this control. Refer to your directory service's documentation for configuring this. +
    @@ -702,11 +717,11 @@ The information system, for password-based authentication: **Implemenation Details:**
    -
    +
    An external directory service integrated with Docker Enterprise Edition via LDAP can be configured to enforce minimum password complexity requirements. Refer to your directory service's @@ -731,6 +746,7 @@ Edition via LDAP can be configured to enforce the requirement to change initial/temporary passwords upon first login according to the requirements of this control. Refer to your directory service's documentation for configuring this. +
    @@ -776,13 +792,13 @@ The information system, for PKI-based authentication: **Implemenation Details:**
    -
    +
    Docker Trusted Registry includes a Docker volume which holds the root key material for the DTR root CA that issues certificats. In addition Universal Control Plane contains two, built-in root certificate @@ -813,8 +829,9 @@ https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/#/replace-the-se In addition, Docker Trusted Registry's server certificates can be replaced by following the instructions at https://docs.docker.com/datacenter/dtr/2.1/guides/configure/. +
    -
    +
    Universal Control Plane contains two, built-in root certificate authorities. One CA is used for signing client bundles generated by users. The other CA is used for TLS communication between UCP cluster @@ -835,9 +852,13 @@ Administrator or the user themselves. The cluster's internal certificates can also be revoked and updated. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.0/guides/configuration/#/replace-the-server-certificates + +
    -
    +
    All users within a Docker Enterprise Edition cluster can create a client certificate bundle for authenticating in to the cluster from the Docker client tooling. When a user attempts to authenticate in to @@ -857,6 +878,7 @@ the Docker client tooling. When a user attempts to authenticate in to the Docker cluster, it is up to the underlying operating system hosting Docker Enterprise Edition to ensure that it implements a local cache of revocation data per the requirements of this control. +
    @@ -896,17 +918,18 @@ The organization employs automated tools to determine if password authenticators **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be configured with automation to ensure that password authenticators meet strength requirements as defined by this control. Refer to your directory service's documentation for configuring this. +
    @@ -946,16 +969,17 @@ The organization protects authenticators commensurate with the security category **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be configured to protect authenticators as required by this control. Refer to your directory service's documentation for configuring this. +
    @@ -1080,20 +1104,22 @@ The information system obscures feedback of authentication information during th **Implemenation Details:**
    -
    +
    Docker Trusted Registry obscures all feedback of authentication information during the authentication process. This includes both authentication via the web UI and the CLI. +
    -
    +
    Universal Control Plane obscures all feedback of authentication information during the authentication process. This includes both authentication via the web UI and the CLI. +
    @@ -1128,22 +1154,24 @@ The information system implements mechanisms for authentication to a cryptograph **Implemenation Details:**
    -
    +
    All access to Docker Trusted Registry is protected with Transport Layer Security (TLS) 1.2 with the AES-GCM cipher. This includes both SSH access to the individual UCP nodes and CLI-/web-based access to the UCP management functions with mutual TLS and HTTPS respectively. +
    -
    +
    All access to Universal Control Plane is protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This includes both SSH access to the individual UCP nodes and CLI-/web-based access to the UCP management functions with mutual TLS and HTTPS respectively. +
    @@ -1178,20 +1206,22 @@ The information system uniquely identifies and authenticates non-organizational **Implemenation Details:**
    -
    +
    Users managed by Docker Trusted Registry can be grouped per the requirements of the organization and as defined by this control. This can include groupings for non-organizational users. +
    -
    +
    Users managed by Universal Control Plane can be grouped per the requirements of the organization and as defined by this control. This can include groupings for non-organizational users. +
    @@ -1231,15 +1261,16 @@ The information system accepts only FICAM-approved third-party credentials. **Implemenation Details:**
    -
    +
    An external directory service integrated with Docker Enterprise Edition via LDAP can be configured to meet the FICAM requirements as indicated by this control. Refer to your directory service's documentation for configuring this. +
    @@ -1269,17 +1300,18 @@ The organization employs only FICAM-approved information system components in [A **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be configured to meet the FICAM requirements as indicated by this control. Refer to your directory service's documentation for configuring this. +
    @@ -1309,17 +1341,18 @@ The information system conforms to FICAM-issued profiles. **Implemenation Details:**
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with meeting these requirements, an external directory service integrated with Docker Enterprise Edition via LDAP can be configured to meet the FICAM requirements as indicated by this control. Refer to your directory service's documentation for configuring this. +
    diff --git a/docs/compliance/reference/800-53/RA.md b/docs/compliance/reference/800-53/RA.md index cbe660f..ed98902 100644 --- a/docs/compliance/reference/800-53/RA.md +++ b/docs/compliance/reference/800-53/RA.md @@ -114,22 +114,24 @@ The organization employs vulnerability scanning tools that include the capabilit **Implemenation Details:**
    -
    +
    To assist the orgnization in meeting the requirements of this control, the Docker Security Scanning (DSS) component of Docker Trusted Registry (DTR) that is included with the Docker Enterprise Edition Advanced tier can be used to scan Docker images for vulnerabilities against known vulnerability databases. Scans can be triggered either manually or when Docker images are pushed to DTR. +
    -
    +
    The Docker Security Scanning tool allows for the scanning of Docker images in Docker Trusted Registry against the Common Vulnerabilities and Exposures (CVE) dictionary. +
    @@ -159,11 +161,11 @@ The organization updates the information system vulnerabilities scanned [Selecti **Implemenation Details:**
    -
    +
    To assist the orgnization in meeting the requirements of this control, the Docker Security Scanning component of Docker Trusted Registry (DTR) that is included with the Docker Enterprise Edition @@ -172,8 +174,12 @@ that it scans. DSS is also synchronized to an aggregate listing of known vulnerabilities that is compiled from both the MITRE and NVD CVE databases. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Image_Scanning + +
    @@ -208,22 +214,24 @@ The organization employs vulnerability scanning procedures that can identify the **Implemenation Details:**
    -
    +
    To assist the orgnization in meeting the requirements of this control, the Docker Security Scanning component of Docker Trusted Registry (DTR) that is included with the Docker Enterprise Edition Advanced tier identifies vulnerabilities in a Docker image and marks them against predefined criticality levels; critical major and minor. +
    -
    +
    The Docker Security Scanning tool allows for the scanning of Docker images in Docker Trusted Registry against the Common Vulnerabilities and Exposures (CVE).' dictionary +
    @@ -263,14 +271,15 @@ The information system implements privileged access authorization to [Assignment **Implemenation Details:**
    -
    +
    Only the appropriate users that the organization has provided Docker Trusted Registry access to are able to view and interpret vulnerability scan results. +
    @@ -300,16 +309,17 @@ The organization employs automated mechanisms to compare the results of vulnerab **Implemenation Details:**
    -
    +
    For each Docker image pushed to Docker Trusted Registry at a given time, Docker Security Scaninng retains a list of vulnerabilities detected. The DTR API can be queried to retrieve the vulnerability scan results over a period of time for a given Docker image such that the results can be compared per the requirements of this control. +
    diff --git a/docs/compliance/reference/800-53/SA.md b/docs/compliance/reference/800-53/SA.md index dea60f4..6f5762d 100644 --- a/docs/compliance/reference/800-53/SA.md +++ b/docs/compliance/reference/800-53/SA.md @@ -341,13 +341,13 @@ The organization requires the developer of the information system, system compon **Implemenation Details:**
    -
    +
    Docker Content Trust gives you the ability to verify both the integrity and the publisher of all the data received from a Docker Trusted Registry over any channel. It allows operations with a remote @@ -357,8 +357,9 @@ sent to and receive from remote DTR instances. These signatures allow client-side verification of the integrity and publisher of specific image tags. Docker Trusted Registry includes an integrated imaging signing service. +
    -
    +
    Docker Content Trust gives you the ability to verify both the integrity and the publisher of all the data received from a Docker Trusted Registry over any channel. It allows operations with a remote @@ -368,8 +369,9 @@ sent to and receive from remote DTR instances. These signatures allow client-side verification of the integrity and publisher of specific image tags. +
    -
    +
    The organization is responsible for meeting the requirements of this control. To assist with these requirements, Docker Content Trust gives you the ability to verify both the integrity and the publisher of all @@ -382,7 +384,11 @@ integrity and publisher of specific image tags. Universal Control Plane can be configured to only run trusted and signed images. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/admin/configure/run-only-the-images-you-trust/ + +
    diff --git a/docs/compliance/reference/800-53/SC.md b/docs/compliance/reference/800-53/SC.md index 20b82c8..32ad221 100644 --- a/docs/compliance/reference/800-53/SC.md +++ b/docs/compliance/reference/800-53/SC.md @@ -59,30 +59,38 @@ The information system separates user functionality (including user interface se **Implemenation Details:**
    -
    +
    Docker Trusted Registry is made up of a number of backend services that provide for both user functionality (including user interface services) and system management functionality. Each of these services operates independently of one another. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/dtr/2.2/guides/architecture/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#Docker_Trusted_Registry + +
    -
    +
    Universal Control Plane is made up of a number of backend services that provide for both user functionality (including user interface services) and system management functionality. Each of these services operates independently of one another. Additional information can be found at the following resources: -- https://docs.docker.com/datacenter/ucp/2.1/guides/architecture/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations#Universal_Control_Plane + +
    @@ -442,11 +450,11 @@ The information system provides the capability to dynamically isolate/segregate **Implemenation Details:**
    -
    +
    Docker Enterprise Edition is designed to run application containers whose content can be completely isolated/segregated from other application containers within the same node/cluster. This is @@ -454,10 +462,13 @@ accomplished by way of Linux kernel primitives and various security profiles that can be applied to the underlying host OS. Additional information can be found at the following resources: -- https://docs.docker.com/engine/security/security/ -- https://docs.docker.com/engine/userguide/networking/overlay-security-model/ -- https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Securing_Docker_EE_and_Security_Best_Practices#Engine_and_Node_Security +
    @@ -617,17 +628,18 @@ The organization produces, controls, and distributes symmetric cryptographic key **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be installed on the following operating systems: CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and SUSE Linux Enterprise 12+. In order to meet the requirements of this control, reference the chosen operating system's documentation to ensure it is configured in FIPS mode. +
    @@ -667,17 +679,18 @@ The information system implements [Assignment: organization-defined cryptographi **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be installed on the following operating systems: CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and SUSE Linux Enterprise 12+. In order to meet the requirements of this control, reference the chosen operating system's documentation to ensure it is configured in FIPS mode. +
    @@ -914,34 +927,37 @@ The information system protects the authenticity of communications sessions. **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Trusted Registry are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the DTR user interface and for command-line based connections to the registry. In addition to this, all communication to DTR is enforced by way of two-way mutual TLS authentication. +
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In addition to this, all communication to and between Docker Enterprise Editions is enforced by way of two-way mutual TLS authentication. +
    -
    +
    All remote access sessions to Universal Control Plane are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the UCP user interface and for command-line based connections to the cluster. In addition to this, all communication to UCP is enforced by way of two-way mutual TLS authentication. +
    @@ -971,13 +987,14 @@ The information system invalidates session identifiers upon user logout or other **Implemenation Details:**
    -
    +
    Docker Enterprise Edition invalidates session identifiers upon user logout per the requirements of this control. +
    @@ -1067,11 +1084,11 @@ The information system protects the [Selection (one or more): confidentiality; i **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In addition to this, all communication to/from and between Docker @@ -1080,6 +1097,7 @@ authentication. All Swarm Mode manager nodes in a Docker Enterprise Edition cluster store state metadata and user secrets encrypted at rest using the AES GCM cipher. +
    @@ -1119,34 +1137,37 @@ The information system implements cryptographic mechanisms to prevent unauthoriz **Implemenation Details:**
    -
    +
    All remote access sessions to Docker Trusted Registry are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the DTR user interface and for command-line based connections to the registry. In addition to this, all communication to DTR is enforced by way of two-way mutual TLS authentication. +
    -
    +
    All remote access sessions to Docker Enterprise Edition are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. In addition to this, all communication to and between Docker Enterprise Editions is enforced by way of two-way mutual TLS authentication. +
    -
    +
    All remote access sessions to Universal Control Plane are protected with Transport Layer Security (TLS) 1.2 with the AES GCM cipher. This is included at both the HTTPS application layer for access to the UCP user interface and for command-line based connections to the cluster. In addition to this, all communication to UCP is enforced by way of two-way mutual TLS authentication. +
    diff --git a/docs/compliance/reference/800-53/SI.md b/docs/compliance/reference/800-53/SI.md index 784d6f5..374b80d 100644 --- a/docs/compliance/reference/800-53/SI.md +++ b/docs/compliance/reference/800-53/SI.md @@ -155,17 +155,18 @@ The information system automatically updates malicious code protection mechanism **Implemenation Details:**
    -
    +
    Docker Enterprise Edition packages for supported underlying operating systems can only be obtained from Docker, Inc. The Docker EE repositories from which Docker EE packages are obtained are protected with official GPG keys. Each Docker package is also validated with a signature definition. +
    @@ -866,30 +867,33 @@ The information system: **Implemenation Details:**
    -
    +
    All error messages generated via the configured logging mechanism of Docker Trusted Registry are displayed such that they meet the requirements of this control. Only users that are authorized the appropriate level of access can view these error messages. +
    -
    +
    All error messages generated via the logging mechanisms of the Docker Enterprise Edition engine are displayed such that they meet the requirements of this control. Only users that are authorized the appropriate level of access can view these error messages. +
    -
    +
    All error messages generated via the configured logging mechanism of Universal Control Plane are displayed such that they meet the requirements of this control. Only users that are authorized the appropriate level of access can view these error messages. +
    @@ -1017,11 +1021,11 @@ The information system implements [Assignment: organization-defined security saf **Implemenation Details:**
    -
    +
    Docker Enterprise Edition can be installed on the following operating systems: CentOS 7.1+, Red Hat Enterprise Linux 7.0+, Ubuntu 14.04 LTS+, and SUSE Linux Enterprise 12+. In order to meet the requirements of this @@ -1029,6 +1033,7 @@ control, reference the chosen operating system's security documentation for information regarding the protection of memory from unauthorized code execution. +
    diff --git a/docs/generator/generator.go b/docs/generator/generator.go index ecb677b..2f58adb 100644 --- a/docs/generator/generator.go +++ b/docs/generator/generator.go @@ -112,7 +112,7 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, i id := xid.New() // Format narratives - // **Need to clean up narrative links + // **Break out in to separate function narratives := make([]string, len(satisfy.GetNarratives())) narrativeLinks := []string{} for _, narrative := range satisfy.GetNarratives() { @@ -123,19 +123,20 @@ func iterateControls(family string, familyTitle string, controls []XMLControl, i narrativeText = strings.Replace(narrativeText, "''", "'", -1) } narrativeLinksIndex := strings.Index(narrativeText, "- http") - if narrativeLinksIndex >= 0 { - narrativeLinks = strings.Split(narrativeText[narrativeLinksIndex:], "\n") - for i, link := range narrativeLinks { - if strings.Index(link, "- ") >= 0 { - narrativeLinks[i] = link[strings.Index(link, "- ")+2:] + + if narrativeLinksIndex != -1 { + splitNarrativeFromLinks := strings.Split(narrativeText[narrativeLinksIndex:], "\n") + narrativeText = narrativeText[:narrativeLinksIndex] + for _, link := range splitNarrativeFromLinks { + linkIndex := strings.Index(link, "- ") + if linkIndex != -1 { + narrativeLinks = append(narrativeLinks, link[linkIndex+2:]) } } } narratives = append(narratives, narrativeText) } - fmt.Println(narrativeLinks) - markdownTemplateControl.Components = append(markdownTemplateControl.Components, MarkdownTemplateComponent{ ID: id.String(), Name: component.GetName(), diff --git a/docs/generator/tmpl/80053.tmpl b/docs/generator/tmpl/80053.tmpl index 1d05ce6..d42ba9b 100644 --- a/docs/generator/tmpl/80053.tmpl +++ b/docs/generator/tmpl/80053.tmpl @@ -86,7 +86,16 @@ will be rejected. {{else -}}
    {{end -}} -{{range $component.Narratives}}{{ . }}{{end}} +{{range $component.Narratives -}} +{{ . -}} +{{end -}} +{{if $component.NarrativeLinks}} +
      +{{range $component.NarrativeLinks -}} +
    • {{ . }}
    • +{{end -}} +{{end}} +
    {{end -}}
    diff --git a/opencontrol/components/eNZi/component.yaml b/opencontrol/components/eNZi/component.yaml index 1f7d9db..b70a6e1 100644 --- a/opencontrol/components/eNZi/component.yaml +++ b/opencontrol/components/eNZi/component.yaml @@ -21,11 +21,8 @@ satisfies: managed to enforce fine-grained access control. Supporting documentation can found at the following resources: - UCP: - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/ - https://docs.docker.com/datacenter/ucp/2.1/guides/admin/manage-users/permission-levels/ - - DTR: - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/ - https://docs.docker.com/datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/ standard_key: NIST-800-53
  • 6cmPWA| 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 literal 0 HcmV?d00001 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/workflow.png b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..3334702d393e9668395f88884920b6771e2efeba GIT binary patch literal 35815 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 z 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 H*Z2Pcx+_w+ literal 0 HcmV?d00001 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/workflow.svg b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/workflow.svg new file mode 100644 index 0000000..cfda015 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/assets/workflow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/development.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/development.md new file mode 100644 index 0000000..0477656 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/development.md @@ -0,0 +1,68 @@ +# Developer setup + +Interested in contributing to Masonry? Awesome! Take a look at our [contribution guidelines](../CONTRIBUTING.md) first. + +## Project setup + +1. Install Go 1.7+, and ensure your `GOPATH` is set. Using [gvm](https://github.com/moovweb/gvm) is recommended. +1. Install [Dep](https://github.com/golang/dep). +1. Get the code. + + ```sh + go get github.com/opencontrol/compliance-masonry + ``` + +1. Install the dependencies. + + ```sh + cd $GOPATH/src/github.com/opencontrol/compliance-masonry + dep ensure + go install . + ``` + +1. Run the tool. + + ```sh + compliance-masonry + ``` + +This should print out usage documentation. + +## Running tests + +```sh +# Get test dependencies +go get -t ./... +# Run tests +go test $(go list ./... | grep -v vendor) +``` + +## Creating binaries + +This will only be relevant for maintainers. + +### One-time setup for uploading binaries + +1. Install [goxc](https://github.com/laher/goxc) + + ```sh + go get github.com/laher/goxc + ``` + +1. [Get a GitHub API token](https://github.com/settings/tokens/new). The token should have write access to repos. +1. Add a .goxc.local.json file with a github api key + + ```sh + goxc -wlc default publish-github -apikey=123456789012 + ``` + +### Compiling and uploading binaries + +1. Set version number in: + * [`.goxc.json`](.goxc.json) + * As `app.Version` in [`masonry-go.go`](masonry-go.go) +1. Run the release script + + ```sh + ./release.sh + ``` diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/gitbook.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/gitbook.md new file mode 100644 index 0000000..a0016b3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/gitbook.md @@ -0,0 +1,80 @@ +# GitBook + +## Creating + +1. Update dependencies + + ```bash + compliance-masonry get + ``` + +1. Run the gitbook command + + ```bash + compliance-masonry docs gitbook LATO + # Or + compliance-masonry docs gitbook FedRAMP-low + ``` + +The `gitbook` command by default will create a folder called `exports` that contains the files needed to create a gitbook. Visit the [gitbook documentation](https://github.com/GitbookIO/gitbook-cli) for more information on creating gitbooks via the CLI. + +## Adding additional markdown content (optional) + +Security documentation usually requires unstructured information that is not captured in the control documentation. The `markdowns` directory can be used to add this supplemental information. + +1. Create a `markdowns` folder in the same directory as the `opencontrol.yaml`. + + ```bash + mkdir markdowns + ``` + +2. Create the `markdowns/SUMMARY.md` and `markdowns/README.md` documents. + ```bash + touch markdowns/SUMMARY.md + touch markdowns/README.md + ``` + +The content of the `markdowns/SUMMARY.md` and `markdowns/README.md` files and the files they reference is prepended to the Gitbook documentation. + +For more information on using the `SUMMARY.md` and `README.md` files visit the [Gitbook documentation.](http://toolchain.gitbook.com/structure.html) For an example `markdowns` directory visit the [cloud.gov `markdowns`](https://github.com/18F/cg-compliance/tree/master/markdowns). + +## View locally + +Requires [NodeJS](https://nodejs.org/). After running the steps above, + +1. Install the gitbook CLI + + ```bash + npm install -g gitbook-cli + ``` + +1. Navigate to the `exports` directory + + ```bash + cd exports + ``` + +1. Serve the gitbook site locally + + ```bash + gitbook serve + ``` + +1. Open the site: http://localhost:4000 + +After making any edits, view the changes by running + +```bash +compliance-masonry get && compliance-masonry docs gitbook +``` + +## Export as a PDF + +1. Following [the steps above](#creating-gitbook-documentation) +1. Navigate to the `exports` directory + + ```bash + cd exports + ``` + +1. Follow [these instructions](http://toolchain.gitbook.com/ebook.html) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/install.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/install.md new file mode 100644 index 0000000..317a7e8 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/install.md @@ -0,0 +1,43 @@ +# Installation + +Compliance Masonry is packaged into a downloadable executable program for those who want to use Compliance Masonry without the need to install any external dependencies or programs. + +## Mac OS X + +In your terminal, run the following: + +```sh +cd ~/Downloads +curl -L https://github.com/opencontrol/compliance-masonry/releases/download/v1.1.2/compliance-masonry_1.1.2_darwin_amd64.zip -o compliance-masonry.zip +unzip compliance-masonry.zip +cp compliance-masonry_1.1.2_darwin_amd64/compliance-masonry /usr/local/bin +``` + +## Windows + +1. Go to [the Github Release](https://github.com/opencontrol/compliance-masonry/releases/tag/v1.1.2). +1. Download the package that corresponds to your machine and operating system. + - For 32 Bit Windows, you'll want the file ending `_windows_386.zip` + - For 64 Bit Windows, you'll want the file ending `_windows_amd64.zip` +1. Double-click on the downloaded package to unzip the archive. The resulting folder should contain a file called `compliance-masonry.exe`. +1. Create a folder, e.g. `C:\Masonry\bin`. +1. Drag `compliance-masonry.exe` into the new folder. +1. Open PowerShell. + * Search your Start menu / Cortana for it. +1. [Add `C:\Masonry\bin` to your `PATH`.](https://www.java.com/en/download/help/path.xml) + +## Linux + +The instructions below are for 64-bit architectures. See the [releases](https://github.com/opencontrol/compliance-masonry/releases) page for others. + +In your terminal, run the following: + +```sh +curl -L https://github.com/opencontrol/compliance-masonry/releases/download/v1.1.2/compliance-masonry_1.1.2_linux_amd64.tar.gz -o compliance-masonry.tar.gz +tar -xf compliance-masonry.tar.gz +sudo cp compliance-masonry_1.1.2_linux_amd64/compliance-masonry /usr/local/bin +``` + +--- + +See the [usage](usage.md) guide next. diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/masonry-for-the-compliance-literate.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/masonry-for-the-compliance-literate.md new file mode 100644 index 0000000..491d1ef --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/masonry-for-the-compliance-literate.md @@ -0,0 +1,44 @@ +# Compliance Masonry for the Compliance Literate + +Compliance Masonry is a set of tools that restructure the process of writing, updating, and reviewing compliance documentation. This tooling enables teams to work faster and cheaper since it reduces repetitive and labor-intensive work. The core innovations are: + +* It separates information from presentation: teams can collaborate on documentation as structured data and then automatically format it in multiple ways useful to teammates and compliance reviewers, rather than the traditional approach of manually managing large static Word and Excel documents that conflate information and style. +* Compliance information underlying systems can be inherited by the system, reducing repetitive writing/copying-and-pasting in creating a System Security Plan. + +## Step by step + +Teams write control justifications as structured data in YAML files, like so: + +https://github.com/opencontrol/schemas#components + +The control justifications are then grouped into ["components"](https://github.com/opencontrol/schemas#components) (representing the parts of a system that deal with specific security requirements), which Compliance Masonry merges together to represent the overall system. cloud.gov, for example, reuses open source code from the [Cloud Foundry](https://www.cloudfoundry.org/) and [Concourse](http://concourse.ci/) open source projects, so cloud.gov is writing many control statements that explain security measures in Cloud Foundry and Concourse. The cloud.gov team publishes those component-specific control statements as structured data that other Cloud Service Providers (CSPs) using one or both of those open source components can adapt for their control documentation. Systems deployed to cloud.gov can then import cloud.gov’s full set of control descriptions, bringing along the control justifications for everything below. + +Componentizing of compliance information also means that any other systems built on top of Amazon Web Services (AWS), for example, could inherit those same control justifications, without needing to re-write them. Furthermore, if something compliance-related changes at the AWS level, this can be updated in one place, and automatically propagate out to the compliance documentation for the downstream systems. + +Compliance information now can be stored alongside code, thus making it easier to update alongside relevant changes, in a big step towards continuous compliance. + +Once the data is all pulled together, Compliance Masonry could render the data in any format useful to the team or reviewers, such as: + +* The complete FedRAMP-templated System Security Plan Word document +* The Control Implementation Status (CIS) spreadsheet file with automatically up-to-date summary info about controls +* The Policies and Procedures summary document with the contents of all the -1 control statements +* A web site, for quick reference, mobile viewing, etc. + +Being able to render to the official SSP documents means that the cloud.gov team can collaborate on compliance documentation through GitHub, and automatically generate the Word document to send to the reviewers as needed. If FedRAMP were to update their SSP Template, we could update the Compliance Masonry rendering logic, and then everyone using Compliance Masonry could generate a new document with the new formatting. This means saving every team using Compliance Masonry the painstaking effort of copying and pasting content between hundreds of pages of Word documents. + +![workflow diagram](assets/workflow.png) + +_Figure: A visual representation of the Compliance Masonry workflow. [View as SVG.](https://rawgit.com/opencontrol/compliance-masonry/master/docs/assets/workflow.svg)_ + +While these are major benefits for the productivity of teams producing compliance documentation, there are also major potential benefits for compliance reviewers: + +* Compliance Masonry could automatically generate reports about the completeness of the compliance information. +* Having the CIS generatable at any moment means the team can easily keep it up-to-date and accurate for compliance reviewer evaluation. +* As authors update control statements, Compliance Masonry could generate reports for compliance reviewers that list all changed information between specified dates, to help reviewers only analyze information that changed. +* The state of systems’ controls could be fed into a dashboard. +* If an underlying system’s controls have already been vetted, the tool could generate a report about which controls are specific to that system, meaning less work for the reviewers. +* If there’s a compliance violation of an underlying system (e.g. AWS), the dependent systems (e.g. cloud.gov) could be traced through the dependency tree. + +The goal is not just to be able to create documentation in an automated fashion, but to be able to validate that the systems meet the controls as described in an automated way too. Compliance Masonry templates can run [executable specifications](https://en.wikipedia.org/wiki/Behavior-driven_development#Behavioral_specifications) which are used to continuously monitor that systems behave in the way they’re documented. + +Hopefully this gives you a better sense of the use case and goals of Compliance Masonry—please [reach out](https://github.com/opencontrol/discuss/issues/new) with any questions! diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/usage.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/usage.md new file mode 100644 index 0000000..21b471b --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/docs/usage.md @@ -0,0 +1,64 @@ +# Usage + +## Creating an OpenControl project + +1. Start a fresh directory + + ```bash + mkdir your-project-name && cd your-project-name + ``` + +1. Create an [`opencontrol.yaml`](https://github.com/opencontrol/schemas#opencontrolyaml) +1. Collect dependencies + + ```bash + compliance-masonry get + ``` + +The `get` command will retrieve dependencies needed to compile documentation in an `opencontrols/` folder. You will probably want to exclude this from your version control system (e.g. add `opencontrols/` to your `.gitignore`). + +## Docker + +Compliance Masonry has also been packaged as a Docker image and published on [Docker Hub](https://hub.docker.com/r/opencontrolorg/compliance-masonry). Commands can be run with Docker in the directory containing `opencontrol.yaml` as follows: + +```bash +docker run --rm -v "$PWD":/opencontrol -w /opencontrol opencontrolorg/compliance-masonry get +``` + +## GitBook + +To view the compliance documentation as a web site or a PDF, see the [GitBook](gitbook.md) documentation. + +## Create Docx template + +While there used to be Word document templating logic in Masonry, the team [found](https://github.com/opencontrol/compliance-masonry/issues/153) that it could be done more effectively with rendering code tailored to the specifics of the destination `*.docx`. See the [FedRAMP templater](https://github.com/opencontrol/fedramp-templater) for an example of using Compliance Masonry as a library to inject [OpenControl-formatted](https://github.com/opencontrol/schemas) documentation into a Word doc. + +## Gap Analysis + +***Experimental.*** *[Does not take control origination into account.](https://github.com/opencontrol/schemas/issues/24)* + +Use Gap Analysis to determine the difference between how many controls you have documented versus the total controls for a given certification. This should be used continually as you work to indicate your compliance progress. + +Given you have an `opencontrol.yaml` for your project and you have already collected your dependencies via the `compliance-masonry get` command, run `compliance-masonry diff `: + +```bash +# Example +$ compliance-masonry diff FedRAMP-moderate +Number of missing controls: 5 +NIST-800-53@CP-7 (1) +NIST-800-53@PS-2 +NIST-800-53@PS-3 (3) +NIST-800-53@MP-5 +NIST-800-53@PS-7 +``` + +## Documentation format + +Compliance Masonry uses the [OpenControl schema](https://github.com/opencontrol/schemas). + +| Type | Supported versions | +|---|---| +| [Components](https://github.com/opencontrol/schemas#components) | [2.0.0](https://github.com/opencontrol/schemas/blob/master/kwalify/component/v2.0.0.yaml), [3.0.0](https://github.com/opencontrol/schemas/blob/master/kwalify/component/v3.0.0.yaml), 3.1.0 | +| [Standards](https://github.com/opencontrol/schemas#standards) | 1.0.0 | +| [Certifications](https://github.com/opencontrol/schemas#certifications) | 1.0.0 | +| [opencontrol.yaml](https://github.com/opencontrol/schemas#opencontrolyaml) | [1.0.0](https://github.com/opencontrol/schemas/blob/master/kwalify/opencontrol/v1.0.0.yaml) | diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example.go new file mode 100644 index 0000000..ca456d7 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "github.com/opencontrol/compliance-masonry/lib" + "github.com/opencontrol/compliance-masonry/lib/common" + "io" + "os" +) + +type plugin struct { + common.Workspace +} + +func simpleDataExtract(p plugin) string { + selectJustifications := p.GetAllVerificationsWith("NIST-800-53", "CM-2") + if len(selectJustifications) == 0 { + return "no data" + } + return selectJustifications[0].SatisfiesData.GetImplementationStatus() +} + +func run(workspacePath, certPath string, writer io.Writer) { + workspace, _ := lib.LoadData(workspacePath, certPath) + sampleData := simpleDataExtract(plugin{workspace}) + fmt.Fprint(writer, sampleData) +} + +func main() { + // in reality you would check the number of args. + run(os.Args[1], os.Args[2], os.Stdout) +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example_test.go new file mode 100644 index 0000000..a45903a --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/example_test.go @@ -0,0 +1,103 @@ +package main + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gbytes" + . "github.com/onsi/gomega/gexec" + "github.com/opencontrol/compliance-masonry/lib/common" + "github.com/opencontrol/compliance-masonry/lib/common/mocks" + "github.com/stretchr/testify/assert" + "os" + "os/exec" + "path/filepath" + "time" +) + +var _ = Describe("Exampleplugin", func() { + // example of unit test with mocks. + Describe("simpleDataExtract", func() { + Context("When there is no data for the standard-control combo", func() { + It("should print 'no data'", func() { + // create mock workspace + ws := new(mocks.Workspace) + ws.On("GetAllVerificationsWith", "NIST-800-53", "CM-2").Return(common.Verifications{}) + // test function expecting "no data" + p := plugin{ws} + data := simpleDataExtract(p) + Expect(data).To(Equal("no data")) + }) + }) + Context("When there is data for the standard-control combo", func() { + It("should print the 'IMPLEMENTED', given that's expected", func() { + // create mock workspace + ws := new(mocks.Workspace) + satisfies := new(mocks.Satisfies) + satisfies.On("GetImplementationStatus").Return("IMPLEMENTED") + ws.On("GetAllVerificationsWith", "NIST-800-53", "CM-2").Return( + common.Verifications{common.Verification{SatisfiesData: satisfies}}) + // test function expecting "IMPLEMENTED" + p := plugin{ws} + data := simpleDataExtract(p) + Expect(data).To(Equal("IMPLEMENTED")) + assert.Equal(GinkgoT(), data, "IMPLEMENTED") + }) + }) + }) + // Example of reading the standard output. + Describe("run", func() { + Context("When running it on data in a workspace", func() { + It("should find the data and print it out to standard out", func() { + wsPath := filepath.Join("..", "fixtures", "opencontrol_fixtures") + certPath := filepath.Join("..", "..", "fixtures", "opencontrol_fixtures", "certifications", "LATO.yaml") + buffer := NewBuffer() + run(wsPath, certPath, buffer) + Expect(buffer).To(Say("partial")) + }) + }) + }) + // Example of Running Masonry (with "get") and then the Plugin executables. + Describe("running the executable", func() { + BeforeEach(func() { + cleanupOpencontrolWorkspace() + }) + Context("when running the executable", func() { + It("should build and run with two arguments", func() { + masonry := Masonry("--verbose", "get") + Eventually(masonry).Should(Exit(0)) + p := Plugin(filepath.Join("opencontrols"), filepath.Join("opencontrols", "certifications")) + Eventually(p).Should(Exit(0)) + // Should match the implementation status of CloudFormation in aws-compliance, which is + // "none" + Eventually(p.Out.Contents()).Should(ContainSubstring("none")) + }) + }) + AfterEach(func() { + cleanupOpencontrolWorkspace() + CleanupBuildArtifacts() + }) + }) +}) + +func cleanupOpencontrolWorkspace() { + os.RemoveAll("opencontrols") +} + +func Masonry(args ...string) *Session { + path, err := Build("github.com/opencontrol/compliance-masonry") + Expect(err).NotTo(HaveOccurred()) + return createCommand(path, args...) +} +func Plugin(args ...string) *Session { + path, err := Build("github.com/opencontrol/compliance-masonry/exampleplugin") + Expect(err).NotTo(HaveOccurred()) + return createCommand(path, args...) +} + +func createCommand(cmdPath string, args ...string) *Session { + cmd := exec.Command(cmdPath, args...) + session, err := Start(cmd, GinkgoWriter, GinkgoWriter) + session.Wait(20 * time.Second) + Expect(err).NotTo(HaveOccurred()) + return session +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/exampleplugin_suite_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/exampleplugin_suite_test.go new file mode 100644 index 0000000..2e67ea6 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/exampleplugin_suite_test.go @@ -0,0 +1,13 @@ +package main_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestExampleplugin(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Exampleplugin Suite") +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/opencontrol.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/opencontrol.yaml new file mode 100644 index 0000000..8b628e4 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/exampleplugin/opencontrol.yaml @@ -0,0 +1,14 @@ +schema_version: "1.0.0" +name: test-opencontrol-yaml +metadata: + description: "This opencontrol YAML is just used for showing various levels of testing. For more details refer to example_test.go" +dependencies: + standards: + - url: https://github.com/opencontrol/NIST-800-53-Standards + revision: master + certifications: + - url: https://github.com/opencontrol/FedRAMP-Certifications + revision: master + systems: + - url: https://github.com/opencontrol/aws-compliance + revision: master \ No newline at end of file diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2BrokenControl/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2BrokenControl/component.yaml new file mode 100644 index 0000000..067fdc2 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2BrokenControl/component.yaml @@ -0,0 +1,45 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference +path: http://VerificationURL.com +type: URL +satisfies: +- control_key: CM-2 +covered_by: +- verification_key: EC2_Verification_1 +- component_key: UAA +system_key: CloudFoundry +verification_key: UAA_Verification_1 +implementation_status: partial +narrative: Justification in narrative form +standard_key: NIST-800-53 +- control_key: 1.1 +covered_by: +- verification_key: EC2_Verification_1 +- component_key: UAA +system_key: CloudFoundry +verification_key: UAA_Verification_1 +implementation_status: partial +narrative: Justification in narrative form +standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 +covered_by: [] +implementation_status: partial +narrative: Justification in narrative form +standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 +covered_by: [] +implementation_status: partial +narrative: Justification in narrative form +standard_key: PCI-DSS-MAY-2015 +schema_version: 2.0 +verifications: +- key: EC2_Verification_2 +name: EC2 Governor 2 +path: artifact-ec2-1.png +type: Image +- key: EC2_Verification_1 +name: EC2 Verification 1 +path: http://VerificationURL.com +type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2UnsupportedVersion/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2UnsupportedVersion/component.yaml new file mode 100644 index 0000000..473887d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2UnsupportedVersion/component.yaml @@ -0,0 +1,26 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: NIST-800-53 +schema_version: 1.0.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL \ No newline at end of file diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2VersionNotSemver/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2VersionNotSemver/component.yaml new file mode 100644 index 0000000..8599a14 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2VersionNotSemver/component.yaml @@ -0,0 +1,26 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: NIST-800-53 +schema_version: 1.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL \ No newline at end of file diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2_InvalidFieldTypeForVersion2_0/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2_InvalidFieldTypeForVersion2_0/component.yaml new file mode 100644 index 0000000..a779975 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/common/EC2_InvalidFieldTypeForVersion2_0/component.yaml @@ -0,0 +1,22 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: "wrong" + implementation_status: partial + narrative: "Justification in narrative form for CM-2" + standard_key: NIST-800-53 +schema_version: 2.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL \ No newline at end of file diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2/component.yaml new file mode 100644 index 0000000..8b6593d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2/component.yaml @@ -0,0 +1,45 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 + covered_by: [] + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +schema_version: 2.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2WithKey/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2WithKey/component.yaml new file mode 100644 index 0000000..2a94c20 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v2_0_0/EC2WithKey/component.yaml @@ -0,0 +1,46 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +key: EC2 +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 + covered_by: [] + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +schema_version: 2.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2/component.yaml new file mode 100644 index 0000000..e052742 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2/component.yaml @@ -0,0 +1,73 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: shared + narrative: + - key: "a" + text: "Justification in narrative form A for CM-2" + - key: "b" + text: "Justification in narrative form B for CM-2" + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: inherited + parameters: + - key: "a" + text: "Parameter A for 1.1" + - key: "b" + text: "Parameter B for 1.1" + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1" + - key: "b" + text: "Justification in narrative form B for 1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1.1" + - key: "b" + text: "Justification in narrative form B for 1.1.1" + parameters: + - key: "a" + text: "Parameter A for 1.1.1" + - key: "b" + text: "Parameter B for 1.1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - text: "Justification in narrative form for 2.1" + standard_key: PCI-DSS-MAY-2015 +responsible_role: "AWS Staff" +schema_version: 3.0.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2WithKey/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2WithKey/component.yaml new file mode 100644 index 0000000..1feb3cf --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_0_0/EC2WithKey/component.yaml @@ -0,0 +1,74 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +key: EC2 +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: shared + narrative: + - key: "a" + text: "Justification in narrative form A for CM-2" + - key: "b" + text: "Justification in narrative form B for CM-2" + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: inherited + parameters: + - key: "a" + text: "Parameter A for 1.1" + - key: "b" + text: "Parameter B for 1.1" + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1" + - key: "b" + text: "Justification in narrative form B for 1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1.1" + - key: "b" + text: "Justification in narrative form B for 1.1.1" + parameters: + - key: "a" + text: "Parameter A for 1.1.1" + - key: "b" + text: "Parameter B for 1.1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - text: "Justification in narrative form for 2.1" + standard_key: PCI-DSS-MAY-2015 +responsible_role: "AWS Staff" +schema_version: 3.0.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2/component.yaml new file mode 100644 index 0000000..bf8079a --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2/component.yaml @@ -0,0 +1,83 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + implementation_statuses: + - "partial" + - "planned" + control_origin: shared + control_origins: + - "shared" + - "inherited" + narrative: + - key: "a" + text: "Justification in narrative form A for CM-2" + - key: "b" + text: "Justification in narrative form B for CM-2" + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + implementation_statuses: + - "partial" + control_origin: inherited + control_origins: + - "inherited" + parameters: + - key: "a" + text: "Parameter A for 1.1" + - key: "b" + text: "Parameter B for 1.1" + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1" + - key: "b" + text: "Justification in narrative form B for 1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1.1" + - key: "b" + text: "Justification in narrative form B for 1.1.1" + parameters: + - key: "a" + text: "Parameter A for 1.1.1" + - key: "b" + text: "Parameter B for 1.1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - text: "Justification in narrative form for 2.1" + standard_key: PCI-DSS-MAY-2015 +responsible_role: "AWS Staff" +schema_version: 3.1.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2WithKey/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2WithKey/component.yaml new file mode 100644 index 0000000..d66dd06 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/component_fixtures/v3_1_0/EC2WithKey/component.yaml @@ -0,0 +1,83 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +key: EC2 +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: shared + control_origins: + - "shared" + - "inherited" + implementation_status: partial + implementation_statuses: + - "partial" + - "planned" + narrative: + - key: "a" + text: "Justification in narrative form A for CM-2" + - key: "b" + text: "Justification in narrative form B for CM-2" + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: inherited + control_origins: + - "inherited" + parameters: + - key: "a" + text: "Parameter A for 1.1" + - key: "b" + text: "Parameter B for 1.1" + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1" + - key: "b" + text: "Justification in narrative form B for 1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - key: "a" + text: "Justification in narrative form A for 1.1.1" + - key: "b" + text: "Justification in narrative form B for 1.1.1" + parameters: + - key: "a" + text: "Parameter A for 1.1.1" + - key: "b" + text: "Parameter B for 1.1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - text: "Justification in narrative form for 2.1" + standard_key: PCI-DSS-MAY-2015 +responsible_role: "AWS Staff" +schema_version: 3.0.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/README.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/README.md new file mode 100755 index 0000000..15059df --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/README.md @@ -0,0 +1,14 @@ +## Standards +* [AC](standards/NIST-800-53-AC.md) + * [AC-2](standards/NIST-800-53-AC-2.md) + * [AC-6](standards/NIST-800-53-AC-6.md) +* [CM](standards/NIST-800-53-CM.md) + * [CM-2](standards/NIST-800-53-CM-2.md) +* [1](standards/PCI-DSS-MAY-2015-1.md) + * [1.1](standards/PCI-DSS-MAY-2015-1.1.md) + * [1.1.1](standards/PCI-DSS-MAY-2015-1.1.1.md) +* [2](standards/PCI-DSS-MAY-2015-2.md) + * [2.1](standards/PCI-DSS-MAY-2015-2.1.md) + +## Components +* [Amazon Elastic Compute Cloud](components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/SUMMARY.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/SUMMARY.md new file mode 100755 index 0000000..15059df --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/SUMMARY.md @@ -0,0 +1,14 @@ +## Standards +* [AC](standards/NIST-800-53-AC.md) + * [AC-2](standards/NIST-800-53-AC-2.md) + * [AC-6](standards/NIST-800-53-AC-6.md) +* [CM](standards/NIST-800-53-CM.md) + * [CM-2](standards/NIST-800-53-CM-2.md) +* [1](standards/PCI-DSS-MAY-2015-1.md) + * [1.1](standards/PCI-DSS-MAY-2015-1.1.md) + * [1.1.1](standards/PCI-DSS-MAY-2015-1.1.1.md) +* [2](standards/PCI-DSS-MAY-2015-2.md) + * [2.1](standards/PCI-DSS-MAY-2015-2.1.md) + +## Components +* [Amazon Elastic Compute Cloud](components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/components/EC2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/components/EC2.md new file mode 100755 index 0000000..3df5d07 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/components/EC2.md @@ -0,0 +1,6 @@ +# Amazon Elastic Compute Cloud +## References +* [Reference](http://VerificationURL.com) +## Verifications +* [EC2 Governor 2](artifact-ec2-1.png) +* [EC2 Verification 1](http://VerificationURL.com) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-2.md new file mode 100755 index 0000000..b2de728 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-2.md @@ -0,0 +1,32 @@ +#NIST-800-53-AC-2 +##Account Management +#### Description +'The organization: +a. Identifies and selects the following types of information system accounts +to support organizational missions/business functions: [Assignment: +organization-defined information system account types]; +b. Assigns account managers for information system accounts; +c. Establishes conditions for group and role membership; +d. Specifies authorized users of the information system, group and role +membership, and access authorizations (i.e., privileges) and other +attributes (as required) for each account; +e. Requires approvals by [Assignment: organization-defined personnel or +roles] for requests to create information system accounts; +f. Creates, enables, modifies, disables, and removes information system +accounts in accordance with [Assignment: organization-defined procedures or +conditions]; +g. Monitors the use of information system accounts; +h. Notifies account managers: + 1. When accounts are no longer required; + 2. When users are terminated or transferred; and + 3. When individual information system usage or need-to-know changes; +i. Authorizes access to the information system based on: + 1. A valid access authorization; + 2. Intended system usage; and + 3. Other attributes as required by the organization or associated missions/business functions; +j. Reviews accounts for compliance with account management requirements +[Assignment: organization-defined frequency]; and +k. Establishes a process for reissuing shared/group account credentials (if +deployed) when individuals are removed from the group.' + +No information found for the combination of standard NIST-800-53 and control AC-2 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-6.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-6.md new file mode 100755 index 0000000..33c61f4 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC-6.md @@ -0,0 +1,9 @@ +#NIST-800-53-AC-6 +##Least Privilege +#### Description +'The organization employs the principle of least privilege, allowing only +authorized accesses for users (or processes acting on behalf of users) which +are necessary to accomplish assigned tasks in accordance with organizational +missions and business functions.' + +No information found for the combination of standard NIST-800-53 and control AC-6 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC.md new file mode 100755 index 0000000..6fc1784 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-AC.md @@ -0,0 +1,3 @@ +## NIST-800-53-AC +* [AC-2: Account Management](NIST-800-53-AC-2.md) +* [AC-6: Least Privilege](NIST-800-53-AC-6.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM-2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM-2.md new file mode 100755 index 0000000..fb2a7b9 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM-2.md @@ -0,0 +1,19 @@ +#NIST-800-53-CM-2 +##Baseline Configuration +#### Description +'The organization develops, documents, and maintains under configuration +control, a current baseline configuration of the information system.' + +#### Amazon Elastic Compute Cloud + +##### Responsible Role: AWS Staff + +##### Control Origin: shared + +##### a +Justification in narrative form A for CM-2 + +##### b +Justification in narrative form B for CM-2 +Covered By: +* [Amazon Elastic Compute Cloud - EC2 Verification 1](../components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM.md new file mode 100755 index 0000000..bed6e1d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/NIST-800-53-CM.md @@ -0,0 +1,2 @@ +## NIST-800-53-CM +* [CM-2: Baseline Configuration](NIST-800-53-CM-2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.1.md new file mode 100755 index 0000000..8f07651 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.1.md @@ -0,0 +1,4 @@ +#PCI-DSS-MAY-2015-1.1.1 +##A formal process for approving and testing all network connections and changes to the firewall and router configurations + +No information found for the combination of standard PCI-DSS-MAY-2015 and control 1.1.1 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.md new file mode 100755 index 0000000..6af0c3c --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.1.md @@ -0,0 +1,20 @@ +#PCI-DSS-MAY-2015-1.1 +##Establish and implement firewall and router configuration standards. + +#### Amazon Elastic Compute Cloud + +##### Responsible Role: AWS Staff + +##### Parameters: + +###### a +Parameter A for 1.1 + +###### b +Parameter B for 1.1 + +##### Control Origin: inherited + +No narrative found for the combination of standard PCI-DSS-MAY-2015 and control 1.1 +Covered By: +* [Amazon Elastic Compute Cloud - EC2 Verification 1](../components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.md new file mode 100755 index 0000000..d53f030 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-1.md @@ -0,0 +1,3 @@ +## PCI-DSS-MAY-2015-1 +* [1.1: Establish and implement firewall and router configuration standards.](PCI-DSS-MAY-2015-1.1.md) +* [1.1.1: A formal process for approving and testing all network connections and changes to the firewall and router configurations](PCI-DSS-MAY-2015-1.1.1.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.1.md new file mode 100755 index 0000000..0141419 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.1.md @@ -0,0 +1,9 @@ +#PCI-DSS-MAY-2015-2.1 +##Always change vendor-supplied defaults and remove or disable unnecessary default accounts before installing a system on the network. + +#### Amazon Elastic Compute Cloud + +##### Responsible Role: AWS Staff + +##### Control Origin: inherited +Justification in narrative form for 2.1 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.md new file mode 100755 index 0000000..cb362f3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export/standards/PCI-DSS-MAY-2015-2.md @@ -0,0 +1,2 @@ +## PCI-DSS-MAY-2015-2 +* [2.1: Always change vendor-supplied defaults and remove or disable unnecessary default accounts before installing a system on the network.](PCI-DSS-MAY-2015-2.1.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/README.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/README.md new file mode 100755 index 0000000..15059df --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/README.md @@ -0,0 +1,14 @@ +## Standards +* [AC](standards/NIST-800-53-AC.md) + * [AC-2](standards/NIST-800-53-AC-2.md) + * [AC-6](standards/NIST-800-53-AC-6.md) +* [CM](standards/NIST-800-53-CM.md) + * [CM-2](standards/NIST-800-53-CM-2.md) +* [1](standards/PCI-DSS-MAY-2015-1.md) + * [1.1](standards/PCI-DSS-MAY-2015-1.1.md) + * [1.1.1](standards/PCI-DSS-MAY-2015-1.1.1.md) +* [2](standards/PCI-DSS-MAY-2015-2.md) + * [2.1](standards/PCI-DSS-MAY-2015-2.1.md) + +## Components +* [Amazon Elastic Compute Cloud](components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/SUMMARY.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/SUMMARY.md new file mode 100644 index 0000000..423dbf8 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/SUMMARY.md @@ -0,0 +1,15 @@ +This is an SSP +## Standards +* [AC](standards/NIST-800-53-AC.md) + * [AC-2](standards/NIST-800-53-AC-2.md) + * [AC-6](standards/NIST-800-53-AC-6.md) +* [CM](standards/NIST-800-53-CM.md) + * [CM-2](standards/NIST-800-53-CM-2.md) +* [1](standards/PCI-DSS-MAY-2015-1.md) + * [1.1](standards/PCI-DSS-MAY-2015-1.1.md) + * [1.1.1](standards/PCI-DSS-MAY-2015-1.1.1.md) +* [2](standards/PCI-DSS-MAY-2015-2.md) + * [2.1](standards/PCI-DSS-MAY-2015-2.1.md) + +## Components +* [Amazon Elastic Compute Cloud](components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/components/EC2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/components/EC2.md new file mode 100755 index 0000000..3df5d07 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/components/EC2.md @@ -0,0 +1,6 @@ +# Amazon Elastic Compute Cloud +## References +* [Reference](http://VerificationURL.com) +## Verifications +* [EC2 Governor 2](artifact-ec2-1.png) +* [EC2 Verification 1](http://VerificationURL.com) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-2.md new file mode 100755 index 0000000..65c5055 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-2.md @@ -0,0 +1,4 @@ +#NIST-800-53-AC-2 +##Account Management + +No information found for the combination of standard NIST-800-53 and control AC-2 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-6.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-6.md new file mode 100755 index 0000000..0722594 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC-6.md @@ -0,0 +1,4 @@ +#NIST-800-53-AC-6 +##Least Privilege + +No information found for the combination of standard NIST-800-53 and control AC-6 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC.md new file mode 100755 index 0000000..6fc1784 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-AC.md @@ -0,0 +1,3 @@ +## NIST-800-53-AC +* [AC-2: Account Management](NIST-800-53-AC-2.md) +* [AC-6: Least Privilege](NIST-800-53-AC-6.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM-2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM-2.md new file mode 100755 index 0000000..7436e8e --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM-2.md @@ -0,0 +1,16 @@ +#NIST-800-53-CM-2 +##Baseline Configuration + +#### Amazon Elastic Compute Cloud + +##### Responsible Role: AWS Staff + +##### Control Origin: shared + +##### a +Justification in narrative form A for CM-2 + +##### b +Justification in narrative form B for CM-2 +Covered By: +* [Amazon Elastic Compute Cloud - EC2 Verification 1](../components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM.md new file mode 100755 index 0000000..bed6e1d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/NIST-800-53-CM.md @@ -0,0 +1,2 @@ +## NIST-800-53-CM +* [CM-2: Baseline Configuration](NIST-800-53-CM-2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.1.md new file mode 100755 index 0000000..8f07651 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.1.md @@ -0,0 +1,4 @@ +#PCI-DSS-MAY-2015-1.1.1 +##A formal process for approving and testing all network connections and changes to the firewall and router configurations + +No information found for the combination of standard PCI-DSS-MAY-2015 and control 1.1.1 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.md new file mode 100755 index 0000000..6af0c3c --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.1.md @@ -0,0 +1,20 @@ +#PCI-DSS-MAY-2015-1.1 +##Establish and implement firewall and router configuration standards. + +#### Amazon Elastic Compute Cloud + +##### Responsible Role: AWS Staff + +##### Parameters: + +###### a +Parameter A for 1.1 + +###### b +Parameter B for 1.1 + +##### Control Origin: inherited + +No narrative found for the combination of standard PCI-DSS-MAY-2015 and control 1.1 +Covered By: +* [Amazon Elastic Compute Cloud - EC2 Verification 1](../components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.md new file mode 100755 index 0000000..d53f030 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-1.md @@ -0,0 +1,3 @@ +## PCI-DSS-MAY-2015-1 +* [1.1: Establish and implement firewall and router configuration standards.](PCI-DSS-MAY-2015-1.1.md) +* [1.1.1: A formal process for approving and testing all network connections and changes to the firewall and router configurations](PCI-DSS-MAY-2015-1.1.1.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.1.md new file mode 100755 index 0000000..0141419 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.1.md @@ -0,0 +1,9 @@ +#PCI-DSS-MAY-2015-2.1 +##Always change vendor-supplied defaults and remove or disable unnecessary default accounts before installing a system on the network. + +#### Amazon Elastic Compute Cloud + +##### Responsible Role: AWS Staff + +##### Control Origin: inherited +Justification in narrative form for 2.1 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.md new file mode 100755 index 0000000..cb362f3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/standards/PCI-DSS-MAY-2015-2.md @@ -0,0 +1,2 @@ +## PCI-DSS-MAY-2015-2 +* [2.1: Always change vendor-supplied defaults and remove or disable unnecessary default accounts before installing a system on the network.](PCI-DSS-MAY-2015-2.1.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/system_documentation/about-the-ssp.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/system_documentation/about-the-ssp.md new file mode 100644 index 0000000..dadf58e --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/complete_export_with_markdown/system_documentation/about-the-ssp.md @@ -0,0 +1 @@ +About the System Security Plan diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/components_readme.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/components_readme.md new file mode 100644 index 0000000..c040246 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/components_readme.md @@ -0,0 +1,3 @@ + +## Components +* [Amazon Elastic Compute Cloud](components/EC2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/general_readme.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/general_readme.md new file mode 100644 index 0000000..c8c59a6 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/general_readme.md @@ -0,0 +1,11 @@ +## Standards + * [AC-2](standards/NIST-800-53-AC-2.md) + * [AC-6](standards/NIST-800-53-AC-6.md) + * [CM-2](standards/NIST-800-53-CM-2.md) + * [1.1](standards/PCI-DSS-MAY-2015-1.1.md) + * [1.1.1](standards/PCI-DSS-MAY-2015-1.1.1.md) + * [2.1](standards/PCI-DSS-MAY-2015-2.1.md) + +## Components +* [Amazon Elastic Compute Cloud](components/EC2.md) +* [User Account and Authentication (UAA) Server](components/UAA.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-AC.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-AC.md new file mode 100755 index 0000000..6fc1784 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-AC.md @@ -0,0 +1,3 @@ +## NIST-800-53-AC +* [AC-2: Account Management](NIST-800-53-AC-2.md) +* [AC-6: Least Privilege](NIST-800-53-AC-6.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-CM.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-CM.md new file mode 100755 index 0000000..bed6e1d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/NIST-800-53-CM.md @@ -0,0 +1,2 @@ +## NIST-800-53-CM +* [CM-2: Baseline Configuration](NIST-800-53-CM-2.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-1.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-1.md new file mode 100755 index 0000000..d53f030 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-1.md @@ -0,0 +1,3 @@ +## PCI-DSS-MAY-2015-1 +* [1.1: Establish and implement firewall and router configuration standards.](PCI-DSS-MAY-2015-1.1.md) +* [1.1.1: A formal process for approving and testing all network connections and changes to the firewall and router configurations](PCI-DSS-MAY-2015-1.1.1.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-2.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-2.md new file mode 100755 index 0000000..cb362f3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards/PCI-DSS-MAY-2015-2.md @@ -0,0 +1,2 @@ +## PCI-DSS-MAY-2015-2 +* [2.1: Always change vendor-supplied defaults and remove or disable unnecessary default accounts before installing a system on the network.](PCI-DSS-MAY-2015-2.1.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards_readme.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards_readme.md new file mode 100644 index 0000000..50eebc3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/exports_fixtures/gitbook_exports/standards_readme.md @@ -0,0 +1,11 @@ +## Standards +* [AC](standards/NIST-800-53-AC.md) + * [AC-2: Account Management](standards/NIST-800-53-AC-2.md) + * [AC-6: Least Privilege](standards/NIST-800-53-AC-6.md) +* [CM](standards/NIST-800-53-CM.md) + * [CM-2: Baseline Configuration](standards/NIST-800-53-CM-2.md) +* [1](standards/PCI-DSS-MAY-2015-1.md) + * [1.1: Establish and implement firewall and router configuration standards.](standards/PCI-DSS-MAY-2015-1.1.md) + * [1.1.1: A formal process for approving and testing all network connections and changes to the firewall and router configurations](standards/PCI-DSS-MAY-2015-1.1.1.md) +* [2](standards/PCI-DSS-MAY-2015-2.md) + * [2.1: Always change vendor-supplied defaults and remove or disable unnecessary default accounts before installing a system on the network.](standards/PCI-DSS-MAY-2015-2.1.md) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/certifications/LATO.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/certifications/LATO.yaml new file mode 100644 index 0000000..cd433b3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/certifications/LATO.yaml @@ -0,0 +1,10 @@ +name: LATO +standards: + NIST-800-53: + AC-2: {} + AC-6: {} + CM-2: {} + PCI-DSS-MAY-2015: + 1.1: {} + 1.1.1: {} + 2.1: {} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/components/EC2/artifact-ec2-1.png b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/components/EC2/artifact-ec2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..503d77a696bbea87cf8c695c58a3d2c94b322732 GIT binary patch literal 14721 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 literal 0 HcmV?d00001 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/components/EC2/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/components/EC2/component.yaml new file mode 100644 index 0000000..bba11ff --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/components/EC2/component.yaml @@ -0,0 +1,53 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: shared + narrative: + - key: "a" + text: "Justification in narrative form A for CM-2" + - key: "b" + text: "Justification in narrative form B for CM-2" + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: inherited + parameters: + - key: "a" + text: "Parameter A for 1.1" + - key: "b" + text: "Parameter B for 1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - text: "Justification in narrative form for 2.1" + standard_key: PCI-DSS-MAY-2015 +responsible_role: "AWS Staff" +schema_version: 3.0.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/NIST-800-53.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/NIST-800-53.yaml new file mode 100644 index 0000000..43b712f --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/NIST-800-53.yaml @@ -0,0 +1,3111 @@ +AC-1: + family: AC + name: Access Control Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: + organization-defined personnel or roles]: + 1. An access control policy that addresses purpose, scope, roles, + responsibilities, management commitment, coordination among organizational + entities, and compliance; and + 2. Procedures to facilitate the + implementation of the access control policy and associated access + controls; and + b. Reviews and updates the current: + 1. Access control policy [Assignment: organization-defined frequency]; and + 2. Access control procedures [Assignment: organization-defined + frequency].' + +AC-2: + family: AC + name: Account Management + description: | + 'The organization: + a. Identifies and selects the following types of information system accounts + to support organizational missions/business functions: [Assignment: + organization-defined information system account types]; + b. Assigns account managers for information system accounts; + c. Establishes conditions for group and role membership; + d. Specifies authorized users of the information system, group and role + membership, and access authorizations (i.e., privileges) and other + attributes (as required) for each account; + e. Requires approvals by [Assignment: organization-defined personnel or + roles] for requests to create information system accounts; + f. Creates, enables, modifies, disables, and removes information system + accounts in accordance with [Assignment: organization-defined procedures or + conditions]; + g. Monitors the use of information system accounts; + h. Notifies account managers: + 1. When accounts are no longer required; + 2. When users are terminated or transferred; and + 3. When individual information system usage or need-to-know changes; + i. Authorizes access to the information system based on: + 1. A valid access authorization; + 2. Intended system usage; and + 3. Other attributes as required by the organization or associated missions/business functions; + j. Reviews accounts for compliance with account management requirements + [Assignment: organization-defined frequency]; and + k. Establishes a process for reissuing shared/group account credentials (if + deployed) when individuals are removed from the group.' + +AC-2 (1): + family: AC + name: Account Management | Automated System Account Management + description: | + 'The organization employs automated mechanisms to support the management of information system accounts.' + +AC-2 (2): + family: AC + name: Account Management | Removal of Temporary / Emergency Accounts + description: | + 'The information system automatically [Selection: removes; disables] + temporary and emergency accounts after [Assignment: organization-defined + time period for each type of account].' + +AC-2 (3): + family: AC + name: Account Management | Disable Inactive Accounts + description: | + 'The information system automatically disables inactive accounts after + [Assignment: organization-defined time period].' + +AC-2 (4): + family: AC + name: Account Management | Automated Audit Actions + description: | + 'The information system automatically audits account creation, modification, + enabling, disabling, and removal actions, and notifies [Assignment: + organization-defined personnel or roles].' + +AC-2 (5): + family: AC + name: Account Management | Inactivity Logout + description: | + 'The organization requires that users log out when [Assignment: + organization-defined time-period of expected inactivity or description of + when to log out].' + +AC-2 (7): + family: AC + name: Account Management | Role-Based Schemes + description: | + 'The organization: + AC-2 (7)(a) Establishes and administers privileged user accounts in + accordance with a role-based access scheme that organizes allowed + information system access and privileges into roles; + AC-2 (7)(b) Monitors privileged role assignments; and + AC-2 (7)(c) Takes [Assignment: organization-defined actions] when privileged + role assignments are no longer appropriate.' + +AC-2 (9): + family: AC + name: Account Management | Restrictions on Use of Shared Groups / Accounts + description: | + 'The organization only permits the use of shared/group accounts that meet + [Assignment: organization-defined conditions for establishing shared/group + accounts].' + +AC-2 (10): + family: AC + name: Account Management | Shared / Group Account Credential Termination + description: | + 'The information system terminates shared/group account credentials when + members leave the group.' + +AC-2 (12): + family: AC + name: Account Management | Account Monitoring / Atypical Usage + description: | + 'The organization: + AC-2 (12)(a) Monitors information system accounts for [Assignment: + organization-defined atypical usage]; and + AC-2 (12)(b) Reports atypical usage of information system accounts to + [Assignment: organization-defined personnel or roles].' + +AC-3: + family: AC + name: Access Enforcement + description: | + 'The information system enforces approved authorizations for logical access + to information and system resources in accordance with applicable access + control policies.' + +AC-4: + family: AC + name: Information Flow Enforcement + description: | + 'The information system enforces approved authorizations for controlling the + flow of information within the system and between interconnected systems + based on [Assignment: organization-defined information flow control + policies].' + +AC-4 (21): + family: AC + name: Information Flow Enforcement | Physical / Logical Separation of Information + Flows + description: | + 'The information system separates information flows logically or physically + using [Assignment: organization-defined mechanisms and/or techniques] to + accomplish [Assignment: organization-defined required separations by types + of information].' + +AC-5: + family: AC + name: Separation of Duties + description: | + 'The organization: + a. Separates [Assignment: organization-defined duties of individuals]; + b. Documents separation of duties of individuals; and + c. Defines information system access authorizations to support separation of + duties.' + +AC-6: + family: AC + name: Least Privilege + description: | + 'The organization employs the principle of least privilege, allowing only + authorized accesses for users (or processes acting on behalf of users) which + are necessary to accomplish assigned tasks in accordance with organizational + missions and business functions.' + +AC-6 (1): + family: AC + name: Least Privilege | Authorize Access to Security Functions + description: | + 'The organization explicitly authorizes access to [Assignment: + organization-defined security functions (deployed in hardware, software, and + firmware) and security-relevant information].' + +AC-6 (2): + family: AC + name: Least Privilege | Non-Privileged Access For No security Functions + description: | + 'The organization requires that users of information system accounts, or + roles, with access to [Assignment: organization-defined security functions + or security-relevant information], use non-privileged accounts or roles, + when accessing nonsecurity functions.' + +AC-6 (5): + family: AC + name: Least Privilege | Privileged Accounts + description: | + 'The organization restricts privileged accounts on the information system to + [Assignment: organization-defined personnel or roles].' + +AC-6 (9): + family: AC + name: Least Privilege | Auditing Use of Privileged Functions + description: | + 'The information system audits the execution of privileged functions.' + +AC-6 (10): + family: AC + name: Least Privilege | Prohibit Non-privileged Users from Executing Privileged + Functions + description: | + 'The information system prevents non-privileged users from executing + privileged functions to include disabling, circumventing, or altering + implemented security safeguards/countermeasures.' + +AC-7: + family: AC + name: Unsuccessful Logon Attempts + description: | + 'The information system: + a. Enforces a limit of [Assignment: organization-defined number] consecutive + invalid logon attempts by a user during a [Assignment: organization-defined + time period]; and + b. Automatically [Selection: locks the account/node for an [Assignment: + organization-defined time period]; locks the account/node until released by + an administrator; delays next logon prompt according to [Assignment: + organization-defined delay algorithm]] when the maximum number of + unsuccessful attempts is exceeded.' + +AC-8: + family: AC + name: System Use Notification + description: | + 'The information system: + a. Displays to users [Assignment: organization-defined system use + notification message or banner] before granting access to the system that + provides privacy and security notices consistent with applicable federal + laws, Executive Orders, directives, policies, regulations, standards, and + guidance and states that: + 1. Users are accessing a U.S. Government information system; + 2. Information system usage may be monitored, recorded, and subject to + audit; + 3. Unauthorized use of the information system is prohibited and subject to + criminal and civil penalties; and + 4. Use of the information system indicates consent to monitoring and + recording; + b. Retains the notification message or banner on the screen until users + acknowledge the usage conditions and take explicit actions to log on to or + further access the information system; and + c. For publicly accessible systems: + 1. Displays system use information [Assignment: organization-defined + conditions], before granting further access; + 2. Displays references, if any, to monitoring, recording, or auditing that + are consistent with privacy accommodations for such systems that generally + prohibit those activities; and + 3. Includes a description of the authorized uses of the system.' + +AC-10: + family: AC + name: Concurrent Session Control + description: | + 'The information system limits the number of concurrent sessions for each + [Assignment: organization-defined account and/or account type] to + [Assignment: organization-defined number].' + +AC-11: + family: AC + name: Session Lock + description: | + 'The information system: + a. Prevents further access to the system by initiating a session lock after + [Assignment: organization-defined time period] of inactivity or upon + receiving a request from a user; and + b. Retains the session lock until the user reestablishes access using + established identification and authentication procedures.' + +AC-11 (1): + family: AC + name: Session Lock | Pattern-Hiding Displays + description: | + 'The information system conceals, via the session lock, information + previously visible on the display with a publicly viewable image.' + +AC-12: + family: AC + name: Session Termination + description: | + 'The information system automatically terminates a user session after + [Assignment: organization-defined conditions or trigger events requiring + session disconnect].' + +AC-14: + family: AC + name: Permitted Actions Without Identification or Authentication + description: | + 'The organization: + a. Identifies [Assignment: organization-defined user actions] that can be + performed on the information system without identification or authentication + consistent with organizational missions/business functions; and + b. Documents and provides supporting rationale in the security plan for the + information system, user actions not requiring identification or + authentication.' + +AC-17: + family: AC + name: Remote Access + description: | + 'The organization: + a. Establishes and documents usage restrictions, configuration/connection + requirements, and implementation guidance for each type of remote access + allowed; and + b. Authorizes remote access to the information system prior to allowing such + connections.' + +AC-17 (1): + family: AC + name: Remote Access | Automated Monitoring / Control + description: | + 'The information system monitors and controls remote access methods.' + +AC-17 (2): + family: AC + name: Remote Access | Protection of Confidentiality / Integrity Using Encryption + description: | + 'The information system implements cryptographic mechanisms to protect the + confidentiality and integrity of remote access sessions.' + +AC-17 (3): + family: AC + name: Remote Access | Managed Access Control Points + description: | + 'The information system routes all remote accesses through [Assignment: + organization-defined number] managed network access control points.' + +AC-17 (4): + family: AC + name: Remote Access | Privileged Commands / Access + description: | + 'The organization: + AC-17 (4)(a) Authorizes the execution of privileged commands and access to + security-relevant information via remote access only for [Assignment: + organization-defined needs]; and + AC-17 (4)(b) Documents the rationale for such access in the security plan + for the information system.' + +AC-17 (9): + family: AC + name: Remote Access | Disconnect / Disable Access + description: | + 'The organization provides the capability to expeditiously disconnect or + disable remote access to the information system within [Assignment: + organization-defined time period].' + +AC-18: + family: AC + name: Wireless Access + description: | + 'The organization: + a. Establishes usage restrictions, configuration/connection requirements, + and implementation guidance for wireless access; and + b. Authorizes wireless access to the information system prior to allowing + such connections.' + +AC-18 (1): + family: AC + name: Wireless Access | Authentication and Encryption + description: | + 'The information system protects wireless access to the system using + authentication of [Selection (one or more): users; devices] and encryption.' + +AC-19: + family: AC + name: Access Control For Mobile Devices + description: | + 'The organization: + a. Establishes usage restrictions, configuration requirements, connection + requirements, and implementation guidance for organization-controlled mobile + devices; and + b. Authorizes the connection of mobile devices to organizational information + systems.' + +AC-19 (5): + family: AC + name: Access Control For Mobile Devices | Full Device / Container-Based Encryption + description: | + 'The organization employs [Selection: full-device encryption; container + encryption] to protect the confidentiality and integrity of information on + [Assignment: organization-defined mobile devices].' + +AC-20: + family: AC + name: Use of External Information Systems + description: | + 'The organization establishes terms and conditions, consistent with any + trust relationships established with other organizations owning, operating, + and/or maintaining external information systems, allowing authorized + individuals to: + a. Access the information system from external information systems; and + b. Process, store, or transmit organization-controlled information using + external information systems.' + +AC-20 (1): + family: AC + name: Use of External Information Systems | Limits on Authorized Use + description: | + 'The organization permits authorized individuals to use an external + information system to access the information system or to process, store, or + transmit organization-controlled information only when the organization: + AC-20 (1)(a) Verifies the implementation of required security controls on + the external system as specified in the organization's information security + policy and security plan; or + AC-20 (1)(b) Retains approved information system connection or processing + agreements with the organizational entity hosting the external information + system.' + +AC-20 (2): + family: AC + name: Use of External Information Systems | Portable Storage Devices + description: | + 'The organization [Selection: restricts; prohibits] the use of + organization-controlled portable storage devices by authorized individuals + on external information systems.' + +AC-21: + family: AC + name: Information Sharing + description: | + 'The organization: + a. Facilitates information sharing by enabling authorized users to determine + whether access authorizations assigned to the sharing partner match the + access restrictions on the information for [Assignment: organization-defined + information sharing circumstances where user discretion is required]; and + b. Employs [Assignment: organization-defined automated mechanisms or manual + processes] to assist users in making information sharing/collaboration + decisions.' + +AC-22: + family: AC + name: Publicly Accessible Content + description: | + 'The organization: + a. Designates individuals authorized to post information onto a publicly + accessible information system; + b. Trains authorized individuals to ensure that publicly accessible + information does not contain nonpublic information; + c. Reviews the proposed content of information prior to posting onto the + publicly accessible information system to ensure that nonpublic information + is not included; and + d. Reviews the content on the publicly accessible information system for + nonpublic information [Assignment: organization-defined frequency] and + removes such information, if discovered.' + +AT-1: + family: AT + name: Security Awareness and Training Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: + organization-defined personnel or roles]: + 1. A security awareness and training policy that addresses purpose, scope, + roles, responsibilities, management commitment, coordination among + organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the security awareness + and training policy and associated security awareness and training + controls; and + b. Reviews and updates the current: + 1. Security awareness and training policy [Assignment: + organization-defined frequency]; and + 2. Security awareness and training procedures [Assignment: + organization-defined frequency].' + +AT-2: + family: AT + name: Security Awareness Training + description: | + 'The organization provides basic security awareness training to information + system users (including managers, senior executives, and contractors): + a. As part of initial training for new users; + b. When required by information system changes; and + c. [Assignment: organization-defined frequency] thereafter.' + +AT-2 (2): + family: AT + name: Security Awareness | Insider Threat + description: | + 'The organization includes security awareness training on recognizing and + reporting potential indicators of insider threat.' + +AT-3: + family: AT + name: Role-Based Security Training + description: | + 'The organization provides role-based security training to personnel with + assigned security roles and responsibilities: + a. Before authorizing access to the information system or performing + assigned duties; + b. When required by information system changes; and + c. [Assignment: organization-defined frequency] thereafter.' + +AT-4: + family: AT + name: Security Training Records + description: | + 'The organization: + a. Documents and monitors individual information system security training + activities including basic security awareness training and specific + information system security training; and + b. Retains individual training records for [Assignment: organization-defined + time period].' + +AU-1: + family: AU + name: Audit and Accountability Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: + organization-defined personnel or roles]: + 1. An audit and accountability policy that addresses purpose, scope, + roles, responsibilities, management commitment, coordination among + organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the audit and + accountability policy and associated audit and accountability controls; + and + b. Reviews and updates the current: + 1. Audit and accountability policy [Assignment: organization-defined + frequency]; and + 2. Audit and accountability procedures [Assignment: organization-defined + frequency].' + +AU-2: + family: AU + name: Audit Events + description: | + 'The organization: + a. Determines that the information system is capable of auditing the + following events: [Assignment: organization-defined auditable events]; + b. Coordinates the security audit function with other organizational + entities requiring audit-related information to enhance mutual support and + to help guide the selection of auditable events; + c. Provides a rationale for why the auditable events are deemed to be + adequate to support after-the-fact investigations of security incidents; and + d. Determines that the following events are to be audited within the + information system: [Assignment: organization-defined audited events (the + subset of the auditable events defined in AU-2 a.) along with the frequency + of (or situation requiring) auditing for each identified event].' + +AU-2 (3): + family: AU + name: Audit Events | Reviews and Updates + description: | + 'The organization reviews and updates the audited events [Assignment: organization-defined frequency].' + +AU-3: + family: AU + name: Content of Audit Records + description: | + 'The information system generates audit records containing information that + establishes what type of event occurred, when the event occurred, where the + event occurred, the source of the event, the outcome of the event, and the + identity of any individuals or subjects associated with the event.' + +AU-3 (1): + family: AU + name: Content of Audit Records | Additional Audit Information + description: | + 'The information system generates audit records containing the following + additional information: [Assignment: organization-defined additional, more + detailed information].' + +AU-4: + family: AU + name: Audit Storage Capacity + description: | + 'The organization allocates audit record storage capacity in accordance with + [Assignment: organization-defined audit record storage requirements].' + +AU-5: + family: AU + name: Response to Audit Processing Failures + description: | + 'The information system: + a. Alerts [Assignment: organization-defined personnel or roles] in the event + of an audit processing failure; and + b. Takes the following additional actions: [Assignment: organization-defined + actions to be taken (e.g., shut down information system, overwrite oldest + audit records, stop generating audit records)].' + +AU-6: + family: AU + name: Audit Review, Analysis, and Reporting + description: | + 'The organization: + a. Reviews and analyzes information system audit records [Assignment: + organization-defined frequency] for indications of [Assignment: + organization-defined inappropriate or unusual activity]; and + b. Reports findings to [Assignment: organization-defined personnel or + roles].' + +AU-6 (1): + family: AU + name: Audit Review, Analysis, and Reporting | Process Integration + description: | + 'The organization employs automated mechanisms to integrate audit review, + analysis, and reporting processes to support organizational processes for + investigation and response to suspicious activities.' + +AU-6 (3): + family: AU + name: Audit Review, Analysis, and Reporting | Correlate Audit Repositories + description: | + 'The organization analyzes and correlates audit records across different + repositories to gain organization-wide situational awareness.' + +AU-7: + family: AU + name: Audit Reduction and Report Generation + description: | + 'The information system provides an audit reduction and report generation + capability that: + a. Supports on-demand audit review, analysis, and reporting requirements and + after-the-fact investigations of security incidents; and + b. Does not alter the original content or time ordering of audit records.' + +AU-7 (1): + family: AU + name: Audit Reduction and Report Generation | Automatic Processing + description: | + 'The information system provides the capability to process audit records for + events of interest based on [Assignment: organization-defined audit fields + within audit records].' + +AU-8: + family: AU + name: Time Stamps + description: | + 'The information system: + a. Uses internal system clocks to generate time stamps for audit records; + and + b. Records time stamps for audit records that can be mapped to Coordinated + Universal Time (UTC) or Greenwich Mean Time (GMT) and meets [Assignment: + organization-defined granularity of time measurement].' + +AU-8 (1): + family: AU + name: Time Stamps | Synchronization With Authoritative Time Source + description: | + 'The information system: + AU-8 (1)(a) Compares the internal information system clocks [Assignment: + organization-defined frequency] with [Assignment: organization-defined + authoritative time source]; and + AU-8 (1)(b) Synchronizes the internal system clocks to the authoritative + time source when the time difference is greater than [Assignment: + organization-defined time period].' + +AU-9: + family: AU + name: Protection of Audit Information + description: | + 'The information system protects audit information and audit tools from + unauthorized access, modification, and deletion.' + +AU-9 (2): + family: AU + name: Protection of Audit Information | Audit Backup on Separate Physical Systems + / Components + description: | + 'The information system backs up audit records [Assignment: + organization-defined frequency] onto a physically different system or system + component than the system or component being audited.' + +AU-9 (4): + family: AU + name: Protection of Audit Information | Access by Subset of Privileged Users + description: | + 'The organization authorizes access to management of audit functionality to + only [Assignment: organization-defined subset of privileged users].' + +AU-11: + family: AU + name: Audit Record Retention + description: | + 'The organization retains audit records for [Assignment: + organization-defined time period consistent with records retention policy] + to provide support for after-the-fact investigations of security incidents + and to meet regulatory and organizational information retention + requirements.' + +AU-12: + family: AU + name: Audit Generation + description: | + 'The information system: + a. Provides audit record generation capability for the auditable events + defined in AU-2 a. at [Assignment: organization-defined information system + components]; + b. Allows [Assignment: organization-defined personnel or roles] to select + which auditable events are to be audited by specific components of the + information system; and + c. Generates audit records for the events defined in AU-2 d. with the + content defined in AU-3.' + +CA-1: + family: CA + name: Security Assessment and Authorization Policies and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: + organization-defined personnel or roles]: + 1. A security assessment and authorization policy that addresses purpose, + scope, roles, responsibilities, management commitment, coordination among + organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the security assessment + and authorization policy and associated security assessment and + authorization controls; and + b. Reviews and updates the current: + 1. Security assessment and authorization policy [Assignment: + organization-defined frequency]; and + 2. Security assessment and authorization procedures [Assignment: + organization-defined frequency].' + +CA-2: + family: CA + name: Security Assessments + description: | + 'The organization: + a. Develops a security assessment plan that describes the scope of the + assessment including: + 1. Security controls and control enhancements under assessment; + 2. Assessment procedures to be used to determine security control + effectiveness; and + 3. Assessment environment, assessment team, and assessment roles and + responsibilities; + b. Assesses the security controls in the information system and its + environment of operation [Assignment: organization-defined frequency] to + determine the extent to which the controls are implemented correctly, + operating as intended, and producing the desired outcome with respect to + meeting established security requirements; + c. Produces a security assessment report that documents the results of the + assessment; and + d. Provides the results of the security control assessment to [Assignment: + organization-defined individuals or roles].' + +CA-2 (1): + family: CA + name: Security Assessments | Independent Assessors + description: | + 'The organization employs assessors or assessment teams with [Assignment: + organization-defined level of independence] to conduct security control + assessments.' + +CA-2 (2): + family: CA + name: Security Assessments | Specialized Assessments + description: | + 'The organization includes as part of security control assessments, + [Assignment: organization-defined frequency], [Selection: announced; + unannounced], [Selection (one or more): in-depth monitoring; vulnerability + scanning; malicious user testing; insider threat assessment; + performance/load testing; [Assignment: organization-defined other forms of + security assessment]].' + +CA-2 (3): + family: CA + name: Security Assessments | External Organizations + description: | + 'The organization accepts the results of an assessment of [Assignment: + organization-defined information system] performed by [Assignment: + organization-defined external organization] when the assessment meets + [Assignment: organization-defined requirements].' + +CA-3: + family: CA + name: System Interconnections + description: | + 'The organization: + a. Authorizes connections from the information system to other information + systems through the use of Interconnection Security Agreements; + b. Documents, for each interconnection, the interface characteristics, + security requirements, and the nature of the information communicated; and + c. Reviews and updates Interconnection Security Agreements [Assignment: + organization-defined frequency].' + +CA-3 (3): + family: CA + name: System Interconnections | Unclassified Non-National Security System Connections + description: | + 'The organization prohibits the direct connection of an [Assignment: + organization-defined unclassified, non-national security system] to an + external network without the use of [Assignment; organization-defined + boundary protection device].' + +CA-3 (5): + family: CA + name: System Interconnections | Restrictions on External Network Connections + description: | + 'The organization employs [Selection: allow-all, deny-by-exception; + deny-all, permit-by-exception] policy for allowing [Assignment: + organization-defined information systems] to connect to external information + systems.' + +CA-5: + family: CA + name: Plan of Action and Milestones + description: | + 'The organization: + a. Develops a plan of action and milestones for the information system to + document the organization''s planned remedial actions to correct weaknesses + or deficiencies noted during the assessment of the security controls and to + reduce or eliminate known vulnerabilities in the system; and + b. Updates existing plan of action and milestones [Assignment: + organization-defined frequency] based on the findings from security controls + assessments, security impact analyses, and continuous monitoring + activities.' + +CA-6: + family: CA + name: Security Authorization + description: | + 'The organization: + a. Assigns a senior-level executive or manager as the authorizing official + for the information system; + b. Ensures that the authorizing official authorizes the information system + for processing before commencing operations; and + c. Updates the security authorization [Assignment: organization-defined + frequency].' + +CA-7: + family: CA + name: Continuous Monitoring + description: | + 'The organization develops a continuous monitoring strategy and implements a + continuous monitoring program that includes: + a. Establishment of [Assignment: organization-defined metrics] to be + monitored; + b. Establishment of [Assignment: organization-defined frequencies] for + monitoring and [Assignment: organization-defined frequencies] for + assessments supporting such monitoring; + c. Ongoing security control assessments in accordance with the + organizational continuous monitoring strategy; + d. Ongoing security status monitoring of organization-defined metrics in + accordance with the organizational continuous monitoring strategy; + e. Correlation and analysis of security-related information generated by + assessments and monitoring; + f. Response actions to address results of the analysis of security-related + information; and + g. Reporting the security status of organization and the information system + to [Assignment: organization-defined personnel or roles] [Assignment: + organization-defined frequency].' + +CA-7 (1): + family: CA + name: Continuous Monitoring | Independent Assessment + description: | + 'The organization employs assessors or assessment teams with [Assignment: + organization-defined level of independence] to monitor the security controls + in the information system on an ongoing basis.' + +CA-8: + family: CA + name: Penetration Testing + description: | + 'The organization conducts penetration testing [Assignment: + organization-defined frequency] on [Assignment: organization-defined + information systems or system components].' + +CA-8 (1): + family: CA + name: Penetration Testing | Independent Penetration Agent or Team + description: | + 'The organization employs an independent penetration agent or penetration + team to perform penetration testing on the information system or system + components.' + +CA-9: + family: CA + name: Internal System Connections + description: | + 'The organization: + a. Authorizes internal connections of [Assignment: organization-defined + information system components or classes of components] to the information + system; and + b. Documents, for each internal connection, the interface characteristics, + security requirements, and the nature of the information communicated.' + +CM-1: + family: CM + name: Configuration Management Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: + organization-defined personnel or roles]: + 1. A configuration management policy that addresses purpose, scope, roles, + responsibilities, management commitment, coordination among organizational + entities, and compliance; and + 2. Procedures to facilitate the implementation of the configuration + management policy and associated configuration management controls; and + b. Reviews and updates the current: + 1. Configuration management policy [Assignment: organization-defined + frequency]; and + 2. Configuration management procedures [Assignment: organization-defined + frequency].' + +CM-2: + family: CM + name: Baseline Configuration + description: | + 'The organization develops, documents, and maintains under configuration + control, a current baseline configuration of the information system.' + +CM-2 (1): + family: CM + name: Baseline Configuration | Reviews and Updates + description: | + 'The organization reviews and updates the baseline configuration of the + information system: + CM-2 (1)(a) [Assignment: organization-defined frequency]; + CM-2 (1)(b) When required due to [Assignment organization-defined + circumstances]; and + CM-2 (1)(c) As an integral part of information system component + installations and upgrades.' + +CM-2(2): + family: CM + name: Baseline Configuration | Automation Support For Accuracy / Currency + description: | + 'The organization employs automated mechanisms to maintain an up-to-date, + complete, accurate, and readily available baseline configuration of the + information system.' + +CM-2 (3): + family: CM + name: Baseline Configuration | Retention of Previous Configurations + description: | + 'The organization retains [Assignment: organization-defined previous + versions of baseline configurations of the information system] to support + rollback.' + +CM-2 (7): + family: CM + name: Baseline Configuration | Configure Systems, Components, or Devices for High-Risk + Areas + description: | + 'The organization: + CM-2 (7)(a) Issues [Assignment: organization-defined information systems, + system components, or devices] with [Assignment: organization-defined + configurations] to individuals traveling to locations that the organization + deems to be of significant risk; and + CM-2 (7)(b) Applies [Assignment: organization-defined security safeguards] + to the devices when the individuals return.' + +CM-3: + family: CM + name: Configuration Change Control + description: | + 'The organization: + a. Determines the types of changes to the information system that are + configuration-controlled; + b. Reviews proposed configuration-controlled changes to the information + system and approves or disapproves such changes with explicit consideration + for security impact analyses; + c. Documents configuration change decisions associated with the information + system; + d. Implements approved configuration-controlled changes to the information + system; + e. Retains records of configuration-controlled changes to the information + system for [Assignment: organization-defined time period]; + f. Audits and reviews activities associated with configuration-controlled + changes to the information system; and + g. Coordinates and provides oversight for configuration change control + activities through [Assignment: organization-defined configuration change + control element (e.g., committee, board)] that convenes [Selection (one or + more): [Assignment: organization-defined frequency]; [Assignment: + organization-defined configuration change conditions]].' + +CM-4: + family: CM + name: Security Impact Analysis + description: | + 'The organization analyzes changes to the information system to determine + potential security impacts prior to change implementation.' + +CM-5: + family: CM + name: Access Restrictions For Change + description: | + 'The organization defines, documents, approves, and enforces physical and + logical access restrictions associated with changes to the information + system.' + +CM-5 (1): + family: CM + name: Access Restrictions For Change | Automated Access Enforcement / Auditing + description: | + 'The information system enforces access restrictions and supports auditing + of the enforcement actions.' + +CM-5 (3): + family: CM + name: Access Restrictions For Change | Signed Components + description: | + 'The information system prevents the installation of [Assignment: + organization-defined software and firmware components] without verification + that the component has been digitally signed using a certificate that is + recognized and approved by the organization.' + +CM-5 (5): + family: CM + name: Access Restrictions For Change | Limit Production / Operational Privileges + description: | + 'The organization: + CM-5 (5)(a) Limits privileges to change information system components and system-related information within a production or operational environment; and + CM-5 (5)(b) Reviews and reevaluates privileges [Assignment: organization-defined frequency].' +CM-6: + family: CM + name: Configuration Settings + description: | + 'The organization: + a. Establishes and documents configuration settings for information technology products employed within the information system using [Assignment: organization-defined security configuration checklists] that reflect the most restrictive mode consistent with operational requirements; + b. Implements the configuration settings; + c. Identifies, documents, and approves any deviations from established configuration settings for [Assignment: organization-defined information system components] based on [Assignment: organization-defined operational requirements]; and + d. Monitors and controls changes to the configuration settings in accordance with organizational policies and procedures.' + +CM-6 (1): + family: CM + name: Configuration Settings | Automated essential Management / Application / Verification + description: | + 'The organization employs automated mechanisms to centrally manage, apply, + and verify configuration settings for [Assignment: organization-defined + information system components].' + +CM-7: + family: CM + name: Least Functionality + description: | + 'The organization: + a. Configures the information system to provide only essential capabilities; and + b. Prohibits or restricts the use of the following functions, ports, protocols, and/or services: [Assignment: organization-defined prohibited or restricted functions, ports, protocols, and/or services].' + +CM-7 (1): + family: CM + name: Least Functionality | Periodic Review + description: | + 'The organization: + CM-7 (1)(a) Reviews the information system [Assignment: organization-defined frequency] to identify unnecessary and/or nonsecure functions, ports, protocols, and services; and + CM-7 (1)(b) Disables [Assignment: organization-defined functions, ports, protocols, and services within the information system deemed to be unnecessary and/or nonsecure].' + +CM-7 (2): + family: CM + name: Least Functionality | Prevent Program Execution + description: | + 'The information system prevents program execution in accordance with + [Selection (one or more): [Assignment: organization-defined policies + regarding software program usage and restrictions]; rules authorizing the + terms and conditions of software program usage].' + +CM-7 (5): + family: CM + name: Least Functionality | Authorized Software / Whitelisting + description: | + 'The organization: + CM-7 (5)(a) Identifies [Assignment: organization-defined software programs authorized to execute on the information system]; + CM-7 (5)(b) Employs a deny-all, permit-by-exception policy to allow the execution of authorized software programs on the information system; and + CM-7 (5)(c) Reviews and updates the list of authorized software programs [Assignment: organization-defined frequency].' + +CM-8: + family: CM + name: Information System Component Inventory + description: | + 'The organization: + a. Develops and documents an inventory of information system components that: + 1. Accurately reflects the current information system; + 2. Includes all components within the authorization boundary of the information system; + 3. Is at the level of granularity deemed necessary for tracking and reporting; and + 4. Includes [Assignment: organization-defined information deemed necessary to achieve effective information system component accountability]; and + b. Reviews and updates the information system component inventory [Assignment: organization-defined frequency].' + +CM-8 (1): + family: CM + name: Information System Component Inventory | Updates During Installations / Removals + description: | + 'The organization updates the inventory of information system components as + an integral part of component installations, removals, and information + system updates.' + +CM-8 (3): + family: CM + name: Information System Component Inventory | Automated Unauthorized Component + Detection + description: | + 'The organization: + CM-8 (3)(a) Employs automated mechanisms [Assignment: organization-defined frequency] to detect the presence of unauthorized hardware, software, and firmware components within the information system; and + CM-8 (3)(b) Takes the following actions when unauthorized components are detected: [Selection (one or more): disables network access by such components; isolates the components; notifies [Assignment: organization-defined personnel or roles]].' + +CM-8 (5): + family: CM + name: Information System Component Inventory | No Duplicate Accounting of Components + description: | + 'The organization verifies that all components within the authorization + boundary of the information system are not duplicated in other information + system component inventories.' + +CM-9: + family: CM + name: Configuration Management Plan + description: | + 'The organization develops, documents, and implements a configuration management plan for the information system that: + a. Addresses roles, responsibilities, and configuration management processes and procedures; + b. Establishes a process for identifying configuration items throughout the system development life cycle and for managing the configuration of the configuration items; + c. Defines the configuration items for the information system and places the configuration items under configuration management; and + d. Protects the configuration management plan from unauthorized disclosure and modification.' + +CM-10: + family: CM + name: Software Usage Restrictions + description: | + 'The organization: + a. Uses software and associated documentation in accordance with contract agreements and copyright laws; + b. Tracks the use of software and associated documentation protected by quantity licenses to control copying and distribution; and + c. Controls and documents the use of peer-to-peer file sharing technology to ensure that this capability is not used for the unauthorized distribution, display, performance, or reproduction of copyrighted work.' + +CM-10 (1): + family: CM + name: Software Usage Restrictions | Open Source Software + description: | + 'The organization establishes the following restrictions on the use of open + source software: [Assignment: organization-defined restrictions].' + +CM-11: + family: CM + name: User-Installed Software + description: | + 'The organization: + a. Establishes [Assignment: organization-defined policies] governing the installation of software by users; + b. Enforces software installation policies through [Assignment: organization-defined methods]; and + c. Monitors policy compliance at [Assignment: organization-defined frequency].' + +CP-1: + family: CP + name: Contingency Planning Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A contingency planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the contingency planning policy and associated contingency planning controls; and + b. Reviews and updates the current: + 1. Contingency planning policy [Assignment: organization-defined frequency]; and + 2. Contingency planning procedures [Assignment: organization-defined frequency].' + +CP-2: + family: CP + name: Contingency Plan + description: | + 'The organization: + a. Develops a contingency plan for the information system that: + 1. Identifies essential missions and business functions and associated contingency requirements; + 2. Provides recovery objectives, restoration priorities, and metrics; + 3. Addresses contingency roles, responsibilities, assigned individuals with contact information; + 4. Addresses maintaining essential missions and business functions despite an information system disruption, compromise, or failure; + 5. Addresses eventual, full information system restoration without deterioration of the security safeguards originally planned and implemented; and + 6. Is reviewed and approved by [Assignment: organization-defined personnel or roles]; + b. Distributes copies of the contingency plan to [Assignment: organization-defined key contingency personnel (identified by name and/or by role) and organizational elements]; + c. Coordinates contingency planning activities with incident handling activities; + d. Reviews the contingency plan for the information system [Assignment: organization-defined frequency]; + e. Updates the contingency plan to address changes to the organization, information system, or environment of operation and problems encountered during contingency plan implementation, execution, or testing; + f. Communicates contingency plan changes to [Assignment: organization-defined key contingency personnel (identified by name and/or by role) and organizational elements]; and + g. Protects the contingency plan from unauthorized disclosure and modification.' + +CP-2 (1): + family: CP + name: Contingency Plan | Coordinate With Related Plans + description: | + 'The organization coordinates contingency plan development with + organizational elements responsible for related plans.' + +CP-2 (2): + family: CP + name: Contingency Plan | Capacity Planning + description: | + 'The organization conducts capacity planning so that necessary capacity for + information processing, telecommunications, and environmental support exists + during contingency operations.' + +CP-2 (3): + family: CP + name: Contingency Plan | Resume Essential Missions / Business Functions + description: | + 'The organization plans for the resumption of essential missions and + business functions within [Assignment: organization-defined time period] of + contingency plan activation.' + +CP-2 (8): + family: CP + name: Contingency Plan | Identify Critical Assets + description: | + 'The organization identifies critical information system assets supporting + essential missions and business functions.' + +CP-3: + family: CP + name: Contingency Training + description: | + 'The organization provides contingency training to information system users consistent with assigned roles and responsibilities: + a. Within [Assignment: organization-defined time period] of assuming a contingency role or responsibility; + b. When required by information system changes; and + c. [Assignment: organization-defined frequency] thereafter.' + +CP-4: + family: CP + name: Contingency Plan Testing + description: | + 'The organization: + a. Tests the contingency plan for the information system [Assignment: organization-defined frequency] using [Assignment: organization-defined tests] to determine the effectiveness of the plan and the organizational readiness to execute the plan; + b. Reviews the contingency plan test results; and + c. Initiates corrective actions, if needed.' + +CP-4 (1): + family: CP + name: Contingency Plan Testing | Coordinate With Related Plans + description: | + 'The organization coordinates contingency plan testing with organizational + elements responsible for related plans.' + +CP-6: + family: CP + name: Alternate Storage Site + description: | + 'The organization: + a. Establishes an alternate storage site including necessary agreements to permit the storage and retrieval of information system backup information; and + b. Ensures that the alternate storage site provides information security safeguards equivalent to that of the primary site.' + +CP-6 (1): + family: CP + name: Alternate Storage Site | Separation From Primary Site + description: | + 'The organization identifies an alternate storage site that is separated + from the primary storage site to reduce susceptibility to the same threats.' + +CP-6 (3): + family: CP + name: Alternate Storage Site | Accessibility + description: | + 'The organization identifies potential accessibility problems to the + alternate storage site in the event of an area-wide disruption or disaster + and outlines explicit mitigation actions.' + +CP-7: + family: CP + name: Alternate Processing Site + description: | + 'The organization: + a. Establishes an alternate processing site including necessary agreements to permit the transfer and resumption of [Assignment: organization-defined information system operations] for essential missions/business functions within [Assignment: organization-defined time period consistent with recovery time and recovery point objectives] when the primary processing capabilities are unavailable; + b. Ensures that equipment and supplies required to transfer and resume operations are available at the alternate processing site or contracts are in place to support delivery to the site within the organization-defined time period for transfer/resumption; and + c. Ensures that the alternate processing site provides information security safeguards equivalent to those of the primary site.' + +CP-7 (1): + family: CP + name: Alternate Processing Site | Separation From Primary Site + description: | + 'The organization identifies an alternate processing site that is separated + from the primary processing site to reduce susceptibility to the same + threats.' + +CP-7 (2): + family: CP + name: Alternate Processing Site | Accessibility + description: | + 'The organization identifies potential accessibility problems to the + alternate processing site in the event of an area-wide disruption or + disaster and outlines explicit mitigation actions.' + +CP-7 (3): + family: CP + name: Alternate Processing Site | Priority of Service + description: | + 'The organization develops alternate processing site agreements that contain + priority-of-service provisions in accordance with organizational + availability requirements (including recovery time objectives).' + +CP-8: + family: CP + name: Telecommunications Services + description: | + 'The organization establishes alternate telecommunications services + including necessary agreements to permit the resumption of [Assignment: + organization-defined information system operations] for essential missions + and business functions within [Assignment: organization-defined time period] + when the primary telecommunications capabilities are unavailable at either + the primary or alternate processing or storage sites.' + +CP-8 (1): + family: CP + name: Telecommunications Services | Priority of Service Provisions + description: | + 'The organization: + CP-8 (1)(a) Develops primary and alternate telecommunications service agreements that contain priority-of-service provisions in accordance with organizational availability requirements (including recovery time objectives); and + CP-8 (1)(b) Requests Telecommunications Service Priority for all telecommunications services used for national security emergency preparedness in the event that the primary and/or alternate telecommunications services are provided by a common carrier.' + +CP-8 (2): + family: CP + name: Telecommunications Services | Single Points of Failure + description: | + 'The organization obtains alternate telecommunications services to reduce + the likelihood of sharing a single point of failure with primary + telecommunications services.' + +CP-9: + family: CP + name: Information System Backup + description: | + 'The organization: + a. Conducts backups of user-level information contained in the information system [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives]; + b. Conducts backups of system-level information contained in the information system [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives]; + c. Conducts backups of information system documentation including security-related documentation [Assignment: organization-defined frequency consistent with recovery time and recovery point objectives]; and + d. Protects the confidentiality, integrity, and availability of backup information at storage locations.' + +CP-9 (1): + family: CP + name: Information System Backup | Testing For Reliability / Integrity + description: | + 'The organization tests backup information [Assignment: organization-defined + frequency] to verify media reliability and information integrity.' + +CP-9 (3): + family: CP + name: Information System Backup | Separate Storage for Critical Information + description: | + 'The organization stores backup copies of [Assignment: organization-defined + critical information system software and other security-related information] + in a separate facility or in a fire-rated container that is not collocated + with the operational system.' + +CP-10: + family: CP + name: Information System Recovery and Reconstitution + description: | + 'The organization provides for the recovery and reconstitution of the + information system to a known state after a disruption, compromise, or + failure.' + +CP-10 (2): + family: CP + name: Information System Recovery and Reconstitution | Transaction Recovery + description: | + 'The information system implements transaction recovery for systems that are + transaction-based.' + +IA-1: + family: IA + name: Identification and Authentication Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. An identification and authentication policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the identification and authentication policy and associated identification and authentication controls; and + b. Reviews and updates the current: + 1. Identification and authentication policy [Assignment: organization-defined frequency]; and + 2. Identification and authentication procedures [Assignment: organization-defined frequency].' + +IA-2: + family: IA + name: Identification and Authentication (Organizational Users) + description: | + 'The information system uniquely identifies and authenticates organizational + users (or processes acting on behalf of organizational users).' + +IA-2 (1): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Privileged Accounts + description: | + 'The information system implements multifactor authentication for network + access to privileged accounts.' + +IA-2 (2): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Non-Privileged Accounts + description: | + 'The information system implements multifactor authentication for network + access to non-privileged accounts.' + +IA-2 (3): + family: IA + name: Identification and Authentication (Organizational Users) | Local Access to + Privileged Accounts + description: | + 'The information system implements multifactor authentication for local + access to privileged accounts.' + +IA-2 (5): + family: IA + name: Identification and Authentication (Organizational Users) | Group Authentication + description: | + 'The organization requires individuals to be authenticated with an + individual authenticator when a group authenticator is employed.' + +IA-2 (8): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Privileged Accounts - Replay Resistant + description: | + 'The information system implements replay-resistant authentication + mechanisms for network access to privileged accounts.' + +IA-2 (11): + family: IA + name: Identification and Authentication (Organizational Users) | Remote Access - + Separate Device + description: | + 'The information system implements multifactor authentication for remote + access to privileged and non-privileged accounts such that one of the + factors is provided by a device separate from the system gaining access and + the device meets [Assignment: organization-defined strength of mechanism + requirements].' + +IA-2 (12): + family: IA + name: Identification and Authentication (Organizational Users) | Acceptance of PIV + Credentials + description: | + 'The information system accepts and electronically verifies Personal + Identity Verification (PIV) credentials.' + +IA-3: + family: IA + name: Device Identification and Authentication + description: | + 'The information system uniquely identifies and authenticates [Assignment: + organization-defined specific and/or types of devices] before establishing a + [Selection (one or more): local; remote; network] connection.' + +IA-4: + family: IA + name: Identifier Management + description: | + 'The organization manages information system identifiers by: + a. Receiving authorization from [Assignment: organization-defined personnel or roles] to assign an individual, group, role, or device identifier; + b. Selecting an identifier that identifies an individual, group, role, or device; + c. Assigning the identifier to the intended individual, group, role, or device; + d. Preventing reuse of identifiers for [Assignment: organization-defined time period]; and + e. Disabling the identifier after [Assignment: organization-defined time period of inactivity].' + +IA-4 (4): + family: IA + name: Identifier Management | Identify User Status + description: | + 'The organization manages individual identifiers by uniquely identifying each individual as [Assignment: organization-defined characteristic identifying individual status].' + +IA-5: + family: IA + name: Authenticator Management + description: | + 'The organization manages information system authenticators by: + a. Verifying, as part of the initial authenticator distribution, the identity of the individual, group, role, or device receiving the authenticator; + b. Establishing initial authenticator content for authenticators defined by the organization; + c. Ensuring that authenticators have sufficient strength of mechanism for their intended use; + d. Establishing and implementing administrative procedures for initial authenticator distribution, for lost/compromised or damaged authenticators, and for revoking authenticators; + e. Changing default content of authenticators prior to information system installation; + f. Establishing minimum and maximum lifetime restrictions and reuse conditions for authenticators; + g. Changing/refreshing authenticators [Assignment: organization-defined time period by authenticator type]; + h. Protecting authenticator content from unauthorized disclosure and modification; + i. Requiring individuals to take, and having devices implement, specific security safeguards to protect authenticators; and + j. Changing authenticators for group/role accounts when membership to those accounts changes.' + +IA-5 (1): + family: IA + name: Authenticator Management | Password-Based Authentication + description: | + 'The information system, for password-based authentication: + IA-5 (1)(a) Enforces minimum password complexity of [Assignment: organization-defined requirements for case sensitivity, number of characters, mix of upper-case letters, lower-case letters, numbers, and special characters, including minimum requirements for each type]; + IA-5 (1)(b) Enforces at least the following number of changed characters when new passwords are created: [Assignment: organization-defined number]; + IA-5 (1)(c) Stores and transmits only cryptographically-protected passwords; + IA-5 (1)(d) Enforces password minimum and maximum lifetime restrictions of [Assignment: organization-defined numbers for lifetime minimum, lifetime maximum]; + IA-5 (1)(e) Prohibits password reuse for [Assignment: organization-defined number] generations; and + IA-5 (1)(f) Allows the use of a temporary password for system logons with an immediate change to a permanent password.' + +IA-5 (2): + family: IA + name: Authenticator Management | PKI-Based Authentication + description: | + 'The information system, for PKI-based authentication: + IA-5 (2)(a) Validates certifications by constructing and verifying a certification path to an accepted trust anchor including checking certificate status information; + IA-5 (2)(b) Enforces authorized access to the corresponding private key; + IA-5 (2)(c) Maps the authenticated identity to the account of the individual or group; and + IA-5 (2)(d) Implements a local cache of revocation data to support path discovery and validation in case of inability to access revocation information via the network.' + +IA-5 (3): + family: IA + name: Authenticator Management | In-Person or Trusted Third-Party Registration + description: | + 'The organization requires that the registration process to receive + [Assignment: organization-defined types of and/or specific authenticators] + be conducted [Selection: in person; by a trusted third party] before + [Assignment: organization-defined registration authority] with authorization + by [Assignment: organization-defined personnel or roles].' + +IA-5 (4): + family: IA + name: Authenticator Management | Automated Support for Password Strength Determination + description: | + 'The organization employs automated tools to determine if password + authenticators are sufficiently strong to satisfy [Assignment: + organization-defined requirements].' + +IA-5 (6): + family: IA + name: Authenticator Management | Protection of Authenticators + description: | + 'The organization protects authenticators commensurate with the security + category of the information to which use of the authenticator permits + access.' + +IA-5 (7): + family: IA + name: Authenticator Management | No Embedded Unencrypted Static Authenticators + description: | + 'The organization ensures that unencrypted static authenticators are not + embedded in applications or access scripts or stored on function keys.' + +IA-5 (11): + family: IA + name: Authenticator Management | Hardware Token-Based Authentication + description: | + 'The information system, for hardware token-based authentication, employs + mechanisms that satisfy [Assignment: organization-defined token quality + requirements].' + +IA-6: + family: IA + name: Authenticator Feedback + description: | + 'The information system obscures feedback of authentication information + during the authentication process to protect the information from possible + exploitation/use by unauthorized individuals.' + +IA-7: + family: IA + name: Cryptographic Module Authentication + description: | + 'The information system implements mechanisms for authentication to a + cryptographic module that meet the requirements of applicable federal laws, + Executive Orders, directives, policies, regulations, standards, and guidance + for such authentication.' + +IA-8: + family: IA + name: Identification and Authentication (Non-Organizational Users) + description: | + 'The information system uniquely identifies and authenticates + non-organizational users (or processes acting on behalf of + non-organizational users).' + +IA-8 (1): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Acceptance + of PIV Credentials from Other Agencies + description: | + 'The information system accepts and electronically verifies Personal + Identity Verification (PIV) credentials from other federal agencies.' + +IA-8 (2): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Acceptance + of Third-Party Credentials + description: | + 'The information system accepts only FICAM-approved third-party + credentials.' + +IA-8 (3): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Use of FICAM-Approved + Products + description: | + 'The organization employs only FICAM-approved information system components + in [Assignment: organization-defined information systems] to accept + third-party credentials.' + +IA-8 (4): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Use of FICAM-Issued + Profiles + description: | + 'The information system conforms to FICAM-issued profiles.' + +IR-1: + family: IR + name: Incident Response Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. An incident response policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the incident response policy and associated incident response controls; and + b. Reviews and updates the current: + 1. Incident response policy [Assignment: organization-defined frequency]; and + 2. Incident response procedures [Assignment: organization-defined frequency].' + +IR-2: + family: IR + name: Incident Response Training + description: | + 'The organization provides incident response training to information system users consistent with assigned roles and responsibilities: + a. Within [Assignment: organization-defined time period] of assuming an incident response role or responsibility; + b. When required by information system changes; and + c. [Assignment: organization-defined frequency] thereafter.' + +IR-3: + family: IR + name: Incident Response Testing + description: | + 'The organization tests the incident response capability for the information + system [Assignment: organization-defined frequency] using [Assignment: + organization-defined tests] to determine the incident response effectiveness + and documents the results.' + +IR-3 (2): + family: IR + name: Incident Response Testing | Coordination With Related Plans + description: | + 'The organization coordinates incident response testing with organizational + elements responsible for related plans.' + +IR-4: + family: IR + name: Incident Handling + description: | + 'The organization: + a. Implements an incident handling capability for security incidents that includes preparation, detection and analysis, containment, eradication, and recovery; + b. Coordinates incident handling activities with contingency planning activities; and + c. Incorporates lessons learned from ongoing incident handling activities into incident response procedures, training, and testing, and implements the resulting changes accordingly.' + +IR-4 (1): + family: IR + name: Incident Handling | Automated Incident Handling Processes + description: | + 'The organization employs automated mechanisms to support the incident + handling process.' + +IR-5: + family: IR + name: Incident Monitoring + description: | + 'The organization tracks and documents information system security + incidents.' + +IR-6: + family: IR + name: Incident Reporting + description: | + 'The organization: + a. Requires personnel to report suspected security incidents to the organizational incident response capability within [Assignment: organization-defined time period]; and + b. Reports security incident information to [Assignment: organization-defined authorities].' + +IR-6 (1): + family: IR + name: Incident Reporting | Automated Reporting + description: | + 'The organization employs automated mechanisms to assist in the reporting of + security incidents.' + +IR-7: + family: IR + name: Incident Response Assistance + description: | + 'The organization provides an incident response support resource, integral + to the organizational incident response capability that offers advice and + assistance to users of the information system for the handling and reporting + of security incidents.' + +IR-7 (1): + family: IR + name: Incident Response Assistance | Automation Support For Availability of Information + / Support + description: | + 'The organization employs automated mechanisms to increase the availability + of incident response-related information and support.' + +IR-7 (2): + family: IR + name: Incident Response Assistance | Coordination With External Providers + description: | + 'The organization: + IR-7 (2)(a) Establishes a direct, cooperative relationship between its incident response capability and external providers of information system protection capability; and + IR-7 (2)(b) Identifies organizational incident response team members to the external providers.' + +IR-8: + family: IR + name: Incident Response Plan + description: | + 'The organization: + a. Develops an incident response plan that: + 1. Provides the organization with a roadmap for implementing its incident response capability; + 2. Describes the structure and organization of the incident response capability; + 3. Provides a high-level approach for how the incident response capability fits into the overall organization; + 4. Meets the unique requirements of the organization, which relate to mission, size, structure, and functions; + 5. Defines reportable incidents; + 6. Provides metrics for measuring the incident response capability within the organization; + 7. Defines the resources and management support needed to effectively maintain and mature an incident response capability; and + 8. Is reviewed and approved by [Assignment: organization-defined personnel or roles]; + b. Distributes copies of the incident response plan to [Assignment: organization-defined incident response personnel (identified by name and/or by role) and organizational elements]; + c. Reviews the incident response plan [Assignment: organization-defined frequency]; + d. Updates the incident response plan to address system/organizational changes or problems encountered during plan implementation, execution, or testing; + e. Communicates incident response plan changes to [Assignment: organization-defined incident response personnel (identified by name and/or by role) and organizational elements]; and + f. Protects the incident response plan from unauthorized disclosure and modification.' + +IR-9: + family: IR + name: Information Spillage Response + description: | + 'The organization responds to information spills by: + a. Identifying the specific information involved in the information system contamination; + b. Alerting [Assignment: organization-defined personnel or roles] of the information spill using a method of communication not associated with the spill; + c. Isolating the contaminated information system or system component; + d. Eradicating the information from the contaminated information system or component; + e. Identifying other information systems or system components that may have been subsequently contaminated; and + f. Performing other [Assignment: organization-defined actions].' + +IR-9 (1): + family: IR + name: Information Spillage Response | Responsible Personnel + description: | + 'The organization assigns [Assignment: organization-defined personnel or + roles] with responsibility for responding to information spills.' + +IR-9 (2): + family: IR + name: Information Spillage Response | Training + description: | + 'The organization provides information spillage response training + [Assignment: organization-defined frequency].' + +IR-9 (3): + family: IR + name: Information Spillage Response | Post-Spill Operations + description: | + 'The organization implements [Assignment: organization-defined procedures] + to ensure that organizational personnel impacted by information spills can + continue to carry out assigned tasks while contaminated systems are + undergoing corrective actions.' + +IR-9 (4): + family: IR + name: Information Spillage Response | Exposure to Unauthorized Personnel + description: | + 'The organization employs [Assignment: organization-defined security + safeguards] for personnel exposed to information not within assigned access + authorizations.' + +MA-1: + family: MA + name: System Maintenance Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A system maintenance policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the system maintenance policy and associated system maintenance controls; and + b. Reviews and updates the current: + 1. System maintenance policy [Assignment: organization-defined frequency]; and + 2. System maintenance procedures [Assignment: organization-defined frequency].' + +MA-2: + family: MA + name: Controlled Maintenance + description: | + 'The organization: + a. Schedules, performs, documents, and reviews records of maintenance and repairs on information system components in accordance with manufacturer or vendor specifications and/or organizational requirements; + b. Approves and monitors all maintenance activities, whether performed on site or remotely and whether the equipment is serviced on site or removed to another location; + c. Requires that [Assignment: organization-defined personnel or roles] explicitly approve the removal of the information system or system components from organizational facilities for off-site maintenance or repairs; + d. Sanitizes equipment to remove all information from associated media prior to removal from organizational facilities for off-site maintenance or repairs; + e. Checks all potentially impacted security controls to verify that the controls are still functioning properly following maintenance or repair actions; and + f. Includes [Assignment: organization-defined maintenance-related information] in organizational maintenance records.' + +MA-3: + family: MA + name: Maintenance Tools + description: | + 'The organization approves, controls, and monitors information system + maintenance tools.' + +MA-3 (1): + family: MA + name: Maintenance Tools | Inspect Tools + description: | + 'The organization inspects the maintenance tools carried into a facility by + maintenance personnel for improper or unauthorized modifications.' + +MA-3 (2): + family: MA + name: Maintenance Tools | Inspect Media + description: | + 'The organization checks media containing diagnostic and test programs for + malicious code before the media are used in the information system.' + +MA-3 (3): + family: MA + name: Maintenance Tools | Prevent Unauthorized Removal + description: | + 'The organization prevents the unauthorized removal of maintenance equipment containing organizational information by: + MA-3 (3)(a) Verifying that there is no organizational information contained on the equipment; + MA-3 (3)(b) Sanitizing or destroying the equipment; + MA-3 (3)(c) Retaining the equipment within the facility; or + MA-3 (3)(d) Obtaining an exemption from [Assignment: organization-defined personnel or roles] explicitly authorizing removal of the equipment from the facility.' + +MA-4: + family: MA + name: Nonlocal Maintenance + description: | + 'The organization: + a. Approves and monitors nonlocal maintenance and diagnostic activities; + b. Allows the use of nonlocal maintenance and diagnostic tools only as consistent with organizational policy and documented in the security plan for the information system; + c. Employs strong authenticators in the establishment of nonlocal maintenance and diagnostic sessions; + d. Maintains records for nonlocal maintenance and diagnostic activities; and + e. Terminates session and network connections when nonlocal maintenance is completed.' + +MA-4 (2): + family: MA + name: Nonlocal Maintenance | Document Nonlocal Maintenance + description: | + 'The organization documents in the security plan for the information system, + the policies and procedures for the establishment and use of nonlocal + maintenance and diagnostic connections.' + +MA-5: + family: MA + name: Maintenance Personnel + description: | + 'The organization: + a. Establishes a process for maintenance personnel authorization and maintains a list of authorized maintenance organizations or personnel; + b. Ensures that non-escorted personnel performing maintenance on the information system have required access authorizations; and + c. Designates organizational personnel with required access authorizations and technical competence to supervise the maintenance activities of personnel who do not possess the required access authorizations.' + +MA-5 (1): + family: MA + name: Maintenance Personnel | Individuals Without Appropriate Access + description: | + 'The organization: + MA-5 (1)(a) Implements procedures for the use of maintenance personnel that lack appropriate security clearances or are not U.S. citizens, that include the following requirements: + MA-5 (1)(b) Develops and implements alternate security safeguards in the event an information system component cannot be sanitized, removed, or disconnected from the system.' + +MA-6: + family: MA + name: Timely Maintenance + description: | + 'The organization obtains maintenance support and/or spare parts for + [Assignment: organization-defined information system components] within + [Assignment: organization-defined time period] of failure.' + +MP-1: + family: MP + name: Media Protection Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A media protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the media protection policy and associated media protection controls; and + b. Reviews and updates the current: + 1. Media protection policy [Assignment: organization-defined frequency]; and + 2. Media protection procedures [Assignment: organization-defined frequency].' + +MP-2: + family: MP + name: Media Access + description: | + 'The organization restricts access to [Assignment: organization-defined + types of digital and/or non-digital media] to [Assignment: + organization-defined personnel or roles].' + +MP-3: + family: MP + name: Media Marking + description: | + 'The organization: + a. Marks information system media indicating the distribution limitations, handling caveats, and applicable security markings (if any) of the information; and + b. Exempts [Assignment: organization-defined types of information system media] from marking as long as the media remain within [Assignment: organization-defined controlled areas].' + +MP-4: + family: MP + name: Media Storage + description: | + 'The organization: + a. Physically controls and securely stores [Assignment: organization-defined types of digital and/or non-digital media] within [Assignment: organization-defined controlled areas]; and + b. Protects information system media until the media are destroyed or sanitized using approved equipment, techniques, and procedures.' + +MP-5: + family: MP + name: Media Transport + description: | + 'The organization: + a. Protects and controls [Assignment: organization-defined types of information system media] during transport outside of controlled areas using [Assignment: organization-defined security safeguards]; + b. Maintains accountability for information system media during transport outside of controlled areas; + c. Documents activities associated with the transport of information system media; and + d. Restricts the activities associated with the transport of information system media to authorized personnel.' + +MP-5 (4): + family: MP + name: Media Transport | Cryptographic Protection + description: | + 'The information system implements cryptographic mechanisms to protect the + confidentiality and integrity of information stored on digital media during + transport outside of controlled areas.' + +MP-6: + family: MP + name: Media Sanitization + description: | + 'The organization: + a. Sanitizes [Assignment: organization-defined information system media] prior to disposal, release out of organizational control, or release for reuse using [Assignment: organization-defined sanitization techniques and procedures] in accordance with applicable federal and organizational standards and policies; and + b. Employs sanitization mechanisms with the strength and integrity commensurate with the security category or classification of the information.' + +MP-6 (2): + family: MP + name: Media Sanitization | Equipment Testing + description: | + 'The organization tests sanitization equipment and procedures [Assignment: + organization-defined frequency] to verify that the intended sanitization is + being achieved.' + +MP-7: + family: MP + name: Media Use + description: | + 'The organization [Selection: restricts; prohibits] the use of [Assignment: + organization-defined types of information system media] on [Assignment: + organization-defined information systems or system components] using + [Assignment: organization-defined security safeguards].' + +MP-7 (1): + family: MP + name: Media Use | Prohibit Use without Owner + description: | + 'The organization prohibits the use of portable storage devices in + organizational information systems when such devices have no identifiable + owner.' + +PE-1: + family: PE + name: Physical and Environmental Protection Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A physical and environmental protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the physical and environmental protection policy and associated physical and environmental protection controls; and + b. Reviews and updates the current: + 1. Physical and environmental protection policy [Assignment: organization-defined frequency]; and + 2. Physical and environmental protection procedures [Assignment: organization-defined frequency].' + +PE-2: + family: PE + name: Physical Access Authorizations + description: | + 'The organization: + a. Develops, approves, and maintains a list of individuals with authorized access to the facility where the information system resides; + b. Issues authorization credentials for facility access; + c. Reviews the access list detailing authorized facility access by individuals [Assignment: organization-defined frequency]; and + d. Removes individuals from the facility access list when access is no longer required.' + +PE-3: + family: PE + name: Physical Access Control + description: | + 'The organization: + a. Enforces physical access authorizations at [Assignment: organization-defined entry/exit points to the facility where the information system resides] by; + 1. Verifying individual access authorizations before granting access to the facility; and + 2. Controlling ingress/egress to the facility using [Selection (one or more): [Assignment: organization-defined physical access control systems/devices]; guards]; + b. Maintains physical access audit logs for [Assignment: organization-defined entry/exit points]; + c. Provides [Assignment: organization-defined security safeguards] to control access to areas within the facility officially designated as publicly accessible; + d. Escorts visitors and monitors visitor activity [Assignment: organization-defined circumstances requiring visitor escorts and monitoring]; + e. Secures keys, combinations, and other physical access devices; + f. Inventories [Assignment: organization-defined physical access devices] every [Assignment: organization-defined frequency]; and + g. Changes combinations and keys [Assignment: organization-defined frequency] and/or when keys are lost, combinations are compromised, or individuals are transferred or terminated.' + +PE-4: + family: PE + name: Access Control For Transmission Medium + description: | + 'The organization controls physical access to [Assignment: + organization-defined information system distribution and transmission lines] + within organizational facilities using [Assignment: organization-defined + security safeguards].' + +PE-5: + family: PE + name: Access Control For Output Devices + description: | + 'The organization controls physical access to information system output + devices to prevent unauthorized individuals from obtaining the output.' + +PE-6: + family: PE + name: Monitoring Physical Access + description: | + 'The organization: + a. Monitors physical access to the facility where the information system resides to detect and respond to physical security incidents; + b. Reviews physical access logs [Assignment: organization-defined frequency] and upon occurrence of [Assignment: organization-defined events or potential indications of events]; and + c. Coordinates results of reviews and investigations with the organizational incident response capability.' + +PE-6 (1): + family: PE + name: Monitoring Physical Access | Intrusion Alarms / Surveillance Equipment + description: | + 'The organization monitors physical intrusion alarms and surveillance + equipment.' + +PE-8: + family: PE + name: Visitor Access Records + description: | + 'The organization: + a. Maintains visitor access records to the facility where the information + system resides for [Assignment: organization-defined time period]; and + b. Reviews visitor access records [Assignment: organization-defined + frequency].' + +PE-9: + family: PE + name: Power Equipment and Cabling + description: | + 'The organization protects power equipment and power cabling for the + information system from damage and destruction.' + +PE-10: + family: PE + name: Emergency Shutoff + description: | + 'The organization: + a. Provides the capability of shutting off power to the information system or individual system components in emergency situations; + b. Places emergency shutoff switches or devices in [Assignment: organization-defined location by information system or system component] to facilitate safe and easy access for personnel; and + c. Protects emergency power shutoff capability from unauthorized activation.' + +PE-11: + family: PE + name: Emergency Power + description: | + 'The organization provides a short-term uninterruptible power supply to + facilitate [Selection (one or more): an orderly shutdown of the information + system; transition of the information system to long-term alternate power] + in the event of a primary power source loss.' + +PE-12: + family: PE + name: Emergency Lighting + description: | + 'The organization employs and maintains automatic emergency lighting for the + information system that activates in the event of a power outage or + disruption and that covers emergency exits and evacuation routes within the + facility.' + +PE-13: + family: PE + name: Fire Protection + description: | + 'The organization employs and maintains fire suppression and detection devices/systems for the information system that are supported by an independent energy source.' + +PE-13 (2): + family: PE + name: Fire Protection | Suppression Devices / Systems + description: | + 'The organization employs fire suppression devices/systems for the + information system that provide automatic notification of any activation to + Assignment: organization-defined personnel or roles] and [Assignment: + organization-defined emergency responders].' + +PE-13 (3): + family: PE + name: Fire Protection | Automatic Fire Suppression + description: | + 'The organization employs an automatic fire suppression capability for the information system when the facility is not staffed on a continuous basis.' + +PE-14: + family: PE + name: Temperature and Humidity Controls + description: | + 'The organization: + a. Maintains temperature and humidity levels within the facility where the information system resides at [Assignment: organization-defined acceptable levels]; and + b. Monitors temperature and humidity levels [Assignment: organization-defined frequency].' + +PE-14 (2): + family: PE + name: Temperature and Humidity Controls | Monitoring With Alarms / Notifications + description: | + 'The organization employs temperature and humidity monitoring that provides + an alarm or notification of changes potentially harmful to personnel or + equipment.' + +PE-15: + family: PE + name: Water Damage Protection + description: | + 'The organization protects the information system from damage resulting from + water leakage by providing master shutoff or isolation valves that are + accessible, working properly, and known to key personnel.' + +PE-16: + family: PE + name: Delivery and Removal + description: | + 'The organization authorizes, monitors, and controls [Assignment: + organization-defined types of information system components] entering and + exiting the facility and maintains records of those items.' + +PE-17: + family: PE + name: Alternate Work Site + description: | + 'The organization: + a. Employs [Assignment: organization-defined security controls] at alternate work sites; + b. Assesses as feasible, the effectiveness of security controls at alternate work sites; and + c. Provides a means for employees to communicate with information security personnel in case of security incidents or problems.' + +PL-1: + family: PL + name: Security Planning Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A security planning policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the security planning policy and associated security planning controls; and + b. Reviews and updates the current: + 1. Security planning policy [Assignment: organization-defined frequency]; and + 2. Security planning procedures [Assignment: organization-defined frequency].' + +PL-2: + family: PL + name: System Security Plan + description: | + 'The organization: + a. Develops a security plan for the information system that: + 1. Is consistent with the organization''s enterprise architecture; + 2. Explicitly defines the authorization boundary for the system; + 3. Describes the operational context of the information system in terms of missions and business processes; + 4. Provides the security categorization of the information system including supporting rationale; + 5. Describes the operational environment for the information system and relationships with or connections to other information systems; + 6. Provides an overview of the security requirements for the system; + 7. Identifies any relevant overlays, if applicable; + 8. Describes the security controls in place or planned for meeting those requirements including a rationale for the tailoring decisions; and + 9. Is reviewed and approved by the authorizing official or designated representative prior to plan implementation; + b. Distributes copies of the security plan and communicates subsequent changes to the plan to [Assignment: organization-defined personnel or roles]; + c. Reviews the security plan for the information system [Assignment: organization-defined frequency]; + d. Updates the plan to address changes to the information system/environment of operation or problems identified during plan implementation or security control assessments; and + e. Protects the security plan from unauthorized disclosure and modification.' + +PL-2 (3): + family: PL + name: System Security Plan | Plan / Coordinate With Other Organizational Entities + description: | + 'The organization plans and coordinates security-related activities + affecting the information system with [Assignment: organization-defined + individuals or groups] before conducting such activities in order to reduce + the impact on other organizational entities.' + +PL-4: + family: PL + name: Rules of Behavior + description: | + 'The organization: + a. Establishes and makes readily available to individuals requiring access to the information system, the rules that describe their responsibilities and expected behavior with regard to information and information system usage; + b. Receives a signed acknowledgment from such individuals, indicating that they have read, understand, and agree to abide by the rules of behavior, before authorizing access to information and the information system; + c. Reviews and updates the rules of behavior [Assignment: organization-defined frequency]; and + d. Requires individuals who have signed a previous version of the rules of behavior to read and re-sign when the rules of behavior are revised/updated.' + +PL-4 (1): + family: PL + name: Rules of Behavior | Social Media and Networking Restrictions + description: | + 'The organization includes in the rules of behavior, explicit restrictions + on the use of social media/networking sites and posting organizational + information on public websites.' + +PL-8: + family: PL + name: Information Security Architecture + description: | + 'The organization: + a. Develops an information security architecture for the information system that: + 1. Describes the overall philosophy, requirements, and approach to be taken with regard to protecting the confidentiality, integrity, and availability of organizational information; + 2. Describes how the information security architecture is integrated into and supports the enterprise architecture; and + 3. Describes any information security assumptions about, and dependencies on, external services; + b. Reviews and updates the information security architecture [Assignment: organization-defined frequency] to reflect updates in the enterprise architecture; and + c. Ensures that planned information security architecture changes are reflected in the security plan, the security Concept of Operations (CONOPS), and organizational procurements/acquisitions.' + +PS-1: + family: PS + name: Personnel Security Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A personnel security policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the personnel security policy and associated personnel security controls; and + b. Reviews and updates the current: + 1. Personnel security policy [Assignment: organization-defined frequency]; and + 2. Personnel security procedures [Assignment: organization-defined frequency].' + +PS-2: + family: PS + name: Position Risk Designation + description: | + 'The organization: + a. Assigns a risk designation to all organizational positions; + b. Establishes screening criteria for individuals filling those positions; and + c. Reviews and updates position risk designations [Assignment: organization-defined frequency].' + +PS-3: + family: PS + name: Personnel Screening + description: | + 'The organization: + a. Screens individuals prior to authorizing access to the information + system; and + b. Rescreens individuals according to [Assignment: organization-defined + conditions requiring rescreening and, where rescreening is so indicated, the + frequency of such rescreening].' + +PS-3 (3): + family: PS + name: Personnel Screening | Information With Special Protection Measures + description: | + 'The organization ensures that individuals accessing an information system processing, storing, or transmitting information requiring special protection: + PS-3 (3)(a) Have valid access authorizations that are demonstrated by assigned official government duties; and + PS-3 (3)(b) Satisfy [Assignment: organization-defined additional personnel screening criteria].' + +PS-4: + family: PS + name: Personnel Termination + description: | + 'The organization, upon termination of individual employment: + a. Disables information system access within [Assignment: organization-defined time period]; + b. Terminates/revokes any authenticators/credentials associated with the individual; + c. Conducts exit interviews that include a discussion of [Assignment: organization-defined information security topics]; + d. Retrieves all security-related organizational information system-related property; + e. Retains access to organizational information and information systems formerly controlled by terminated individual; and + f. Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period].' + +PS-5: + family: PS + name: Personnel Transfer + description: | + 'The organization: + a. Reviews and confirms ongoing operational need for current logical and physical access authorizations to information systems/facilities when individuals are reassigned or transferred to other positions within the organization; + b. Initiates [Assignment: organization-defined transfer or reassignment actions] within [Assignment: organization-defined time period following the formal transfer action]; + c. Modifies access authorization as needed to correspond with any changes in operational need due to reassignment or transfer; and + d. Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period].' + +PS-6: + family: PS + name: Access Agreements + description: | + 'The organization: + a. Develops and documents access agreements for organizational information systems; + b. Reviews and updates the access agreements [Assignment: organization-defined frequency]; and + c. Ensures that individuals requiring access to organizational information and information systems: + 1. Sign appropriate access agreements prior to being granted access; and + 2. Re-sign access agreements to maintain access to organizational information systems when access agreements have been updated or [Assignment: organization-defined frequency].' + +PS-7: + family: PS + name: Third-Party Personnel Security + description: | + 'The organization: + a. Establishes personnel security requirements including security roles and responsibilities for third-party providers; + b. Requires third-party providers to comply with personnel security policies and procedures established by the organization; + c. Documents personnel security requirements; + d. Requires third-party providers to notify [Assignment: organization-defined personnel or roles] of any personnel transfers or terminations of third-party personnel who possess organizational credentials and/or badges, or who have information system privileges within [Assignment: organization-defined time period]; and + e. Monitors provider compliance.' + +PS-8: + family: PS + name: Personnel Sanctions + description: | + 'The organization: + a. Employs a formal sanctions process for individuals failing to comply with established information security policies and procedures; and + b. Notifies [Assignment: organization-defined personnel or roles] within [Assignment: organization-defined time period] when a formal employee sanctions process is initiated, identifying the individual sanctioned and the reason for the sanction.' + +RA-1: + family: RA + name: Risk Assessment Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A risk assessment policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the risk assessment policy and associated risk assessment controls; and + b. Reviews and updates the current: + 1. Risk assessment policy [Assignment: organization-defined frequency]; and + 2. Risk assessment procedures [Assignment: organization-defined frequency].' + +RA-2: + family: RA + name: Security Categorization + description: | + 'The organization: + a. Categorizes information and the information system in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance; + b. Documents the security categorization results (including supporting rationale) in the security plan for the information system; and + c. Ensures that the authorizing official or authorizing official designated representative reviews and approves the security categorization decision.' + +RA-3: + family: RA + name: Risk Assessment + description: | + 'The organization: + a. Conducts an assessment of risk, including the likelihood and magnitude of harm, from the unauthorized access, use, disclosure, disruption, modification, or destruction of the information system and the information it processes, stores, or transmits; + b. Documents risk assessment results in [Selection: security plan; risk assessment report; [Assignment: organization-defined document]]; + c. Reviews risk assessment results [Assignment: organization-defined frequency]; + d. Disseminates risk assessment results to [Assignment: organization-defined personnel or roles]; and + e. Updates the risk assessment [Assignment: organization-defined frequency] or whenever there are significant changes to the information system or environment of operation (including the identification of new threats and vulnerabilities), or other conditions that may impact the security state of the system.' + +RA-5: + family: RA + name: Vulnerability Scanning + description: | + 'The organization: + a. Scans for vulnerabilities in the information system and hosted applications [Assignment: organization-defined frequency and/or randomly in accordance with organization-defined process] and when new vulnerabilities potentially affecting the system/applications are identified and reported; + b. Employs vulnerability scanning tools and techniques that facilitate interoperability among tools and automate parts of the vulnerability management process by using standards for: + 1. Enumerating platforms, software flaws, and improper configurations; + 2. Formatting checklists and test procedures; and + 3. Measuring vulnerability impact; + c. Analyzes vulnerability scan reports and results from security control assessments; + d. Remediates legitimate vulnerabilities [Assignment: organization-defined response times] in accordance with an organizational assessment of risk; and + e. Shares information obtained from the vulnerability scanning process and security control assessments with [Assignment: organization-defined personnel or roles] to help eliminate similar vulnerabilities in other information systems (i.e., systemic weaknesses or deficiencies).' + +RA-5 (1): + family: RA + name: Vulnerability Scanning | Update Tool Capability + description: | + 'The organization employs vulnerability scanning tools that include the + capability to readily update the information system vulnerabilities to be + scanned.' + +RA-5 (2): + family: RA + name: Vulnerability Scanning | Update by Frequency / Prior to New Scan / When Identified + description: | + 'The organization updates the information system vulnerabilities scanned + [Selection (one or more): [Assignment: organization-defined frequency]; + prior to a new scan; when new vulnerabilities are identified and reported].' + +RA-5 (3): + family: RA + name: Vulnerability Scanning | Breadth / Depth of Coverage + description: | + 'The organization employs vulnerability scanning procedures that can + identify the breadth and depth of coverage (i.e., information system + components scanned and vulnerabilities checked).' + +RA-5 (5): + family: RA + name: Vulnerability Scanning | Privileged Access + description: | + 'The information system implements privileged access authorization to + [Assignment: organization-identified information system components] for + selected [Assignment: organization-defined vulnerability scanning + activities].' + +RA-5 (6): + family: RA + name: Vulnerability Scanning | Automated Trend Analyses + description: | + 'The organization employs automated mechanisms to compare the results of + vulnerability scans over time to determine trends in information system + vulnerabilities.' + +RA-5 (8): + family: RA + name: Vulnerability Scanning | Review Historic Audit Logs + description: | + 'The organization reviews historic audit logs to determine if a + vulnerability identified in the information system has been previously + exploited.' + +SA-1: + family: SA + name: System and Services Acquisition Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A system and services acquisition policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the system and services acquisition policy and associated system and services acquisition controls; and + b. Reviews and updates the current: + 1. System and services acquisition policy [Assignment: organization-defined frequency]; and + 2. System and services acquisition procedures [Assignment: organization-defined frequency].' + +SA-2: + family: SA + name: Allocation of Resources + description: | + 'The organization: + a. Determines information security requirements for the information system or information system service in mission/business process planning; + b. Determines, documents, and allocates the resources required to protect the information system or information system service as part of its capital planning and investment control process; and + c. Establishes a discrete line item for information security in organizational programming and budgeting documentation.' + +SA-3: + family: SA + name: System Development Life Cycle + description: | + 'The organization: + a. Manages the information system using [Assignment: organization-defined system development life cycle] that incorporates information security considerations; + b. Defines and documents information security roles and responsibilities throughout the system development life cycle; + c. Identifies individuals having information security roles and responsibilities; and + d. Integrates the organizational information security risk management process into system development life cycle activities.' + +SA-4: + family: SA + name: Acquisition Process + description: | + 'The organization includes the following requirements, descriptions, and + criteria, explicitly or by reference, in the acquisition contract for the + information system, system component, or information system service in + accordance with applicable federal laws, Executive Orders, directives, + policies, regulations, standards, guidelines, and organizational + mission/business needs: + a. Security functional requirements; + b. Security strength requirements; + c. Security assurance requirements; + d. Security-related documentation requirements; + e. Requirements for protecting security-related documentation; + f. Description of the information system development environment and + environment in which the system is intended to operate; and + g. Acceptance criteria.' + +SA-4 (1): + family: SA + name: Acquisition Process | Functional Properties of Security Controls + description: | + 'The organization requires the developer of the information system, system + component, or information system service to provide a description of the + functional properties of the security controls to be employed.' + +SA-4 (2): + family: SA + name: Acquisition Process | Design / Implementation Information for Security Controls + description: | + 'The organization requires the developer of the information system, system + component, or information system service to provide design and + implementation information for the security controls to be employed that + includes: [Selection (one or more): security-relevant external system + interfaces; high-level design; low-level design; source code or hardware + schematics; [Assignment: organization-defined design/implementation + information]] at [Assignment: organization-defined level of detail].' + +SA-4 (8): + family: SA + name: Acquisition Process | Continuous Monitoring Plan + description: | + 'The organization requires the developer of the information system, system + component, or information system service to produce a plan for the + continuous monitoring of security control effectiveness that contains + [Assignment: organization-defined level of detail].' + +SA-4 (9): + family: SA + name: Acquisition Process | Functions / Ports / Protocols / Services in Use + description: | + 'The organization requires the developer of the information system, system + component, or information system service to identify early in the system + development life cycle, the functions, ports, protocols, and services + intended for organizational use.' + +SA-4 (10): + family: SA + name: Acquisition Process | Use of Approved PIV Products + description: | + 'The organization employs only information technology products on the FIPS + 201-approved products list for Personal Identity Verification (PIV) + capability implemented within organizational information systems.' + +SA-5: + family: SA + name: Information System Documentation + description: | + 'The organization: + a. Obtains administrator documentation for the information system, system component, or information system service that describes: + 1. Secure configuration, installation, and operation of the system, component, or service; + 2. Effective use and maintenance of security functions/mechanisms; and + 3. Known vulnerabilities regarding configuration and use of administrative (i.e., privileged) functions; + b. Obtains user documentation for the information system, system component, or information system service that describes: + 1. User-accessible security functions/mechanisms and how to effectively use those security functions/mechanisms; + 2. Methods for user interaction, which enables individuals to use the system, component, or service in a more secure manner; and + 3. User responsibilities in maintaining the security of the system, component, or service; + c. Documents attempts to obtain information system, system component, or information system service documentation when such documentation is either unavailable or nonexistent and takes [Assignment: organization-defined actions] in response; + d. Protects documentation as required, in accordance with the risk management strategy; and + e. Distributes documentation to [Assignment: organization-defined personnel or roles].' + +SA-8: + family: SA + name: Security Engineering Principles + description: | + 'The organization applies information system security engineering principles + in the specification, design, development, implementation, and modification + of the information system.' + +SA-9: + family: SA + name: External Information System Services + description: | + 'The organization: + a. Requires that providers of external information system services comply with organizational information security requirements and employ [Assignment: organization-defined security controls] in accordance with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance; + b. Defines and documents government oversight and user roles and responsibilities with regard to external information system services; and + c. Employs [Assignment: organization-defined processes, methods, and techniques] to monitor security control compliance by external service providers on an ongoing basis.' + +SA-9 (1): + family: SA + name: External Information Systems | Risk Assessments / Organizational Approvals + description: | + 'The organization: + SA-9 (1)(a) Conducts an organizational assessment of risk prior to the acquisition or outsourcing of dedicated information security services; and + SA-9 (1)(b) Ensures that the acquisition or outsourcing of dedicated information security services is approved by [Assignment: organization-defined personnel or roles].' + +SA-9 (2): + family: SA + name: External Information Systems | Identification of Functions / Ports / Protocols + / Services + description: | + 'The organization requires providers of [Assignment: organization-defined + external information system services] to identify the functions, ports, + protocols, and other services required for the use of such services.' + +SA-9 (4): + family: SA + name: External Information Systems | Consistent Interests of Consumers and Providers + description: | + 'The organization employs [Assignment: organization-defined security + safeguards] to ensure that the interests of [Assignment: + organization-defined external service providers] are consistent with and + reflect organizational interests.' + +SA-9 (5): + family: SA + name: External Information Systems | Processing, Storage, and Service Location + description: | + 'The organization restricts the location of [Selection (one or more): + information processing; information/data; information system services] to + [Assignment: organization-defined locations] based on [Assignment: + organization-defined requirements or conditions].' + +SA-10: + family: SA + name: Developer Configuration Management + description: | + 'The organization requires the developer of the information system, system component, or information system service to: + a. Perform configuration management during system, component, or service [Selection (one or more): design; development; implementation; operation]; + b. Document, manage, and control the integrity of changes to [Assignment: organization-defined configuration items under configuration management]; + c. Implement only organization-approved changes to the system, component, or service; + d. Document approved changes to the system, component, or service and the potential security impacts of such changes; and + e. Track security flaws and flaw resolution within the system, component, or service and report findings to [Assignment: organization-defined personnel].' + +SA-10 (1): + family: SA + name: Developer Configuration Management | Software / Firmware Integrity Verification + description: | + 'The organization requires the developer of the information system, system + component, or information system service to enable integrity verification of + software and firmware components.' + +SA-11: + family: SA + name: Developer Security Testing and Evaluation + description: | + 'The organization requires the developer of the information system, system component, or information system service to: + a. Create and implement a security assessment plan; + b. Perform [Selection (one or more): unit; integration; system; regression] testing/evaluation at [Assignment: organization-defined depth and coverage]; + c. Produce evidence of the execution of the security assessment plan and the results of the security testing/evaluation; + d. Implement a verifiable flaw remediation process; and + e. Correct flaws identified during security testing/evaluation.' + +SA-11 (1): + family: SA + name: Developer Security Testing and Evaluation | Static Code Analysis + description: | + 'The organization requires the developer of the information system, system + component, or information system service to employ static code analysis + tools to identify common flaws and document the results of the analysis.' + +SA-11 (2): + family: SA + name: Developer Security Testing and Evaluation | Threat and Vulnerability Analyses + description: | + 'The organization requires the developer of the information system, system + component, or information system service to perform threat and vulnerability + analyses and subsequent testing/evaluation of the as-built system, + component, or service.' + +SA-11 (8): + family: SA + name: Developer Security Testing and Evaluation | Dynamic Code Analysis + description: | + 'The organization requires the developer of the information system, system + component, or information system service to employ dynamic code analysis + tools to identify common flaws and document the results of the analysis.' + +SA-22: + family: SA + name: Unsupported System Components + description: | + 'The organization: + a. Replaces information system components when support for the components is no longer available from the developer, vendor, or manufacturer; and + b. Provides justification and documents approval for the continued use of unsupported system components required to satisfy mission/business needs.' + +SA-22 (1): + family: SA + name: Unsupported System Components + description: | + 'The organization provides [Selection (one or more): in-house support; + [Assignment: organization-defined support from external providers]] for + unsupported information system components.' + +SC-1: + family: SC + name: System and Communications Protection Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A system and communications protection policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the system and communications protection policy and associated system and communications protection controls; and + b. Reviews and updates the current: + 1. System and communications protection policy [Assignment: organization-defined frequency]; and + 2. System and communications protection procedures [Assignment: organization-defined frequency].' + +SC-2: + family: SC + name: Application Partitioning + description: | + 'The information system separates user functionality (including user + interface services) from information system management functionality.' + +SC-4: + family: SC + name: Information In Shared Resources + description: | + 'The information system prevents unauthorized and unintended information + transfer via shared system resources.' + +SC-5: + family: SC + name: Denial of Service Protection + description: | + 'The information system protects against or limits the effects of the + following types of denial of service attacks: [Assignment: + organization-defined types of denial of service attacks or references to + sources for such information] by employing [Assignment: organization-defined + security safeguards].' + +SC-6: + family: SC + name: Resource Availability + description: | + 'The information system protects the availability of resources by allocating + [Assignment: organization-defined resources] by [Selection (one or more); + priority; quota; [Assignment: organization-defined security safeguards]].' + +SC-7: + family: SC + name: Boundary Protection + description: | + 'The information system: + a. Monitors and controls communications at the external boundary of the system and at key internal boundaries within the system; + b. Implements subnetworks for publicly accessible system components that are [Selection: physically; logically] separated from internal organizational networks; and + c. Connects to external networks or information systems only through managed interfaces consisting of boundary protection devices arranged in accordance with an organizational security architecture.' + +SC-7 (3): + family: SC + name: Boundary Protection | Access Points + description: | + 'The organization limits the number of external network connections to the + information system.' + +SC-7 (4): + family: SC + name: Boundary Protection | External Telecommunications Services + description: | + 'The organization: + SC-7 (4)(a) Implements a managed interface for each external telecommunication service; + SC-7 (4)(b) Establishes a traffic flow policy for each managed interface; + SC-7 (4)(c) Protects the confidentiality and integrity of the information being transmitted across each interface; + SC-7 (4)(d) Documents each exception to the traffic flow policy with a supporting mission/business need and duration of that need; and + SC-7 (4)(e) Reviews exceptions to the traffic flow policy [Assignment: organization-defined frequency] and removes exceptions that are no longer supported by an explicit mission/business need.' + +SC-7 (5): + family: SC + name: Boundary Protection | Deny by Default / Allow by Exception + description: | + 'The information system at managed interfaces denies network communications + traffic by default and allows network communications traffic by exception + (i.e., deny all, permit by exception).' + +SC-7 (7): + family: SC + name: Boundary Protection | Prevent Split Tunneling for Remote Devices + description: | + 'The information system, in conjunction with a remote device, prevents the + device from simultaneously establishing non-remote connections with the + system and communicating via some other connection to resources in external + networks.' + +SC-7 (8): + family: SC + name: Boundary Protection | Route Traffic to Authenticated Proxy Servers + description: | + 'The information system routes [Assignment: organization-defined internal + communications traffic] to [Assignment: organization-defined external + networks] through authenticated proxy servers at managed interfaces.' + +SC-7 (12): + family: SC + name: Boundary Protection | Host-Based Protection + description: | + 'The organization implements [Assignment: organization-defined host-based + boundary protection mechanisms] at [Assignment: organization-defined + information system components].' + +SC-7 (13): + family: SC + name: Boundary Protection | Isolation of Security Tools / Mechanisms / Support Components + description: | + 'The organization isolates [Assignment: organization-defined information + security tools, mechanisms, and support components] from other internal + information system components by implementing physically separate + subnetworks with managed interfaces to other components of the system.' + +SC-7 (18): + family: SC + name: Boundary Protection | Fail Secure + description: | + 'The information system fails securely in the event of an operational + failure of a boundary protection device.' + +SC-8: + family: SC + name: Transmission Confidentiality and Integrity + description: | + 'The information system protects the [Selection (one or more): + confidentiality; integrity] of transmitted information.' + +SC-8 (1): + family: SC + name: Transmission Confidentiality and Integrity | Cryptographic or Alternate Physical + Protection + description: | + 'The information system implements cryptographic mechanisms to [Selection + (one or more): prevent unauthorized disclosure of information; detect + changes to information] during transmission unless otherwise protected by + [Assignment: organization-defined alternative physical safeguards].' + +SC-10: + family: SC + name: Network Disconnect + description: | + 'The information system terminates the network connection associated with a + communications session at the end of the session or after [Assignment: + organization-defined time period] of inactivity.' + +SC-12: + family: SC + name: Cryptographic Key Establishment and Management + description: | + 'The organization establishes and manages cryptographic keys for required + cryptography employed within the information system in accordance with + [Assignment: organization-defined requirements for key generation, + distribution, storage, access, and destruction].' + +SC-12 (1): + family: SC + name: Cryptographic Key Establishment and Management | Availability + description: | + 'The organization maintains availability of information in the event of the + loss of cryptographic keys by users.' + +SC-12 (2): + family: SC + name: Cryptographic Key Establishment and Management | Symmetric Keys + description: | + 'The organization produces, controls, and distributes symmetric + cryptographic keys using [Selection: NIST FIPS-compliant; NSA-approved] key + management technology and processes.' + +SC-12 (3): + family: SC + name: Cryptographic Key Establishment and Management | Asymmetric Keys + description: | + 'The organization produces, controls, and distributes asymmetric + cryptographic keys using [Selection: NSA-approved key management technology + and processes; approved PKI Class 3 certificates or prepositioned keying + material; approved PKI Class 3 or Class 4 certificates and hardware security + tokens that protect the user''s private key].' + +SC-13: + family: SC + name: Cryptographic Protection + description: | + 'The information system implements [Assignment: organization-defined + cryptographic uses and type of cryptography required for each use] in + accordance with applicable federal laws, Executive Orders, directives, + policies, regulations, and standards.' + +SC-15: + family: SC + name: Collaborative Computing Devices + description: | + 'The information system: + a. Prohibits remote activation of collaborative computing devices with the following exceptions: [Assignment: organization-defined exceptions where remote activation is to be allowed]; and + b. Provides an explicit indication of use to users physically present at the devices.' + +SC-17: + family: SC + name: Public Key Infrastructure Certificates + description: | + 'The organization issues public key certificates under an [Assignment: + organization-defined certificate policy] or obtains public key certificates + from an approved service provider.' + +SC-18: + family: SC + name: Mobile Code + description: | + 'The organization: + a. Defines acceptable and unacceptable mobile code and mobile code technologies; + b. Establishes usage restrictions and implementation guidance for acceptable mobile code and mobile code technologies; and + c. Authorizes, monitors, and controls the use of mobile code within the information system.' + +SC-19: + family: SC + name: Voice Over Internet Protocol + description: | + 'The organization: + a. Establishes usage restrictions and implementation guidance for Voice over Internet Protocol (VoIP) technologies based on the potential to cause damage to the information system if used maliciously; and + b. Authorizes, monitors, and controls the use of VoIP within the information system.' + +SC-20: + family: SC + name: Secure Name / Address Resolution Service (Authoritative Source) + description: | + 'The information system: + a. Provides additional data origin authentication and integrity verification artifacts along with the authoritative name resolution data the system returns in response to external name/address resolution queries; and + b. Provides the means to indicate the security status of child zones and (if the child supports secure resolution services) to enable verification of a chain of trust among parent and child domains, when operating as part of a distributed, hierarchical namespace.' + +SC-21: + family: SC + name: Secure Name / Address Resolution Service (Recursive or Caching Resolver) + description: | + 'The information system requests and performs data origin authentication and + data integrity verification on the name/address resolution responses the + system receives from authoritative sources.' + +SC-22: + family: SC + name: Architecture and Provisioning for Name / Address Resolution Service + description: | + 'The information systems that collectively provide name/address resolution + service for an organization are fault-tolerant and implement + internal/external role separation.' + +SC-23: + family: SC + name: Session Authenticity + description: | + 'The information system protects the authenticity of communications sessions.' + +SC-28: + family: SC + name: Protection of Information At Rest + description: | + 'The information system protects the [Selection (one or more): + confidentiality; integrity] of [Assignment: organization-defined information + at rest].' + +SC-28 (1): + family: SC + name: Protection Of Information At Rest | Cryptographic Protection + description: | + 'The information system implements cryptographic mechanisms to prevent + unauthorized disclosure and modification of [Assignment: + organization-defined information] on [Assignment: organization-defined + information system components].' + +SC-39: + family: SC + name: Process Isolation + description: | + 'The information system maintains a separate execution domain for each + executing process.' + +SI-1: + family: SI + name: System and Information Integrity Policy and Procedures + description: | + 'The organization: + a. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: + 1. A system and information integrity policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and + 2. Procedures to facilitate the implementation of the system and information integrity policy and associated system and information integrity controls; and + b. Reviews and updates the current: + 1. System and information integrity policy [Assignment: organization-defined frequency]; and + 2. System and information integrity procedures [Assignment: organization-defined frequency].' + +SI-2: + family: SI + name: Flaw Remediation + description: | + 'The organization: + a. Identifies, reports, and corrects information system flaws; + b. Tests software and firmware updates related to flaw remediation for effectiveness and potential side effects before installation; + c. Installs security-relevant software and firmware updates within [Assignment: organization-defined time period] of the release of the updates; and + d. Incorporates flaw remediation into the organizational configuration management process.' + +SI-2 (2): + family: SI + name: Flaw Remediation | Automated Flaw Remediation Status + description: | + 'The organization employs automated mechanisms [Assignment: + organization-defined frequency] to determine the state of information system + components with regard to flaw remediation.' + +SI-2 (3): + family: SI + name: Flaw Remediation | Time to Remediate Flaws / Benchmarks for Corrective Actions + description: | + 'The organization: + SI-2 (3)(a) Measures the time between flaw identification and flaw remediation; and + SI-2 (3)(b) Establishes [Assignment: organization-defined benchmarks] for taking corrective actions.' + +SI-3: + family: SI + name: Malicious Code Protection + description: | + 'The organization: + a. Employs malicious code protection mechanisms at information system entry and exit points to detect and eradicate malicious code; + b. Updates malicious code protection mechanisms whenever new releases are available in accordance with organizational configuration management policy and procedures; + c. Configures malicious code protection mechanisms to: + 1. Perform periodic scans of the information system [Assignment: organization-defined frequency] and real-time scans of files from external sources at [Selection (one or more); endpoint; network entry/exit points] as the files are downloaded, opened, or executed in accordance with organizational security policy; and + 2. [Selection (one or more): block malicious code; quarantine malicious code; send alert to administrator; [Assignment: organization-defined action]] in response to malicious code detection; and + d. Addresses the receipt of false positives during malicious code detection and eradication and the resulting potential impact on the availability of the information system.' + +SI-3 (1): + family: SI + name: Malicious Code Protection | Central Management + description: | + 'The organization centrally manages malicious code protection mechanisms.' + +SI-3 (2): + family: SI + name: Malicious Code Protection | Automatic Updates + description: | + 'The information system automatically updates malicious code protection + mechanisms.' + +SI-3 (7): + family: SI + name: Malicious Code Protection | Nonsignature-Based Detection + description: | + 'The information system implements nonsignature-based malicious code + detection mechanisms.' + +SI-4: + family: SI + name: Information System Monitoring + description: | + 'The organization: + a. Monitors the information system to detect: + 1. Attacks and indicators of potential attacks in accordance with [Assignment: organization-defined monitoring objectives]; and + 2. Unauthorized local, network, and remote connections; + b. Identifies unauthorized use of the information system through [Assignment: organization-defined techniques and methods]; + c. Deploys monitoring devices: + 1. Strategically within the information system to collect organization-determined essential information; and + 2. At ad hoc locations within the system to track specific types of transactions of interest to the organization; + d. Protects information obtained from intrusion-monitoring tools from unauthorized access, modification, and deletion; + e. Heightens the level of information system monitoring activity whenever there is an indication of increased risk to organizational operations and assets, individuals, other organizations, or the Nation based on law enforcement information, intelligence information, or other credible sources of information; + f. Obtains legal opinion with regard to information system monitoring activities in accordance with applicable federal laws, Executive Orders, directives, policies, or regulations; and + g. Provides [Assignment: organization-defined information system monitoring information] to [Assignment: organization-defined personnel or roles] [Selection (one or more): as needed; [Assignment: organization-defined frequency]].' + +SI-4 (1): + family: SI + name: Information System Monitoring | System-Wide Intrusion Detection System + description: | + 'The organization connects and configures individual intrusion detection + tools into an information system-wide intrusion detection system.' + +SI-4 (2): + family: SI + name: Information System Monitoring | Automated Tools For Real-Time Analysis + description: | + 'The organization employs automated tools to support near real-time analysis + of events.' + +SI-4 (4): + family: SI + name: Information System Monitoring | Inbound and Outbound Communications Traffic + description: | + 'The information system monitors inbound and outbound communications traffic + [Assignment: organization-defined frequency] for unusual or unauthorized + activities or conditions.' + +SI-4 (5): + family: SI + name: Information System Monitoring | System-Generated Alerts + description: | + 'The information system alerts [Assignment: organization-defined personnel + or roles] when the following indications of compromise or potential + compromise occur: [Assignment: organization-defined compromise indicators].' + +SI-4(14): + family: SI + name: Information System Monitoring | Wireless Intrusion Detection + description: | + 'The organization employs a wireless intrusion detection system to identify + rogue wireless devices and to detect attack attempts and potential + compromises/breaches to the information system.' + +SI-4 (16): + family: SI + name: Information System Monitoring | Correlate Monitoring Information + description: | + 'The organization correlates information from monitoring tools employed + throughout the information system.' + +SI-4 (23): + family: SI + name: Information System Monitoring | Host-Based Devices + description: | + 'The organization implements [Assignment: organization-defined host-based + monitoring mechanisms] at [Assignment: organization-defined information + system components].' + +SI-5: + family: SI + name: Security Alerts, Advisories, and Directives + description: | + 'The organization: + a. Receives information system security alerts, advisories, and directives from [Assignment: organization-defined external organizations] on an ongoing basis; + b. Generates internal security alerts, advisories, and directives as deemed necessary; + c. Disseminates security alerts, advisories, and directives to: [Selection (one or more): [Assignment: organization-defined personnel or roles]; [Assignment: organization-defined elements within the organization]; [Assignment: organization-defined external organizations]]; and + d. Implements security directives in accordance with established time frames, or notifies the issuing organization of the degree of noncompliance.' + +SI-6: + family: SI + name: Security Function Verification + description: | + 'The information system: + a. Verifies the correct operation of [Assignment: organization-defined security functions]; + b. Performs this verification [Selection (one or more): [Assignment: organization-defined system transitional states]; upon command by user with appropriate privilege; [Assignment: organization-defined frequency]]; + c. Notifies [Assignment: organization-defined personnel or roles] of failed security verification tests; and + d. [Selection (one or more): shuts the information system down; restarts the information system; [Assignment: organization-defined alternative action(s)]] when anomalies are discovered.' + +SI-7: + family: SI + name: Software, Firmware, and Information Integrity + description: | + 'The organization employs integrity verification tools to detect + unauthorized changes to [Assignment: organization-defined software, + firmware, and information].' + +SI-7 (1): + family: SI + name: Software, Firmware, and Information Integrity | Integrity Checks + description: | + 'The information system performs an integrity check of [Assignment: + organization-defined software, firmware, and information] [Selection (one or + more): at startup; at [Assignment: organization-defined transitional states + or security-relevant events]; [Assignment: organization-defined + frequency]].' + +SI-7 (7): + family: SI + name: Software, Firmware, and Information Integrity | Integration of Detection and + Response + description: | + 'The organization incorporates the detection of unauthorized [Assignment: + organization-defined security-relevant changes to the information system] + into the organizational incident response capability.' + +SI-8: + family: SI + name: Spam Protection + description: | + 'The organization: + a. Employs spam protection mechanisms at information system entry and exit points to detect and take action on unsolicited messages; and + b. Updates spam protection mechanisms when new releases are available in accordance with organizational configuration management policy and procedures.' + +SI-8 (1): + family: SI + name: Spam Protection | essential Management + description: | + 'The organization centrally manages spam protection mechanisms.' + +SI-8 (2): + family: SI + name: Spam Protection | Automatic Updates + description: | + 'The information system automatically updates spam protection mechanisms.' + +SI-10: + family: SI + name: Information Input Validation + description: | + 'The information system checks the validity of [Assignment: + organization-defined information inputs].' + +SI-11: + family: SI + name: Error Handling + description: | + 'The information system: + a. Generates error messages that provide information necessary for corrective actions without revealing information that could be exploited by adversaries; and + b. Reveals error messages only to [Assignment: organization-defined personnel or roles].' + +SI-12: + family: SI + name: Information Handling and Retention + description: | + 'The organization handles and retains information within the information + system and information output from the system in accordance with applicable + federal laws, Executive Orders, directives, policies, regulations, + standards, and operational requirements.' + +SI-16: + family: SI + name: Memory Protection + description: | + 'The information system implements [Assignment: organization-defined + security safeguards] to protect its memory from unauthorized code + execution.' + +name: NIST-800-53 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/PCI-DSS-MAY-2015.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/PCI-DSS-MAY-2015.yaml new file mode 100644 index 0000000..7dd7738 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures/standards/PCI-DSS-MAY-2015.yaml @@ -0,0 +1,1029 @@ +1.1: + family: '1' + name: Establish and implement firewall and router configuration standards. +2.1: + family: '2' + name: Always change vendor-supplied defaults and remove or disable unnecessary default + accounts before installing a system on the network. +3.1: + family: '3' + name: Keep cardholder data storage to a minimum by implementing data retention and + disposal policies, procedures and processes +4.1: + family: '4' + name: Use strong cryptography and security protocols (for example, TLS, IPSEC, SSH, + etc.) to safeguard sensitive cardholder data during transmission over open, public + networks. +5.1: + family: '5' + name: Deploy anti-virus software on all systems commonly affected by malicious software + (particularly personal computers and servers). +6.1: + family: '6' + name: "Establish a process to identify security vulnerabilities, using reputable\ + \ outside sources for security vulnerability information, and assign a risk ranking\ + \ (for example, as \u201Chigh,\u201D \u201Cmedium,\u201D or \u201Clow\u201D) to\ + \ newly discovered security vulnerabilities." +1.4: + family: '1' + name: Install personal firewall software on any mobile and/or employee-owned devices + that connect to the Internet when outside the network (for example, laptops used + by employees), and which are also used to access the network. +8.5: + family: '8' + name: Do not use group, shared, or generic IDs, passwords, or other authentication + methods. +9.9: + family: '9' + name: Protect devices that capture payment card data via direct physical interaction + with the card from tampering and substitution. +10.1: + family: '10' + name: Implement audit trails to link all access to system components to each individual + user. +Requirement 11: + family: '11' + name: Regularly test security systems and processes +12.1: + family: '12' + name: Implement an incident response plan. Be prepared to respond immediately to + a system breach. +2.2: + family: '2' + name: Develop configuration standards for all system components. Assure that these + standards address all known security vulnerabilities and are consistent with industry-accepted + system hardening standards. +10.5.4: + family: '10' + name: Write logs for external-facing technologies onto a secure, centralized, internal + log server or media device. +3.6: + family: '3' + name: Fully document and implement all key-management processes and procedures for + cryptographic keys used for encryption of cardholder data. +9.7: + family: '9' + name: Maintain strict control over the storage and accessibility of media. +4.3: + family: '4' + name: Ensure that security policies and operational procedures for encrypting transmissions + of cardholder data are documented, in use, and known to all affected parties. +5.4: + family: '5' + name: Ensure that security policies and operational procedures for protecting systems + against malware are documented, in use, and known to all affected parties. +1.5: + family: '1' + name: Ensure that security policies and operational procedures for managing firewalls + are documented, in use, and known to all affected parties. +6.6: + family: '6' + name: For public-facing web applications, address new threats and vulnerabilities + on an ongoing basis and ensure these applications are protected against known + attacks. +7.2: + family: '7' + name: "Establish an access control system for systems components that restricts\ + \ access based on a user\u2019s need to know, and is set to \u201Cdeny all\u201D\ + \ unless specifically allowed." +9.9.1: + family: '9' + name: Maintain an up-to-date list of devices. +6.4.1: + family: '6' + name: Separate development/test environments from production environments, and enforce + the separation with access controls. +6.5.5: + family: '6' + name: Improper error handling +8.3: + family: '8' + name: Incorporate two-factor authentication for remote network access originating + from outside the network by personnel (including users and administrators) and + all third parties, (including vendor access for support or maintenance). +10.2: + family: '10' + name: Implement automated audit trails for all system components to reconstruct + the following events. +9.2: + family: '9' + name: Develop procedures to easily distinguish between onsite personnel and visitors. +12.3.1: + family: '12' + name: Explicit approval by authorized parties +10.4.2: + family: '10' + name: Time data is protected. +10.3: + family: '10' + name: Record at least the following audit trail entries for all system components + for each event. +2.5: + family: '2' + name: Ensure that security policies and operational procedures for managing vendor + defaults and other security parameters are documented, in use, and known to all + affected parties. +11.1: + family: '11' + name: Implement processes to test for the presence of wireless access points (802.11), + and detect and identify all authorized and unauthorized wireless access points + on a quarterly basis. +12.8.2: + family: '12' + name: "Maintain a written agreement that includes an acknowledgement that the service\ + \ providers are responsible for the security of cardholder data the service providers\ + \ possess or otherwise store, process or transmit on behalf of the customer, or\ + \ to the extent that they could impact the security of the customer\u2019s cardholder\ + \ data environment." +12.2: + family: '12' + name: Implement a risk-assessment process. +11.2: + family: '11' + name: Run internal and external network vulnerability scans at least quarterly and + after any significant change in the network (such as new system component installations, + changes in network topology, firewall rule modifications, product upgrades). +10.2.5: + family: '10' + name: "Use of and changes to identification and authentication mechanisms\u2014\ + including but not limited to creation of new accounts and elevation of privileges\u2014\ + and all changes, additions, or deletions to accounts with root or administrative\ + \ privileges" +12.6.1: + family: '12' + name: Educate personnel upon hire and at least annually. +3.5: + family: '3' + name: Document and implement procedures to protect keys used to secure stored cardholder + data against disclosure and misuse. +A.1.2: + family: A + name: "Restrict each entity\u2019s access and privileges to its own cardholder data\ + \ environment only." +12.7: + family: '12' + name: Screen potential personnel prior to hire to minimize the risk of attacks from + internal sources. (Examples of background checks include previous employment history, + criminal record, credit history, and reference checks.) +1.2.2: + family: '1' + name: Secure and synchronize router configuration files. +7.1.1: + family: '7' + name: Define access needs for each role. +3.5.1: + family: '3' + name: Restrict access to cryptographic keys to the fewest number of custodians necessary. +12.3.2: + family: '12' + name: Authentication for use of the technology +9.1.3: + family: '9' + name: Restrict physical access to wireless access points, gateways, handheld devices, + networking/communications hardware, and telecommunication lines. +9.4.1: + family: '9' + name: Visitors are authorized before entering, and escorted at all times within, + areas where cardholder data is processed or maintained. +6.3.1: + family: '6' + name: Remove development, test and/or custom application accounts, user IDs, and + passwords before applications become active or are released to customers. +9.7.1: + family: '9' + name: Properly maintain inventory logs of all media and conduct media inventories + at least annually. +1.1.3: + family: '1' + name: Current diagram that shows all cardholder data flows across systems and networks +1.1.2: + family: '1' + name: Current network diagram that identifies all connections between the cardholder + data environment and other networks, including any wireless networks +12.3.7: + family: '12' + name: List of company-approved products +12.3.5: + family: '12' + name: Acceptable uses of the technology +3.6.1: + family: '3' + name: Generation of strong cryptographic keys +6.5.7: + family: '6' + name: Cross-site scripting (XSS) +8.2.5: + family: '8' + name: Do not allow an individual to submit a new password/phrase that is the same + as any of the last four passwords/phrases he or she has used. +6.4.3: + family: '6' + name: Production data (live PANs) are not used for testing or development +3.6.3: + family: '3' + name: Secure cryptographic key storage +3.5.2: + family: '3' + name: Store secret and private keys used to encrypt/decrypt cardholder data in one + (or more) of the following forms at all times +8.2.1: + family: '8' + name: Using strong cryptography, render all authentication credentials (such as + passwords/phrases) unreadable during transmission and storage on all system components. +6.4.2: + family: '6' + name: Separation of duties between development/test and production environments +7.1.2: + family: '7' + name: Restrict access to privileged user IDs to least privileges necessary to perform + job responsibilities. +6.5.10: + family: '6' + name: Broken authentication and session management +9.3: + family: '9' + name: Control physical access for onsite personnel to sensitive areas. +8.2.3: + family: '8' + name: Passwords/phrases must meet the following(Require a minimum length of at least + seven characters.Contain both numeric and alphabetic characters.) +10.3.3: + family: '10' + name: Date and time +10.3.6: + family: '10' + name: Identity or name of affected data, system component, or resource. +10.5.1: + family: '10' + name: Limit viewing of audit trails to those with a job-related need. +12.8.4: + family: '12' + name: "Maintain a program to monitor service providers\u2019 PCI DSS compliance\ + \ status at least annually." +5.1.2: + family: '5' + name: For systems considered to be not commonly affected by malicious software, + perform periodic evaluations to identify and evaluate evolving malware threats + in order to confirm whether such systems continue to not require anti-virus software. +6.4.5.4: + family: '6' + name: Back-out procedures. +10.5.2: + family: '10' + name: Protect audit trail files from unauthorized modifications. +Requirement A.1: + family: A.1 + name: Shared hosting providers must protect the cardholder data environment +1.3.8: + family: '1' + name: Do not disclose private IP addresses and routing information to unauthorized + parties. +2.3: + family: '2' + name: Encrypt all non-console administrative access using strong cryptography. Use + technologies such as SSH, VPN, or TLS for web-based management and other non-console + administrative access. +A.1: + family: A + name: "Protect each entity\u2019s (that is, merchant, service provider, or other\ + \ entity) hosted environment and data, per A.1.1 through A.1.4" +9.9.2: + family: '9' + name: Periodically inspect device surfaces to detect tampering (for example, addition + of card skimmers to devices), or substitution (for example, by checking the serial + number or other device characteristics to verify it has not been swapped with + a fraudulent device). +9.5: + family: '9' + name: Physically secure all media. +12.6.2: + family: '12' + name: Require personnel to acknowledge at least annually that they have read and + understood the security policy and procedures. +8.6: + family: '8' + name: Where other authentication mechanisms are used (for example, physical or logical + security tokens, smart cards, certificates, etc.), use of these mechanisms must + be assigned . +3.3: + family: '3' + name: Mask PAN when displayed (the first six and last four digits are the maximum + number of digits to be displayed), such that only personnel with a legitimate + business need can see the full PAN. +12.8.1: + family: '12' + name: Maintain a list of service providers. +2.2.3: + family: '2' + name: "Implement additional security features for any required services, protocols,\ + \ or daemons that are considered to be insecure\u2014for example, use secured\ + \ technologies such as SSH, S-FTP, TLS, or IPSec VPN to protect insecure services\ + \ such as NetBIOS, file-sharing, Telnet, FTP, etc." +12.8.5: + family: '12' + name: Maintain information about which PCI DSS requirements are managed by each + service provider, and which are managed by the entity. +3.2.2: + family: '3' + name: Do not store the card verification code or value (three-digit or four-digit + number printed on the front or back of a payment card used to verify card-not-present + transactions) after authorization. +Requirement 6: + family: '6' + name: Develop and maintain secure systems and applications +8.1.6: + family: '8' + name: Limit repeated access attempts by locking out the user ID after not more than + six attempts. +9.4.2: + family: '9' + name: Visitors are identified and given a badge or other identification that expires + and that visibly distinguishes the visitors from onsite personnel. +Requirement 1: + family: '1' + name: Install and maintain a firewall configuration to protect cardholder data +12.5.1: + family: '12' + name: Establish, document, and distribute security policies and procedures. +10.4.3: + family: '10' + name: Time settings are received from industry-accepted time sources. +3.6.6: + family: '3' + name: If manual clear-text cryptographic key-management operations are used, these + operations must be managed using split knowledge and dual control. +9.1.2: + family: '9' + name: Implement physical and/or logical controls to restrict access to publicly + accessible network jacks. +11.5: + family: '11' + name: Deploy a change-detection mechanism (for example, file-integrity monitoring + tools) to alert personnel to unauthorized modification (including changes, additions, + and deletions) of critical system files, configuration files, or content files; + and configure the software to perform critical file comparisons at least weekly. +9.6.2: + family: '9' + name: Send the media by secured courier or other delivery method that can be accurately + tracked. +7.1.3: + family: '7' + name: "Assign access based on individual personnel\u2019s job classification and\ + \ function." +12.5.5: + family: '12' + name: Monitor and control all access to data. +2.1.1: + family: '2' + name: For wireless environments connected to the cardholder data environment or + transmitting cardholder data, change ALL wireless vendor defaults at installation, + including but not limited to default wireless encryption keys, passwords, and + SNMP community strings. +1.2.3: + family: '1' + name: Install perimeter firewalls between all wireless networks and the cardholder + data environment, and configure these firewalls to deny or, if traffic is necessary + for business purposes, permit only authorized traffic between the wireless environment + and the cardholder data environment. +8.7: + family: '8' + name: All access to any database containing cardholder data (including access by + applications, administrators, and all other users) is restricted . +2.2.2: + family: '2' + name: Enable only necessary services, protocols, daemons, etc., as required for + the function of the system. +1.1.7: + family: '1' + name: Requirement to review firewall and router rule sets at least every six months +12.5: + family: '12' + name: Assign to an individual or team the following information security management + responsibilities. +8.1.3: + family: '8' + name: Immediately revoke access for any terminated users. +10.6.1: + family: '10' + name: Review the following at least daily (-All security events. -Logs of all system + components that store, process, or transmit CHD and/or SAD.-Logs of all critical + system components.-Logs of all servers and system components that perform security + functions (for example, firewalls, intrusion-detection systems/intrusion-prevention + systems (IDS/IPS), authentication servers, e-commerce redirection servers, etc.) +6.3: + family: '6' + name: Develop internal and external software applications (including web-based administrative + access to applications) securely. +6.2: + family: '6' + name: Ensure that all system components and software are protected from known vulnerabilities + by installing applicable vendor-supplied security patches. Install critical security + patches within one month of release. +10.2.7: + family: '10' + name: Creation and deletion of system-level objects +9.5.1: + family: '9' + name: "Store media backups in a secure location, preferably an off-site facility,\ + \ such as an alternate or backup site, or a commercial storage facility. Review\ + \ the location\u2019s security at least annually." +Requirement 5: + family: '5' + name: Use and regularly update anti-virus software or programs +8.5.1: + family: '8' + name: Additional requirement for service providers only. Service providers with + remote access to customer premises (for example, for support of POS systems or + servers) must use a unique authentication credential (such as a password/phrase) + for each customer. +1.3.2: + family: '1' + name: Limit inbound Internet traffic to IP addresses within the DMZ. +10.3.1: + family: '10' + name: User identification +8.1.7: + family: '8' + name: Set the lockout duration to a minimum of 30 minutes or until an administrator + enables the user ID. +7.3: + family: '7' + name: Ensure that security policies and operational procedures for restricting access + to cardholder data are documented, in use, and known to all affected parties. +12.3.3: + family: '12' + name: A list of all such devices and personnel with access +12.5.2: + family: '12' + name: Monitor and analyze security alerts and information, and distribute to appropriate + personnel. +A.1.4: + family: A + name: Enable processes to provide for timely forensic investigation in the event + of a compromise to any hosted merchant or service provider. +9.6: + family: '9' + name: Maintain strict control over the internal or external distribution of any + kind of media. +5.1.1: + family: '5' + name: Ensure that anti-virus programs are capable of detecting, removing, and protecting + against all known types of malicious software. +12.10.3: + family: '12' + name: Designate specific personnel to be available on a 24/7 basis to respond to + alerts. +8.2.4: + family: '8' + name: Change user passwords/passphrases at least once every 90 days. +12.10.1: + family: '12' + name: Create the incident response plan to be implemented in the event of system + breach. Ensure the plan addresses the following. +12.3.4: + family: '12' + name: A method to accurately and readily determine owner, contact information, and + purpose (for example, labeling, coding, and/or inventorying of devices) +A.1.1: + family: A + name: "Ensure that each entity only runs processes that have access to that entity\u2019\ + s cardholder data environment." +Requirement 8: + family: '8' + name: Assign a unique ID to each person with computer access +10.5.5: + family: '10' + name: Use file-integrity monitoring or change-detection software on logs to ensure + that existing log data cannot be changed without generating alerts (although new + data being added should not cause an alert). +6.5.4: + family: '6' + name: Insecure communications +9.4.4: + family: '9' + name: A visitor log is used to maintain a physical audit trail of visitor activity + to the facility as well as computer rooms and data centers where cardholder data + is stored or transmitted. +2.6: + family: '2' + name: "Shared hosting providers must protect each entity\u2019s hosted environment\ + \ and cardholder data. These providers must meet specific requirements as detailed\ + \ in Appendix A." +3.6.5: + family: '3' + name: Retirement or replacement (for example, archiving, destruction, and/or revocation) + of keys as deemed necessary when the integrity of the key has been weakened (for + example, departure of an employee with knowledge of a clear-text key component), + or keys are suspected of being compromised. +1.1.4: + family: '1' + name: Requirements for a firewall at each Internet connection and between any demilitarized + zone (DMZ) and the internal network zone +name: PCI-DSS-MAY-2015 +9.6.3: + family: '9' + name: Ensure management approves any and all media that is moved from a secured + area (including when media is distributed to individuals). +3.6.4: + family: '3' + name: Cryptographic key changes for keys that have reached the end of their cryptoperiod + (for example, after a defined period of time has passed and/or after a certain + amount of cipher-text has been produced by a given key), as defined by the associated + application vendor or key owner, and based on industry best practices and guidelines + (for example, NIST Special Publication 800-57). +7.2.1: + family: '7' + name: Coverage of all system components +8.8: + family: '8' + name: Ensure that security policies and operational procedures for identification + and authentication are documented, in use, and known to all affected parties. +10.5: + family: '10' + name: Secure audit trails so they cannot be altered. +Requirement 9: + family: '9' + name: Restrict physical access to cardholder data +1.3: + family: '1' + name: Prohibit direct public access between the Internet and any system component + in the cardholder data environment. +6.5.6: + family: '6' + name: "All \u201Chigh risk\u201D vulnerabilities identified in the vulnerability\ + \ identification process (as defined in PCI DSS Requirement 6.1)." +1.2.1: + family: '1' + name: Restrict inbound and outbound traffic to that which is necessary for the cardholder + data environment, and specifically deny all other traffic. +3.5.3: + family: '3' + name: Store cryptographic keys in the fewest possible locations. +Requirement 3: + family: '3' + name: Protect stored cardholder data +11.3.2: + family: '11' + name: Perform internal penetration testing at least annually and after any significant + infrastructure or application upgrade or modification (such as an operating system + upgrade, a sub-network added to the environment, or a web server added to the + environment). +9.8: + family: '9' + name: Destroy media when it is no longer needed for business or legal reasons . +11.2.1: + family: '11' + name: "Perform quarterly internal vulnerability scans and rescans as needed, until\ + \ all \u201Chigh-risk\u201D vulnerabilities (as identified in Requirement 6.1)\ + \ are resolved. Scans must be performed by qualified personnel." +3.6.8: + family: '3' + name: Requirement for cryptographic key custodians to formally acknowledge that + they understand and accept their key-custodian responsibilities. +10.8: + family: '10' + name: Ensure that security policies and operational procedures for monitoring all + access to network resources and cardholder data are documented, in use, and known + to all affected parties. +8.2.2: + family: '8' + name: "Verify user identity before modifying any authentication credential\u2014\ + for example, performing password resets, provisioning new tokens, or generating\ + \ new keys." +8.1.2: + family: '8' + name: Control addition, deletion, and modification of user IDs, credentials, and + other identifier objects. +11.3.4: + family: '11' + name: If segmentation is used to isolate the CDE from other networks, perform penetration + tests at least annually and after any changes to segmentation controls/methods + to verify that the segmentation methods are operational and effective, and isolate + all out-of-scope systems from systems in the CDE. +1.3.5: + family: '1' + name: Do not allow unauthorized outbound traffic from the cardholder data environment + to the Internet. +11.3: + family: '11' + name: Implement a methodology for penetration testing. +7.1: + family: '7' + name: Limit access to system components and cardholder data to only those individuals + whose job requires such access. +10.2.2: + family: '10' + name: All actions taken by any individual with root or administrative privileges +8.1.8: + family: '8' + name: If a session has been idle for more than 15 minutes, require the user to re-authenticate + to re-activate the terminal or session. +1.1.6: + family: '1' + name: Documentation and business justification for use of all services, protocols, + and ports allowed, including documentation of security features implemented for + those protocols considered to be insecure. +8.1.4: + family: '8' + name: Remove/disable inactive user accounts within 90 days. +10.3.5: + family: '10' + name: Origination of event +7.2.2: + family: '7' + name: Assignment of privileges to individuals based on job classification and function. +8.1: + family: '8' + name: Define and implement policies and procedures to ensure proper user identification + management for non-consumer users and administrators on all system components. +12.3.8: + family: '12' + name: Automatic disconnect of sessions for remote-access technologies after a specific + period of inactivity +6.4.5: + family: '6' + name: Change control procedures for the implementation of security patches and software + modifications. +6.4.4: + family: '6' + name: Removal of test data and accounts before production systems become active +A.1.3: + family: A + name: "Ensure logging and audit trails are enabled and unique to each entity\u2019\ + s cardholder data environment and consistent with PCI DSS Requirement 10." +1.3.3: + family: '1' + name: Do not allow any direct connections inbound or outbound for traffic between + the Internet and the cardholder data environment. +12.3: + family: '12' + name: Develop usage policies for critical technologies and define proper use of + these technologies. +10.7: + family: '10' + name: Retain audit trail history for at least one year, with a minimum of three + months immediately available for analysis (for example, online, archived, or restorable + from backup). +9.1: + family: '9' + name: Ensure that security policies and operational procedures for restricting physical + access to cardholder data are documented, in use, and known to all affected parties. +6.3.2: + family: '6' + name: Review custom code prior to release to production or customers in order to + identify any potential coding vulnerability (using either manual or automated + processes) +2.4: + family: '2' + name: Maintain an inventory of system components that are in scope for PCI DSS. +11.1.2: + family: '11' + name: Implement incident response procedures in the event unauthorized wireless + access points are detected. +12.1.1: + family: '12' + name: Review the security policy at least annually and update the policy when the + environment changes. +10.6: + family: '10' + name: Review logs and security events for all system components to identify anomalies + or suspicious activity. +6.5.1: + family: '6' + name: Injection flaws, particularly SQL injection. Also consider OS Command Injection, + LDAP and XPath injection flaws as well as other injection flaws. +3.2.3: + family: '3' + name: Do not store the personal identification number (PIN) or the encrypted PIN + block after authorization. +3.4: + family: '3' + name: Render PAN unreadable anywhere it is stored (including on portable digital + media, backup media, and in logs). +11.5.1: + family: '11' + name: Implement a process to respond to any alerts generated by the change-detection + solution. +Requirement 4: + family: '4' + name: Encrypt transmission of cardholder data across open, public networks +2.2.1: + family: '2' + name: Implement only one primary function per server to prevent functions that require + different security levels from co-existing on the same server. (For example, web + servers, database servers, and DNS should be implemented on separate servers.) +9.4.3: + family: '9' + name: Visitors are asked to surrender the badge or identification before leaving + the facility or at the date of expiration. +11.6: + family: '11' + name: Ensure that security policies and operational procedures for security monitoring + and testing are documented, in use, and known to all affected parties. +3.4.1: + family: '3' + name: If disk encryption is used (rather than file- or column-level database encryption), + logical access must be managed separately and independently of native operating + system authentication and access control mechanisms (for example, by not using + local user account databases or general network login credentials). Decryption + keys must not be associated with user accounts. +8.2.6: + family: '8' + name: Set passwords/phrases for first-time use and upon reset to a unique value + for each user, and change immediately after the first use. +6.5.9: + family: '6' + name: Cross-site request forgery (CSRF) +6.4.5.3: + family: '6' + name: Functionality testing to verify that the change does not adversely impact + the security of the system. +7.1.4: + family: '7' + name: Require documented approval by authorized parties specifying required privileges. +10.2.4: + family: '10' + name: Invalid logical access attempts +12.6: + family: '12' + name: Implement a formal security awareness program to make all personnel aware + of the importance of cardholder data security. +1.1.1: + family: '1' + name: A formal process for approving and testing all network connections and changes + to the firewall and router configurations +1.1.5: + family: '1' + name: Description of groups, roles, and responsibilities for management of network + components +Requirement 2: + family: '2' + name: Do not use vendor-supplied defaults for system passwords and other security + parameters +9.8.2: + family: '9' + name: Render cardholder data on electronic media unrecoverable so that cardholder + data cannot be reconstructed. +1.3.7: + family: '1' + name: Place system components that store cardholder data (such as a database) in + an internal network zone, segregated from the DMZ and other untrusted networks. +3.6.2: + family: '3' + name: Secure cryptographic key distribution +11.3.1: + family: '11' + name: Perform external penetration testing at least annually and after any significant + infrastructure or application upgrade or modification (such as an operating system + upgrade, a sub-network added to the environment, or a web server added to the + environment). +12.10.5: + family: '12' + name: Include alerts from security monitoring systems, including but not limited + to intrusion-detection, intrusion-prevention, firewalls, and file-integrity monitoring + systems. +2.2.4: + family: '2' + name: Configure system security parameters to prevent misuse. +1.3.6: + family: '1' + name: "Implement stateful inspection, also known as dynamic packet filtering. (That\ + \ is, only \u201Cestablished\u201D connections are allowed into the network.)" +6.4: + family: '6' + name: Follow change control processes and procedures for all changes to system components. +6.4.5.2: + family: '6' + name: Documented change approval by authorized parties. +10.6.3: + family: '10' + name: Follow up exceptions and anomalies identified during the review process. +12.3.9: + family: '12' + name: Activation of remote-access technologies for vendors and business partners + only when needed by vendors and business partners, with immediate deactivation + after use +11.2.2: + family: '11' + name: Perform quarterly external vulnerability scans, via an Approved Scanning Vendor + (ASV) approved by the Payment Card Industry Security Standards Council (PCI SSC). + Perform rescans as needed, until passing scans are achieved. +12.3.6: + family: '12' + name: Acceptable network locations for the technologies +1.2: + family: '1' + name: Build firewall and router configurations that restrict connections between + untrusted networks and any system components in the cardholder data environment. +10.2.3: + family: '10' + name: Access to all audit trails +12.10.6: + family: '12' + name: Develop a process to modify and evolve the incident response plan according + to lessons learned and to incorporate industry developments. +6.5.8: + family: '6' + name: Improper access control (such as insecure direct object references, failure + to restrict URL access, directory traversal, and failure to restrict user access + to functions). +7.2.3: + family: '7' + name: "Default \u201Cdeny-all\u201D setting." +8.1.5: + family: '8' + name: Manage IDs used by vendors to access, support, or maintain system components + via remote access . +8.1.1: + family: '8' + name: Assign all users a unique ID before allowing them to access system components + or cardholder data. +8.4: + family: '8' + name: Document and communicate authentication policies and procedures to all users. +12.10.2: + family: '12' + name: Test the plan at least annually. +10.3.4: + family: '10' + name: Success or failure indication +Requirement 12: + family: '12' + name: Maintain a policy that addresses information security for all personnel +1.3.1: + family: '1' + name: Implement a DMZ to limit inbound traffic to only system components that provide + authorized publicly accessible services, protocols, and ports. +11.1.1: + family: '11' + name: Maintain an inventory of authorized wireless access points including a documented + business justification. +9.4: + family: '9' + name: Implement procedures to identify and authorize visitors. +Requirement 7: + family: '7' + name: Restrict access to cardholder data by business need to know +5.3: + family: '5' + name: Ensure that anti-virus mechanisms are actively running and cannot be disabled + or altered by users, unless specifically authorized by management on a case-by-case + basis for a limited time period. +9.9.3: + family: '9' + name: Provide training for personnel to be aware of attempted tampering or replacement + of devices. +3.2: + family: '3' + name: Do not store sensitive authentication data after authorization (even if encrypted). + If sensitive authentication data is received, render all data unrecoverable upon + completion of the authorization process. +11.3.3: + family: '11' + name: Exploitable vulnerabilities found during penetration testing are corrected + and testing is repeated to verify the corrections. +6.5: + family: '6' + name: Address common coding vulnerabilities in software-development processes. +3.6.7: + family: '3' + name: Prevention of unauthorized substitution of cryptographic keys. +10.3.2: + family: '10' + name: Type of event +12.10.4: + family: '12' + name: Provide appropriate training to staff with security breach response responsibilities. +9.8.1: + family: '9' + name: Shred, incinerate, or pulp hard-copy materials so that cardholder data cannot + be reconstructed. Secure storage containers used for materials that are to be + destroyed. +10.4: + family: '10' + name: Using time-synchronization technology, synchronize all critical system clocks + and times and ensure that the following is implemented for acquiring, distributing, + and storing time. +2.2.5: + family: '2' + name: Remove all unnecessary functionality, such as scripts, drivers, features, + subsystems, file systems, and unnecessary web servers. +12.8.3: + family: '12' + name: Ensure there is an established process for engaging service providers including + proper due diligence prior to engagement. +6.4.5.1: + family: '6' + name: Documentation of impact. +10.4.1: + family: '10' + name: Critical systems have the correct and consistent time. +3.7: + family: '3' + name: Ensure that security policies and operational procedures for protecting stored + cardholder data are documented, in use, and known to all affected parties. +4.2: + family: '4' + name: Never send unprotected PANs by end-user messaging technologies (for example, + e-mail, instant messaging, SMS, chat, etc.). +6.5.3: + family: '6' + name: Insecure cryptographic storage +9.1.1: + family: '9' + name: Use video cameras and/or access control mechanisms to monitor individual physical + access to sensitive areas. Review collected data and correlate with other entries. + Store for at least three months, unless otherwise restricted by law. +10.2.1: + family: '10' + name: All individual user accesses to cardholder data +12.3.10: + family: '12' + name: For personnel accessing cardholder data via remote-access technologies, prohibit + the copying, moving, and storage of cardholder data onto local hard drives and + removable electronic media, unless explicitly authorized for a defined business + need. Where there is an authorized business need, the usage policies must require + the data be protected in accordance with all applicable PCI DSS Requirements. +Requirement 10: + family: '10' + name: Track and monitor all access to network resources and cardholder data +11.4: + family: '11' + name: Use intrusion-detection and/or intrusion-prevention techniques to detect and/or + prevent intrusions into the network. Monitor all traffic at the perimeter of the + cardholder data environment as well as at critical points in the cardholder data + environment, and alert personnel to suspected compromises.Keep all intrusion-detection + and prevention engines, baselines, and signatures up to date. +10.5.3: + family: '10' + name: Promptly back up audit trail files to a centralized log server or media that + is difficult to alter. +10.6.2: + family: '10' + name: "Review logs of all other system components periodically based on the organization\u2019\ + s policies and risk management strategy, as determined by the organization\u2019\ + s annual risk assessment." +5.2: + family: '5' + name: Ensure that all anti-virus mechanisms are maintained . +12.4: + family: '12' + name: Ensure that the security policy and procedures clearly define information + security responsibilities for all personnel. +3.2.1: + family: '3' + name: Do not store the full contents of any track (from the magnetic stripe located + on the back of a card, equivalent data contained on a chip, or elsewhere) after + authorization. This data is alternatively called full track, track, track 1, track + 2, and magnetic-stripe data. +1.3.4: + family: '1' + name: Implement anti-spoofing measures to detect and block forged source IP addresses + from entering the network. +4.1.1: + family: '4' + name: Ensure wireless networks transmitting cardholder data or connected to the + cardholder data environment, use industry best practices (for example, IEEE 802.11i) + to implement strong encryption for authentication and transmission. +6.5.2: + family: '6' + name: Buffer overflows +12.9: + family: '12' + name: "Additional requirement for service providers only. Service providers acknowledge\ + \ in writing to customers that they are responsible for the security of cardholder\ + \ data the service provider possesses or otherwise stores, processes, or transmits\ + \ on behalf of the customer, or to the extent that they could impact the security\ + \ of the customer\u2019s cardholder data environment." +12.5.4: + family: '12' + name: Administer user accounts, including additions, deletions, and modifications. +10.2.6: + family: '10' + name: Initialization, stopping, or pausing of the audit logs +12.5.3: + family: '12' + name: Establish, document, and distribute security incident response and escalation + procedures to ensure timely and effective handling of all situations. +11.2.3: + family: '11' + name: Perform internal and external scans, and rescans as needed, after any significant + change. Scans must be performed by qualified personnel. +8.2: + family: '8' + name: In addition to assigning a unique ID, ensure proper user-authentication management + for non-consumer users and administrators on all system components by employing + at least one of the following methods to authenticate all users. +6.7: + family: '6' + name: Ensure that security policies and operational procedures for developing and + maintaining secure systems and applications are documented, in use, and known + to all affected parties. +9.6.1: + family: '9' + name: Classify media so the sensitivity of the data can be determined. +12.8: + family: '12' + name: Maintain and implement policies and procedures to manage service providers + with whom cardholder data is shared, or that could affect the security of cardholder + data. diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/certifications/LATO.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/certifications/LATO.yaml new file mode 100644 index 0000000..cd433b3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/certifications/LATO.yaml @@ -0,0 +1,10 @@ +name: LATO +standards: + NIST-800-53: + AC-2: {} + AC-6: {} + CM-2: {} + PCI-DSS-MAY-2015: + 1.1: {} + 1.1.1: {} + 2.1: {} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/components/EC2/artifact-ec2-1.png b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/components/EC2/artifact-ec2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..503d77a696bbea87cf8c695c58a3d2c94b322732 GIT binary patch literal 14721 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 literal 0 HcmV?d00001 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/components/EC2/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/components/EC2/component.yaml new file mode 100644 index 0000000..28e826c --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/components/EC2/component.yaml @@ -0,0 +1,63 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: NIST-800-53 +- control_key: AC-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: NIST-800-53 +- control_key: AC-6 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +- control_key: 1.1.1 + covered_by: [] + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + narrative: Justification in narrative form + standard_key: PCI-DSS-MAY-2015 +schema_version: 2.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/NIST-800-53.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/NIST-800-53.yaml new file mode 100644 index 0000000..d73c259 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/NIST-800-53.yaml @@ -0,0 +1,998 @@ +AC-1: + family: AC + name: Access Control Policy and Procedures +AC-10: + family: AC + name: Concurrent Session Control +AC-11: + family: AC + name: Session Lock +AC-11 (1): + family: AC + name: Session Lock | Pattern-Hiding Displays +AC-12: + family: AC + name: Session Termination +AC-14: + family: AC + name: Permitted Actions Without Identification or Authentication +AC-17: + family: AC + name: Remote Access +AC-17 (1): + family: AC + name: Remote Access | Automated Monitoring / Control +AC-17 (2): + family: AC + name: Remote Access | Protection of Confidentiality / Integrity Using Encryption +AC-17 (3): + family: AC + name: Remote Access | Managed Access Control Points +AC-17 (4): + family: AC + name: Remote Access | Privileged Commands / Access +AC-17 (9): + family: AC + name: Remote Access | Disconnect / Disable Access +AC-18: + family: AC + name: Wireless Access +AC-18 (1): + family: AC + name: Wireless Access | Authentication and Encryption +AC-19: + family: AC + name: Access Control For Mobile Devices +AC-19 (5): + family: AC + name: Access Control For Mobile Devices | Full Device / Container-Based Encryption +AC-2: + family: AC + name: Account Management +AC-2 (1): + family: AC + name: Account Management | Automated System Account Management +AC-2 (10): + family: AC + name: Account Management | Shared / Group Account Credential Termination +AC-2 (12): + family: AC + name: Account Management | Account Monitoring / Atypical Usage +AC-2 (2): + family: AC + name: Account Management | Removal of Temporary / Emergency Accounts +AC-2 (3): + family: AC + name: Account Management | Disable Inactive Accounts +AC-2 (4): + family: AC + name: Account Management | Automated Audit Actions +AC-2 (5): + family: AC + name: Account Management | Inactivity Logout +AC-2 (7): + family: AC + name: Account Management | Role-Based Schemes +AC-2 (9): + family: AC + name: Account Management | Restrictions on Use of Shared Groups / Accounts +AC-20: + family: AC + name: Use of External Information Systems +AC-20 (1): + family: AC + name: Use of External Information Systems | Limits on Authorized Use +AC-20 (2): + family: AC + name: Use of External Information Systems | Portable Storage Devices +AC-21: + family: AC + name: Information Sharing +AC-22: + family: AC + name: Publicly Accessible Content +AC-3: + family: AC + name: Access Enforcement +AC-4: + family: AC + name: Information Flow Enforcement +AC-4 (21): + family: AC + name: Information Flow Enforcement | Physical / Logical Separation of Information + Flows +AC-5: + family: AC + name: Separation of Duties +AC-6: + family: AC + name: Least Privilege +AC-6 (1): + family: AC + name: Least Privilege | Authorize Access to Security Functions +AC-6 (10): + family: AC + name: Least Privilege | Prohibit Non-privileged Users from Executing Privileged + Functions +AC-6 (2): + family: AC + name: Least Privilege | Non-Privileged Access For No security Functions +AC-6 (5): + family: AC + name: Least Privilege | Privileged Accounts +AC-6 (9): + family: AC + name: Least Privilege | Auditing Use of Privileged Functions +AC-7: + family: AC + name: Unsuccessful Logon Attempts +AC-8: + family: AC + name: System Use Notification +AT-1: + family: AT + name: Security Awareness and Training Policy and Procedures +AT-2: + family: AT + name: Security Awareness Training +AT-2 (2): + family: AT + name: Security Awareness | Insider Threat +AT-3: + family: AT + name: Role-Based Security Training +AT-4: + family: AT + name: Security Training Records +AU-1: + family: AU + name: Audit and Accountability Policy and Procedures +AU-11: + family: AU + name: Audit Record Retention +AU-12: + family: AU + name: Audit Generation +AU-2: + family: AU + name: Audit Events +AU-2 (3): + family: AU + name: Audit Events | Reviews and Updates +AU-3: + family: AU + name: Content of Audit Records +AU-3 (1): + family: AU + name: Content of Audit Records | Additional Audit Information +AU-4: + family: AU + name: Audit Storage Capacity +AU-5: + family: AU + name: Response to Audit Processing Failures +AU-6: + family: AU + name: Audit Review, Analysis, and Reporting +AU-6 (1): + family: AU + name: Audit Review, Analysis, and Reporting | Process Integration +AU-6 (3): + family: AU + name: Audit Review, Analysis, and Reporting | Correlate Audit Repositories +AU-7: + family: AU + name: Audit Reduction and Report Generation +AU-7 (1): + family: AU + name: Audit Reduction and Report Generation | Automatic Processing +AU-8: + family: AU + name: Time Stamps +AU-8 (1): + family: AU + name: Time Stamps | Synchronization With Authoritative Time Source +AU-9: + family: AU + name: Protection of Audit Information +AU-9 (2): + family: AU + name: Protection of Audit Information | Audit Backup on Separate Physical Systems + / Components +AU-9 (4): + family: AU + name: Protection of Audit Information | Access by Subset of Privileged Users +CA-1: + family: CA + name: Security Assessment and Authorization Policies and Procedures +CA-2: + family: CA + name: Security Assessments +CA-2 (1): + family: CA + name: Security Assessments | Independent Assessors +CA-2 (2): + family: CA + name: Security Assessments | Specialized Assessments +CA-2 (3): + family: CA + name: Security Assessments | External Organizations +CA-3: + family: CA + name: System Interconnections +CA-3 (3): + family: CA + name: System Interconnections | Unclassified Non-National Security System Connections +CA-3 (5): + family: CA + name: System Interconnections | Restrictions on External Network Connections +CA-5: + family: CA + name: Plan of Action and Milestones +CA-6: + family: CA + name: Security Authorization +CA-7: + family: CA + name: Continuous Monitoring +CA-7 (1): + family: CA + name: Continuous Monitoring | Independent Assessment +CA-8: + family: CA + name: Penetration Testing +CA-8 (1): + family: CA + name: Penetration Testing | Independent Penetration Agent or Team +CA-9: + family: CA + name: Internal System Connections +CM-1: + family: CM + name: Configuration Management Policy and Procedures +CM-10: + family: CM + name: Software Usage Restrictions +CM-10 (1): + family: CM + name: Software Usage Restrictions | Open Source Software +CM-11: + family: CM + name: User-Installed Software +CM-2: + family: CM + name: Baseline Configuration +CM-2 (1): + family: CM + name: Baseline Configuration | Reviews and Updates +CM-2 (3): + family: CM + name: Baseline Configuration | Retention of Previous Configurations +CM-2 (7): + family: CM + name: Baseline Configuration | Configure Systems, Components, or Devices for High-Risk + Areas +CM-2(2): + family: CM + name: Baseline Configuration | Automation Support For Accuracy / Currency +CM-3: + family: CM + name: Configuration Change Control +CM-4: + family: CM + name: Security Impact Analysis +CM-5: + family: CM + name: Access Restrictions For Change +CM-5 (1): + family: CM + name: Access Restrictions For Change | Automated Access Enforcement / Auditing +CM-5 (3): + family: CM + name: Access Restrictions For Change | Signed Components +CM-5 (5): + family: CM + name: Access Restrictions For Change | Limit Production / Operational Privileges +CM-6: + family: CM + name: Configuration Settings +CM-6 (1): + family: CM + name: Configuration Settings | Automated essential Management / Application / Verification +CM-7: + family: CM + name: Least Functionality +CM-7 (1): + family: CM + name: Least Functionality | Periodic Review +CM-7 (2): + family: CM + name: Least Functionality | Prevent Program Execution +CM-7 (5): + family: CM + name: Least Functionality | Authorized Software / Whitelisting +CM-8: + family: CM + name: Information System Component Inventory +CM-8 (1): + family: CM + name: Information System Component Inventory | Updates During Installations / Removals +CM-8 (3): + family: CM + name: Information System Component Inventory | Automated Unauthorized Component + Detection +CM-8 (5): + family: CM + name: Information System Component Inventory | No Duplicate Accounting of Components +CM-9: + family: CM + name: Configuration Management Plan +CP-1: + family: CP + name: Contingency Planning Policy and Procedures +CP-10: + family: CP + name: Information System Recovery and Reconstitution +CP-10 (2): + family: CP + name: Information System Recovery and Reconstitution | Transaction Recovery +CP-2: + family: CP + name: Contingency Plan +CP-2 (1): + family: CP + name: Contingency Plan | Coordinate With Related Plans +CP-2 (2): + family: CP + name: Contingency Plan | Capacity Planning +CP-2 (3): + family: CP + name: Contingency Plan | Resume Essential Missions / Business Functions +CP-2 (8): + family: CP + name: Contingency Plan | Identify Critical Assets +CP-3: + family: CP + name: Contingency Training +CP-4: + family: CP + name: Contingency Plan Testing +CP-4 (1): + family: CP + name: Contingency Plan Testing | Coordinate With Related Plans +CP-6: + family: CP + name: Alternate Storage Site +CP-6 (1): + family: CP + name: Alternate Storage Site | Separation From Primary Site +CP-6 (3): + family: CP + name: Alternate Storage Site | Accessibility +CP-7: + family: CP + name: Alternate Processing Site +CP-7 (1): + family: CP + name: Alternate Processing Site | Separation From Primary Site +CP-7 (2): + family: CP + name: Alternate Processing Site | Accessibility +CP-7 (3): + family: CP + name: Alternate Processing Site | Priority of Service +CP-8: + family: CP + name: Telecommunications Services +CP-8 (1): + family: CP + name: Telecommunications Services | Priority of Service Provisions +CP-8 (2): + family: CP + name: Telecommunications Services | Single Points of Failure +CP-9: + family: CP + name: Information System Backup +CP-9 (1): + family: CP + name: Information System Backup | Testing For Reliability / Integrity +CP-9 (3): + family: CP + name: Information System Backup | Separate Storage for Critical Information +IA-1: + family: IA + name: Identification and Authentication Policy and Procedures +IA-2: + family: IA + name: Identification and Authentication (Organizational Users) +IA-2 (1): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Privileged Accounts +IA-2 (11): + family: IA + name: Identification and Authentication (Organizational Users) | Remote Access - + Separate Device +IA-2 (12): + family: IA + name: Identification and Authentication (Organizational Users) | Acceptance of PIV + Credentials +IA-2 (2): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Non-Privileged Accounts +IA-2 (3): + family: IA + name: Identification and Authentication (Organizational Users) | Local Access to + Privileged Accounts +IA-2 (5): + family: IA + name: Identification and Authentication (Organizational Users) | Group Authentication +IA-2 (8): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Privileged Accounts - Replay Resistant +IA-3: + family: IA + name: Device Identification and Authentication +IA-4: + family: IA + name: Identifier Management +IA-4 (4): + family: IA + name: Identifier Management | Identify User Status +IA-5: + family: IA + name: Authenticator Management +IA-5 (1): + family: IA + name: Authenticator Management | Password-Based Authentication +IA-5 (11): + family: IA + name: Authenticator Management | Hardware Token-Based Authentication +IA-5 (2): + family: IA + name: Authenticator Management | PKI-Based Authentication +IA-5 (3): + family: IA + name: Authenticator Management | In-Person or Trusted Third-Party Registration +IA-5 (4): + family: IA + name: Authenticator Management | Automated Support for Password Strength Determination +IA-5 (6): + family: IA + name: Authenticator Management | Protection of Authenticators +IA-5 (7): + family: IA + name: Authenticator Management | No Embedded Unencrypted Static Authenticators +IA-6: + family: IA + name: Authenticator Feedback +IA-7: + family: IA + name: Cryptographic Module Authentication +IA-8: + family: IA + name: Identification and Authentication (Non-Organizational Users) +IA-8 (1): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Acceptance + of PIV Credentials from Other Agencies +IA-8 (2): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Acceptance + of Third-Party Credentials +IA-8 (3): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Use of FICAM-Approved + Products +IA-8 (4): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Use of FICAM-Issued + Profiles +IR-1: + family: IR + name: Incident Response Policy and Procedures +IR-2: + family: IR + name: Incident Response Training +IR-3: + family: IR + name: Incident Response Testing +IR-3 (2): + family: IR + name: Incident Response Testing | Coordination With Related Plans +IR-4: + family: IR + name: Incident Handling +IR-4 (1): + family: IR + name: Incident Handling | Automated Incident Handling Processes +IR-5: + family: IR + name: Incident Monitoring +IR-6: + family: IR + name: Incident Reporting +IR-6 (1): + family: IR + name: Incident Reporting | Automated Reporting +IR-7: + family: IR + name: Incident Response Assistance +IR-7 (1): + family: IR + name: Incident Response Assistance | Automation Support For Availability of Information + / Support +IR-7 (2): + family: IR + name: Incident Response Assistance | Coordination With External Providers +IR-8: + family: IR + name: Incident Response Plan +IR-9: + family: IR + name: Information Spillage Response +IR-9 (1): + family: IR + name: Information Spillage Response | Responsible Personnel +IR-9 (2): + family: IR + name: Information Spillage Response | Training +IR-9 (3): + family: IR + name: Information Spillage Response | Post-Spill Operations +IR-9 (4): + family: IR + name: Information Spillage Response | Exposure to Unauthorized Personnel +MA-1: + family: MA + name: System Maintenance Policy and Procedures +MA-2: + family: MA + name: Controlled Maintenance +MA-3: + family: MA + name: Maintenance Tools +MA-3 (1): + family: MA + name: Maintenance Tools | Inspect Tools +MA-3 (2): + family: MA + name: Maintenance Tools | Inspect Media +MA-3 (3): + family: MA + name: Maintenance Tools | Prevent Unauthorized Removal +MA-4: + family: MA + name: Nonlocal Maintenance +MA-4 (2): + family: MA + name: Nonlocal Maintenance | Document Nonlocal Maintenance +MA-5: + family: MA + name: Maintenance Personnel +MA-5 (1): + family: MA + name: Maintenance Personnel | Individuals Without Appropriate Access +MA-6: + family: MA + name: Timely Maintenance +MP-1: + family: MP + name: Media Protection Policy and Procedures +MP-2: + family: MP + name: Media Access +MP-3: + family: MP + name: Media Marking +MP-4: + family: MP + name: Media Storage +MP-5: + family: MP + name: Media Transport +MP-5 (4): + family: MP + name: Media Transport | Cryptographic Protection +MP-6: + family: MP + name: Media Sanitization +MP-6 (2): + family: MP + name: Media Sanitization | Equipment Testing +MP-7: + family: MP + name: Media Use +MP-7 (1): + family: MP + name: Media Use | Prohibit Use without Owner +PE-1: + family: PE + name: Physical and Environmental Protection Policy and Procedures +PE-10: + family: PE + name: Emergency Shutoff +PE-11: + family: PE + name: Emergency Power +PE-12: + family: PE + name: Emergency Lighting +PE-13: + family: PE + name: Fire Protection +PE-13 (2): + family: PE + name: Fire Protection | Suppression Devices / Systems +PE-13 (3): + family: PE + name: Fire Protection | Automatic Fire Suppression +PE-14: + family: PE + name: Temperature and Humidity Controls +PE-14 (2): + family: PE + name: Temperature and Humidity Controls | Monitoring With Alarms / Notifications +PE-15: + family: PE + name: Water Damage Protection +PE-16: + family: PE + name: Delivery and Removal +PE-17: + family: PE + name: Alternate Work Site +PE-2: + family: PE + name: Physical Access Authorizations +PE-3: + family: PE + name: Physical Access Control +PE-4: + family: PE + name: Access Control For Transmission Medium +PE-5: + family: PE + name: Access Control For Output Devices +PE-6: + family: PE + name: Monitoring Physical Access +PE-6 (1): + family: PE + name: Monitoring Physical Access | Intrusion Alarms / Surveillance Equipment +PE-8: + family: PE + name: Visitor Access Records +PE-9: + family: PE + name: Power Equipment and Cabling +PL-1: + family: PL + name: Security Planning Policy and Procedures +PL-2: + family: PL + name: System Security Plan +PL-2 (3): + family: PL + name: System Security Plan | Plan / Coordinate With Other Organizational Entities +PL-4: + family: PL + name: Rules of Behavior +PL-4 (1): + family: PL + name: Rules of Behavior | Social Media and Networking Restrictions +PL-8: + family: PL + name: Information Security Architecture +PS-1: + family: PS + name: Personnel Security Policy and Procedures +PS-2: + family: PS + name: Position Risk Designation +PS-3: + family: PS + name: Personnel Screening +PS-3 (3): + family: PS + name: Personnel Screening | Information With Special Protection Measures +PS-4: + family: PS + name: Personnel Termination +PS-5: + family: PS + name: Personnel Transfer +PS-6: + family: PS + name: Access Agreements +PS-7: + family: PS + name: Third-Party Personnel Security +PS-8: + family: PS + name: Personnel Sanctions +RA-1: + family: RA + name: Risk Assessment Policy and Procedures +RA-2: + family: RA + name: Security Categorization +RA-3: + family: RA + name: Risk Assessment +RA-5: + family: RA + name: Vulnerability Scanning +RA-5 (1): + family: RA + name: Vulnerability Scanning | Update Tool Capability +RA-5 (2): + family: RA + name: Vulnerability Scanning | Update by Frequency / Prior to New Scan / When Identified +RA-5 (3): + family: RA + name: Vulnerability Scanning | Breadth / Depth of Coverage +RA-5 (5): + family: RA + name: Vulnerability Scanning | Privileged Access +RA-5 (6): + family: RA + name: Vulnerability Scanning | Automated Trend Analyses +RA-5 (8): + family: RA + name: Vulnerability Scanning | Review Historic Audit Logs +SA-1: + family: SA + name: System and Services Acquisition Policy and Procedures +SA-10: + family: SA + name: Developer Configuration Management +SA-10 (1): + family: SA + name: Developer Configuration Management | Software / Firmware Integrity Verification +SA-11: + family: SA + name: Developer Security Testing and Evaluation +SA-11 (1): + family: SA + name: Developer Security Testing and Evaluation | Static Code Analysis +SA-11 (2): + family: SA + name: Developer Security Testing and Evaluation | Threat and Vulnerability Analyses +SA-11 (8): + family: SA + name: Developer Security Testing and Evaluation | Dynamic Code Analysis +SA-2: + family: SA + name: Allocation of Resources +SA-22: + family: SA + name: UNSUPPORTED SYSTEM COMPONENTS +SA-3: + family: SA + name: System Development Life Cycle +SA-4: + family: SA + name: Acquisition Process +SA-4 (1): + family: SA + name: Acquisition Process | Functional Properties of Security Controls +SA-4 (10): + family: SA + name: Acquisition Process | Use of Approved PIV Products +SA-4 (2): + family: SA + name: Acquisition Process | Design / Implementation Information for Security Controls +SA-4 (8): + family: SA + name: Acquisition Process | Continuous Monitoring Plan +SA-4 (9): + family: SA + name: Acquisition Process | Functions / Ports / Protocols / Services in Use +SA-5: + family: SA + name: Information System Documentation +SA-8: + family: SA + name: Security Engineering Principles +SA-9: + family: SA + name: External Information System Services +SA-9 (1): + family: SA + name: External Information Systems | Risk Assessments / Organizational Approvals +SA-9 (2): + family: SA + name: External Information Systems | Identification of Functions / Ports / Protocols + / Services +SA-9 (4): + family: SA + name: External Information Systems | Consistent Interests of Consumers and Providers +SA-9 (5): + family: SA + name: External Information Systems | Processing, Storage, and Service Location +SC-1: + family: SC + name: System and Communications Protection Policy and Procedures +SC-10: + family: SC + name: Network Disconnect +SC-12: + family: SC + name: Cryptographic Key Establishment and Management +SC-12 (2): + family: SC + name: Cryptographic Key Establishment and Management | Symmetric Keys +SC-12 (3): + family: SC + name: Cryptographic Key Establishment and Management | Asymmetric Keys +SC-13: + family: SC + name: Cryptographic Protection +SC-15: + family: SC + name: Collaborative Computing Devices +SC-17: + family: SC + name: Public Key Infrastructure Certificates +SC-18: + family: SC + name: Mobile Code +SC-19: + family: SC + name: Voice Over Internet Protocol +SC-2: + family: SC + name: Application Partitioning +SC-20: + family: SC + name: Secure Name / Address Resolution Service (Authoritative Source) +SC-21: + family: SC + name: Secure Name / Address Resolution Service (Recursive or Caching Resolver) +SC-22: + family: SC + name: Architecture and Provisioning for Name / Address Resolution Service +SC-23: + family: SC + name: Session Authenticity +SC-28: + family: SC + name: Protection of Information At Rest +SC-28 (1): + family: SC + name: Protection Of Information At Rest | Cryptographic Protection +SC-39: + family: SC + name: Process Isolation +SC-4: + family: SC + name: Information In Shared Resources +SC-5: + family: SC + name: Denial of Service Protection +SC-6: + family: SC + name: Resource Availability +SC-7: + family: SC + name: Boundary Protection +SC-7 (12): + family: SC + name: Boundary Protection | Host-Based Protection +SC-7 (13): + family: SC + name: Boundary Protection | Isolation of Security Tools / Mechanisms / Support Components +SC-7 (18): + family: SC + name: Boundary Protection | Fail Secure +SC-7 (3): + family: SC + name: Boundary Protection | Access Points +SC-7 (4): + family: SC + name: Boundary Protection | External Telecommunications Services +SC-7 (5): + family: SC + name: Boundary Protection | Deny by Default / Allow by Exception +SC-7 (7): + family: SC + name: Boundary Protection | Prevent Split Tunneling for Remote Devices +SC-7 (8): + family: SC + name: Boundary Protection | Route Traffic to Authenticated Proxy Servers +SC-8: + family: SC + name: Transmission Confidentiality and Integrity +SC-8 (1): + family: SC + name: Transmission Confidentiality and Integrity | Cryptographic or Alternate Physical + Protection +SI-1: + family: SI + name: System and Information Integrity Policy and Procedures +SI-10: + family: SI + name: Information Input Validation +SI-11: + family: SI + name: Error Handling +SI-12: + family: SI + name: Information Handling and Retention +SI-16: + family: SI + name: Memory Protection +SI-2: + family: SI + name: Flaw Remediation +SI-2 (2): + family: SI + name: Flaw Remediation | Automated Flaw Remediation Status +SI-2 (3): + family: SI + name: Flaw Remediation | Time to Remediate Flaws / Benchmarks for Corrective Actions +SI-3: + family: SI + name: Malicious Code Protection +SI-3 (1): + family: SI + name: Malicious Code Protection | essential Management +SI-3 (2): + family: SI + name: Malicious Code Protection | Automatic Updates +SI-3 (7): + family: SI + name: Malicious Code Protection | Nonsignature-Based Detection +SI-4: + family: SI + name: Information System Monitoring +SI-4 (1): + family: SI + name: Information System Monitoring | System-Wide Intrusion Detection System +SI-4 (16): + family: SI + name: Information System Monitoring | Correlate Monitoring Information +SI-4 (2): + family: SI + name: Information System Monitoring | Automated Tools For Real-Time Analysis +SI-4 (23): + family: SI + name: Information System Monitoring | Host-Based Devices +SI-4 (4): + family: SI + name: Information System Monitoring | Inbound and Outbound Communications Traffic +SI-4 (5): + family: SI + name: Information System Monitoring | System-Generated Alerts +SI-4(14): + family: SI + name: Information System Monitoring | Wireless Intrusion Detection +SI-5: + family: SI + name: Security Alerts, Advisories, and Directives +SI-6: + family: SI + name: Security Function Verification +SI-7: + family: SI + name: Software, Firmware, and Information Integrity +SI-7 (1): + family: SI + name: Software, Firmware, and Information Integrity | Integrity Checks +SI-7 (7): + family: SI + name: Software, Firmware, and Information Integrity | Integration of Detection and + Response +SI-8: + family: SI + name: Spam Protection +SI-8 (1): + family: SI + name: Spam Protection | essential Management +SI-8 (2): + family: SI + name: Spam Protection | Automatic Updates +name: NIST-800-53 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/PCI-DSS-MAY-2015.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/PCI-DSS-MAY-2015.yaml new file mode 100644 index 0000000..7dd7738 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_complete/standards/PCI-DSS-MAY-2015.yaml @@ -0,0 +1,1029 @@ +1.1: + family: '1' + name: Establish and implement firewall and router configuration standards. +2.1: + family: '2' + name: Always change vendor-supplied defaults and remove or disable unnecessary default + accounts before installing a system on the network. +3.1: + family: '3' + name: Keep cardholder data storage to a minimum by implementing data retention and + disposal policies, procedures and processes +4.1: + family: '4' + name: Use strong cryptography and security protocols (for example, TLS, IPSEC, SSH, + etc.) to safeguard sensitive cardholder data during transmission over open, public + networks. +5.1: + family: '5' + name: Deploy anti-virus software on all systems commonly affected by malicious software + (particularly personal computers and servers). +6.1: + family: '6' + name: "Establish a process to identify security vulnerabilities, using reputable\ + \ outside sources for security vulnerability information, and assign a risk ranking\ + \ (for example, as \u201Chigh,\u201D \u201Cmedium,\u201D or \u201Clow\u201D) to\ + \ newly discovered security vulnerabilities." +1.4: + family: '1' + name: Install personal firewall software on any mobile and/or employee-owned devices + that connect to the Internet when outside the network (for example, laptops used + by employees), and which are also used to access the network. +8.5: + family: '8' + name: Do not use group, shared, or generic IDs, passwords, or other authentication + methods. +9.9: + family: '9' + name: Protect devices that capture payment card data via direct physical interaction + with the card from tampering and substitution. +10.1: + family: '10' + name: Implement audit trails to link all access to system components to each individual + user. +Requirement 11: + family: '11' + name: Regularly test security systems and processes +12.1: + family: '12' + name: Implement an incident response plan. Be prepared to respond immediately to + a system breach. +2.2: + family: '2' + name: Develop configuration standards for all system components. Assure that these + standards address all known security vulnerabilities and are consistent with industry-accepted + system hardening standards. +10.5.4: + family: '10' + name: Write logs for external-facing technologies onto a secure, centralized, internal + log server or media device. +3.6: + family: '3' + name: Fully document and implement all key-management processes and procedures for + cryptographic keys used for encryption of cardholder data. +9.7: + family: '9' + name: Maintain strict control over the storage and accessibility of media. +4.3: + family: '4' + name: Ensure that security policies and operational procedures for encrypting transmissions + of cardholder data are documented, in use, and known to all affected parties. +5.4: + family: '5' + name: Ensure that security policies and operational procedures for protecting systems + against malware are documented, in use, and known to all affected parties. +1.5: + family: '1' + name: Ensure that security policies and operational procedures for managing firewalls + are documented, in use, and known to all affected parties. +6.6: + family: '6' + name: For public-facing web applications, address new threats and vulnerabilities + on an ongoing basis and ensure these applications are protected against known + attacks. +7.2: + family: '7' + name: "Establish an access control system for systems components that restricts\ + \ access based on a user\u2019s need to know, and is set to \u201Cdeny all\u201D\ + \ unless specifically allowed." +9.9.1: + family: '9' + name: Maintain an up-to-date list of devices. +6.4.1: + family: '6' + name: Separate development/test environments from production environments, and enforce + the separation with access controls. +6.5.5: + family: '6' + name: Improper error handling +8.3: + family: '8' + name: Incorporate two-factor authentication for remote network access originating + from outside the network by personnel (including users and administrators) and + all third parties, (including vendor access for support or maintenance). +10.2: + family: '10' + name: Implement automated audit trails for all system components to reconstruct + the following events. +9.2: + family: '9' + name: Develop procedures to easily distinguish between onsite personnel and visitors. +12.3.1: + family: '12' + name: Explicit approval by authorized parties +10.4.2: + family: '10' + name: Time data is protected. +10.3: + family: '10' + name: Record at least the following audit trail entries for all system components + for each event. +2.5: + family: '2' + name: Ensure that security policies and operational procedures for managing vendor + defaults and other security parameters are documented, in use, and known to all + affected parties. +11.1: + family: '11' + name: Implement processes to test for the presence of wireless access points (802.11), + and detect and identify all authorized and unauthorized wireless access points + on a quarterly basis. +12.8.2: + family: '12' + name: "Maintain a written agreement that includes an acknowledgement that the service\ + \ providers are responsible for the security of cardholder data the service providers\ + \ possess or otherwise store, process or transmit on behalf of the customer, or\ + \ to the extent that they could impact the security of the customer\u2019s cardholder\ + \ data environment." +12.2: + family: '12' + name: Implement a risk-assessment process. +11.2: + family: '11' + name: Run internal and external network vulnerability scans at least quarterly and + after any significant change in the network (such as new system component installations, + changes in network topology, firewall rule modifications, product upgrades). +10.2.5: + family: '10' + name: "Use of and changes to identification and authentication mechanisms\u2014\ + including but not limited to creation of new accounts and elevation of privileges\u2014\ + and all changes, additions, or deletions to accounts with root or administrative\ + \ privileges" +12.6.1: + family: '12' + name: Educate personnel upon hire and at least annually. +3.5: + family: '3' + name: Document and implement procedures to protect keys used to secure stored cardholder + data against disclosure and misuse. +A.1.2: + family: A + name: "Restrict each entity\u2019s access and privileges to its own cardholder data\ + \ environment only." +12.7: + family: '12' + name: Screen potential personnel prior to hire to minimize the risk of attacks from + internal sources. (Examples of background checks include previous employment history, + criminal record, credit history, and reference checks.) +1.2.2: + family: '1' + name: Secure and synchronize router configuration files. +7.1.1: + family: '7' + name: Define access needs for each role. +3.5.1: + family: '3' + name: Restrict access to cryptographic keys to the fewest number of custodians necessary. +12.3.2: + family: '12' + name: Authentication for use of the technology +9.1.3: + family: '9' + name: Restrict physical access to wireless access points, gateways, handheld devices, + networking/communications hardware, and telecommunication lines. +9.4.1: + family: '9' + name: Visitors are authorized before entering, and escorted at all times within, + areas where cardholder data is processed or maintained. +6.3.1: + family: '6' + name: Remove development, test and/or custom application accounts, user IDs, and + passwords before applications become active or are released to customers. +9.7.1: + family: '9' + name: Properly maintain inventory logs of all media and conduct media inventories + at least annually. +1.1.3: + family: '1' + name: Current diagram that shows all cardholder data flows across systems and networks +1.1.2: + family: '1' + name: Current network diagram that identifies all connections between the cardholder + data environment and other networks, including any wireless networks +12.3.7: + family: '12' + name: List of company-approved products +12.3.5: + family: '12' + name: Acceptable uses of the technology +3.6.1: + family: '3' + name: Generation of strong cryptographic keys +6.5.7: + family: '6' + name: Cross-site scripting (XSS) +8.2.5: + family: '8' + name: Do not allow an individual to submit a new password/phrase that is the same + as any of the last four passwords/phrases he or she has used. +6.4.3: + family: '6' + name: Production data (live PANs) are not used for testing or development +3.6.3: + family: '3' + name: Secure cryptographic key storage +3.5.2: + family: '3' + name: Store secret and private keys used to encrypt/decrypt cardholder data in one + (or more) of the following forms at all times +8.2.1: + family: '8' + name: Using strong cryptography, render all authentication credentials (such as + passwords/phrases) unreadable during transmission and storage on all system components. +6.4.2: + family: '6' + name: Separation of duties between development/test and production environments +7.1.2: + family: '7' + name: Restrict access to privileged user IDs to least privileges necessary to perform + job responsibilities. +6.5.10: + family: '6' + name: Broken authentication and session management +9.3: + family: '9' + name: Control physical access for onsite personnel to sensitive areas. +8.2.3: + family: '8' + name: Passwords/phrases must meet the following(Require a minimum length of at least + seven characters.Contain both numeric and alphabetic characters.) +10.3.3: + family: '10' + name: Date and time +10.3.6: + family: '10' + name: Identity or name of affected data, system component, or resource. +10.5.1: + family: '10' + name: Limit viewing of audit trails to those with a job-related need. +12.8.4: + family: '12' + name: "Maintain a program to monitor service providers\u2019 PCI DSS compliance\ + \ status at least annually." +5.1.2: + family: '5' + name: For systems considered to be not commonly affected by malicious software, + perform periodic evaluations to identify and evaluate evolving malware threats + in order to confirm whether such systems continue to not require anti-virus software. +6.4.5.4: + family: '6' + name: Back-out procedures. +10.5.2: + family: '10' + name: Protect audit trail files from unauthorized modifications. +Requirement A.1: + family: A.1 + name: Shared hosting providers must protect the cardholder data environment +1.3.8: + family: '1' + name: Do not disclose private IP addresses and routing information to unauthorized + parties. +2.3: + family: '2' + name: Encrypt all non-console administrative access using strong cryptography. Use + technologies such as SSH, VPN, or TLS for web-based management and other non-console + administrative access. +A.1: + family: A + name: "Protect each entity\u2019s (that is, merchant, service provider, or other\ + \ entity) hosted environment and data, per A.1.1 through A.1.4" +9.9.2: + family: '9' + name: Periodically inspect device surfaces to detect tampering (for example, addition + of card skimmers to devices), or substitution (for example, by checking the serial + number or other device characteristics to verify it has not been swapped with + a fraudulent device). +9.5: + family: '9' + name: Physically secure all media. +12.6.2: + family: '12' + name: Require personnel to acknowledge at least annually that they have read and + understood the security policy and procedures. +8.6: + family: '8' + name: Where other authentication mechanisms are used (for example, physical or logical + security tokens, smart cards, certificates, etc.), use of these mechanisms must + be assigned . +3.3: + family: '3' + name: Mask PAN when displayed (the first six and last four digits are the maximum + number of digits to be displayed), such that only personnel with a legitimate + business need can see the full PAN. +12.8.1: + family: '12' + name: Maintain a list of service providers. +2.2.3: + family: '2' + name: "Implement additional security features for any required services, protocols,\ + \ or daemons that are considered to be insecure\u2014for example, use secured\ + \ technologies such as SSH, S-FTP, TLS, or IPSec VPN to protect insecure services\ + \ such as NetBIOS, file-sharing, Telnet, FTP, etc." +12.8.5: + family: '12' + name: Maintain information about which PCI DSS requirements are managed by each + service provider, and which are managed by the entity. +3.2.2: + family: '3' + name: Do not store the card verification code or value (three-digit or four-digit + number printed on the front or back of a payment card used to verify card-not-present + transactions) after authorization. +Requirement 6: + family: '6' + name: Develop and maintain secure systems and applications +8.1.6: + family: '8' + name: Limit repeated access attempts by locking out the user ID after not more than + six attempts. +9.4.2: + family: '9' + name: Visitors are identified and given a badge or other identification that expires + and that visibly distinguishes the visitors from onsite personnel. +Requirement 1: + family: '1' + name: Install and maintain a firewall configuration to protect cardholder data +12.5.1: + family: '12' + name: Establish, document, and distribute security policies and procedures. +10.4.3: + family: '10' + name: Time settings are received from industry-accepted time sources. +3.6.6: + family: '3' + name: If manual clear-text cryptographic key-management operations are used, these + operations must be managed using split knowledge and dual control. +9.1.2: + family: '9' + name: Implement physical and/or logical controls to restrict access to publicly + accessible network jacks. +11.5: + family: '11' + name: Deploy a change-detection mechanism (for example, file-integrity monitoring + tools) to alert personnel to unauthorized modification (including changes, additions, + and deletions) of critical system files, configuration files, or content files; + and configure the software to perform critical file comparisons at least weekly. +9.6.2: + family: '9' + name: Send the media by secured courier or other delivery method that can be accurately + tracked. +7.1.3: + family: '7' + name: "Assign access based on individual personnel\u2019s job classification and\ + \ function." +12.5.5: + family: '12' + name: Monitor and control all access to data. +2.1.1: + family: '2' + name: For wireless environments connected to the cardholder data environment or + transmitting cardholder data, change ALL wireless vendor defaults at installation, + including but not limited to default wireless encryption keys, passwords, and + SNMP community strings. +1.2.3: + family: '1' + name: Install perimeter firewalls between all wireless networks and the cardholder + data environment, and configure these firewalls to deny or, if traffic is necessary + for business purposes, permit only authorized traffic between the wireless environment + and the cardholder data environment. +8.7: + family: '8' + name: All access to any database containing cardholder data (including access by + applications, administrators, and all other users) is restricted . +2.2.2: + family: '2' + name: Enable only necessary services, protocols, daemons, etc., as required for + the function of the system. +1.1.7: + family: '1' + name: Requirement to review firewall and router rule sets at least every six months +12.5: + family: '12' + name: Assign to an individual or team the following information security management + responsibilities. +8.1.3: + family: '8' + name: Immediately revoke access for any terminated users. +10.6.1: + family: '10' + name: Review the following at least daily (-All security events. -Logs of all system + components that store, process, or transmit CHD and/or SAD.-Logs of all critical + system components.-Logs of all servers and system components that perform security + functions (for example, firewalls, intrusion-detection systems/intrusion-prevention + systems (IDS/IPS), authentication servers, e-commerce redirection servers, etc.) +6.3: + family: '6' + name: Develop internal and external software applications (including web-based administrative + access to applications) securely. +6.2: + family: '6' + name: Ensure that all system components and software are protected from known vulnerabilities + by installing applicable vendor-supplied security patches. Install critical security + patches within one month of release. +10.2.7: + family: '10' + name: Creation and deletion of system-level objects +9.5.1: + family: '9' + name: "Store media backups in a secure location, preferably an off-site facility,\ + \ such as an alternate or backup site, or a commercial storage facility. Review\ + \ the location\u2019s security at least annually." +Requirement 5: + family: '5' + name: Use and regularly update anti-virus software or programs +8.5.1: + family: '8' + name: Additional requirement for service providers only. Service providers with + remote access to customer premises (for example, for support of POS systems or + servers) must use a unique authentication credential (such as a password/phrase) + for each customer. +1.3.2: + family: '1' + name: Limit inbound Internet traffic to IP addresses within the DMZ. +10.3.1: + family: '10' + name: User identification +8.1.7: + family: '8' + name: Set the lockout duration to a minimum of 30 minutes or until an administrator + enables the user ID. +7.3: + family: '7' + name: Ensure that security policies and operational procedures for restricting access + to cardholder data are documented, in use, and known to all affected parties. +12.3.3: + family: '12' + name: A list of all such devices and personnel with access +12.5.2: + family: '12' + name: Monitor and analyze security alerts and information, and distribute to appropriate + personnel. +A.1.4: + family: A + name: Enable processes to provide for timely forensic investigation in the event + of a compromise to any hosted merchant or service provider. +9.6: + family: '9' + name: Maintain strict control over the internal or external distribution of any + kind of media. +5.1.1: + family: '5' + name: Ensure that anti-virus programs are capable of detecting, removing, and protecting + against all known types of malicious software. +12.10.3: + family: '12' + name: Designate specific personnel to be available on a 24/7 basis to respond to + alerts. +8.2.4: + family: '8' + name: Change user passwords/passphrases at least once every 90 days. +12.10.1: + family: '12' + name: Create the incident response plan to be implemented in the event of system + breach. Ensure the plan addresses the following. +12.3.4: + family: '12' + name: A method to accurately and readily determine owner, contact information, and + purpose (for example, labeling, coding, and/or inventorying of devices) +A.1.1: + family: A + name: "Ensure that each entity only runs processes that have access to that entity\u2019\ + s cardholder data environment." +Requirement 8: + family: '8' + name: Assign a unique ID to each person with computer access +10.5.5: + family: '10' + name: Use file-integrity monitoring or change-detection software on logs to ensure + that existing log data cannot be changed without generating alerts (although new + data being added should not cause an alert). +6.5.4: + family: '6' + name: Insecure communications +9.4.4: + family: '9' + name: A visitor log is used to maintain a physical audit trail of visitor activity + to the facility as well as computer rooms and data centers where cardholder data + is stored or transmitted. +2.6: + family: '2' + name: "Shared hosting providers must protect each entity\u2019s hosted environment\ + \ and cardholder data. These providers must meet specific requirements as detailed\ + \ in Appendix A." +3.6.5: + family: '3' + name: Retirement or replacement (for example, archiving, destruction, and/or revocation) + of keys as deemed necessary when the integrity of the key has been weakened (for + example, departure of an employee with knowledge of a clear-text key component), + or keys are suspected of being compromised. +1.1.4: + family: '1' + name: Requirements for a firewall at each Internet connection and between any demilitarized + zone (DMZ) and the internal network zone +name: PCI-DSS-MAY-2015 +9.6.3: + family: '9' + name: Ensure management approves any and all media that is moved from a secured + area (including when media is distributed to individuals). +3.6.4: + family: '3' + name: Cryptographic key changes for keys that have reached the end of their cryptoperiod + (for example, after a defined period of time has passed and/or after a certain + amount of cipher-text has been produced by a given key), as defined by the associated + application vendor or key owner, and based on industry best practices and guidelines + (for example, NIST Special Publication 800-57). +7.2.1: + family: '7' + name: Coverage of all system components +8.8: + family: '8' + name: Ensure that security policies and operational procedures for identification + and authentication are documented, in use, and known to all affected parties. +10.5: + family: '10' + name: Secure audit trails so they cannot be altered. +Requirement 9: + family: '9' + name: Restrict physical access to cardholder data +1.3: + family: '1' + name: Prohibit direct public access between the Internet and any system component + in the cardholder data environment. +6.5.6: + family: '6' + name: "All \u201Chigh risk\u201D vulnerabilities identified in the vulnerability\ + \ identification process (as defined in PCI DSS Requirement 6.1)." +1.2.1: + family: '1' + name: Restrict inbound and outbound traffic to that which is necessary for the cardholder + data environment, and specifically deny all other traffic. +3.5.3: + family: '3' + name: Store cryptographic keys in the fewest possible locations. +Requirement 3: + family: '3' + name: Protect stored cardholder data +11.3.2: + family: '11' + name: Perform internal penetration testing at least annually and after any significant + infrastructure or application upgrade or modification (such as an operating system + upgrade, a sub-network added to the environment, or a web server added to the + environment). +9.8: + family: '9' + name: Destroy media when it is no longer needed for business or legal reasons . +11.2.1: + family: '11' + name: "Perform quarterly internal vulnerability scans and rescans as needed, until\ + \ all \u201Chigh-risk\u201D vulnerabilities (as identified in Requirement 6.1)\ + \ are resolved. Scans must be performed by qualified personnel." +3.6.8: + family: '3' + name: Requirement for cryptographic key custodians to formally acknowledge that + they understand and accept their key-custodian responsibilities. +10.8: + family: '10' + name: Ensure that security policies and operational procedures for monitoring all + access to network resources and cardholder data are documented, in use, and known + to all affected parties. +8.2.2: + family: '8' + name: "Verify user identity before modifying any authentication credential\u2014\ + for example, performing password resets, provisioning new tokens, or generating\ + \ new keys." +8.1.2: + family: '8' + name: Control addition, deletion, and modification of user IDs, credentials, and + other identifier objects. +11.3.4: + family: '11' + name: If segmentation is used to isolate the CDE from other networks, perform penetration + tests at least annually and after any changes to segmentation controls/methods + to verify that the segmentation methods are operational and effective, and isolate + all out-of-scope systems from systems in the CDE. +1.3.5: + family: '1' + name: Do not allow unauthorized outbound traffic from the cardholder data environment + to the Internet. +11.3: + family: '11' + name: Implement a methodology for penetration testing. +7.1: + family: '7' + name: Limit access to system components and cardholder data to only those individuals + whose job requires such access. +10.2.2: + family: '10' + name: All actions taken by any individual with root or administrative privileges +8.1.8: + family: '8' + name: If a session has been idle for more than 15 minutes, require the user to re-authenticate + to re-activate the terminal or session. +1.1.6: + family: '1' + name: Documentation and business justification for use of all services, protocols, + and ports allowed, including documentation of security features implemented for + those protocols considered to be insecure. +8.1.4: + family: '8' + name: Remove/disable inactive user accounts within 90 days. +10.3.5: + family: '10' + name: Origination of event +7.2.2: + family: '7' + name: Assignment of privileges to individuals based on job classification and function. +8.1: + family: '8' + name: Define and implement policies and procedures to ensure proper user identification + management for non-consumer users and administrators on all system components. +12.3.8: + family: '12' + name: Automatic disconnect of sessions for remote-access technologies after a specific + period of inactivity +6.4.5: + family: '6' + name: Change control procedures for the implementation of security patches and software + modifications. +6.4.4: + family: '6' + name: Removal of test data and accounts before production systems become active +A.1.3: + family: A + name: "Ensure logging and audit trails are enabled and unique to each entity\u2019\ + s cardholder data environment and consistent with PCI DSS Requirement 10." +1.3.3: + family: '1' + name: Do not allow any direct connections inbound or outbound for traffic between + the Internet and the cardholder data environment. +12.3: + family: '12' + name: Develop usage policies for critical technologies and define proper use of + these technologies. +10.7: + family: '10' + name: Retain audit trail history for at least one year, with a minimum of three + months immediately available for analysis (for example, online, archived, or restorable + from backup). +9.1: + family: '9' + name: Ensure that security policies and operational procedures for restricting physical + access to cardholder data are documented, in use, and known to all affected parties. +6.3.2: + family: '6' + name: Review custom code prior to release to production or customers in order to + identify any potential coding vulnerability (using either manual or automated + processes) +2.4: + family: '2' + name: Maintain an inventory of system components that are in scope for PCI DSS. +11.1.2: + family: '11' + name: Implement incident response procedures in the event unauthorized wireless + access points are detected. +12.1.1: + family: '12' + name: Review the security policy at least annually and update the policy when the + environment changes. +10.6: + family: '10' + name: Review logs and security events for all system components to identify anomalies + or suspicious activity. +6.5.1: + family: '6' + name: Injection flaws, particularly SQL injection. Also consider OS Command Injection, + LDAP and XPath injection flaws as well as other injection flaws. +3.2.3: + family: '3' + name: Do not store the personal identification number (PIN) or the encrypted PIN + block after authorization. +3.4: + family: '3' + name: Render PAN unreadable anywhere it is stored (including on portable digital + media, backup media, and in logs). +11.5.1: + family: '11' + name: Implement a process to respond to any alerts generated by the change-detection + solution. +Requirement 4: + family: '4' + name: Encrypt transmission of cardholder data across open, public networks +2.2.1: + family: '2' + name: Implement only one primary function per server to prevent functions that require + different security levels from co-existing on the same server. (For example, web + servers, database servers, and DNS should be implemented on separate servers.) +9.4.3: + family: '9' + name: Visitors are asked to surrender the badge or identification before leaving + the facility or at the date of expiration. +11.6: + family: '11' + name: Ensure that security policies and operational procedures for security monitoring + and testing are documented, in use, and known to all affected parties. +3.4.1: + family: '3' + name: If disk encryption is used (rather than file- or column-level database encryption), + logical access must be managed separately and independently of native operating + system authentication and access control mechanisms (for example, by not using + local user account databases or general network login credentials). Decryption + keys must not be associated with user accounts. +8.2.6: + family: '8' + name: Set passwords/phrases for first-time use and upon reset to a unique value + for each user, and change immediately after the first use. +6.5.9: + family: '6' + name: Cross-site request forgery (CSRF) +6.4.5.3: + family: '6' + name: Functionality testing to verify that the change does not adversely impact + the security of the system. +7.1.4: + family: '7' + name: Require documented approval by authorized parties specifying required privileges. +10.2.4: + family: '10' + name: Invalid logical access attempts +12.6: + family: '12' + name: Implement a formal security awareness program to make all personnel aware + of the importance of cardholder data security. +1.1.1: + family: '1' + name: A formal process for approving and testing all network connections and changes + to the firewall and router configurations +1.1.5: + family: '1' + name: Description of groups, roles, and responsibilities for management of network + components +Requirement 2: + family: '2' + name: Do not use vendor-supplied defaults for system passwords and other security + parameters +9.8.2: + family: '9' + name: Render cardholder data on electronic media unrecoverable so that cardholder + data cannot be reconstructed. +1.3.7: + family: '1' + name: Place system components that store cardholder data (such as a database) in + an internal network zone, segregated from the DMZ and other untrusted networks. +3.6.2: + family: '3' + name: Secure cryptographic key distribution +11.3.1: + family: '11' + name: Perform external penetration testing at least annually and after any significant + infrastructure or application upgrade or modification (such as an operating system + upgrade, a sub-network added to the environment, or a web server added to the + environment). +12.10.5: + family: '12' + name: Include alerts from security monitoring systems, including but not limited + to intrusion-detection, intrusion-prevention, firewalls, and file-integrity monitoring + systems. +2.2.4: + family: '2' + name: Configure system security parameters to prevent misuse. +1.3.6: + family: '1' + name: "Implement stateful inspection, also known as dynamic packet filtering. (That\ + \ is, only \u201Cestablished\u201D connections are allowed into the network.)" +6.4: + family: '6' + name: Follow change control processes and procedures for all changes to system components. +6.4.5.2: + family: '6' + name: Documented change approval by authorized parties. +10.6.3: + family: '10' + name: Follow up exceptions and anomalies identified during the review process. +12.3.9: + family: '12' + name: Activation of remote-access technologies for vendors and business partners + only when needed by vendors and business partners, with immediate deactivation + after use +11.2.2: + family: '11' + name: Perform quarterly external vulnerability scans, via an Approved Scanning Vendor + (ASV) approved by the Payment Card Industry Security Standards Council (PCI SSC). + Perform rescans as needed, until passing scans are achieved. +12.3.6: + family: '12' + name: Acceptable network locations for the technologies +1.2: + family: '1' + name: Build firewall and router configurations that restrict connections between + untrusted networks and any system components in the cardholder data environment. +10.2.3: + family: '10' + name: Access to all audit trails +12.10.6: + family: '12' + name: Develop a process to modify and evolve the incident response plan according + to lessons learned and to incorporate industry developments. +6.5.8: + family: '6' + name: Improper access control (such as insecure direct object references, failure + to restrict URL access, directory traversal, and failure to restrict user access + to functions). +7.2.3: + family: '7' + name: "Default \u201Cdeny-all\u201D setting." +8.1.5: + family: '8' + name: Manage IDs used by vendors to access, support, or maintain system components + via remote access . +8.1.1: + family: '8' + name: Assign all users a unique ID before allowing them to access system components + or cardholder data. +8.4: + family: '8' + name: Document and communicate authentication policies and procedures to all users. +12.10.2: + family: '12' + name: Test the plan at least annually. +10.3.4: + family: '10' + name: Success or failure indication +Requirement 12: + family: '12' + name: Maintain a policy that addresses information security for all personnel +1.3.1: + family: '1' + name: Implement a DMZ to limit inbound traffic to only system components that provide + authorized publicly accessible services, protocols, and ports. +11.1.1: + family: '11' + name: Maintain an inventory of authorized wireless access points including a documented + business justification. +9.4: + family: '9' + name: Implement procedures to identify and authorize visitors. +Requirement 7: + family: '7' + name: Restrict access to cardholder data by business need to know +5.3: + family: '5' + name: Ensure that anti-virus mechanisms are actively running and cannot be disabled + or altered by users, unless specifically authorized by management on a case-by-case + basis for a limited time period. +9.9.3: + family: '9' + name: Provide training for personnel to be aware of attempted tampering or replacement + of devices. +3.2: + family: '3' + name: Do not store sensitive authentication data after authorization (even if encrypted). + If sensitive authentication data is received, render all data unrecoverable upon + completion of the authorization process. +11.3.3: + family: '11' + name: Exploitable vulnerabilities found during penetration testing are corrected + and testing is repeated to verify the corrections. +6.5: + family: '6' + name: Address common coding vulnerabilities in software-development processes. +3.6.7: + family: '3' + name: Prevention of unauthorized substitution of cryptographic keys. +10.3.2: + family: '10' + name: Type of event +12.10.4: + family: '12' + name: Provide appropriate training to staff with security breach response responsibilities. +9.8.1: + family: '9' + name: Shred, incinerate, or pulp hard-copy materials so that cardholder data cannot + be reconstructed. Secure storage containers used for materials that are to be + destroyed. +10.4: + family: '10' + name: Using time-synchronization technology, synchronize all critical system clocks + and times and ensure that the following is implemented for acquiring, distributing, + and storing time. +2.2.5: + family: '2' + name: Remove all unnecessary functionality, such as scripts, drivers, features, + subsystems, file systems, and unnecessary web servers. +12.8.3: + family: '12' + name: Ensure there is an established process for engaging service providers including + proper due diligence prior to engagement. +6.4.5.1: + family: '6' + name: Documentation of impact. +10.4.1: + family: '10' + name: Critical systems have the correct and consistent time. +3.7: + family: '3' + name: Ensure that security policies and operational procedures for protecting stored + cardholder data are documented, in use, and known to all affected parties. +4.2: + family: '4' + name: Never send unprotected PANs by end-user messaging technologies (for example, + e-mail, instant messaging, SMS, chat, etc.). +6.5.3: + family: '6' + name: Insecure cryptographic storage +9.1.1: + family: '9' + name: Use video cameras and/or access control mechanisms to monitor individual physical + access to sensitive areas. Review collected data and correlate with other entries. + Store for at least three months, unless otherwise restricted by law. +10.2.1: + family: '10' + name: All individual user accesses to cardholder data +12.3.10: + family: '12' + name: For personnel accessing cardholder data via remote-access technologies, prohibit + the copying, moving, and storage of cardholder data onto local hard drives and + removable electronic media, unless explicitly authorized for a defined business + need. Where there is an authorized business need, the usage policies must require + the data be protected in accordance with all applicable PCI DSS Requirements. +Requirement 10: + family: '10' + name: Track and monitor all access to network resources and cardholder data +11.4: + family: '11' + name: Use intrusion-detection and/or intrusion-prevention techniques to detect and/or + prevent intrusions into the network. Monitor all traffic at the perimeter of the + cardholder data environment as well as at critical points in the cardholder data + environment, and alert personnel to suspected compromises.Keep all intrusion-detection + and prevention engines, baselines, and signatures up to date. +10.5.3: + family: '10' + name: Promptly back up audit trail files to a centralized log server or media that + is difficult to alter. +10.6.2: + family: '10' + name: "Review logs of all other system components periodically based on the organization\u2019\ + s policies and risk management strategy, as determined by the organization\u2019\ + s annual risk assessment." +5.2: + family: '5' + name: Ensure that all anti-virus mechanisms are maintained . +12.4: + family: '12' + name: Ensure that the security policy and procedures clearly define information + security responsibilities for all personnel. +3.2.1: + family: '3' + name: Do not store the full contents of any track (from the magnetic stripe located + on the back of a card, equivalent data contained on a chip, or elsewhere) after + authorization. This data is alternatively called full track, track, track 1, track + 2, and magnetic-stripe data. +1.3.4: + family: '1' + name: Implement anti-spoofing measures to detect and block forged source IP addresses + from entering the network. +4.1.1: + family: '4' + name: Ensure wireless networks transmitting cardholder data or connected to the + cardholder data environment, use industry best practices (for example, IEEE 802.11i) + to implement strong encryption for authentication and transmission. +6.5.2: + family: '6' + name: Buffer overflows +12.9: + family: '12' + name: "Additional requirement for service providers only. Service providers acknowledge\ + \ in writing to customers that they are responsible for the security of cardholder\ + \ data the service provider possesses or otherwise stores, processes, or transmits\ + \ on behalf of the customer, or to the extent that they could impact the security\ + \ of the customer\u2019s cardholder data environment." +12.5.4: + family: '12' + name: Administer user accounts, including additions, deletions, and modifications. +10.2.6: + family: '10' + name: Initialization, stopping, or pausing of the audit logs +12.5.3: + family: '12' + name: Establish, document, and distribute security incident response and escalation + procedures to ensure timely and effective handling of all situations. +11.2.3: + family: '11' + name: Perform internal and external scans, and rescans as needed, after any significant + change. Scans must be performed by qualified personnel. +8.2: + family: '8' + name: In addition to assigning a unique ID, ensure proper user-authentication management + for non-consumer users and administrators on all system components by employing + at least one of the following methods to authenticate all users. +6.7: + family: '6' + name: Ensure that security policies and operational procedures for developing and + maintaining secure systems and applications are documented, in use, and known + to all affected parties. +9.6.1: + family: '9' + name: Classify media so the sensitivity of the data can be determined. +12.8: + family: '12' + name: Maintain and implement policies and procedures to manage service providers + with whom cardholder data is shared, or that could affect the security of cardholder + data. diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/certifications/LATO.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/certifications/LATO.yaml new file mode 100644 index 0000000..cd433b3 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/certifications/LATO.yaml @@ -0,0 +1,10 @@ +name: LATO +standards: + NIST-800-53: + AC-2: {} + AC-6: {} + CM-2: {} + PCI-DSS-MAY-2015: + 1.1: {} + 1.1.1: {} + 2.1: {} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/components/EC2/artifact-ec2-1.png b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/components/EC2/artifact-ec2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..503d77a696bbea87cf8c695c58a3d2c94b322732 GIT binary patch literal 14721 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 literal 0 HcmV?d00001 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/components/EC2/component.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/components/EC2/component.yaml new file mode 100644 index 0000000..44dfd94 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/components/EC2/component.yaml @@ -0,0 +1,54 @@ +documentation_complete: false +name: Amazon Elastic Compute Cloud +key: EC2 +references: +- name: Reference + path: http://VerificationURL.com + type: URL +satisfies: +- control_key: CM-2 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: shared + narrative: + - key: "a" + text: "Justification in narrative form A for CM-2" + - key: "b" + text: "Justification in narrative form B for CM-2" + standard_key: NIST-800-53 +- control_key: 1.1 + covered_by: + - verification_key: EC2_Verification_1 + - component_key: UAA + system_key: CloudFoundry + verification_key: UAA_Verification_1 + implementation_status: partial + control_origin: inherited + parameters: + - key: "a" + text: "Parameter A for 1.1" + - key: "b" + text: "Parameter B for 1.1" + standard_key: PCI-DSS-MAY-2015 +- control_key: 2.1 + covered_by: [] + implementation_status: partial + control_origin: inherited + narrative: + - text: "Justification in narrative form for 2.1" + standard_key: PCI-DSS-MAY-2015 +responsible_role: "AWS Staff" +schema_version: 3.0.0 +verifications: +- key: EC2_Verification_2 + name: EC2 Governor 2 + path: artifact-ec2-1.png + type: Image +- key: EC2_Verification_1 + name: EC2 Verification 1 + path: http://VerificationURL.com + type: URL diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/SUMMARY.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/SUMMARY.md new file mode 100644 index 0000000..9cdbb33 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/SUMMARY.md @@ -0,0 +1 @@ +This is an SSP diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/system_documentation/about-the-ssp.md b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/system_documentation/about-the-ssp.md new file mode 100644 index 0000000..dadf58e --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/markdowns/system_documentation/about-the-ssp.md @@ -0,0 +1 @@ +About the System Security Plan diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/NIST-800-53.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/NIST-800-53.yaml new file mode 100644 index 0000000..d73c259 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/NIST-800-53.yaml @@ -0,0 +1,998 @@ +AC-1: + family: AC + name: Access Control Policy and Procedures +AC-10: + family: AC + name: Concurrent Session Control +AC-11: + family: AC + name: Session Lock +AC-11 (1): + family: AC + name: Session Lock | Pattern-Hiding Displays +AC-12: + family: AC + name: Session Termination +AC-14: + family: AC + name: Permitted Actions Without Identification or Authentication +AC-17: + family: AC + name: Remote Access +AC-17 (1): + family: AC + name: Remote Access | Automated Monitoring / Control +AC-17 (2): + family: AC + name: Remote Access | Protection of Confidentiality / Integrity Using Encryption +AC-17 (3): + family: AC + name: Remote Access | Managed Access Control Points +AC-17 (4): + family: AC + name: Remote Access | Privileged Commands / Access +AC-17 (9): + family: AC + name: Remote Access | Disconnect / Disable Access +AC-18: + family: AC + name: Wireless Access +AC-18 (1): + family: AC + name: Wireless Access | Authentication and Encryption +AC-19: + family: AC + name: Access Control For Mobile Devices +AC-19 (5): + family: AC + name: Access Control For Mobile Devices | Full Device / Container-Based Encryption +AC-2: + family: AC + name: Account Management +AC-2 (1): + family: AC + name: Account Management | Automated System Account Management +AC-2 (10): + family: AC + name: Account Management | Shared / Group Account Credential Termination +AC-2 (12): + family: AC + name: Account Management | Account Monitoring / Atypical Usage +AC-2 (2): + family: AC + name: Account Management | Removal of Temporary / Emergency Accounts +AC-2 (3): + family: AC + name: Account Management | Disable Inactive Accounts +AC-2 (4): + family: AC + name: Account Management | Automated Audit Actions +AC-2 (5): + family: AC + name: Account Management | Inactivity Logout +AC-2 (7): + family: AC + name: Account Management | Role-Based Schemes +AC-2 (9): + family: AC + name: Account Management | Restrictions on Use of Shared Groups / Accounts +AC-20: + family: AC + name: Use of External Information Systems +AC-20 (1): + family: AC + name: Use of External Information Systems | Limits on Authorized Use +AC-20 (2): + family: AC + name: Use of External Information Systems | Portable Storage Devices +AC-21: + family: AC + name: Information Sharing +AC-22: + family: AC + name: Publicly Accessible Content +AC-3: + family: AC + name: Access Enforcement +AC-4: + family: AC + name: Information Flow Enforcement +AC-4 (21): + family: AC + name: Information Flow Enforcement | Physical / Logical Separation of Information + Flows +AC-5: + family: AC + name: Separation of Duties +AC-6: + family: AC + name: Least Privilege +AC-6 (1): + family: AC + name: Least Privilege | Authorize Access to Security Functions +AC-6 (10): + family: AC + name: Least Privilege | Prohibit Non-privileged Users from Executing Privileged + Functions +AC-6 (2): + family: AC + name: Least Privilege | Non-Privileged Access For No security Functions +AC-6 (5): + family: AC + name: Least Privilege | Privileged Accounts +AC-6 (9): + family: AC + name: Least Privilege | Auditing Use of Privileged Functions +AC-7: + family: AC + name: Unsuccessful Logon Attempts +AC-8: + family: AC + name: System Use Notification +AT-1: + family: AT + name: Security Awareness and Training Policy and Procedures +AT-2: + family: AT + name: Security Awareness Training +AT-2 (2): + family: AT + name: Security Awareness | Insider Threat +AT-3: + family: AT + name: Role-Based Security Training +AT-4: + family: AT + name: Security Training Records +AU-1: + family: AU + name: Audit and Accountability Policy and Procedures +AU-11: + family: AU + name: Audit Record Retention +AU-12: + family: AU + name: Audit Generation +AU-2: + family: AU + name: Audit Events +AU-2 (3): + family: AU + name: Audit Events | Reviews and Updates +AU-3: + family: AU + name: Content of Audit Records +AU-3 (1): + family: AU + name: Content of Audit Records | Additional Audit Information +AU-4: + family: AU + name: Audit Storage Capacity +AU-5: + family: AU + name: Response to Audit Processing Failures +AU-6: + family: AU + name: Audit Review, Analysis, and Reporting +AU-6 (1): + family: AU + name: Audit Review, Analysis, and Reporting | Process Integration +AU-6 (3): + family: AU + name: Audit Review, Analysis, and Reporting | Correlate Audit Repositories +AU-7: + family: AU + name: Audit Reduction and Report Generation +AU-7 (1): + family: AU + name: Audit Reduction and Report Generation | Automatic Processing +AU-8: + family: AU + name: Time Stamps +AU-8 (1): + family: AU + name: Time Stamps | Synchronization With Authoritative Time Source +AU-9: + family: AU + name: Protection of Audit Information +AU-9 (2): + family: AU + name: Protection of Audit Information | Audit Backup on Separate Physical Systems + / Components +AU-9 (4): + family: AU + name: Protection of Audit Information | Access by Subset of Privileged Users +CA-1: + family: CA + name: Security Assessment and Authorization Policies and Procedures +CA-2: + family: CA + name: Security Assessments +CA-2 (1): + family: CA + name: Security Assessments | Independent Assessors +CA-2 (2): + family: CA + name: Security Assessments | Specialized Assessments +CA-2 (3): + family: CA + name: Security Assessments | External Organizations +CA-3: + family: CA + name: System Interconnections +CA-3 (3): + family: CA + name: System Interconnections | Unclassified Non-National Security System Connections +CA-3 (5): + family: CA + name: System Interconnections | Restrictions on External Network Connections +CA-5: + family: CA + name: Plan of Action and Milestones +CA-6: + family: CA + name: Security Authorization +CA-7: + family: CA + name: Continuous Monitoring +CA-7 (1): + family: CA + name: Continuous Monitoring | Independent Assessment +CA-8: + family: CA + name: Penetration Testing +CA-8 (1): + family: CA + name: Penetration Testing | Independent Penetration Agent or Team +CA-9: + family: CA + name: Internal System Connections +CM-1: + family: CM + name: Configuration Management Policy and Procedures +CM-10: + family: CM + name: Software Usage Restrictions +CM-10 (1): + family: CM + name: Software Usage Restrictions | Open Source Software +CM-11: + family: CM + name: User-Installed Software +CM-2: + family: CM + name: Baseline Configuration +CM-2 (1): + family: CM + name: Baseline Configuration | Reviews and Updates +CM-2 (3): + family: CM + name: Baseline Configuration | Retention of Previous Configurations +CM-2 (7): + family: CM + name: Baseline Configuration | Configure Systems, Components, or Devices for High-Risk + Areas +CM-2(2): + family: CM + name: Baseline Configuration | Automation Support For Accuracy / Currency +CM-3: + family: CM + name: Configuration Change Control +CM-4: + family: CM + name: Security Impact Analysis +CM-5: + family: CM + name: Access Restrictions For Change +CM-5 (1): + family: CM + name: Access Restrictions For Change | Automated Access Enforcement / Auditing +CM-5 (3): + family: CM + name: Access Restrictions For Change | Signed Components +CM-5 (5): + family: CM + name: Access Restrictions For Change | Limit Production / Operational Privileges +CM-6: + family: CM + name: Configuration Settings +CM-6 (1): + family: CM + name: Configuration Settings | Automated essential Management / Application / Verification +CM-7: + family: CM + name: Least Functionality +CM-7 (1): + family: CM + name: Least Functionality | Periodic Review +CM-7 (2): + family: CM + name: Least Functionality | Prevent Program Execution +CM-7 (5): + family: CM + name: Least Functionality | Authorized Software / Whitelisting +CM-8: + family: CM + name: Information System Component Inventory +CM-8 (1): + family: CM + name: Information System Component Inventory | Updates During Installations / Removals +CM-8 (3): + family: CM + name: Information System Component Inventory | Automated Unauthorized Component + Detection +CM-8 (5): + family: CM + name: Information System Component Inventory | No Duplicate Accounting of Components +CM-9: + family: CM + name: Configuration Management Plan +CP-1: + family: CP + name: Contingency Planning Policy and Procedures +CP-10: + family: CP + name: Information System Recovery and Reconstitution +CP-10 (2): + family: CP + name: Information System Recovery and Reconstitution | Transaction Recovery +CP-2: + family: CP + name: Contingency Plan +CP-2 (1): + family: CP + name: Contingency Plan | Coordinate With Related Plans +CP-2 (2): + family: CP + name: Contingency Plan | Capacity Planning +CP-2 (3): + family: CP + name: Contingency Plan | Resume Essential Missions / Business Functions +CP-2 (8): + family: CP + name: Contingency Plan | Identify Critical Assets +CP-3: + family: CP + name: Contingency Training +CP-4: + family: CP + name: Contingency Plan Testing +CP-4 (1): + family: CP + name: Contingency Plan Testing | Coordinate With Related Plans +CP-6: + family: CP + name: Alternate Storage Site +CP-6 (1): + family: CP + name: Alternate Storage Site | Separation From Primary Site +CP-6 (3): + family: CP + name: Alternate Storage Site | Accessibility +CP-7: + family: CP + name: Alternate Processing Site +CP-7 (1): + family: CP + name: Alternate Processing Site | Separation From Primary Site +CP-7 (2): + family: CP + name: Alternate Processing Site | Accessibility +CP-7 (3): + family: CP + name: Alternate Processing Site | Priority of Service +CP-8: + family: CP + name: Telecommunications Services +CP-8 (1): + family: CP + name: Telecommunications Services | Priority of Service Provisions +CP-8 (2): + family: CP + name: Telecommunications Services | Single Points of Failure +CP-9: + family: CP + name: Information System Backup +CP-9 (1): + family: CP + name: Information System Backup | Testing For Reliability / Integrity +CP-9 (3): + family: CP + name: Information System Backup | Separate Storage for Critical Information +IA-1: + family: IA + name: Identification and Authentication Policy and Procedures +IA-2: + family: IA + name: Identification and Authentication (Organizational Users) +IA-2 (1): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Privileged Accounts +IA-2 (11): + family: IA + name: Identification and Authentication (Organizational Users) | Remote Access - + Separate Device +IA-2 (12): + family: IA + name: Identification and Authentication (Organizational Users) | Acceptance of PIV + Credentials +IA-2 (2): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Non-Privileged Accounts +IA-2 (3): + family: IA + name: Identification and Authentication (Organizational Users) | Local Access to + Privileged Accounts +IA-2 (5): + family: IA + name: Identification and Authentication (Organizational Users) | Group Authentication +IA-2 (8): + family: IA + name: Identification and Authentication (Organizational Users) | Network Access + to Privileged Accounts - Replay Resistant +IA-3: + family: IA + name: Device Identification and Authentication +IA-4: + family: IA + name: Identifier Management +IA-4 (4): + family: IA + name: Identifier Management | Identify User Status +IA-5: + family: IA + name: Authenticator Management +IA-5 (1): + family: IA + name: Authenticator Management | Password-Based Authentication +IA-5 (11): + family: IA + name: Authenticator Management | Hardware Token-Based Authentication +IA-5 (2): + family: IA + name: Authenticator Management | PKI-Based Authentication +IA-5 (3): + family: IA + name: Authenticator Management | In-Person or Trusted Third-Party Registration +IA-5 (4): + family: IA + name: Authenticator Management | Automated Support for Password Strength Determination +IA-5 (6): + family: IA + name: Authenticator Management | Protection of Authenticators +IA-5 (7): + family: IA + name: Authenticator Management | No Embedded Unencrypted Static Authenticators +IA-6: + family: IA + name: Authenticator Feedback +IA-7: + family: IA + name: Cryptographic Module Authentication +IA-8: + family: IA + name: Identification and Authentication (Non-Organizational Users) +IA-8 (1): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Acceptance + of PIV Credentials from Other Agencies +IA-8 (2): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Acceptance + of Third-Party Credentials +IA-8 (3): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Use of FICAM-Approved + Products +IA-8 (4): + family: IA + name: Identification and Authentication (Non-Organizational Users) | Use of FICAM-Issued + Profiles +IR-1: + family: IR + name: Incident Response Policy and Procedures +IR-2: + family: IR + name: Incident Response Training +IR-3: + family: IR + name: Incident Response Testing +IR-3 (2): + family: IR + name: Incident Response Testing | Coordination With Related Plans +IR-4: + family: IR + name: Incident Handling +IR-4 (1): + family: IR + name: Incident Handling | Automated Incident Handling Processes +IR-5: + family: IR + name: Incident Monitoring +IR-6: + family: IR + name: Incident Reporting +IR-6 (1): + family: IR + name: Incident Reporting | Automated Reporting +IR-7: + family: IR + name: Incident Response Assistance +IR-7 (1): + family: IR + name: Incident Response Assistance | Automation Support For Availability of Information + / Support +IR-7 (2): + family: IR + name: Incident Response Assistance | Coordination With External Providers +IR-8: + family: IR + name: Incident Response Plan +IR-9: + family: IR + name: Information Spillage Response +IR-9 (1): + family: IR + name: Information Spillage Response | Responsible Personnel +IR-9 (2): + family: IR + name: Information Spillage Response | Training +IR-9 (3): + family: IR + name: Information Spillage Response | Post-Spill Operations +IR-9 (4): + family: IR + name: Information Spillage Response | Exposure to Unauthorized Personnel +MA-1: + family: MA + name: System Maintenance Policy and Procedures +MA-2: + family: MA + name: Controlled Maintenance +MA-3: + family: MA + name: Maintenance Tools +MA-3 (1): + family: MA + name: Maintenance Tools | Inspect Tools +MA-3 (2): + family: MA + name: Maintenance Tools | Inspect Media +MA-3 (3): + family: MA + name: Maintenance Tools | Prevent Unauthorized Removal +MA-4: + family: MA + name: Nonlocal Maintenance +MA-4 (2): + family: MA + name: Nonlocal Maintenance | Document Nonlocal Maintenance +MA-5: + family: MA + name: Maintenance Personnel +MA-5 (1): + family: MA + name: Maintenance Personnel | Individuals Without Appropriate Access +MA-6: + family: MA + name: Timely Maintenance +MP-1: + family: MP + name: Media Protection Policy and Procedures +MP-2: + family: MP + name: Media Access +MP-3: + family: MP + name: Media Marking +MP-4: + family: MP + name: Media Storage +MP-5: + family: MP + name: Media Transport +MP-5 (4): + family: MP + name: Media Transport | Cryptographic Protection +MP-6: + family: MP + name: Media Sanitization +MP-6 (2): + family: MP + name: Media Sanitization | Equipment Testing +MP-7: + family: MP + name: Media Use +MP-7 (1): + family: MP + name: Media Use | Prohibit Use without Owner +PE-1: + family: PE + name: Physical and Environmental Protection Policy and Procedures +PE-10: + family: PE + name: Emergency Shutoff +PE-11: + family: PE + name: Emergency Power +PE-12: + family: PE + name: Emergency Lighting +PE-13: + family: PE + name: Fire Protection +PE-13 (2): + family: PE + name: Fire Protection | Suppression Devices / Systems +PE-13 (3): + family: PE + name: Fire Protection | Automatic Fire Suppression +PE-14: + family: PE + name: Temperature and Humidity Controls +PE-14 (2): + family: PE + name: Temperature and Humidity Controls | Monitoring With Alarms / Notifications +PE-15: + family: PE + name: Water Damage Protection +PE-16: + family: PE + name: Delivery and Removal +PE-17: + family: PE + name: Alternate Work Site +PE-2: + family: PE + name: Physical Access Authorizations +PE-3: + family: PE + name: Physical Access Control +PE-4: + family: PE + name: Access Control For Transmission Medium +PE-5: + family: PE + name: Access Control For Output Devices +PE-6: + family: PE + name: Monitoring Physical Access +PE-6 (1): + family: PE + name: Monitoring Physical Access | Intrusion Alarms / Surveillance Equipment +PE-8: + family: PE + name: Visitor Access Records +PE-9: + family: PE + name: Power Equipment and Cabling +PL-1: + family: PL + name: Security Planning Policy and Procedures +PL-2: + family: PL + name: System Security Plan +PL-2 (3): + family: PL + name: System Security Plan | Plan / Coordinate With Other Organizational Entities +PL-4: + family: PL + name: Rules of Behavior +PL-4 (1): + family: PL + name: Rules of Behavior | Social Media and Networking Restrictions +PL-8: + family: PL + name: Information Security Architecture +PS-1: + family: PS + name: Personnel Security Policy and Procedures +PS-2: + family: PS + name: Position Risk Designation +PS-3: + family: PS + name: Personnel Screening +PS-3 (3): + family: PS + name: Personnel Screening | Information With Special Protection Measures +PS-4: + family: PS + name: Personnel Termination +PS-5: + family: PS + name: Personnel Transfer +PS-6: + family: PS + name: Access Agreements +PS-7: + family: PS + name: Third-Party Personnel Security +PS-8: + family: PS + name: Personnel Sanctions +RA-1: + family: RA + name: Risk Assessment Policy and Procedures +RA-2: + family: RA + name: Security Categorization +RA-3: + family: RA + name: Risk Assessment +RA-5: + family: RA + name: Vulnerability Scanning +RA-5 (1): + family: RA + name: Vulnerability Scanning | Update Tool Capability +RA-5 (2): + family: RA + name: Vulnerability Scanning | Update by Frequency / Prior to New Scan / When Identified +RA-5 (3): + family: RA + name: Vulnerability Scanning | Breadth / Depth of Coverage +RA-5 (5): + family: RA + name: Vulnerability Scanning | Privileged Access +RA-5 (6): + family: RA + name: Vulnerability Scanning | Automated Trend Analyses +RA-5 (8): + family: RA + name: Vulnerability Scanning | Review Historic Audit Logs +SA-1: + family: SA + name: System and Services Acquisition Policy and Procedures +SA-10: + family: SA + name: Developer Configuration Management +SA-10 (1): + family: SA + name: Developer Configuration Management | Software / Firmware Integrity Verification +SA-11: + family: SA + name: Developer Security Testing and Evaluation +SA-11 (1): + family: SA + name: Developer Security Testing and Evaluation | Static Code Analysis +SA-11 (2): + family: SA + name: Developer Security Testing and Evaluation | Threat and Vulnerability Analyses +SA-11 (8): + family: SA + name: Developer Security Testing and Evaluation | Dynamic Code Analysis +SA-2: + family: SA + name: Allocation of Resources +SA-22: + family: SA + name: UNSUPPORTED SYSTEM COMPONENTS +SA-3: + family: SA + name: System Development Life Cycle +SA-4: + family: SA + name: Acquisition Process +SA-4 (1): + family: SA + name: Acquisition Process | Functional Properties of Security Controls +SA-4 (10): + family: SA + name: Acquisition Process | Use of Approved PIV Products +SA-4 (2): + family: SA + name: Acquisition Process | Design / Implementation Information for Security Controls +SA-4 (8): + family: SA + name: Acquisition Process | Continuous Monitoring Plan +SA-4 (9): + family: SA + name: Acquisition Process | Functions / Ports / Protocols / Services in Use +SA-5: + family: SA + name: Information System Documentation +SA-8: + family: SA + name: Security Engineering Principles +SA-9: + family: SA + name: External Information System Services +SA-9 (1): + family: SA + name: External Information Systems | Risk Assessments / Organizational Approvals +SA-9 (2): + family: SA + name: External Information Systems | Identification of Functions / Ports / Protocols + / Services +SA-9 (4): + family: SA + name: External Information Systems | Consistent Interests of Consumers and Providers +SA-9 (5): + family: SA + name: External Information Systems | Processing, Storage, and Service Location +SC-1: + family: SC + name: System and Communications Protection Policy and Procedures +SC-10: + family: SC + name: Network Disconnect +SC-12: + family: SC + name: Cryptographic Key Establishment and Management +SC-12 (2): + family: SC + name: Cryptographic Key Establishment and Management | Symmetric Keys +SC-12 (3): + family: SC + name: Cryptographic Key Establishment and Management | Asymmetric Keys +SC-13: + family: SC + name: Cryptographic Protection +SC-15: + family: SC + name: Collaborative Computing Devices +SC-17: + family: SC + name: Public Key Infrastructure Certificates +SC-18: + family: SC + name: Mobile Code +SC-19: + family: SC + name: Voice Over Internet Protocol +SC-2: + family: SC + name: Application Partitioning +SC-20: + family: SC + name: Secure Name / Address Resolution Service (Authoritative Source) +SC-21: + family: SC + name: Secure Name / Address Resolution Service (Recursive or Caching Resolver) +SC-22: + family: SC + name: Architecture and Provisioning for Name / Address Resolution Service +SC-23: + family: SC + name: Session Authenticity +SC-28: + family: SC + name: Protection of Information At Rest +SC-28 (1): + family: SC + name: Protection Of Information At Rest | Cryptographic Protection +SC-39: + family: SC + name: Process Isolation +SC-4: + family: SC + name: Information In Shared Resources +SC-5: + family: SC + name: Denial of Service Protection +SC-6: + family: SC + name: Resource Availability +SC-7: + family: SC + name: Boundary Protection +SC-7 (12): + family: SC + name: Boundary Protection | Host-Based Protection +SC-7 (13): + family: SC + name: Boundary Protection | Isolation of Security Tools / Mechanisms / Support Components +SC-7 (18): + family: SC + name: Boundary Protection | Fail Secure +SC-7 (3): + family: SC + name: Boundary Protection | Access Points +SC-7 (4): + family: SC + name: Boundary Protection | External Telecommunications Services +SC-7 (5): + family: SC + name: Boundary Protection | Deny by Default / Allow by Exception +SC-7 (7): + family: SC + name: Boundary Protection | Prevent Split Tunneling for Remote Devices +SC-7 (8): + family: SC + name: Boundary Protection | Route Traffic to Authenticated Proxy Servers +SC-8: + family: SC + name: Transmission Confidentiality and Integrity +SC-8 (1): + family: SC + name: Transmission Confidentiality and Integrity | Cryptographic or Alternate Physical + Protection +SI-1: + family: SI + name: System and Information Integrity Policy and Procedures +SI-10: + family: SI + name: Information Input Validation +SI-11: + family: SI + name: Error Handling +SI-12: + family: SI + name: Information Handling and Retention +SI-16: + family: SI + name: Memory Protection +SI-2: + family: SI + name: Flaw Remediation +SI-2 (2): + family: SI + name: Flaw Remediation | Automated Flaw Remediation Status +SI-2 (3): + family: SI + name: Flaw Remediation | Time to Remediate Flaws / Benchmarks for Corrective Actions +SI-3: + family: SI + name: Malicious Code Protection +SI-3 (1): + family: SI + name: Malicious Code Protection | essential Management +SI-3 (2): + family: SI + name: Malicious Code Protection | Automatic Updates +SI-3 (7): + family: SI + name: Malicious Code Protection | Nonsignature-Based Detection +SI-4: + family: SI + name: Information System Monitoring +SI-4 (1): + family: SI + name: Information System Monitoring | System-Wide Intrusion Detection System +SI-4 (16): + family: SI + name: Information System Monitoring | Correlate Monitoring Information +SI-4 (2): + family: SI + name: Information System Monitoring | Automated Tools For Real-Time Analysis +SI-4 (23): + family: SI + name: Information System Monitoring | Host-Based Devices +SI-4 (4): + family: SI + name: Information System Monitoring | Inbound and Outbound Communications Traffic +SI-4 (5): + family: SI + name: Information System Monitoring | System-Generated Alerts +SI-4(14): + family: SI + name: Information System Monitoring | Wireless Intrusion Detection +SI-5: + family: SI + name: Security Alerts, Advisories, and Directives +SI-6: + family: SI + name: Security Function Verification +SI-7: + family: SI + name: Software, Firmware, and Information Integrity +SI-7 (1): + family: SI + name: Software, Firmware, and Information Integrity | Integrity Checks +SI-7 (7): + family: SI + name: Software, Firmware, and Information Integrity | Integration of Detection and + Response +SI-8: + family: SI + name: Spam Protection +SI-8 (1): + family: SI + name: Spam Protection | essential Management +SI-8 (2): + family: SI + name: Spam Protection | Automatic Updates +name: NIST-800-53 diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/PCI-DSS-MAY-2015.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/PCI-DSS-MAY-2015.yaml new file mode 100644 index 0000000..7dd7738 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/opencontrol_fixtures_with_markdown/standards/PCI-DSS-MAY-2015.yaml @@ -0,0 +1,1029 @@ +1.1: + family: '1' + name: Establish and implement firewall and router configuration standards. +2.1: + family: '2' + name: Always change vendor-supplied defaults and remove or disable unnecessary default + accounts before installing a system on the network. +3.1: + family: '3' + name: Keep cardholder data storage to a minimum by implementing data retention and + disposal policies, procedures and processes +4.1: + family: '4' + name: Use strong cryptography and security protocols (for example, TLS, IPSEC, SSH, + etc.) to safeguard sensitive cardholder data during transmission over open, public + networks. +5.1: + family: '5' + name: Deploy anti-virus software on all systems commonly affected by malicious software + (particularly personal computers and servers). +6.1: + family: '6' + name: "Establish a process to identify security vulnerabilities, using reputable\ + \ outside sources for security vulnerability information, and assign a risk ranking\ + \ (for example, as \u201Chigh,\u201D \u201Cmedium,\u201D or \u201Clow\u201D) to\ + \ newly discovered security vulnerabilities." +1.4: + family: '1' + name: Install personal firewall software on any mobile and/or employee-owned devices + that connect to the Internet when outside the network (for example, laptops used + by employees), and which are also used to access the network. +8.5: + family: '8' + name: Do not use group, shared, or generic IDs, passwords, or other authentication + methods. +9.9: + family: '9' + name: Protect devices that capture payment card data via direct physical interaction + with the card from tampering and substitution. +10.1: + family: '10' + name: Implement audit trails to link all access to system components to each individual + user. +Requirement 11: + family: '11' + name: Regularly test security systems and processes +12.1: + family: '12' + name: Implement an incident response plan. Be prepared to respond immediately to + a system breach. +2.2: + family: '2' + name: Develop configuration standards for all system components. Assure that these + standards address all known security vulnerabilities and are consistent with industry-accepted + system hardening standards. +10.5.4: + family: '10' + name: Write logs for external-facing technologies onto a secure, centralized, internal + log server or media device. +3.6: + family: '3' + name: Fully document and implement all key-management processes and procedures for + cryptographic keys used for encryption of cardholder data. +9.7: + family: '9' + name: Maintain strict control over the storage and accessibility of media. +4.3: + family: '4' + name: Ensure that security policies and operational procedures for encrypting transmissions + of cardholder data are documented, in use, and known to all affected parties. +5.4: + family: '5' + name: Ensure that security policies and operational procedures for protecting systems + against malware are documented, in use, and known to all affected parties. +1.5: + family: '1' + name: Ensure that security policies and operational procedures for managing firewalls + are documented, in use, and known to all affected parties. +6.6: + family: '6' + name: For public-facing web applications, address new threats and vulnerabilities + on an ongoing basis and ensure these applications are protected against known + attacks. +7.2: + family: '7' + name: "Establish an access control system for systems components that restricts\ + \ access based on a user\u2019s need to know, and is set to \u201Cdeny all\u201D\ + \ unless specifically allowed." +9.9.1: + family: '9' + name: Maintain an up-to-date list of devices. +6.4.1: + family: '6' + name: Separate development/test environments from production environments, and enforce + the separation with access controls. +6.5.5: + family: '6' + name: Improper error handling +8.3: + family: '8' + name: Incorporate two-factor authentication for remote network access originating + from outside the network by personnel (including users and administrators) and + all third parties, (including vendor access for support or maintenance). +10.2: + family: '10' + name: Implement automated audit trails for all system components to reconstruct + the following events. +9.2: + family: '9' + name: Develop procedures to easily distinguish between onsite personnel and visitors. +12.3.1: + family: '12' + name: Explicit approval by authorized parties +10.4.2: + family: '10' + name: Time data is protected. +10.3: + family: '10' + name: Record at least the following audit trail entries for all system components + for each event. +2.5: + family: '2' + name: Ensure that security policies and operational procedures for managing vendor + defaults and other security parameters are documented, in use, and known to all + affected parties. +11.1: + family: '11' + name: Implement processes to test for the presence of wireless access points (802.11), + and detect and identify all authorized and unauthorized wireless access points + on a quarterly basis. +12.8.2: + family: '12' + name: "Maintain a written agreement that includes an acknowledgement that the service\ + \ providers are responsible for the security of cardholder data the service providers\ + \ possess or otherwise store, process or transmit on behalf of the customer, or\ + \ to the extent that they could impact the security of the customer\u2019s cardholder\ + \ data environment." +12.2: + family: '12' + name: Implement a risk-assessment process. +11.2: + family: '11' + name: Run internal and external network vulnerability scans at least quarterly and + after any significant change in the network (such as new system component installations, + changes in network topology, firewall rule modifications, product upgrades). +10.2.5: + family: '10' + name: "Use of and changes to identification and authentication mechanisms\u2014\ + including but not limited to creation of new accounts and elevation of privileges\u2014\ + and all changes, additions, or deletions to accounts with root or administrative\ + \ privileges" +12.6.1: + family: '12' + name: Educate personnel upon hire and at least annually. +3.5: + family: '3' + name: Document and implement procedures to protect keys used to secure stored cardholder + data against disclosure and misuse. +A.1.2: + family: A + name: "Restrict each entity\u2019s access and privileges to its own cardholder data\ + \ environment only." +12.7: + family: '12' + name: Screen potential personnel prior to hire to minimize the risk of attacks from + internal sources. (Examples of background checks include previous employment history, + criminal record, credit history, and reference checks.) +1.2.2: + family: '1' + name: Secure and synchronize router configuration files. +7.1.1: + family: '7' + name: Define access needs for each role. +3.5.1: + family: '3' + name: Restrict access to cryptographic keys to the fewest number of custodians necessary. +12.3.2: + family: '12' + name: Authentication for use of the technology +9.1.3: + family: '9' + name: Restrict physical access to wireless access points, gateways, handheld devices, + networking/communications hardware, and telecommunication lines. +9.4.1: + family: '9' + name: Visitors are authorized before entering, and escorted at all times within, + areas where cardholder data is processed or maintained. +6.3.1: + family: '6' + name: Remove development, test and/or custom application accounts, user IDs, and + passwords before applications become active or are released to customers. +9.7.1: + family: '9' + name: Properly maintain inventory logs of all media and conduct media inventories + at least annually. +1.1.3: + family: '1' + name: Current diagram that shows all cardholder data flows across systems and networks +1.1.2: + family: '1' + name: Current network diagram that identifies all connections between the cardholder + data environment and other networks, including any wireless networks +12.3.7: + family: '12' + name: List of company-approved products +12.3.5: + family: '12' + name: Acceptable uses of the technology +3.6.1: + family: '3' + name: Generation of strong cryptographic keys +6.5.7: + family: '6' + name: Cross-site scripting (XSS) +8.2.5: + family: '8' + name: Do not allow an individual to submit a new password/phrase that is the same + as any of the last four passwords/phrases he or she has used. +6.4.3: + family: '6' + name: Production data (live PANs) are not used for testing or development +3.6.3: + family: '3' + name: Secure cryptographic key storage +3.5.2: + family: '3' + name: Store secret and private keys used to encrypt/decrypt cardholder data in one + (or more) of the following forms at all times +8.2.1: + family: '8' + name: Using strong cryptography, render all authentication credentials (such as + passwords/phrases) unreadable during transmission and storage on all system components. +6.4.2: + family: '6' + name: Separation of duties between development/test and production environments +7.1.2: + family: '7' + name: Restrict access to privileged user IDs to least privileges necessary to perform + job responsibilities. +6.5.10: + family: '6' + name: Broken authentication and session management +9.3: + family: '9' + name: Control physical access for onsite personnel to sensitive areas. +8.2.3: + family: '8' + name: Passwords/phrases must meet the following(Require a minimum length of at least + seven characters.Contain both numeric and alphabetic characters.) +10.3.3: + family: '10' + name: Date and time +10.3.6: + family: '10' + name: Identity or name of affected data, system component, or resource. +10.5.1: + family: '10' + name: Limit viewing of audit trails to those with a job-related need. +12.8.4: + family: '12' + name: "Maintain a program to monitor service providers\u2019 PCI DSS compliance\ + \ status at least annually." +5.1.2: + family: '5' + name: For systems considered to be not commonly affected by malicious software, + perform periodic evaluations to identify and evaluate evolving malware threats + in order to confirm whether such systems continue to not require anti-virus software. +6.4.5.4: + family: '6' + name: Back-out procedures. +10.5.2: + family: '10' + name: Protect audit trail files from unauthorized modifications. +Requirement A.1: + family: A.1 + name: Shared hosting providers must protect the cardholder data environment +1.3.8: + family: '1' + name: Do not disclose private IP addresses and routing information to unauthorized + parties. +2.3: + family: '2' + name: Encrypt all non-console administrative access using strong cryptography. Use + technologies such as SSH, VPN, or TLS for web-based management and other non-console + administrative access. +A.1: + family: A + name: "Protect each entity\u2019s (that is, merchant, service provider, or other\ + \ entity) hosted environment and data, per A.1.1 through A.1.4" +9.9.2: + family: '9' + name: Periodically inspect device surfaces to detect tampering (for example, addition + of card skimmers to devices), or substitution (for example, by checking the serial + number or other device characteristics to verify it has not been swapped with + a fraudulent device). +9.5: + family: '9' + name: Physically secure all media. +12.6.2: + family: '12' + name: Require personnel to acknowledge at least annually that they have read and + understood the security policy and procedures. +8.6: + family: '8' + name: Where other authentication mechanisms are used (for example, physical or logical + security tokens, smart cards, certificates, etc.), use of these mechanisms must + be assigned . +3.3: + family: '3' + name: Mask PAN when displayed (the first six and last four digits are the maximum + number of digits to be displayed), such that only personnel with a legitimate + business need can see the full PAN. +12.8.1: + family: '12' + name: Maintain a list of service providers. +2.2.3: + family: '2' + name: "Implement additional security features for any required services, protocols,\ + \ or daemons that are considered to be insecure\u2014for example, use secured\ + \ technologies such as SSH, S-FTP, TLS, or IPSec VPN to protect insecure services\ + \ such as NetBIOS, file-sharing, Telnet, FTP, etc." +12.8.5: + family: '12' + name: Maintain information about which PCI DSS requirements are managed by each + service provider, and which are managed by the entity. +3.2.2: + family: '3' + name: Do not store the card verification code or value (three-digit or four-digit + number printed on the front or back of a payment card used to verify card-not-present + transactions) after authorization. +Requirement 6: + family: '6' + name: Develop and maintain secure systems and applications +8.1.6: + family: '8' + name: Limit repeated access attempts by locking out the user ID after not more than + six attempts. +9.4.2: + family: '9' + name: Visitors are identified and given a badge or other identification that expires + and that visibly distinguishes the visitors from onsite personnel. +Requirement 1: + family: '1' + name: Install and maintain a firewall configuration to protect cardholder data +12.5.1: + family: '12' + name: Establish, document, and distribute security policies and procedures. +10.4.3: + family: '10' + name: Time settings are received from industry-accepted time sources. +3.6.6: + family: '3' + name: If manual clear-text cryptographic key-management operations are used, these + operations must be managed using split knowledge and dual control. +9.1.2: + family: '9' + name: Implement physical and/or logical controls to restrict access to publicly + accessible network jacks. +11.5: + family: '11' + name: Deploy a change-detection mechanism (for example, file-integrity monitoring + tools) to alert personnel to unauthorized modification (including changes, additions, + and deletions) of critical system files, configuration files, or content files; + and configure the software to perform critical file comparisons at least weekly. +9.6.2: + family: '9' + name: Send the media by secured courier or other delivery method that can be accurately + tracked. +7.1.3: + family: '7' + name: "Assign access based on individual personnel\u2019s job classification and\ + \ function." +12.5.5: + family: '12' + name: Monitor and control all access to data. +2.1.1: + family: '2' + name: For wireless environments connected to the cardholder data environment or + transmitting cardholder data, change ALL wireless vendor defaults at installation, + including but not limited to default wireless encryption keys, passwords, and + SNMP community strings. +1.2.3: + family: '1' + name: Install perimeter firewalls between all wireless networks and the cardholder + data environment, and configure these firewalls to deny or, if traffic is necessary + for business purposes, permit only authorized traffic between the wireless environment + and the cardholder data environment. +8.7: + family: '8' + name: All access to any database containing cardholder data (including access by + applications, administrators, and all other users) is restricted . +2.2.2: + family: '2' + name: Enable only necessary services, protocols, daemons, etc., as required for + the function of the system. +1.1.7: + family: '1' + name: Requirement to review firewall and router rule sets at least every six months +12.5: + family: '12' + name: Assign to an individual or team the following information security management + responsibilities. +8.1.3: + family: '8' + name: Immediately revoke access for any terminated users. +10.6.1: + family: '10' + name: Review the following at least daily (-All security events. -Logs of all system + components that store, process, or transmit CHD and/or SAD.-Logs of all critical + system components.-Logs of all servers and system components that perform security + functions (for example, firewalls, intrusion-detection systems/intrusion-prevention + systems (IDS/IPS), authentication servers, e-commerce redirection servers, etc.) +6.3: + family: '6' + name: Develop internal and external software applications (including web-based administrative + access to applications) securely. +6.2: + family: '6' + name: Ensure that all system components and software are protected from known vulnerabilities + by installing applicable vendor-supplied security patches. Install critical security + patches within one month of release. +10.2.7: + family: '10' + name: Creation and deletion of system-level objects +9.5.1: + family: '9' + name: "Store media backups in a secure location, preferably an off-site facility,\ + \ such as an alternate or backup site, or a commercial storage facility. Review\ + \ the location\u2019s security at least annually." +Requirement 5: + family: '5' + name: Use and regularly update anti-virus software or programs +8.5.1: + family: '8' + name: Additional requirement for service providers only. Service providers with + remote access to customer premises (for example, for support of POS systems or + servers) must use a unique authentication credential (such as a password/phrase) + for each customer. +1.3.2: + family: '1' + name: Limit inbound Internet traffic to IP addresses within the DMZ. +10.3.1: + family: '10' + name: User identification +8.1.7: + family: '8' + name: Set the lockout duration to a minimum of 30 minutes or until an administrator + enables the user ID. +7.3: + family: '7' + name: Ensure that security policies and operational procedures for restricting access + to cardholder data are documented, in use, and known to all affected parties. +12.3.3: + family: '12' + name: A list of all such devices and personnel with access +12.5.2: + family: '12' + name: Monitor and analyze security alerts and information, and distribute to appropriate + personnel. +A.1.4: + family: A + name: Enable processes to provide for timely forensic investigation in the event + of a compromise to any hosted merchant or service provider. +9.6: + family: '9' + name: Maintain strict control over the internal or external distribution of any + kind of media. +5.1.1: + family: '5' + name: Ensure that anti-virus programs are capable of detecting, removing, and protecting + against all known types of malicious software. +12.10.3: + family: '12' + name: Designate specific personnel to be available on a 24/7 basis to respond to + alerts. +8.2.4: + family: '8' + name: Change user passwords/passphrases at least once every 90 days. +12.10.1: + family: '12' + name: Create the incident response plan to be implemented in the event of system + breach. Ensure the plan addresses the following. +12.3.4: + family: '12' + name: A method to accurately and readily determine owner, contact information, and + purpose (for example, labeling, coding, and/or inventorying of devices) +A.1.1: + family: A + name: "Ensure that each entity only runs processes that have access to that entity\u2019\ + s cardholder data environment." +Requirement 8: + family: '8' + name: Assign a unique ID to each person with computer access +10.5.5: + family: '10' + name: Use file-integrity monitoring or change-detection software on logs to ensure + that existing log data cannot be changed without generating alerts (although new + data being added should not cause an alert). +6.5.4: + family: '6' + name: Insecure communications +9.4.4: + family: '9' + name: A visitor log is used to maintain a physical audit trail of visitor activity + to the facility as well as computer rooms and data centers where cardholder data + is stored or transmitted. +2.6: + family: '2' + name: "Shared hosting providers must protect each entity\u2019s hosted environment\ + \ and cardholder data. These providers must meet specific requirements as detailed\ + \ in Appendix A." +3.6.5: + family: '3' + name: Retirement or replacement (for example, archiving, destruction, and/or revocation) + of keys as deemed necessary when the integrity of the key has been weakened (for + example, departure of an employee with knowledge of a clear-text key component), + or keys are suspected of being compromised. +1.1.4: + family: '1' + name: Requirements for a firewall at each Internet connection and between any demilitarized + zone (DMZ) and the internal network zone +name: PCI-DSS-MAY-2015 +9.6.3: + family: '9' + name: Ensure management approves any and all media that is moved from a secured + area (including when media is distributed to individuals). +3.6.4: + family: '3' + name: Cryptographic key changes for keys that have reached the end of their cryptoperiod + (for example, after a defined period of time has passed and/or after a certain + amount of cipher-text has been produced by a given key), as defined by the associated + application vendor or key owner, and based on industry best practices and guidelines + (for example, NIST Special Publication 800-57). +7.2.1: + family: '7' + name: Coverage of all system components +8.8: + family: '8' + name: Ensure that security policies and operational procedures for identification + and authentication are documented, in use, and known to all affected parties. +10.5: + family: '10' + name: Secure audit trails so they cannot be altered. +Requirement 9: + family: '9' + name: Restrict physical access to cardholder data +1.3: + family: '1' + name: Prohibit direct public access between the Internet and any system component + in the cardholder data environment. +6.5.6: + family: '6' + name: "All \u201Chigh risk\u201D vulnerabilities identified in the vulnerability\ + \ identification process (as defined in PCI DSS Requirement 6.1)." +1.2.1: + family: '1' + name: Restrict inbound and outbound traffic to that which is necessary for the cardholder + data environment, and specifically deny all other traffic. +3.5.3: + family: '3' + name: Store cryptographic keys in the fewest possible locations. +Requirement 3: + family: '3' + name: Protect stored cardholder data +11.3.2: + family: '11' + name: Perform internal penetration testing at least annually and after any significant + infrastructure or application upgrade or modification (such as an operating system + upgrade, a sub-network added to the environment, or a web server added to the + environment). +9.8: + family: '9' + name: Destroy media when it is no longer needed for business or legal reasons . +11.2.1: + family: '11' + name: "Perform quarterly internal vulnerability scans and rescans as needed, until\ + \ all \u201Chigh-risk\u201D vulnerabilities (as identified in Requirement 6.1)\ + \ are resolved. Scans must be performed by qualified personnel." +3.6.8: + family: '3' + name: Requirement for cryptographic key custodians to formally acknowledge that + they understand and accept their key-custodian responsibilities. +10.8: + family: '10' + name: Ensure that security policies and operational procedures for monitoring all + access to network resources and cardholder data are documented, in use, and known + to all affected parties. +8.2.2: + family: '8' + name: "Verify user identity before modifying any authentication credential\u2014\ + for example, performing password resets, provisioning new tokens, or generating\ + \ new keys." +8.1.2: + family: '8' + name: Control addition, deletion, and modification of user IDs, credentials, and + other identifier objects. +11.3.4: + family: '11' + name: If segmentation is used to isolate the CDE from other networks, perform penetration + tests at least annually and after any changes to segmentation controls/methods + to verify that the segmentation methods are operational and effective, and isolate + all out-of-scope systems from systems in the CDE. +1.3.5: + family: '1' + name: Do not allow unauthorized outbound traffic from the cardholder data environment + to the Internet. +11.3: + family: '11' + name: Implement a methodology for penetration testing. +7.1: + family: '7' + name: Limit access to system components and cardholder data to only those individuals + whose job requires such access. +10.2.2: + family: '10' + name: All actions taken by any individual with root or administrative privileges +8.1.8: + family: '8' + name: If a session has been idle for more than 15 minutes, require the user to re-authenticate + to re-activate the terminal or session. +1.1.6: + family: '1' + name: Documentation and business justification for use of all services, protocols, + and ports allowed, including documentation of security features implemented for + those protocols considered to be insecure. +8.1.4: + family: '8' + name: Remove/disable inactive user accounts within 90 days. +10.3.5: + family: '10' + name: Origination of event +7.2.2: + family: '7' + name: Assignment of privileges to individuals based on job classification and function. +8.1: + family: '8' + name: Define and implement policies and procedures to ensure proper user identification + management for non-consumer users and administrators on all system components. +12.3.8: + family: '12' + name: Automatic disconnect of sessions for remote-access technologies after a specific + period of inactivity +6.4.5: + family: '6' + name: Change control procedures for the implementation of security patches and software + modifications. +6.4.4: + family: '6' + name: Removal of test data and accounts before production systems become active +A.1.3: + family: A + name: "Ensure logging and audit trails are enabled and unique to each entity\u2019\ + s cardholder data environment and consistent with PCI DSS Requirement 10." +1.3.3: + family: '1' + name: Do not allow any direct connections inbound or outbound for traffic between + the Internet and the cardholder data environment. +12.3: + family: '12' + name: Develop usage policies for critical technologies and define proper use of + these technologies. +10.7: + family: '10' + name: Retain audit trail history for at least one year, with a minimum of three + months immediately available for analysis (for example, online, archived, or restorable + from backup). +9.1: + family: '9' + name: Ensure that security policies and operational procedures for restricting physical + access to cardholder data are documented, in use, and known to all affected parties. +6.3.2: + family: '6' + name: Review custom code prior to release to production or customers in order to + identify any potential coding vulnerability (using either manual or automated + processes) +2.4: + family: '2' + name: Maintain an inventory of system components that are in scope for PCI DSS. +11.1.2: + family: '11' + name: Implement incident response procedures in the event unauthorized wireless + access points are detected. +12.1.1: + family: '12' + name: Review the security policy at least annually and update the policy when the + environment changes. +10.6: + family: '10' + name: Review logs and security events for all system components to identify anomalies + or suspicious activity. +6.5.1: + family: '6' + name: Injection flaws, particularly SQL injection. Also consider OS Command Injection, + LDAP and XPath injection flaws as well as other injection flaws. +3.2.3: + family: '3' + name: Do not store the personal identification number (PIN) or the encrypted PIN + block after authorization. +3.4: + family: '3' + name: Render PAN unreadable anywhere it is stored (including on portable digital + media, backup media, and in logs). +11.5.1: + family: '11' + name: Implement a process to respond to any alerts generated by the change-detection + solution. +Requirement 4: + family: '4' + name: Encrypt transmission of cardholder data across open, public networks +2.2.1: + family: '2' + name: Implement only one primary function per server to prevent functions that require + different security levels from co-existing on the same server. (For example, web + servers, database servers, and DNS should be implemented on separate servers.) +9.4.3: + family: '9' + name: Visitors are asked to surrender the badge or identification before leaving + the facility or at the date of expiration. +11.6: + family: '11' + name: Ensure that security policies and operational procedures for security monitoring + and testing are documented, in use, and known to all affected parties. +3.4.1: + family: '3' + name: If disk encryption is used (rather than file- or column-level database encryption), + logical access must be managed separately and independently of native operating + system authentication and access control mechanisms (for example, by not using + local user account databases or general network login credentials). Decryption + keys must not be associated with user accounts. +8.2.6: + family: '8' + name: Set passwords/phrases for first-time use and upon reset to a unique value + for each user, and change immediately after the first use. +6.5.9: + family: '6' + name: Cross-site request forgery (CSRF) +6.4.5.3: + family: '6' + name: Functionality testing to verify that the change does not adversely impact + the security of the system. +7.1.4: + family: '7' + name: Require documented approval by authorized parties specifying required privileges. +10.2.4: + family: '10' + name: Invalid logical access attempts +12.6: + family: '12' + name: Implement a formal security awareness program to make all personnel aware + of the importance of cardholder data security. +1.1.1: + family: '1' + name: A formal process for approving and testing all network connections and changes + to the firewall and router configurations +1.1.5: + family: '1' + name: Description of groups, roles, and responsibilities for management of network + components +Requirement 2: + family: '2' + name: Do not use vendor-supplied defaults for system passwords and other security + parameters +9.8.2: + family: '9' + name: Render cardholder data on electronic media unrecoverable so that cardholder + data cannot be reconstructed. +1.3.7: + family: '1' + name: Place system components that store cardholder data (such as a database) in + an internal network zone, segregated from the DMZ and other untrusted networks. +3.6.2: + family: '3' + name: Secure cryptographic key distribution +11.3.1: + family: '11' + name: Perform external penetration testing at least annually and after any significant + infrastructure or application upgrade or modification (such as an operating system + upgrade, a sub-network added to the environment, or a web server added to the + environment). +12.10.5: + family: '12' + name: Include alerts from security monitoring systems, including but not limited + to intrusion-detection, intrusion-prevention, firewalls, and file-integrity monitoring + systems. +2.2.4: + family: '2' + name: Configure system security parameters to prevent misuse. +1.3.6: + family: '1' + name: "Implement stateful inspection, also known as dynamic packet filtering. (That\ + \ is, only \u201Cestablished\u201D connections are allowed into the network.)" +6.4: + family: '6' + name: Follow change control processes and procedures for all changes to system components. +6.4.5.2: + family: '6' + name: Documented change approval by authorized parties. +10.6.3: + family: '10' + name: Follow up exceptions and anomalies identified during the review process. +12.3.9: + family: '12' + name: Activation of remote-access technologies for vendors and business partners + only when needed by vendors and business partners, with immediate deactivation + after use +11.2.2: + family: '11' + name: Perform quarterly external vulnerability scans, via an Approved Scanning Vendor + (ASV) approved by the Payment Card Industry Security Standards Council (PCI SSC). + Perform rescans as needed, until passing scans are achieved. +12.3.6: + family: '12' + name: Acceptable network locations for the technologies +1.2: + family: '1' + name: Build firewall and router configurations that restrict connections between + untrusted networks and any system components in the cardholder data environment. +10.2.3: + family: '10' + name: Access to all audit trails +12.10.6: + family: '12' + name: Develop a process to modify and evolve the incident response plan according + to lessons learned and to incorporate industry developments. +6.5.8: + family: '6' + name: Improper access control (such as insecure direct object references, failure + to restrict URL access, directory traversal, and failure to restrict user access + to functions). +7.2.3: + family: '7' + name: "Default \u201Cdeny-all\u201D setting." +8.1.5: + family: '8' + name: Manage IDs used by vendors to access, support, or maintain system components + via remote access . +8.1.1: + family: '8' + name: Assign all users a unique ID before allowing them to access system components + or cardholder data. +8.4: + family: '8' + name: Document and communicate authentication policies and procedures to all users. +12.10.2: + family: '12' + name: Test the plan at least annually. +10.3.4: + family: '10' + name: Success or failure indication +Requirement 12: + family: '12' + name: Maintain a policy that addresses information security for all personnel +1.3.1: + family: '1' + name: Implement a DMZ to limit inbound traffic to only system components that provide + authorized publicly accessible services, protocols, and ports. +11.1.1: + family: '11' + name: Maintain an inventory of authorized wireless access points including a documented + business justification. +9.4: + family: '9' + name: Implement procedures to identify and authorize visitors. +Requirement 7: + family: '7' + name: Restrict access to cardholder data by business need to know +5.3: + family: '5' + name: Ensure that anti-virus mechanisms are actively running and cannot be disabled + or altered by users, unless specifically authorized by management on a case-by-case + basis for a limited time period. +9.9.3: + family: '9' + name: Provide training for personnel to be aware of attempted tampering or replacement + of devices. +3.2: + family: '3' + name: Do not store sensitive authentication data after authorization (even if encrypted). + If sensitive authentication data is received, render all data unrecoverable upon + completion of the authorization process. +11.3.3: + family: '11' + name: Exploitable vulnerabilities found during penetration testing are corrected + and testing is repeated to verify the corrections. +6.5: + family: '6' + name: Address common coding vulnerabilities in software-development processes. +3.6.7: + family: '3' + name: Prevention of unauthorized substitution of cryptographic keys. +10.3.2: + family: '10' + name: Type of event +12.10.4: + family: '12' + name: Provide appropriate training to staff with security breach response responsibilities. +9.8.1: + family: '9' + name: Shred, incinerate, or pulp hard-copy materials so that cardholder data cannot + be reconstructed. Secure storage containers used for materials that are to be + destroyed. +10.4: + family: '10' + name: Using time-synchronization technology, synchronize all critical system clocks + and times and ensure that the following is implemented for acquiring, distributing, + and storing time. +2.2.5: + family: '2' + name: Remove all unnecessary functionality, such as scripts, drivers, features, + subsystems, file systems, and unnecessary web servers. +12.8.3: + family: '12' + name: Ensure there is an established process for engaging service providers including + proper due diligence prior to engagement. +6.4.5.1: + family: '6' + name: Documentation of impact. +10.4.1: + family: '10' + name: Critical systems have the correct and consistent time. +3.7: + family: '3' + name: Ensure that security policies and operational procedures for protecting stored + cardholder data are documented, in use, and known to all affected parties. +4.2: + family: '4' + name: Never send unprotected PANs by end-user messaging technologies (for example, + e-mail, instant messaging, SMS, chat, etc.). +6.5.3: + family: '6' + name: Insecure cryptographic storage +9.1.1: + family: '9' + name: Use video cameras and/or access control mechanisms to monitor individual physical + access to sensitive areas. Review collected data and correlate with other entries. + Store for at least three months, unless otherwise restricted by law. +10.2.1: + family: '10' + name: All individual user accesses to cardholder data +12.3.10: + family: '12' + name: For personnel accessing cardholder data via remote-access technologies, prohibit + the copying, moving, and storage of cardholder data onto local hard drives and + removable electronic media, unless explicitly authorized for a defined business + need. Where there is an authorized business need, the usage policies must require + the data be protected in accordance with all applicable PCI DSS Requirements. +Requirement 10: + family: '10' + name: Track and monitor all access to network resources and cardholder data +11.4: + family: '11' + name: Use intrusion-detection and/or intrusion-prevention techniques to detect and/or + prevent intrusions into the network. Monitor all traffic at the perimeter of the + cardholder data environment as well as at critical points in the cardholder data + environment, and alert personnel to suspected compromises.Keep all intrusion-detection + and prevention engines, baselines, and signatures up to date. +10.5.3: + family: '10' + name: Promptly back up audit trail files to a centralized log server or media that + is difficult to alter. +10.6.2: + family: '10' + name: "Review logs of all other system components periodically based on the organization\u2019\ + s policies and risk management strategy, as determined by the organization\u2019\ + s annual risk assessment." +5.2: + family: '5' + name: Ensure that all anti-virus mechanisms are maintained . +12.4: + family: '12' + name: Ensure that the security policy and procedures clearly define information + security responsibilities for all personnel. +3.2.1: + family: '3' + name: Do not store the full contents of any track (from the magnetic stripe located + on the back of a card, equivalent data contained on a chip, or elsewhere) after + authorization. This data is alternatively called full track, track, track 1, track + 2, and magnetic-stripe data. +1.3.4: + family: '1' + name: Implement anti-spoofing measures to detect and block forged source IP addresses + from entering the network. +4.1.1: + family: '4' + name: Ensure wireless networks transmitting cardholder data or connected to the + cardholder data environment, use industry best practices (for example, IEEE 802.11i) + to implement strong encryption for authentication and transmission. +6.5.2: + family: '6' + name: Buffer overflows +12.9: + family: '12' + name: "Additional requirement for service providers only. Service providers acknowledge\ + \ in writing to customers that they are responsible for the security of cardholder\ + \ data the service provider possesses or otherwise stores, processes, or transmits\ + \ on behalf of the customer, or to the extent that they could impact the security\ + \ of the customer\u2019s cardholder data environment." +12.5.4: + family: '12' + name: Administer user accounts, including additions, deletions, and modifications. +10.2.6: + family: '10' + name: Initialization, stopping, or pausing of the audit logs +12.5.3: + family: '12' + name: Establish, document, and distribute security incident response and escalation + procedures to ensure timely and effective handling of all situations. +11.2.3: + family: '11' + name: Perform internal and external scans, and rescans as needed, after any significant + change. Scans must be performed by qualified personnel. +8.2: + family: '8' + name: In addition to assigning a unique ID, ensure proper user-authentication management + for non-consumer users and administrators on all system components by employing + at least one of the following methods to authenticate all users. +6.7: + family: '6' + name: Ensure that security policies and operational procedures for developing and + maintaining secure systems and applications are documented, in use, and known + to all affected parties. +9.6.1: + family: '9' + name: Classify media so the sensitivity of the data can be determined. +12.8: + family: '12' + name: Maintain and implement policies and procedures to manage service providers + with whom cardholder data is shared, or that could affect the security of cardholder + data. diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/standards_fixtures/BrokenStandard/NIST-800-53.yaml b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/standards_fixtures/BrokenStandard/NIST-800-53.yaml new file mode 100644 index 0000000..828d4a9 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/fixtures/standards_fixtures/BrokenStandard/NIST-800-53.yaml @@ -0,0 +1 @@ +broken non diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go.go new file mode 100644 index 0000000..e5ba5ba --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go.go @@ -0,0 +1,141 @@ +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + + "github.com/codegangsta/cli" + "github.com/opencontrol/compliance-masonry/commands/docs" + "github.com/opencontrol/compliance-masonry/commands/docs/gitbook" + "github.com/opencontrol/compliance-masonry/commands/get" + "github.com/opencontrol/compliance-masonry/tools/constants" + "github.com/opencontrol/compliance-masonry/tools/fs" +) + +var exportPath, markdownPath, opencontrolDir string + +// NewCLIApp creates a new instances of the CLI +func NewCLIApp() *cli.App { + app := cli.NewApp() + app.Name = "Compliance Masonry" + app.Usage = "Open Control CLI Tool" + app.Version = "1.1.2" + app.Flags = []cli.Flag{ + cli.BoolFlag{ + Name: "verbose", + Usage: "Indicates whether to run the command with verbosity.", + }, + } + app.Before = func(c *cli.Context) error { + // Resets the log to output to nothing + log.SetOutput(ioutil.Discard) + if c.Bool("verbose") { + log.SetOutput(os.Stderr) + log.Println("Running with verbosity") + } + return nil + } + app.Commands = []cli.Command{ + { + Name: "get", + Aliases: []string{"g"}, + Usage: "Install compliance dependencies", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "dest", + Value: constants.DefaultDestination, + Usage: "Location to download the repos.", + }, + cli.StringFlag{ + Name: "config", + Value: constants.DefaultConfigYaml, + Usage: "Location of system yaml", + }, + }, + Action: func(c *cli.Context) error { + f := fs.OSUtil{} + config := c.String("config") + configBytes, err := f.OpenAndReadFile(config) + if err != nil { + fmt.Fprintf(app.Writer, "%v\n", err.Error()) + os.Exit(1) + } + wd, err := os.Getwd() + if err != nil { + fmt.Fprintf(app.Writer, "%v\n", err.Error()) + os.Exit(1) + } + destination := filepath.Join(wd, c.String("dest")) + err = get.Get(destination, configBytes) + if err != nil { + return cli.NewExitError(err.Error(), 1) + } + fmt.Fprintf(app.Writer, "%v\n", "Compliance Dependencies Installed") + return nil + }, + }, + { + Name: "docs", + Aliases: []string{"d"}, + Usage: "Create Documentation", + Subcommands: []cli.Command{ + { + Name: "gitbook", + Aliases: []string{"g"}, + Usage: "Create Gitbook Documentation", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "opencontrols, o", + Value: "opencontrols", + Usage: "Set opencontrols directory", + Destination: &opencontrolDir, + }, + cli.StringFlag{ + Name: "exports, e", + Value: "exports", + Usage: "Sets the export directory", + Destination: &exportPath, + }, + cli.StringFlag{ + Name: "markdowns, m", + Value: "markdowns", + Usage: "Sets the markdowns directory", + Destination: &markdownPath, + }, + }, + Action: func(c *cli.Context) error { + config := gitbook.Config{ + Certification: c.Args().First(), + OpencontrolDir: opencontrolDir, + ExportPath: exportPath, + MarkdownPath: markdownPath, + } + warning, errMessages := docs.MakeGitbook(config) + if warning != "" { + fmt.Fprintf(app.Writer, "%v\n", warning) + } + if errMessages != nil && len(errMessages) > 0 { + err := cli.NewMultiError(errMessages...) + return cli.NewExitError(err.Error(), 1) + } + fmt.Fprintf(app.Writer, "%v\n", "New Gitbook Documentation Created") + return nil + }, + }, + }, + }, + diffCommand, + } + return app +} + +func main() { + app := NewCLIApp() + err := app.Run(os.Args) + if err != nil { + log.Fatalln(err) + } +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go_test.go new file mode 100644 index 0000000..29bf872 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/masonry-go_test.go @@ -0,0 +1,123 @@ +package main_test + +import ( + "bufio" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "strings" + "time" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gexec" +) + +var _ = Describe("Masonry CLI", func() { + Describe("When the CLI is run with no commands", func() { + It("should list the available commands", func() { + output := Masonry("", "") + Eventually(output.Out.Contents).Should(ContainSubstring("Install compliance dependencies")) + Eventually(output.Out.Contents).Should(ContainSubstring("Create Documentation")) + }) + }) + + Describe("Base Docs Commands", func() { + Describe("When the CLI is run with the docs command", func() { + It("should list the available doc commands", func() { + output := Masonry("docs", "") + Eventually(output.Out.Contents).Should(ContainSubstring("Create Gitbook Documentation")) + }) + }) + }) + + Describe("Gitbook Docs Commands", func() { + + var exportTempDir string + BeforeEach(func() { + exportTempDir, _ = ioutil.TempDir("", "exports") + }) + + Describe("Gitbook Commands", func() { + Describe("When the CLI is run with the `docs gitbook` command", func() { + It("should let the user know that they have not described a certification and show how to use the command", func() { + output := Masonry("docs", "gitbook") + Eventually(output.Err.Contents).Should(ContainSubstring("Error: Missing Certification Argument\n")) + }) + }) + + Describe("When the CLI is run with the `docs gitbook` command without opencontrols dir", func() { + It("should let the user know that there is no opencontrols/certifications directory", func() { + output := Masonry("docs", "gitbook", "LATO") + Eventually(output.Err.Contents).Should(ContainSubstring("Error: `" + filepath.Join("opencontrols", "certifications") + "` directory does exist\n")) + }) + }) + }) + + Describe("When the CLI is run with the `docs gitbook` command with a certification and no markdown", func() { + It("should create the documentation but warn users that there is no markdown dir", func() { + output := Masonry( + "docs", "gitbook", "LATO", + "-e", exportTempDir, + "-o", filepath.Join("fixtures", "opencontrol_fixtures"), + "-m", "sdfds").Wait(1 * time.Second) + Eventually(output.Out.Contents).Should(ContainSubstring("Warning: markdown directory does not exist\n")) + Eventually(output.Out.Contents).Should(ContainSubstring("New Gitbook Documentation Created\n")) + }) + }) + + Describe("When the CLI is run with the `docs gitbook` command with a certification", func() { + It("should create the documentation without warning the user", func() { + exportTempDir, _ := ioutil.TempDir("", "exports") + output := Masonry( + "docs", "gitbook", "LATO", + "-e", exportTempDir, + "-o", filepath.Join("fixtures", "opencontrol_fixtures_with_markdown"), + "-m", filepath.Join("fixtures", "opencontrol_fixtures_with_markdown", "markdowns")).Wait(1 * time.Second) + Eventually(output.Out.Contents).ShouldNot(ContainSubstring("Warning: markdown directory does not exist\n")) + Eventually(output.Out.Contents).Should(ContainSubstring("New Gitbook Documentation Created\n")) + }) + }) + AfterEach(func() { + _ = os.RemoveAll(exportTempDir) + }) + }) + + Describe("Diff Commands", func() { + Describe("When the diff command is run", func() { + It("should let the user know that they have not described a certification and show how to use the command", func() { + output := Masonry("diff") + Eventually(output.Err.Contents).Should(ContainSubstring("Error: Missing Certification Argument\n")) + }) + }) + Describe("When the CLI is run with the `diff` command without opencontrols dir", func() { + It("should let the user know that there is no opencontrols/certifications directory", func() { + output := Masonry("diff", "LATO") + Eventually(output.Err.Contents).Should(ContainSubstring("Error: `" + filepath.Join("opencontrols", "certifications") + "` directory does exist\n")) + }) + }) + Describe("When the CLI is run with the `diff` command with a certification", func() { + It("should print the number of missing controls", func() { + output := Masonry( + "diff", "LATO", + "-o", filepath.Join("fixtures", "opencontrol_fixtures")).Wait(1 * time.Second) + Eventually(output.Out.Contents).Should(ContainSubstring("Number of missing controls:")) + }) + }) + }) +}) + +func Masonry(args ...string) *Session { + path, err := Build("github.com/opencontrol/compliance-masonry") + Expect(err).NotTo(HaveOccurred()) + cmd := exec.Command(path, args...) + stdin, err := cmd.StdinPipe() + Expect(err).ToNot(HaveOccurred()) + buffer := bufio.NewWriter(stdin) + _, _ = buffer.WriteString(strings.Join(args, " ")) + _ = buffer.Flush() + session, err := Start(cmd, GinkgoWriter, GinkgoWriter) + Expect(err).NotTo(HaveOccurred()) + return session +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/release.sh b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/release.sh new file mode 100755 index 0000000..174cef2 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/release.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e +set -x + +# run `go test` outside of goxc since there wasn't a clean way to ignore the vendor/ directory otherwise +# https://github.com/laher/goxc/issues/99 +go test $(go list ./... | grep -v vendor) +$GOPATH/bin/goxc "$@" diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/certifications/certifications.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/certifications/certifications.go new file mode 100644 index 0000000..8e3ab6b --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/certifications/certifications.go @@ -0,0 +1,36 @@ +package certifications + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" +) + +// GetCertification will look for the specified certification and will return the path to the +// certification file if found. +func GetCertification(opencontrolDir string, certification string) (string, []error) { + certificationPath := "" + var errMessages []error + if certification == "" { + return "", []error{errors.New("Error: Missing Certification Argument")} + } + certificationDir := filepath.Join(opencontrolDir, "certifications") + certificationPath = filepath.Join(certificationDir, certification+".yaml") + if _, err := os.Stat(certificationPath); os.IsNotExist(err) { + files, err := ioutil.ReadDir(certificationDir) + if err != nil { + return "", []error{errors.New("Error: `" + certificationDir + "` directory does exist")} + } + errMessage := fmt.Sprintf("Error: `%s` does not exist\nUse one of the following:", certificationPath) + for _, file := range files { + fileName := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name())) + errMessage = fmt.Sprintf("%s\n%s", errMessage, fileName) + } + errMessages = append(errMessages, errors.New(errMessage)) + return "", errMessages + } + return certificationPath, errMessages +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/constants/constants.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/constants/constants.go new file mode 100644 index 0000000..9789602 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/constants/constants.go @@ -0,0 +1,39 @@ +package constants + +const ( + // DefaultStandardsFolder is the folder where to store standards. + DefaultStandardsFolder = "standards" + // DefaultCertificationsFolder is the folder where to store certifications. + DefaultCertificationsFolder = "certifications" + // DefaultComponentsFolder is the folder where to store components. + DefaultComponentsFolder = "components" + // DefaultDestination is the root folder where to store standards, certifications, and components. + DefaultDestination = "opencontrols" + // DefaultConfigYaml is the file name for the file to find config details + DefaultConfigYaml = "opencontrol.yaml" +) + +// ResourceType is a type to help tell when it should be of only types of resources. +type ResourceType string + +const ( + // Standards is the placeholder for the resource type of standards + Standards ResourceType = "Standards" + // Certifications is the placeholder for the resource type of certifications + Certifications ResourceType = "Certifications" + // Components is the placeholder for the resource type of components + Components ResourceType = "Components" +) + +const ( + // ErrMissingVersion reports that the schema version cannot be found. + ErrMissingVersion = "Schema Version can not be found." + // ErrComponentFileDNE is raised when a component file does not exists + ErrComponentFileDNE = "Component files does not exist" +) + +const ( + // WarningNoInformationAvailable is a warning to indicate that no information was found. Typically this will be + // used when a template is being filled in and there is no information found for a particular section. + WarningNoInformationAvailable = "No information available for component" +) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/fs.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/fs.go new file mode 100644 index 0000000..99cac19 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/fs.go @@ -0,0 +1,82 @@ +package fs + +import ( + "fmt" + "io/ioutil" + "log" + "os" + + "github.com/go-utils/ufs" +) + +// Util is an interface for helper file system utilities. +type Util interface { + OpenAndReadFile(file string) ([]byte, error) + CopyAll(source string, destination string) error + Copy(source string, destination string) error + TempDir(dir string, prefix string) (string, error) + Mkdirs(dir string) error + AppendOrCreate(filePath string, text string) error +} + +// OSUtil is the struct for dealing with File System Operations on the disk. +type OSUtil struct { +} + +// OpenAndReadFile is a util that will check if the file exists, open and then read the file. +func (fs OSUtil) OpenAndReadFile(file string) ([]byte, error) { + if _, err := os.Stat(file); os.IsNotExist(err) { + return nil, fmt.Errorf("error: %s does not exist", file) + } + bytes, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + return bytes, nil +} + +// CopyAll copies recursively from source to destination +func (fs OSUtil) CopyAll(source string, destination string) error { + return ufs.CopyAll(source, destination, nil) +} + +// Copy copies one file from source to destination +func (fs OSUtil) Copy(source string, destination string) error { + log.Printf("source %s dest %s\n", source, destination) + return ufs.CopyFile(source, destination) +} + +// TempDir creates a temp directory that the user is responsible for cleaning up +func (fs OSUtil) TempDir(dir string, prefix string) (string, error) { + return ioutil.TempDir(dir, prefix) +} + +// Mkdirs ensures that the directory is created. +func (fs OSUtil) Mkdirs(dir string) error { + return ufs.EnsureDirExists(dir) +} + +// AppendOrCreate adds text to file if it exists otherwise it creates a new +// file with the given text +func (fs OSUtil) AppendOrCreate(filePath string, text string) error { + var err error + if _, err = os.Stat(filePath); err == nil { + err = AppendToFile(filePath, text) + } else { + err = ioutil.WriteFile(filePath, []byte(text), 0700) + } + return err +} + +// AppendToFile adds text to a file +func AppendToFile(filePath string, text string) error { + file, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY, 0700) + if err != nil { + return err + } + defer file.Close() + if _, err = file.WriteString(text); err != nil { + return err + } + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/mocks/Util.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/mocks/Util.go new file mode 100644 index 0000000..270b5fb --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/fs/mocks/Util.go @@ -0,0 +1,108 @@ +package mocks + +import "github.com/stretchr/testify/mock" + +// Util is an autogenerated mock type for the Util type +type Util struct { + mock.Mock +} + +// OpenAndReadFile provides a mock function with given fields: file +func (_m *Util) OpenAndReadFile(file string) ([]byte, error) { + ret := _m.Called(file) + + var r0 []byte + if rf, ok := ret.Get(0).(func(string) []byte); ok { + r0 = rf(file) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(string) error); ok { + r1 = rf(file) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CopyAll provides a mock function with given fields: source, destination +func (_m *Util) CopyAll(source string, destination string) error { + ret := _m.Called(source, destination) + + var r0 error + if rf, ok := ret.Get(0).(func(string, string) error); ok { + r0 = rf(source, destination) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Copy provides a mock function with given fields: source, destination +func (_m *Util) Copy(source string, destination string) error { + ret := _m.Called(source, destination) + + var r0 error + if rf, ok := ret.Get(0).(func(string, string) error); ok { + r0 = rf(source, destination) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// TempDir provides a mock function with given fields: dir, prefix +func (_m *Util) TempDir(dir string, prefix string) (string, error) { + ret := _m.Called(dir, prefix) + + var r0 string + if rf, ok := ret.Get(0).(func(string, string) string); ok { + r0 = rf(dir, prefix) + } else { + r0 = ret.Get(0).(string) + } + + var r1 error + if rf, ok := ret.Get(1).(func(string, string) error); ok { + r1 = rf(dir, prefix) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Mkdirs provides a mock function with given fields: dir +func (_m *Util) Mkdirs(dir string) error { + ret := _m.Called(dir) + + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { + r0 = rf(dir) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// AppendOrCreate provides a mock function with given fields: filePath, text +func (_m *Util) AppendOrCreate(filePath string, text string) error { + ret := _m.Called(filePath, text) + + var r0 error + if rf, ok := ret.Get(0).(func(string, string) error); ok { + r0 = rf(filePath, text) + } else { + r0 = ret.Error(0) + } + + return r0 +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map.go new file mode 100644 index 0000000..7a54a54 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map.go @@ -0,0 +1,50 @@ +package mapset + +import ( + "github.com/vektra/errors" + "gopkg.in/fatih/set.v0" +) + +// MapSet is the map with each value being a set. +type MapSet struct { + mapOfSet map[string]*set.Set +} + +// Init returns an initialized NestedMap +func Init() MapSet { + return MapSet{mapOfSet: make(map[string]*set.Set)} +} + +// Result is the result from any NestedMap operations +type Result struct { + Value string + Error error + Success bool +} + +var ( + // ErrEmptyInput represents that the input into the operation is not complete + ErrEmptyInput = errors.New("One or more inputs are empty") +) + +// Reserve will put a space into the map for the value given that key. Will return false if there is already an entry. +func (m *MapSet) Reserve(key string, value string) (result Result) { + if key == "" || value == "" { + result.Error = ErrEmptyInput + return + } + var innerSet *set.Set + if _, ok := m.mapOfSet[key]; !ok { + innerSet = set.New() + m.mapOfSet[key] = innerSet + } + if m.mapOfSet[key].Has(value) { + result.Success = false + result.Value = value + return + } + m.mapOfSet[key].Add(value) + result.Success = true + result.Value = value + return +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map_test.go new file mode 100644 index 0000000..ea0e190 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/map_test.go @@ -0,0 +1,25 @@ +package mapset + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/extensions/table" + "github.com/stretchr/testify/assert" +) + +var _ = Describe("Map", func() { + var ( + m = Init() + ) + DescribeTable("Reserve", func(key, value string, expectedError error, expectedSuccess bool, expectedValue string) { + res := m.Reserve(key, value) + assert.Equal(GinkgoT(), expectedError, res.Error) + assert.Equal(GinkgoT(), expectedSuccess, res.Success) + assert.Equal(GinkgoT(), expectedValue, res.Value) + }, + Entry("Regular reservation", "key1", "value", nil, true, "value"), + Entry("Repeat reservation", "key1", "value", nil, false, "value"), + Entry("no key", "", "value", ErrEmptyInput, false, ""), + Entry("no value", "key1", "", ErrEmptyInput, false, ""), + ) + +}) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/mapset_suite_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/mapset_suite_test.go new file mode 100644 index 0000000..b571126 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/mapset/mapset_suite_test.go @@ -0,0 +1,13 @@ +package mapset_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestMapset(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Mapset Suite") +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager.go new file mode 100644 index 0000000..f37c0dd --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager.go @@ -0,0 +1,47 @@ +package vcs + +import ( + "fmt" + "log" + + "github.com/Masterminds/vcs" +) + +// RepoManager is the interface for how to do jobs with VCS +type RepoManager interface { + Clone(url string, revision string, dir string) error +} + +const ( + repoInitFailed = "Repo initialization failed" + repoCloneFailed = "Cloning repo failed" + repoCheckoutFailed = "Revision Checkout failed" + errorContainer = "[Error: %s Repo: %s Revision: %s Dir: %s Error Details: %s]\n" +) + +// Manager is the concrete implementation of RepoManager +type Manager struct{} + +// Clone will clone the repo to a specified location and then checkout the repo at the particular revision. +func (m Manager) Clone(url string, revision string, dir string) error { + log.Printf("Initializing repo %s into %s\n", url, dir) + repo, err := vcs.NewRepo(url, dir) + if err != nil { + return fmt.Errorf(errorContainer, repoInitFailed, url, revision, dir, err.Error()) + } + log.Printf("Cloning %s into %s\n", url, dir) + err = repo.Get() + if err != nil { + return fmt.Errorf(errorContainer, repoCloneFailed, url, revision, dir, err.Error()) + } + if revision != "" { + log.Printf("Checking out revision %s for repo %s\n", revision, url) + err = repo.UpdateVersion(revision) + if err != nil { + return fmt.Errorf(errorContainer, repoCheckoutFailed, url, revision, dir, err.Error()) + } + } else { + log.Printf("Assuming default revision for repo %s\n", url) + } + return nil +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager_test.go new file mode 100644 index 0000000..421147d --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/manager_test.go @@ -0,0 +1,33 @@ +package vcs + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/ginkgo/extensions/table" + "github.com/stretchr/testify/assert" + "io/ioutil" + "os" +) + +var _ = Describe("Manager", func() { + DescribeTable("Clone", func(url, rev string, errorIsNull bool, errorString string) { + local, err := ioutil.TempDir("", "go-vcs") + if err != nil { + assert.Fail(GinkgoT(), err.Error()) + } + m := Manager{} + err = m.Clone(url, rev, local) + if errorIsNull { + assert.Nil(GinkgoT(), err) + } else { + assert.NotNil(GinkgoT(), err) + assert.Contains(GinkgoT(), err.Error(), errorString) + } + os.RemoveAll(local) + }, + Entry("sane check", "https://github.com/opencontrol/compliance-masonry", "master", true, ""), + Entry("sane check no revision", "https://github.com/opencontrol/compliance-masonry", "", true, ""), + Entry("Can't init / detect the repo", "https://myrepo/opencontrol/compliance-masonry", "master", false, repoInitFailed), + Entry("Can't clone repo", "http://user:name@github.com/opencontrol/compliance-masonry-blah", "master", false, repoCloneFailed), + Entry("Get a revision that doesn't exist", "https://github.com/opencontrol/compliance-masonry", "master-ultimate-branch-that-never-exists", false, repoCheckoutFailed), + ) +}) diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/mocks/RepoManager.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/mocks/RepoManager.go new file mode 100644 index 0000000..4cdf018 --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/mocks/RepoManager.go @@ -0,0 +1,22 @@ +package mocks + +import "github.com/stretchr/testify/mock" + +// RepoManager is an autogenerated mock type for the RepoManager type +type RepoManager struct { + mock.Mock +} + +// Clone provides a mock function with given fields: url, revision, dir +func (_m *RepoManager) Clone(url string, revision string, dir string) error { + ret := _m.Called(url, revision, dir) + + var r0 error + if rf, ok := ret.Get(0).(func(string, string, string) error); ok { + r0 = rf(url, revision, dir) + } else { + r0 = ret.Error(0) + } + + return r0 +} diff --git a/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/vcs_suite_test.go b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/vcs_suite_test.go new file mode 100644 index 0000000..f53a49b --- /dev/null +++ b/docs/generator/vendor/github.com/opencontrol/compliance-masonry/tools/vcs/vcs_suite_test.go @@ -0,0 +1,13 @@ +package vcs_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestVcs(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Vcs Suite") +} diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/.travis.yml b/docs/generator/vendor/gopkg.in/fatih/set.v0/.travis.yml new file mode 100644 index 0000000..b05e4c5 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/.travis.yml @@ -0,0 +1,3 @@ +language: go +go: 1.2 + diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/LICENSE.md b/docs/generator/vendor/gopkg.in/fatih/set.v0/LICENSE.md new file mode 100644 index 0000000..25fdaf6 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Fatih Arslan + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/README.md b/docs/generator/vendor/gopkg.in/fatih/set.v0/README.md new file mode 100644 index 0000000..5810629 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/README.md @@ -0,0 +1,245 @@ +# Set [![GoDoc](https://godoc.org/gopkg.in/fatih/set.v1?status.png)](https://godoc.org/gopkg.in/fatih/set.v1) [![Build Status](https://travis-ci.org/fatih/set.png)](https://travis-ci.org/fatih/set) + +Set is a basic and simple, hash-based, **Set** data structure implementation +in Go (Golang). + +Set provides both threadsafe and non-threadsafe implementations of a generic +set data structure. The thread safety encompasses all operations on one set. +Operations on multiple sets are consistent in that the elements of each set +used was valid at exactly one point in time between the start and the end of +the operation. Because it's thread safe, you can use it concurrently with your +goroutines. + +For usage see examples below or click on the godoc badge. + +## Install and Usage + +Install the package with: + +```bash +go get gopkg.in/fatih/set.v0 +``` + +Import it with: + +```go +import "gopkg.in/fatih/set.v0" +``` + +and use `set` as the package name inside the code. + +## Examples + +#### Initialization of a new Set + +```go + +// create a set with zero items +s := set.New() +s := set.NewNonTS() // non thread-safe version + +// ... or with some initial values +s := set.New("istanbul", "frankfurt", 30.123, "san francisco", 1234) +s := set.NewNonTS("kenya", "ethiopia", "sumatra") + +``` + +#### Basic Operations + +```go +// add items +s.Add("istanbul") +s.Add("istanbul") // nothing happens if you add duplicate item + +// add multiple items +s.Add("ankara", "san francisco", 3.14) + +// remove item +s.Remove("frankfurt") +s.Remove("frankfurt") // nothing happes if you remove a nonexisting item + +// remove multiple items +s.Remove("barcelona", 3.14, "ankara") + +// removes an arbitary item and return it +item := s.Pop() + +// create a new copy +other := s.Copy() + +// remove all items +s.Clear() + +// number of items in the set +len := s.Size() + +// return a list of items +items := s.List() + +// string representation of set +fmt.Printf("set is %s", s.String()) + +``` + +#### Check Operations + +```go +// check for set emptiness, returns true if set is empty +s.IsEmpty() + +// check for a single item exist +s.Has("istanbul") + +// ... or for multiple items. This will return true if all of the items exist. +s.Has("istanbul", "san francisco", 3.14) + +// create two sets for the following checks... +s := s.New("1", "2", "3", "4", "5") +t := s.New("1", "2", "3") + + +// check if they are the same +if !s.IsEqual(t) { + fmt.Println("s is not equal to t") +} + +// if s contains all elements of t +if s.IsSubset(t) { + fmt.Println("t is a subset of s") +} + +// ... or if s is a superset of t +if t.IsSuperset(s) { + fmt.Println("s is a superset of t") +} + + +``` + +#### Set Operations + + +```go +// let us initialize two sets with some values +a := set.New("ankara", "berlin", "san francisco") +b := set.New("frankfurt", "berlin") + +// creates a new set with the items in a and b combined. +// [frankfurt, berlin, ankara, san francisco] +c := set.Union(a, b) + +// contains items which is in both a and b +// [berlin] +c := set.Intersection(a, b) + +// contains items which are in a but not in b +// [ankara, san francisco] +c := set.Difference(a, b) + +// contains items which are in one of either, but not in both. +// [frankfurt, ankara, san francisco] +c := set.SymmetricDifference(a, b) + +``` + +```go +// like Union but saves the result back into a. +a.Merge(b) + +// removes the set items which are in b from a and saves the result back into a. +a.Separate(b) + +``` + +#### Multiple Set Operations + +```go +a := set.New("1", "3", "4", "5") +b := set.New("2", "3", "4", "5") +c := set.New("4", "5", "6", "7") + +// creates a new set with items in a, b and c +// [1 2 3 4 5 6 7] +u := set.Union(a, b, c) + +// creates a new set with items in a but not in b and c +// [1] +u := set.Difference(a, b, c) + +// creates a new set with items that are common to a, b and c +// [5] +u := set.Intersection(a, b, c) +``` + +#### Helper methods + +The Slice functions below are a convenient way to extract or convert your Set data +into basic data types. + + +```go +// create a set of mixed types +s := set.New("ankara", "5", "8", "san francisco", 13, 21) + + +// convert s into a slice of strings (type is []string) +// [ankara 5 8 san francisco] +t := set.StringSlice(s) + + +// u contains a slice of ints (type is []int) +// [13, 21] +u := set.IntSlice(s) + +``` + +#### Concurrent safe usage + +Below is an example of a concurrent way that uses set. We call ten functions +concurrently and wait until they are finished. It basically creates a new +string for each goroutine and adds it to our set. + +```go +package main + +import ( + "fmt" + "github.com/fatih/set" + "strconv" + "sync" +) + +func main() { + var wg sync.WaitGroup // this is just for waiting until all goroutines finish + + // Initialize our thread safe Set + s := set.New() + + // Add items concurrently (item1, item2, and so on) + for i := 0; i < 10; i++ { + wg.Add(1) + go func(i int) { + item := "item" + strconv.Itoa(i) + fmt.Println("adding", item) + s.Add(item) + wg.Done() + }(i) + } + + // Wait until all concurrent calls finished and print our set + wg.Wait() + fmt.Println(s) +} +``` + +## Credits + + * [Fatih Arslan](https://github.com/fatih) + * [Arne Hormann](https://github.com/arnehormann) + * [Sam Boyer](https://github.com/sdboyer) + * [Ralph Loizzo](https://github.com/friartech) + +## License + +The MIT License (MIT) - see LICENSE.md for more details + diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/set.go b/docs/generator/vendor/gopkg.in/fatih/set.v0/set.go new file mode 100644 index 0000000..bf2cc43 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/set.go @@ -0,0 +1,116 @@ +// Package set provides both threadsafe and non-threadsafe implementations of +// a generic set data structure. In the threadsafe set, safety encompasses all +// operations on one set. Operations on multiple sets are consistent in that +// the elements of each set used was valid at exactly one point in time +// between the start and the end of the operation. +package set + +// Interface is describing a Set. Sets are an unordered, unique list of values. +type Interface interface { + New(items ...interface{}) Interface + Add(items ...interface{}) + Remove(items ...interface{}) + Pop() interface{} + Has(items ...interface{}) bool + Size() int + Clear() + IsEmpty() bool + IsEqual(s Interface) bool + IsSubset(s Interface) bool + IsSuperset(s Interface) bool + Each(func(interface{}) bool) + String() string + List() []interface{} + Copy() Interface + Merge(s Interface) + Separate(s Interface) +} + +// helpful to not write everywhere struct{}{} +var keyExists = struct{}{} + +// Union is the merger of multiple sets. It returns a new set with all the +// elements present in all the sets that are passed. +// +// The dynamic type of the returned set is determined by the first passed set's +// implementation of the New() method. +func Union(set1, set2 Interface, sets ...Interface) Interface { + u := set1.Copy() + set2.Each(func(item interface{}) bool { + u.Add(item) + return true + }) + for _, set := range sets { + set.Each(func(item interface{}) bool { + u.Add(item) + return true + }) + } + + return u +} + +// Difference returns a new set which contains items which are in in the first +// set but not in the others. Unlike the Difference() method you can use this +// function separately with multiple sets. +func Difference(set1, set2 Interface, sets ...Interface) Interface { + s := set1.Copy() + s.Separate(set2) + for _, set := range sets { + s.Separate(set) // seperate is thread safe + } + return s +} + +// Intersection returns a new set which contains items that only exist in all given sets. +func Intersection(set1, set2 Interface, sets ...Interface) Interface { + all := Union(set1, set2, sets...) + result := Union(set1, set2, sets...) + all.Each(func(item interface{}) bool { + for _, set := range sets { + if !set.Has(item) || !set1.Has(item) || !set2.Has(item) { + result.Remove(item) + } + } + return true + }) + return result +} + +// SymmetricDifference returns a new set which s is the difference of items which are in +// one of either, but not in both. +func SymmetricDifference(s Interface, t Interface) Interface { + u := Difference(s, t) + v := Difference(t, s) + return Union(u, v) +} + +// StringSlice is a helper function that returns a slice of strings of s. If +// the set contains mixed types of items only items of type string are returned. +func StringSlice(s Interface) []string { + slice := make([]string, 0) + for _, item := range s.List() { + v, ok := item.(string) + if !ok { + continue + } + + slice = append(slice, v) + } + return slice +} + +// IntSlice is a helper function that returns a slice of ints of s. If +// the set contains mixed types of items only items of type int are returned. +func IntSlice(s Interface) []int { + slice := make([]int, 0) + for _, item := range s.List() { + v, ok := item.(int) + if !ok { + continue + } + + slice = append(slice, v) + } + return slice +} diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots.go b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots.go new file mode 100644 index 0000000..9772f05 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots.go @@ -0,0 +1,192 @@ +package set + +import ( + "fmt" + "strings" +) + +// Provides a common set baseline for both threadsafe and non-ts Sets. +type set struct { + m map[interface{}]struct{} // struct{} doesn't take up space +} + +// SetNonTS defines a non-thread safe set data structure. +type SetNonTS struct { + set +} + +// NewNonTS creates and initialize a new non-threadsafe Set. +// It accepts a variable number of arguments to populate the initial set. +// If nothing is passed a SetNonTS with zero size is created. +func NewNonTS(items ...interface{}) *SetNonTS { + s := &SetNonTS{} + s.m = make(map[interface{}]struct{}) + + // Ensure interface compliance + var _ Interface = s + + s.Add(items...) + return s +} + +// New creates and initalizes a new Set interface. It accepts a variable +// number of arguments to populate the initial set. If nothing is passed a +// zero size Set based on the struct is created. +func (s *set) New(items ...interface{}) Interface { + return NewNonTS(items...) +} + +// Add includes the specified items (one or more) to the set. The underlying +// Set s is modified. If passed nothing it silently returns. +func (s *set) Add(items ...interface{}) { + if len(items) == 0 { + return + } + + for _, item := range items { + s.m[item] = keyExists + } +} + +// Remove deletes the specified items from the set. The underlying Set s is +// modified. If passed nothing it silently returns. +func (s *set) Remove(items ...interface{}) { + if len(items) == 0 { + return + } + + for _, item := range items { + delete(s.m, item) + } +} + +// Pop deletes and return an item from the set. The underlying Set s is +// modified. If set is empty, nil is returned. +func (s *set) Pop() interface{} { + for item := range s.m { + delete(s.m, item) + return item + } + return nil +} + +// Has looks for the existence of items passed. It returns false if nothing is +// passed. For multiple items it returns true only if all of the items exist. +func (s *set) Has(items ...interface{}) bool { + // assume checked for empty item, which not exist + if len(items) == 0 { + return false + } + + has := true + for _, item := range items { + if _, has = s.m[item]; !has { + break + } + } + return has +} + +// Size returns the number of items in a set. +func (s *set) Size() int { + return len(s.m) +} + +// Clear removes all items from the set. +func (s *set) Clear() { + s.m = make(map[interface{}]struct{}) +} + +// IsEmpty reports whether the Set is empty. +func (s *set) IsEmpty() bool { + return s.Size() == 0 +} + +// IsEqual test whether s and t are the same in size and have the same items. +func (s *set) IsEqual(t Interface) bool { + // Force locking only if given set is threadsafe. + if conv, ok := t.(*Set); ok { + conv.l.RLock() + defer conv.l.RUnlock() + } + + equal := true + if equal = len(s.m) == t.Size(); equal { + t.Each(func(item interface{}) (equal bool) { + _, equal = s.m[item] + return + }) + } + + return equal +} + +// IsSubset tests whether t is a subset of s. +func (s *set) IsSubset(t Interface) (subset bool) { + subset = true + + t.Each(func(item interface{}) bool { + _, subset = s.m[item] + return subset + }) + + return +} + +// IsSuperset tests whether t is a superset of s. +func (s *set) IsSuperset(t Interface) bool { + return t.IsSubset(s) +} + +// Each traverses the items in the Set, calling the provided function for each +// set member. Traversal will continue until all items in the Set have been +// visited, or if the closure returns false. +func (s *set) Each(f func(item interface{}) bool) { + for item := range s.m { + if !f(item) { + break + } + } +} + +// String returns a string representation of s +func (s *set) String() string { + t := make([]string, 0, len(s.List())) + for _, item := range s.List() { + t = append(t, fmt.Sprintf("%v", item)) + } + + return fmt.Sprintf("[%s]", strings.Join(t, ", ")) +} + +// List returns a slice of all items. There is also StringSlice() and +// IntSlice() methods for returning slices of type string or int. +func (s *set) List() []interface{} { + list := make([]interface{}, 0, len(s.m)) + + for item := range s.m { + list = append(list, item) + } + + return list +} + +// Copy returns a new Set with a copy of s. +func (s *set) Copy() Interface { + return NewNonTS(s.List()...) +} + +// Merge is like Union, however it modifies the current set it's applied on +// with the given t set. +func (s *set) Merge(t Interface) { + t.Each(func(item interface{}) bool { + s.m[item] = keyExists + return true + }) +} + +// it's not the opposite of Merge. +// Separate removes the set items containing in t from set s. Please aware that +func (s *set) Separate(t Interface) { + s.Remove(t.List()...) +} diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots_test.go b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots_test.go new file mode 100644 index 0000000..30aa71a --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_nots_test.go @@ -0,0 +1,258 @@ +package set + +import( + "reflect" + "testing" +) + +func TestSetNonTS_NewNonTS_parameters(t *testing.T) { + s := NewNonTS("string", "another_string", 1, 3.14) + + if s.Size() != 4 { + t.Error("NewNonTS: calling with parameters should create a set with size of four") + } +} + +func TestSetNonTS_Add(t *testing.T) { + s := NewNonTS() + s.Add(1) + s.Add(2) + s.Add(2) // duplicate + s.Add("fatih") + s.Add("zeynep") + s.Add("zeynep") // another duplicate + + if s.Size() != 4 { + t.Error("Add: items are not unique. The set size should be four") + } + + if !s.Has(1, 2, "fatih", "zeynep") { + t.Error("Add: added items are not availabile in the set.") + } +} + +func TestSetNonTS_Add_multiple(t *testing.T) { + s := NewNonTS() + s.Add("ankara", "san francisco", 3.14) + + if s.Size() != 3 { + t.Error("Add: items are not unique. The set size should be three") + } + + if !s.Has("ankara", "san francisco", 3.14) { + t.Error("Add: added items are not availabile in the set.") + } +} + +func TestSetNonTS_Remove(t *testing.T) { + s := NewNonTS() + s.Add(1) + s.Add(2) + s.Add("fatih") + + s.Remove(1) + if s.Size() != 2 { + t.Error("Remove: set size should be two after removing") + } + + s.Remove(1) + if s.Size() != 2 { + t.Error("Remove: set size should be not change after trying to remove a non-existing item") + } + + s.Remove(2) + s.Remove("fatih") + if s.Size() != 0 { + t.Error("Remove: set size should be zero") + } + + s.Remove("fatih") // try to remove something from a zero length set +} + +func TestSetNonTS_Remove_multiple(t *testing.T) { + s := NewNonTS() + s.Add("ankara", "san francisco", 3.14, "istanbul") + s.Remove("ankara", "san francisco", 3.14) + + if s.Size() != 1 { + t.Error("Remove: items are not unique. The set size should be four") + } + + if !s.Has("istanbul") { + t.Error("Add: added items are not availabile in the set.") + } +} + +func TestSetNonTS_Pop(t *testing.T) { + s := NewNonTS() + s.Add(1) + s.Add(2) + s.Add("fatih") + + a := s.Pop() + if s.Size() != 2 { + t.Error("Pop: set size should be two after popping out") + } + + if s.Has(a) { + t.Error("Pop: returned item should not exist") + } + + s.Pop() + s.Pop() + b := s.Pop() + if b != nil { + t.Error("Pop: should return nil because set is empty") + } + + s.Pop() // try to remove something from a zero length set +} + +func TestSetNonTS_Has(t *testing.T) { + s := NewNonTS("1", "2", "3", "4") + + if !s.Has("1") { + t.Error("Has: the item 1 exist, but 'Has' is returning false") + } + + if !s.Has("1", "2", "3", "4") { + t.Error("Has: the items all exist, but 'Has' is returning false") + } +} + +func TestSetNonTS_Clear(t *testing.T) { + s := NewNonTS() + s.Add(1) + s.Add("istanbul") + s.Add("san francisco") + + s.Clear() + if s.Size() != 0 { + t.Error("Clear: set size should be zero") + } +} + +func TestSetNonTS_IsEmpty(t *testing.T) { + s := NewNonTS() + + empty := s.IsEmpty() + if !empty { + t.Error("IsEmpty: set is empty, it should be true") + } + + s.Add(2) + s.Add(3) + notEmpty := s.IsEmpty() + + if notEmpty { + t.Error("IsEmpty: set is filled, it should be false") + } +} + +func TestSetNonTS_IsEqual(t *testing.T) { + s := NewNonTS("1", "2", "3") + u := NewNonTS("1", "2", "3") + + ok := s.IsEqual(u) + if !ok { + t.Error("IsEqual: set s and t are equal. However it returns false") + } +} + +func TestSetNonTS_IsSubset(t *testing.T) { + s := NewNonTS("1", "2", "3", "4") + u := NewNonTS("1", "2", "3") + + ok := s.IsSubset(u) + if !ok { + t.Error("IsSubset: u is a subset of s. However it returns false") + } + + ok = u.IsSubset(s) + if ok { + t.Error("IsSubset: s is not a subset of u. However it returns true") + } + +} + +func TestSetNonTS_IsSuperset(t *testing.T) { + s := NewNonTS("1", "2", "3", "4") + u := NewNonTS("1", "2", "3") + + ok := u.IsSuperset(s) + if !ok { + t.Error("IsSuperset: s is a superset of u. However it returns false") + } + + ok = s.IsSuperset(u) + if ok { + t.Error("IsSuperset: u is not a superset of u. However it returns true") + } + +} + +func TestSetNonTS_String(t *testing.T) { + s := NewNonTS() + if s.String() != "[]" { + t.Error("String: output is not what is excepted", s.String()) + } + + s.Add("1", "2", "3", "4") + if s.String() != "[1, 2, 3, 4]" { + t.Error("String: output is not what is excepted") + } +} + +func TestSetNonTS_List(t *testing.T) { + s := NewNonTS("1", "2", "3", "4") + + // this returns a slice of interface{} + if len(s.List()) != 4 { + t.Error("List: slice size should be four.") + } + + for _, item := range s.List() { + r := reflect.TypeOf(item) + if r.Kind().String() != "string" { + t.Error("List: slice item should be a string") + } + } +} + +func TestSetNonTS_Copy(t *testing.T) { + s := NewNonTS("1", "2", "3", "4") + r := s.Copy() + + if !s.IsEqual(r) { + t.Error("Copy: set s and r are not equal") + } +} + +func TestSetNonTS_Merge(t *testing.T) { + s := NewNonTS("1", "2", "3") + r := NewNonTS("3", "4", "5") + s.Merge(r) + + if s.Size() != 5 { + t.Error("Merge: the set doesn't have all items in it.") + } + + if !s.Has("1", "2", "3", "4", "5") { + t.Error("Merge: merged items are not availabile in the set.") + } +} + +func TestSetNonTS_Separate(t *testing.T) { + s := NewNonTS("1", "2", "3") + r := NewNonTS("3", "5") + s.Separate(r) + + if s.Size() != 2 { + t.Error("Separate: the set doesn't have all items in it.") + } + + if !s.Has("1", "2") { + t.Error("Separate: items after separation are not availabile in the set.") + } +} + diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/set_test.go b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_test.go new file mode 100644 index 0000000..83dd580 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_test.go @@ -0,0 +1,188 @@ +package set + +import ( + "reflect" + "testing" +) + +func Test_Union(t *testing.T) { + s := New("1", "2", "3") + r := New("3", "4", "5") + x := NewNonTS("5", "6", "7") + + u := Union(s, r, x) + if settype := reflect.TypeOf(u).String(); settype != "*set.Set" { + t.Error("Union should derive its set type from the first passed set, got", settype) + } + if u.Size() != 7 { + t.Error("Union: the merged set doesn't have all items in it.") + } + + if !u.Has("1", "2", "3", "4", "5", "6", "7") { + t.Error("Union: merged items are not availabile in the set.") + } + + z := Union(x, r) + if z.Size() != 5 { + t.Error("Union: Union of 2 sets doesn't have the proper number of items.") + } + if settype := reflect.TypeOf(z).String(); settype != "*set.SetNonTS" { + t.Error("Union should derive its set type from the first passed set, got", settype) + } + +} + +func Test_Difference(t *testing.T) { + s := New("1", "2", "3") + r := New("3", "4", "5") + x := New("5", "6", "7") + u := Difference(s, r, x) + + if u.Size() != 2 { + t.Error("Difference: the set doesn't have all items in it.") + } + + if !u.Has("1", "2") { + t.Error("Difference: items are not availabile in the set.") + } + + y := Difference(r, r) + if y.Size() != 0 { + t.Error("Difference: size should be zero") + } + +} + +func Test_Intersection(t *testing.T) { + s1 := New("1", "3", "4", "5") + s2 := New("2", "3", "5", "6") + s3 := New("4", "5", "6", "7") + u := Intersection(s1, s2, s3) + + if u.Size() != 1 { + t.Error("Intersection: the set doesn't have all items in it.") + } + + if !u.Has("5") { + t.Error("Intersection: items after intersection are not availabile in the set.") + } +} + +func Test_SymmetricDifference(t *testing.T) { + s := New("1", "2", "3") + r := New("3", "4", "5") + u := SymmetricDifference(s, r) + + if u.Size() != 4 { + t.Error("SymmetricDifference: the set doesn't have all items in it.") + } + + if !u.Has("1", "2", "4", "5") { + t.Error("SymmetricDifference: items are not availabile in the set.") + } +} + +func Test_StringSlice(t *testing.T) { + s := New("san francisco", "istanbul", 3.14, 1321, "ankara") + u := StringSlice(s) + + if len(u) != 3 { + t.Error("StringSlice: slice should only have three items") + } + + for _, item := range u { + r := reflect.TypeOf(item) + if r.Kind().String() != "string" { + t.Error("StringSlice: slice item should be a string") + } + } +} + +func Test_IntSlice(t *testing.T) { + s := New("san francisco", "istanbul", 3.14, 1321, "ankara", 8876) + u := IntSlice(s) + + if len(u) != 2 { + t.Error("IntSlice: slice should only have two items") + } + + for _, item := range u { + r := reflect.TypeOf(item) + if r.Kind().String() != "int" { + t.Error("Intslice: slice item should be a int") + } + } +} + +func BenchmarkSetEquality(b *testing.B) { + s := New() + u := New() + + for i := 0; i < b.N; i++ { + s.Add(i) + u.Add(i) + } + + b.ResetTimer() + + for i := 0; i < b.N; i++ { + s.IsEqual(u) + } +} + +func BenchmarkSubset(b *testing.B) { + s := New() + u := New() + + for i := 0; i < b.N; i++ { + s.Add(i) + u.Add(i) + } + + b.ResetTimer() + + for i := 0; i < b.N; i++ { + s.IsSubset(u) + } +} + +func benchmarkIntersection(b *testing.B, numberOfItems int) { + s1 := New() + s2 := New() + + for i := 0; i < numberOfItems/2; i++ { + s1.Add(i) + } + for i := 0; i < numberOfItems; i++ { + s2.Add(i) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + Intersection(s1, s2) + } +} + +func BenchmarkIntersection10(b *testing.B) { + benchmarkIntersection(b, 10) +} + +func BenchmarkIntersection100(b *testing.B) { + benchmarkIntersection(b, 100) +} + +func BenchmarkIntersection1000(b *testing.B) { + benchmarkIntersection(b, 1000) +} + +func BenchmarkIntersection10000(b *testing.B) { + benchmarkIntersection(b, 10000) +} + +func BenchmarkIntersection100000(b *testing.B) { + benchmarkIntersection(b, 100000) +} + +func BenchmarkIntersection1000000(b *testing.B) { + benchmarkIntersection(b, 1000000) +} diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts.go b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts.go new file mode 100644 index 0000000..bca63cd --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts.go @@ -0,0 +1,197 @@ +package set + +import ( + "sync" +) + +// Set defines a thread safe set data structure. +type Set struct { + set + l sync.RWMutex // we name it because we don't want to expose it +} + +// New creates and initialize a new Set. It's accept a variable number of +// arguments to populate the initial set. If nothing passed a Set with zero +// size is created. +func New(items ...interface{}) *Set { + s := &Set{} + s.m = make(map[interface{}]struct{}) + + // Ensure interface compliance + var _ Interface = s + + s.Add(items...) + return s +} + +// New creates and initalizes a new Set interface. It accepts a variable +// number of arguments to populate the initial set. If nothing is passed a +// zero size Set based on the struct is created. +func (s *Set) New(items ...interface{}) Interface { + return New(items...) +} + +// Add includes the specified items (one or more) to the set. The underlying +// Set s is modified. If passed nothing it silently returns. +func (s *Set) Add(items ...interface{}) { + if len(items) == 0 { + return + } + + s.l.Lock() + defer s.l.Unlock() + + for _, item := range items { + s.m[item] = keyExists + } +} + +// Remove deletes the specified items from the set. The underlying Set s is +// modified. If passed nothing it silently returns. +func (s *Set) Remove(items ...interface{}) { + if len(items) == 0 { + return + } + + s.l.Lock() + defer s.l.Unlock() + + for _, item := range items { + delete(s.m, item) + } +} + +// Pop deletes and return an item from the set. The underlying Set s is +// modified. If set is empty, nil is returned. +func (s *Set) Pop() interface{} { + s.l.RLock() + for item := range s.m { + s.l.RUnlock() + s.l.Lock() + delete(s.m, item) + s.l.Unlock() + return item + } + s.l.RUnlock() + return nil +} + +// Has looks for the existence of items passed. It returns false if nothing is +// passed. For multiple items it returns true only if all of the items exist. +func (s *Set) Has(items ...interface{}) bool { + // assume checked for empty item, which not exist + if len(items) == 0 { + return false + } + + s.l.RLock() + defer s.l.RUnlock() + + has := true + for _, item := range items { + if _, has = s.m[item]; !has { + break + } + } + return has +} + +// Size returns the number of items in a set. +func (s *Set) Size() int { + s.l.RLock() + defer s.l.RUnlock() + + l := len(s.m) + return l +} + +// Clear removes all items from the set. +func (s *Set) Clear() { + s.l.Lock() + defer s.l.Unlock() + + s.m = make(map[interface{}]struct{}) +} + +// IsEqual test whether s and t are the same in size and have the same items. +func (s *Set) IsEqual(t Interface) bool { + s.l.RLock() + defer s.l.RUnlock() + + // Force locking only if given set is threadsafe. + if conv, ok := t.(*Set); ok { + conv.l.RLock() + defer conv.l.RUnlock() + } + + equal := true + if equal = len(s.m) == t.Size(); equal { + t.Each(func(item interface{}) (equal bool) { + _, equal = s.m[item] + return + }) + } + + return equal +} + +// IsSubset tests whether t is a subset of s. +func (s *Set) IsSubset(t Interface) (subset bool) { + s.l.RLock() + defer s.l.RUnlock() + + subset = true + + t.Each(func(item interface{}) bool { + _, subset = s.m[item] + return subset + }) + + return +} + +// Each traverses the items in the Set, calling the provided function for each +// set member. Traversal will continue until all items in the Set have been +// visited, or if the closure returns false. +func (s *Set) Each(f func(item interface{}) bool) { + s.l.RLock() + defer s.l.RUnlock() + + for item := range s.m { + if !f(item) { + break + } + } +} + +// List returns a slice of all items. There is also StringSlice() and +// IntSlice() methods for returning slices of type string or int. +func (s *Set) List() []interface{} { + s.l.RLock() + defer s.l.RUnlock() + + list := make([]interface{}, 0, len(s.m)) + + for item := range s.m { + list = append(list, item) + } + + return list +} + +// Copy returns a new Set with a copy of s. +func (s *Set) Copy() Interface { + return New(s.List()...) +} + +// Merge is like Union, however it modifies the current set it's applied on +// with the given t set. +func (s *Set) Merge(t Interface) { + s.l.Lock() + defer s.l.Unlock() + + t.Each(func(item interface{}) bool { + s.m[item] = keyExists + return true + }) +} diff --git a/docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts_test.go b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts_test.go new file mode 100644 index 0000000..8fa1d51 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/fatih/set.v0/set_ts_test.go @@ -0,0 +1,297 @@ +package set + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSet_New(t *testing.T) { + s := New() + + if s.Size() != 0 { + t.Error("New: calling without any parameters should create a set with zero size") + } + + u := s.New() + if u.Size() != 0 { + t.Error("New: creating a new set via s.New() should create a set with zero size") + } +} + +func TestSet_New_parameters(t *testing.T) { + s := New("string", "another_string", 1, 3.14) + + if s.Size() != 4 { + t.Error("New: calling with parameters should create a set with size of four") + } +} + +func TestSet_Add(t *testing.T) { + s := New() + s.Add(1) + s.Add(2) + s.Add(2) // duplicate + s.Add("fatih") + s.Add("zeynep") + s.Add("zeynep") // another duplicate + + if s.Size() != 4 { + t.Error("Add: items are not unique. The set size should be four") + } + + if !s.Has(1, 2, "fatih", "zeynep") { + t.Error("Add: added items are not availabile in the set.") + } +} + +func TestSet_Add_multiple(t *testing.T) { + s := New() + s.Add("ankara", "san francisco", 3.14) + + if s.Size() != 3 { + t.Error("Add: items are not unique. The set size should be three") + } + + if !s.Has("ankara", "san francisco", 3.14) { + t.Error("Add: added items are not availabile in the set.") + } +} + +func TestSet_Remove(t *testing.T) { + s := New() + s.Add(1) + s.Add(2) + s.Add("fatih") + + s.Remove(1) + if s.Size() != 2 { + t.Error("Remove: set size should be two after removing") + } + + s.Remove(1) + if s.Size() != 2 { + t.Error("Remove: set size should be not change after trying to remove a non-existing item") + } + + s.Remove(2) + s.Remove("fatih") + if s.Size() != 0 { + t.Error("Remove: set size should be zero") + } + + s.Remove("fatih") // try to remove something from a zero length set +} + +func TestSet_Remove_multiple(t *testing.T) { + s := New() + s.Add("ankara", "san francisco", 3.14, "istanbul") + s.Remove("ankara", "san francisco", 3.14) + + if s.Size() != 1 { + t.Error("Remove: items are not unique. The set size should be four") + } + + if !s.Has("istanbul") { + t.Error("Add: added items are not availabile in the set.") + } +} + +func TestSet_Pop(t *testing.T) { + s := New() + s.Add(1) + s.Add(2) + s.Add("fatih") + + a := s.Pop() + if s.Size() != 2 { + t.Error("Pop: set size should be two after popping out") + } + + if s.Has(a) { + t.Error("Pop: returned item should not exist") + } + + s.Pop() + s.Pop() + b := s.Pop() + if b != nil { + t.Error("Pop: should return nil because set is empty") + } + + s.Pop() // try to remove something from a zero length set +} + +func TestSet_Has(t *testing.T) { + s := New("1", "2", "3", "4") + + if !s.Has("1") { + t.Error("Has: the item 1 exist, but 'Has' is returning false") + } + + if !s.Has("1", "2", "3", "4") { + t.Error("Has: the items all exist, but 'Has' is returning false") + } +} + +func TestSet_Clear(t *testing.T) { + s := New() + s.Add(1) + s.Add("istanbul") + s.Add("san francisco") + + s.Clear() + if s.Size() != 0 { + t.Error("Clear: set size should be zero") + } +} + +func TestSet_IsEmpty(t *testing.T) { + s := New() + + empty := s.IsEmpty() + if !empty { + t.Error("IsEmpty: set is empty, it should be true") + } + + s.Add(2) + s.Add(3) + notEmpty := s.IsEmpty() + + if notEmpty { + t.Error("IsEmpty: set is filled, it should be false") + } +} + +func TestSet_IsEqual(t *testing.T) { + s := New("1", "2", "3") + u := New("1", "2", "3") + + ok := s.IsEqual(u) + if !ok { + t.Error("IsEqual: set s and t are equal. However it returns false") + } +} + +func TestSet_IsSubset(t *testing.T) { + s := New("1", "2", "3", "4") + u := New("1", "2", "3") + + ok := s.IsSubset(u) + if !ok { + t.Error("IsSubset: u is a subset of s. However it returns false") + } + + ok = u.IsSubset(s) + if ok { + t.Error("IsSubset: s is not a subset of u. However it returns true") + } + +} + +func TestSet_IsSuperset(t *testing.T) { + s := New("1", "2", "3", "4") + u := New("1", "2", "3") + + ok := u.IsSuperset(s) + if !ok { + t.Error("IsSuperset: s is a superset of u. However it returns false") + } + + ok = s.IsSuperset(u) + if ok { + t.Error("IsSuperset: u is not a superset of u. However it returns true") + } + +} + +func TestSet_String(t *testing.T) { + s := New() + if s.String() != "[]" { + t.Error("String: output is not what is excepted", s.String()) + } + + s.Add("1", "2", "3", "4") + if s.String() != "[1, 2, 3, 4]" { + t.Error("String: output is not what is excepted") + } +} + +func TestSet_List(t *testing.T) { + s := New("1", "2", "3", "4") + + // this returns a slice of interface{} + if len(s.List()) != 4 { + t.Error("List: slice size should be four.") + } + + for _, item := range s.List() { + r := reflect.TypeOf(item) + if r.Kind().String() != "string" { + t.Error("List: slice item should be a string") + } + } +} + +func TestSet_Copy(t *testing.T) { + s := New("1", "2", "3", "4") + r := s.Copy() + + if !s.IsEqual(r) { + t.Error("Copy: set s and r are not equal") + } +} + +func TestSet_Merge(t *testing.T) { + s := New("1", "2", "3") + r := New("3", "4", "5") + s.Merge(r) + + if s.Size() != 5 { + t.Error("Merge: the set doesn't have all items in it.") + } + + if !s.Has("1", "2", "3", "4", "5") { + t.Error("Merge: merged items are not availabile in the set.") + } +} + +func TestSet_Separate(t *testing.T) { + s := New("1", "2", "3") + r := New("3", "5") + s.Separate(r) + + if s.Size() != 2 { + t.Error("Separate: the set doesn't have all items in it.") + } + + if !s.Has("1", "2") { + t.Error("Separate: items after separation are not availabile in the set.") + } +} + +func TestSet_RaceAdd(t *testing.T) { + // Create two sets. Add concurrently items to each of them. Remove from the + // other one. + // "go test -race" should detect this if the library is not thread-safe. + s := New() + u := New() + + go func() { + for i := 0; i < 1000; i++ { + item := "item" + strconv.Itoa(i) + go func(i int) { + s.Add(item) + u.Add(item) + }(i) + } + }() + + for i := 0; i < 1000; i++ { + item := "item" + strconv.Itoa(i) + go func(i int) { + s.Add(item) + u.Add(item) + }(i) + } +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/.travis.yml b/docs/generator/vendor/gopkg.in/yaml.v2/.travis.yml new file mode 100644 index 0000000..004172a --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/.travis.yml @@ -0,0 +1,9 @@ +language: go + +go: + - 1.4 + - 1.5 + - 1.6 + - tip + +go_import_path: gopkg.in/yaml.v2 diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/LICENSE b/docs/generator/vendor/gopkg.in/yaml.v2/LICENSE new file mode 100644 index 0000000..866d74a --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/LICENSE @@ -0,0 +1,13 @@ +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/LICENSE.libyaml b/docs/generator/vendor/gopkg.in/yaml.v2/LICENSE.libyaml new file mode 100644 index 0000000..8da58fb --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/LICENSE.libyaml @@ -0,0 +1,31 @@ +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original copyright and license: + + apic.go + emitterc.go + parserc.go + readerc.go + scannerc.go + writerc.go + yamlh.go + yamlprivateh.go + +Copyright (c) 2006 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/README.md b/docs/generator/vendor/gopkg.in/yaml.v2/README.md new file mode 100644 index 0000000..7a512d6 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/README.md @@ -0,0 +1,133 @@ +# YAML support for the Go language + +Introduction +------------ + +The yaml package enables Go programs to comfortably encode and decode YAML +values. It was developed within [Canonical](https://www.canonical.com) as +part of the [juju](https://juju.ubuntu.com) project, and is based on a +pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) +C library to parse and generate YAML data quickly and reliably. + +Compatibility +------------- + +The yaml package supports most of YAML 1.1 and 1.2, including support for +anchors, tags, map merging, etc. Multi-document unmarshalling is not yet +implemented, and base-60 floats from YAML 1.1 are purposefully not +supported since they're a poor design and are gone in YAML 1.2. + +Installation and usage +---------------------- + +The import path for the package is *gopkg.in/yaml.v2*. + +To install it, run: + + go get gopkg.in/yaml.v2 + +API documentation +----------------- + +If opened in a browser, the import path itself leads to the API documentation: + + * [https://gopkg.in/yaml.v2](https://gopkg.in/yaml.v2) + +API stability +------------- + +The package API for yaml v2 will remain stable as described in [gopkg.in](https://gopkg.in). + + +License +------- + +The yaml package is licensed under the Apache License 2.0. Please see the LICENSE file for details. + + +Example +------- + +Some more examples can be found in the "examples" folder. + +```Go +package main + +import ( + "fmt" + "log" + + "gopkg.in/yaml.v2" +) + +var data = ` +a: Easy! +b: + c: 2 + d: [3, 4] +` + +type T struct { + A string + B struct { + RenamedC int `yaml:"c"` + D []int `yaml:",flow"` + } +} + +func main() { + t := T{} + + err := yaml.Unmarshal([]byte(data), &t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t:\n%v\n\n", t) + + d, err := yaml.Marshal(&t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t dump:\n%s\n\n", string(d)) + + m := make(map[interface{}]interface{}) + + err = yaml.Unmarshal([]byte(data), &m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m:\n%v\n\n", m) + + d, err = yaml.Marshal(&m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m dump:\n%s\n\n", string(d)) +} +``` + +This example will generate the following output: + +``` +--- t: +{Easy! {2 [3 4]}} + +--- t dump: +a: Easy! +b: + c: 2 + d: [3, 4] + + +--- m: +map[a:Easy! b:map[c:2 d:[3 4]]] + +--- m dump: +a: Easy! +b: + c: 2 + d: + - 3 + - 4 +``` + diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/apic.go b/docs/generator/vendor/gopkg.in/yaml.v2/apic.go new file mode 100644 index 0000000..95ec014 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/apic.go @@ -0,0 +1,742 @@ +package yaml + +import ( + "io" + "os" +) + +func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { + //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) + + // Check if we can move the queue at the beginning of the buffer. + if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { + if parser.tokens_head != len(parser.tokens) { + copy(parser.tokens, parser.tokens[parser.tokens_head:]) + } + parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] + parser.tokens_head = 0 + } + parser.tokens = append(parser.tokens, *token) + if pos < 0 { + return + } + copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) + parser.tokens[parser.tokens_head+pos] = *token +} + +// Create a new parser object. +func yaml_parser_initialize(parser *yaml_parser_t) bool { + *parser = yaml_parser_t{ + raw_buffer: make([]byte, 0, input_raw_buffer_size), + buffer: make([]byte, 0, input_buffer_size), + } + return true +} + +// Destroy a parser object. +func yaml_parser_delete(parser *yaml_parser_t) { + *parser = yaml_parser_t{} +} + +// String read handler. +func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + if parser.input_pos == len(parser.input) { + return 0, io.EOF + } + n = copy(buffer, parser.input[parser.input_pos:]) + parser.input_pos += n + return n, nil +} + +// File read handler. +func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { + return parser.input_file.Read(buffer) +} + +// Set a string input. +func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_string_read_handler + parser.input = input + parser.input_pos = 0 +} + +// Set a file input. +func yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) { + if parser.read_handler != nil { + panic("must set the input source only once") + } + parser.read_handler = yaml_file_read_handler + parser.input_file = file +} + +// Set the source encoding. +func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { + if parser.encoding != yaml_ANY_ENCODING { + panic("must set the encoding only once") + } + parser.encoding = encoding +} + +// Create a new emitter object. +func yaml_emitter_initialize(emitter *yaml_emitter_t) bool { + *emitter = yaml_emitter_t{ + buffer: make([]byte, output_buffer_size), + raw_buffer: make([]byte, 0, output_raw_buffer_size), + states: make([]yaml_emitter_state_t, 0, initial_stack_size), + events: make([]yaml_event_t, 0, initial_queue_size), + } + return true +} + +// Destroy an emitter object. +func yaml_emitter_delete(emitter *yaml_emitter_t) { + *emitter = yaml_emitter_t{} +} + +// String write handler. +func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + *emitter.output_buffer = append(*emitter.output_buffer, buffer...) + return nil +} + +// File write handler. +func yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error { + _, err := emitter.output_file.Write(buffer) + return err +} + +// Set a string output. +func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_string_write_handler + emitter.output_buffer = output_buffer +} + +// Set a file output. +func yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) { + if emitter.write_handler != nil { + panic("must set the output target only once") + } + emitter.write_handler = yaml_file_write_handler + emitter.output_file = file +} + +// Set the output encoding. +func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { + if emitter.encoding != yaml_ANY_ENCODING { + panic("must set the output encoding only once") + } + emitter.encoding = encoding +} + +// Set the canonical output style. +func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { + emitter.canonical = canonical +} + +//// Set the indentation increment. +func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { + if indent < 2 || indent > 9 { + indent = 2 + } + emitter.best_indent = indent +} + +// Set the preferred line width. +func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { + if width < 0 { + width = -1 + } + emitter.best_width = width +} + +// Set if unescaped non-ASCII characters are allowed. +func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { + emitter.unicode = unicode +} + +// Set the preferred line break character. +func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { + emitter.line_break = line_break +} + +///* +// * Destroy a token object. +// */ +// +//YAML_DECLARE(void) +//yaml_token_delete(yaml_token_t *token) +//{ +// assert(token); // Non-NULL token object expected. +// +// switch (token.type) +// { +// case YAML_TAG_DIRECTIVE_TOKEN: +// yaml_free(token.data.tag_directive.handle); +// yaml_free(token.data.tag_directive.prefix); +// break; +// +// case YAML_ALIAS_TOKEN: +// yaml_free(token.data.alias.value); +// break; +// +// case YAML_ANCHOR_TOKEN: +// yaml_free(token.data.anchor.value); +// break; +// +// case YAML_TAG_TOKEN: +// yaml_free(token.data.tag.handle); +// yaml_free(token.data.tag.suffix); +// break; +// +// case YAML_SCALAR_TOKEN: +// yaml_free(token.data.scalar.value); +// break; +// +// default: +// break; +// } +// +// memset(token, 0, sizeof(yaml_token_t)); +//} +// +///* +// * Check if a string is a valid UTF-8 sequence. +// * +// * Check 'reader.c' for more details on UTF-8 encoding. +// */ +// +//static int +//yaml_check_utf8(yaml_char_t *start, size_t length) +//{ +// yaml_char_t *end = start+length; +// yaml_char_t *pointer = start; +// +// while (pointer < end) { +// unsigned char octet; +// unsigned int width; +// unsigned int value; +// size_t k; +// +// octet = pointer[0]; +// width = (octet & 0x80) == 0x00 ? 1 : +// (octet & 0xE0) == 0xC0 ? 2 : +// (octet & 0xF0) == 0xE0 ? 3 : +// (octet & 0xF8) == 0xF0 ? 4 : 0; +// value = (octet & 0x80) == 0x00 ? octet & 0x7F : +// (octet & 0xE0) == 0xC0 ? octet & 0x1F : +// (octet & 0xF0) == 0xE0 ? octet & 0x0F : +// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; +// if (!width) return 0; +// if (pointer+width > end) return 0; +// for (k = 1; k < width; k ++) { +// octet = pointer[k]; +// if ((octet & 0xC0) != 0x80) return 0; +// value = (value << 6) + (octet & 0x3F); +// } +// if (!((width == 1) || +// (width == 2 && value >= 0x80) || +// (width == 3 && value >= 0x800) || +// (width == 4 && value >= 0x10000))) return 0; +// +// pointer += width; +// } +// +// return 1; +//} +// + +// Create STREAM-START. +func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool { + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + encoding: encoding, + } + return true +} + +// Create STREAM-END. +func yaml_stream_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + } + return true +} + +// Create DOCUMENT-START. +func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t, + tag_directives []yaml_tag_directive_t, implicit bool) bool { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: implicit, + } + return true +} + +// Create DOCUMENT-END. +func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool { + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + implicit: implicit, + } + return true +} + +///* +// * Create ALIAS. +// */ +// +//YAML_DECLARE(int) +//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t) +//{ +// mark yaml_mark_t = { 0, 0, 0 } +// anchor_copy *yaml_char_t = NULL +// +// assert(event) // Non-NULL event object is expected. +// assert(anchor) // Non-NULL anchor is expected. +// +// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0 +// +// anchor_copy = yaml_strdup(anchor) +// if (!anchor_copy) +// return 0 +// +// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark) +// +// return 1 +//} + +// Create SCALAR. +func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + anchor: anchor, + tag: tag, + value: value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-START. +func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create SEQUENCE-END. +func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + } + return true +} + +// Create MAPPING-START. +func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool { + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(style), + } + return true +} + +// Create MAPPING-END. +func yaml_mapping_end_event_initialize(event *yaml_event_t) bool { + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + } + return true +} + +// Destroy an event object. +func yaml_event_delete(event *yaml_event_t) { + *event = yaml_event_t{} +} + +///* +// * Create a document object. +// */ +// +//YAML_DECLARE(int) +//yaml_document_initialize(document *yaml_document_t, +// version_directive *yaml_version_directive_t, +// tag_directives_start *yaml_tag_directive_t, +// tag_directives_end *yaml_tag_directive_t, +// start_implicit int, end_implicit int) +//{ +// struct { +// error yaml_error_type_t +// } context +// struct { +// start *yaml_node_t +// end *yaml_node_t +// top *yaml_node_t +// } nodes = { NULL, NULL, NULL } +// version_directive_copy *yaml_version_directive_t = NULL +// struct { +// start *yaml_tag_directive_t +// end *yaml_tag_directive_t +// top *yaml_tag_directive_t +// } tag_directives_copy = { NULL, NULL, NULL } +// value yaml_tag_directive_t = { NULL, NULL } +// mark yaml_mark_t = { 0, 0, 0 } +// +// assert(document) // Non-NULL document object is expected. +// assert((tag_directives_start && tag_directives_end) || +// (tag_directives_start == tag_directives_end)) +// // Valid tag directives are expected. +// +// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error +// +// if (version_directive) { +// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) +// if (!version_directive_copy) goto error +// version_directive_copy.major = version_directive.major +// version_directive_copy.minor = version_directive.minor +// } +// +// if (tag_directives_start != tag_directives_end) { +// tag_directive *yaml_tag_directive_t +// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) +// goto error +// for (tag_directive = tag_directives_start +// tag_directive != tag_directives_end; tag_directive ++) { +// assert(tag_directive.handle) +// assert(tag_directive.prefix) +// if (!yaml_check_utf8(tag_directive.handle, +// strlen((char *)tag_directive.handle))) +// goto error +// if (!yaml_check_utf8(tag_directive.prefix, +// strlen((char *)tag_directive.prefix))) +// goto error +// value.handle = yaml_strdup(tag_directive.handle) +// value.prefix = yaml_strdup(tag_directive.prefix) +// if (!value.handle || !value.prefix) goto error +// if (!PUSH(&context, tag_directives_copy, value)) +// goto error +// value.handle = NULL +// value.prefix = NULL +// } +// } +// +// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, +// tag_directives_copy.start, tag_directives_copy.top, +// start_implicit, end_implicit, mark, mark) +// +// return 1 +// +//error: +// STACK_DEL(&context, nodes) +// yaml_free(version_directive_copy) +// while (!STACK_EMPTY(&context, tag_directives_copy)) { +// value yaml_tag_directive_t = POP(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// } +// STACK_DEL(&context, tag_directives_copy) +// yaml_free(value.handle) +// yaml_free(value.prefix) +// +// return 0 +//} +// +///* +// * Destroy a document object. +// */ +// +//YAML_DECLARE(void) +//yaml_document_delete(document *yaml_document_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// tag_directive *yaml_tag_directive_t +// +// context.error = YAML_NO_ERROR // Eliminate a compliler warning. +// +// assert(document) // Non-NULL document object is expected. +// +// while (!STACK_EMPTY(&context, document.nodes)) { +// node yaml_node_t = POP(&context, document.nodes) +// yaml_free(node.tag) +// switch (node.type) { +// case YAML_SCALAR_NODE: +// yaml_free(node.data.scalar.value) +// break +// case YAML_SEQUENCE_NODE: +// STACK_DEL(&context, node.data.sequence.items) +// break +// case YAML_MAPPING_NODE: +// STACK_DEL(&context, node.data.mapping.pairs) +// break +// default: +// assert(0) // Should not happen. +// } +// } +// STACK_DEL(&context, document.nodes) +// +// yaml_free(document.version_directive) +// for (tag_directive = document.tag_directives.start +// tag_directive != document.tag_directives.end +// tag_directive++) { +// yaml_free(tag_directive.handle) +// yaml_free(tag_directive.prefix) +// } +// yaml_free(document.tag_directives.start) +// +// memset(document, 0, sizeof(yaml_document_t)) +//} +// +///** +// * Get a document node. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_node(document *yaml_document_t, index int) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (index > 0 && document.nodes.start + index <= document.nodes.top) { +// return document.nodes.start + index - 1 +// } +// return NULL +//} +// +///** +// * Get the root object. +// */ +// +//YAML_DECLARE(yaml_node_t *) +//yaml_document_get_root_node(document *yaml_document_t) +//{ +// assert(document) // Non-NULL document object is expected. +// +// if (document.nodes.top != document.nodes.start) { +// return document.nodes.start +// } +// return NULL +//} +// +///* +// * Add a scalar node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_scalar(document *yaml_document_t, +// tag *yaml_char_t, value *yaml_char_t, length int, +// style yaml_scalar_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// value_copy *yaml_char_t = NULL +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// assert(value) // Non-NULL value is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (length < 0) { +// length = strlen((char *)value) +// } +// +// if (!yaml_check_utf8(value, length)) goto error +// value_copy = yaml_malloc(length+1) +// if (!value_copy) goto error +// memcpy(value_copy, value, length) +// value_copy[length] = '\0' +// +// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// yaml_free(tag_copy) +// yaml_free(value_copy) +// +// return 0 +//} +// +///* +// * Add a sequence node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_sequence(document *yaml_document_t, +// tag *yaml_char_t, style yaml_sequence_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_item_t +// end *yaml_node_item_t +// top *yaml_node_item_t +// } items = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error +// +// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, items) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Add a mapping node to a document. +// */ +// +//YAML_DECLARE(int) +//yaml_document_add_mapping(document *yaml_document_t, +// tag *yaml_char_t, style yaml_mapping_style_t) +//{ +// struct { +// error yaml_error_type_t +// } context +// mark yaml_mark_t = { 0, 0, 0 } +// tag_copy *yaml_char_t = NULL +// struct { +// start *yaml_node_pair_t +// end *yaml_node_pair_t +// top *yaml_node_pair_t +// } pairs = { NULL, NULL, NULL } +// node yaml_node_t +// +// assert(document) // Non-NULL document object is expected. +// +// if (!tag) { +// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG +// } +// +// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error +// tag_copy = yaml_strdup(tag) +// if (!tag_copy) goto error +// +// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error +// +// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, +// style, mark, mark) +// if (!PUSH(&context, document.nodes, node)) goto error +// +// return document.nodes.top - document.nodes.start +// +//error: +// STACK_DEL(&context, pairs) +// yaml_free(tag_copy) +// +// return 0 +//} +// +///* +// * Append an item to a sequence node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_sequence_item(document *yaml_document_t, +// sequence int, item int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// assert(document) // Non-NULL document is required. +// assert(sequence > 0 +// && document.nodes.start + sequence <= document.nodes.top) +// // Valid sequence id is required. +// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) +// // A sequence node is required. +// assert(item > 0 && document.nodes.start + item <= document.nodes.top) +// // Valid item id is required. +// +// if (!PUSH(&context, +// document.nodes.start[sequence-1].data.sequence.items, item)) +// return 0 +// +// return 1 +//} +// +///* +// * Append a pair of a key and a value to a mapping node. +// */ +// +//YAML_DECLARE(int) +//yaml_document_append_mapping_pair(document *yaml_document_t, +// mapping int, key int, value int) +//{ +// struct { +// error yaml_error_type_t +// } context +// +// pair yaml_node_pair_t +// +// assert(document) // Non-NULL document is required. +// assert(mapping > 0 +// && document.nodes.start + mapping <= document.nodes.top) +// // Valid mapping id is required. +// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) +// // A mapping node is required. +// assert(key > 0 && document.nodes.start + key <= document.nodes.top) +// // Valid key id is required. +// assert(value > 0 && document.nodes.start + value <= document.nodes.top) +// // Valid value id is required. +// +// pair.key = key +// pair.value = value +// +// if (!PUSH(&context, +// document.nodes.start[mapping-1].data.mapping.pairs, pair)) +// return 0 +// +// return 1 +//} +// +// diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/decode.go b/docs/generator/vendor/gopkg.in/yaml.v2/decode.go new file mode 100644 index 0000000..db1f5f2 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/decode.go @@ -0,0 +1,685 @@ +package yaml + +import ( + "encoding" + "encoding/base64" + "fmt" + "math" + "reflect" + "strconv" + "time" +) + +const ( + documentNode = 1 << iota + mappingNode + sequenceNode + scalarNode + aliasNode +) + +type node struct { + kind int + line, column int + tag string + value string + implicit bool + children []*node + anchors map[string]*node +} + +// ---------------------------------------------------------------------------- +// Parser, produces a node tree out of a libyaml event stream. + +type parser struct { + parser yaml_parser_t + event yaml_event_t + doc *node +} + +func newParser(b []byte) *parser { + p := parser{} + if !yaml_parser_initialize(&p.parser) { + panic("failed to initialize YAML emitter") + } + + if len(b) == 0 { + b = []byte{'\n'} + } + + yaml_parser_set_input_string(&p.parser, b) + + p.skip() + if p.event.typ != yaml_STREAM_START_EVENT { + panic("expected stream start event, got " + strconv.Itoa(int(p.event.typ))) + } + p.skip() + return &p +} + +func (p *parser) destroy() { + if p.event.typ != yaml_NO_EVENT { + yaml_event_delete(&p.event) + } + yaml_parser_delete(&p.parser) +} + +func (p *parser) skip() { + if p.event.typ != yaml_NO_EVENT { + if p.event.typ == yaml_STREAM_END_EVENT { + failf("attempted to go past the end of stream; corrupted value?") + } + yaml_event_delete(&p.event) + } + if !yaml_parser_parse(&p.parser, &p.event) { + p.fail() + } +} + +func (p *parser) fail() { + var where string + var line int + if p.parser.problem_mark.line != 0 { + line = p.parser.problem_mark.line + } else if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + } + if line != 0 { + where = "line " + strconv.Itoa(line) + ": " + } + var msg string + if len(p.parser.problem) > 0 { + msg = p.parser.problem + } else { + msg = "unknown problem parsing YAML content" + } + failf("%s%s", where, msg) +} + +func (p *parser) anchor(n *node, anchor []byte) { + if anchor != nil { + p.doc.anchors[string(anchor)] = n + } +} + +func (p *parser) parse() *node { + switch p.event.typ { + case yaml_SCALAR_EVENT: + return p.scalar() + case yaml_ALIAS_EVENT: + return p.alias() + case yaml_MAPPING_START_EVENT: + return p.mapping() + case yaml_SEQUENCE_START_EVENT: + return p.sequence() + case yaml_DOCUMENT_START_EVENT: + return p.document() + case yaml_STREAM_END_EVENT: + // Happens when attempting to decode an empty buffer. + return nil + default: + panic("attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ))) + } +} + +func (p *parser) node(kind int) *node { + return &node{ + kind: kind, + line: p.event.start_mark.line, + column: p.event.start_mark.column, + } +} + +func (p *parser) document() *node { + n := p.node(documentNode) + n.anchors = make(map[string]*node) + p.doc = n + p.skip() + n.children = append(n.children, p.parse()) + if p.event.typ != yaml_DOCUMENT_END_EVENT { + panic("expected end of document event but got " + strconv.Itoa(int(p.event.typ))) + } + p.skip() + return n +} + +func (p *parser) alias() *node { + n := p.node(aliasNode) + n.value = string(p.event.anchor) + p.skip() + return n +} + +func (p *parser) scalar() *node { + n := p.node(scalarNode) + n.value = string(p.event.value) + n.tag = string(p.event.tag) + n.implicit = p.event.implicit + p.anchor(n, p.event.anchor) + p.skip() + return n +} + +func (p *parser) sequence() *node { + n := p.node(sequenceNode) + p.anchor(n, p.event.anchor) + p.skip() + for p.event.typ != yaml_SEQUENCE_END_EVENT { + n.children = append(n.children, p.parse()) + } + p.skip() + return n +} + +func (p *parser) mapping() *node { + n := p.node(mappingNode) + p.anchor(n, p.event.anchor) + p.skip() + for p.event.typ != yaml_MAPPING_END_EVENT { + n.children = append(n.children, p.parse(), p.parse()) + } + p.skip() + return n +} + +// ---------------------------------------------------------------------------- +// Decoder, unmarshals a node into a provided value. + +type decoder struct { + doc *node + aliases map[string]bool + mapType reflect.Type + terrors []string + strict bool +} + +var ( + mapItemType = reflect.TypeOf(MapItem{}) + durationType = reflect.TypeOf(time.Duration(0)) + defaultMapType = reflect.TypeOf(map[interface{}]interface{}{}) + ifaceType = defaultMapType.Elem() +) + +func newDecoder(strict bool) *decoder { + d := &decoder{mapType: defaultMapType, strict: strict} + d.aliases = make(map[string]bool) + return d +} + +func (d *decoder) terror(n *node, tag string, out reflect.Value) { + if n.tag != "" { + tag = n.tag + } + value := n.value + if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG { + if len(value) > 10 { + value = " `" + value[:7] + "...`" + } else { + value = " `" + value + "`" + } + } + d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type())) +} + +func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { + terrlen := len(d.terrors) + err := u.UnmarshalYAML(func(v interface{}) (err error) { + defer handleErr(&err) + d.unmarshal(n, reflect.ValueOf(v)) + if len(d.terrors) > terrlen { + issues := d.terrors[terrlen:] + d.terrors = d.terrors[:terrlen] + return &TypeError{issues} + } + return nil + }) + if e, ok := err.(*TypeError); ok { + d.terrors = append(d.terrors, e.Errors...) + return false + } + if err != nil { + fail(err) + } + return true +} + +// d.prepare initializes and dereferences pointers and calls UnmarshalYAML +// if a value is found to implement it. +// It returns the initialized and dereferenced out value, whether +// unmarshalling was already done by UnmarshalYAML, and if so whether +// its types unmarshalled appropriately. +// +// If n holds a null value, prepare returns before doing anything. +func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "" && n.implicit) { + return out, false, false + } + again := true + for again { + again = false + if out.Kind() == reflect.Ptr { + if out.IsNil() { + out.Set(reflect.New(out.Type().Elem())) + } + out = out.Elem() + again = true + } + if out.CanAddr() { + if u, ok := out.Addr().Interface().(Unmarshaler); ok { + good = d.callUnmarshaler(n, u) + return out, true, good + } + } + } + return out, false, false +} + +func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) { + switch n.kind { + case documentNode: + return d.document(n, out) + case aliasNode: + return d.alias(n, out) + } + out, unmarshaled, good := d.prepare(n, out) + if unmarshaled { + return good + } + switch n.kind { + case scalarNode: + good = d.scalar(n, out) + case mappingNode: + good = d.mapping(n, out) + case sequenceNode: + good = d.sequence(n, out) + default: + panic("internal error: unknown node kind: " + strconv.Itoa(n.kind)) + } + return good +} + +func (d *decoder) document(n *node, out reflect.Value) (good bool) { + if len(n.children) == 1 { + d.doc = n + d.unmarshal(n.children[0], out) + return true + } + return false +} + +func (d *decoder) alias(n *node, out reflect.Value) (good bool) { + an, ok := d.doc.anchors[n.value] + if !ok { + failf("unknown anchor '%s' referenced", n.value) + } + if d.aliases[n.value] { + failf("anchor '%s' value contains itself", n.value) + } + d.aliases[n.value] = true + good = d.unmarshal(an, out) + delete(d.aliases, n.value) + return good +} + +var zeroValue reflect.Value + +func resetMap(out reflect.Value) { + for _, k := range out.MapKeys() { + out.SetMapIndex(k, zeroValue) + } +} + +func (d *decoder) scalar(n *node, out reflect.Value) (good bool) { + var tag string + var resolved interface{} + if n.tag == "" && !n.implicit { + tag = yaml_STR_TAG + resolved = n.value + } else { + tag, resolved = resolve(n.tag, n.value) + if tag == yaml_BINARY_TAG { + data, err := base64.StdEncoding.DecodeString(resolved.(string)) + if err != nil { + failf("!!binary value contains invalid base64 data") + } + resolved = string(data) + } + } + if resolved == nil { + if out.Kind() == reflect.Map && !out.CanAddr() { + resetMap(out) + } else { + out.Set(reflect.Zero(out.Type())) + } + return true + } + if s, ok := resolved.(string); ok && out.CanAddr() { + if u, ok := out.Addr().Interface().(encoding.TextUnmarshaler); ok { + err := u.UnmarshalText([]byte(s)) + if err != nil { + fail(err) + } + return true + } + } + switch out.Kind() { + case reflect.String: + if tag == yaml_BINARY_TAG { + out.SetString(resolved.(string)) + good = true + } else if resolved != nil { + out.SetString(n.value) + good = true + } + case reflect.Interface: + if resolved == nil { + out.Set(reflect.Zero(out.Type())) + } else { + out.Set(reflect.ValueOf(resolved)) + } + good = true + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + switch resolved := resolved.(type) { + case int: + if !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + good = true + } + case int64: + if !out.OverflowInt(resolved) { + out.SetInt(resolved) + good = true + } + case uint64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + good = true + } + case float64: + if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { + out.SetInt(int64(resolved)) + good = true + } + case string: + if out.Type() == durationType { + d, err := time.ParseDuration(resolved) + if err == nil { + out.SetInt(int64(d)) + good = true + } + } + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + switch resolved := resolved.(type) { + case int: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + case int64: + if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + case uint64: + if !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + case float64: + if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { + out.SetUint(uint64(resolved)) + good = true + } + } + case reflect.Bool: + switch resolved := resolved.(type) { + case bool: + out.SetBool(resolved) + good = true + } + case reflect.Float32, reflect.Float64: + switch resolved := resolved.(type) { + case int: + out.SetFloat(float64(resolved)) + good = true + case int64: + out.SetFloat(float64(resolved)) + good = true + case uint64: + out.SetFloat(float64(resolved)) + good = true + case float64: + out.SetFloat(resolved) + good = true + } + case reflect.Ptr: + if out.Type().Elem() == reflect.TypeOf(resolved) { + // TODO DOes this make sense? When is out a Ptr except when decoding a nil value? + elem := reflect.New(out.Type().Elem()) + elem.Elem().Set(reflect.ValueOf(resolved)) + out.Set(elem) + good = true + } + } + if !good { + d.terror(n, tag, out) + } + return good +} + +func settableValueOf(i interface{}) reflect.Value { + v := reflect.ValueOf(i) + sv := reflect.New(v.Type()).Elem() + sv.Set(v) + return sv +} + +func (d *decoder) sequence(n *node, out reflect.Value) (good bool) { + l := len(n.children) + + var iface reflect.Value + switch out.Kind() { + case reflect.Slice: + out.Set(reflect.MakeSlice(out.Type(), l, l)) + case reflect.Interface: + // No type hints. Will have to use a generic sequence. + iface = out + out = settableValueOf(make([]interface{}, l)) + default: + d.terror(n, yaml_SEQ_TAG, out) + return false + } + et := out.Type().Elem() + + j := 0 + for i := 0; i < l; i++ { + e := reflect.New(et).Elem() + if ok := d.unmarshal(n.children[i], e); ok { + out.Index(j).Set(e) + j++ + } + } + out.Set(out.Slice(0, j)) + if iface.IsValid() { + iface.Set(out) + } + return true +} + +func (d *decoder) mapping(n *node, out reflect.Value) (good bool) { + switch out.Kind() { + case reflect.Struct: + return d.mappingStruct(n, out) + case reflect.Slice: + return d.mappingSlice(n, out) + case reflect.Map: + // okay + case reflect.Interface: + if d.mapType.Kind() == reflect.Map { + iface := out + out = reflect.MakeMap(d.mapType) + iface.Set(out) + } else { + slicev := reflect.New(d.mapType).Elem() + if !d.mappingSlice(n, slicev) { + return false + } + out.Set(slicev) + return true + } + default: + d.terror(n, yaml_MAP_TAG, out) + return false + } + outt := out.Type() + kt := outt.Key() + et := outt.Elem() + + mapType := d.mapType + if outt.Key() == ifaceType && outt.Elem() == ifaceType { + d.mapType = outt + } + + if out.IsNil() { + out.Set(reflect.MakeMap(outt)) + } + l := len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + k := reflect.New(kt).Elem() + if d.unmarshal(n.children[i], k) { + kkind := k.Kind() + if kkind == reflect.Interface { + kkind = k.Elem().Kind() + } + if kkind == reflect.Map || kkind == reflect.Slice { + failf("invalid map key: %#v", k.Interface()) + } + e := reflect.New(et).Elem() + if d.unmarshal(n.children[i+1], e) { + out.SetMapIndex(k, e) + } + } + } + d.mapType = mapType + return true +} + +func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) { + outt := out.Type() + if outt.Elem() != mapItemType { + d.terror(n, yaml_MAP_TAG, out) + return false + } + + mapType := d.mapType + d.mapType = outt + + var slice []MapItem + var l = len(n.children) + for i := 0; i < l; i += 2 { + if isMerge(n.children[i]) { + d.merge(n.children[i+1], out) + continue + } + item := MapItem{} + k := reflect.ValueOf(&item.Key).Elem() + if d.unmarshal(n.children[i], k) { + v := reflect.ValueOf(&item.Value).Elem() + if d.unmarshal(n.children[i+1], v) { + slice = append(slice, item) + } + } + } + out.Set(reflect.ValueOf(slice)) + d.mapType = mapType + return true +} + +func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { + sinfo, err := getStructInfo(out.Type()) + if err != nil { + panic(err) + } + name := settableValueOf("") + l := len(n.children) + + var inlineMap reflect.Value + var elemType reflect.Type + if sinfo.InlineMap != -1 { + inlineMap = out.Field(sinfo.InlineMap) + inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) + elemType = inlineMap.Type().Elem() + } + + for i := 0; i < l; i += 2 { + ni := n.children[i] + if isMerge(ni) { + d.merge(n.children[i+1], out) + continue + } + if !d.unmarshal(ni, name) { + continue + } + if info, ok := sinfo.FieldsMap[name.String()]; ok { + var field reflect.Value + if info.Inline == nil { + field = out.Field(info.Num) + } else { + field = out.FieldByIndex(info.Inline) + } + d.unmarshal(n.children[i+1], field) + } else if sinfo.InlineMap != -1 { + if inlineMap.IsNil() { + inlineMap.Set(reflect.MakeMap(inlineMap.Type())) + } + value := reflect.New(elemType).Elem() + d.unmarshal(n.children[i+1], value) + inlineMap.SetMapIndex(name, value) + } else if d.strict { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in struct %s", n.line+1, name.String(), out.Type())) + } + } + return true +} + +func failWantMap() { + failf("map merge requires map or sequence of maps as the value") +} + +func (d *decoder) merge(n *node, out reflect.Value) { + switch n.kind { + case mappingNode: + d.unmarshal(n, out) + case aliasNode: + an, ok := d.doc.anchors[n.value] + if ok && an.kind != mappingNode { + failWantMap() + } + d.unmarshal(n, out) + case sequenceNode: + // Step backwards as earlier nodes take precedence. + for i := len(n.children) - 1; i >= 0; i-- { + ni := n.children[i] + if ni.kind == aliasNode { + an, ok := d.doc.anchors[ni.value] + if ok && an.kind != mappingNode { + failWantMap() + } + } else if ni.kind != mappingNode { + failWantMap() + } + d.unmarshal(ni, out) + } + default: + failWantMap() + } +} + +func isMerge(n *node) bool { + return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG) +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/decode_test.go b/docs/generator/vendor/gopkg.in/yaml.v2/decode_test.go new file mode 100644 index 0000000..713b1ee --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/decode_test.go @@ -0,0 +1,1017 @@ +package yaml_test + +import ( + "errors" + . "gopkg.in/check.v1" + "gopkg.in/yaml.v2" + "math" + "net" + "reflect" + "strings" + "time" +) + +var unmarshalIntTest = 123 + +var unmarshalTests = []struct { + data string + value interface{} +}{ + { + "", + &struct{}{}, + }, { + "{}", &struct{}{}, + }, { + "v: hi", + map[string]string{"v": "hi"}, + }, { + "v: hi", map[string]interface{}{"v": "hi"}, + }, { + "v: true", + map[string]string{"v": "true"}, + }, { + "v: true", + map[string]interface{}{"v": true}, + }, { + "v: 10", + map[string]interface{}{"v": 10}, + }, { + "v: 0b10", + map[string]interface{}{"v": 2}, + }, { + "v: 0xA", + map[string]interface{}{"v": 10}, + }, { + "v: 4294967296", + map[string]int64{"v": 4294967296}, + }, { + "v: 0.1", + map[string]interface{}{"v": 0.1}, + }, { + "v: .1", + map[string]interface{}{"v": 0.1}, + }, { + "v: .Inf", + map[string]interface{}{"v": math.Inf(+1)}, + }, { + "v: -.Inf", + map[string]interface{}{"v": math.Inf(-1)}, + }, { + "v: -10", + map[string]interface{}{"v": -10}, + }, { + "v: -.1", + map[string]interface{}{"v": -0.1}, + }, + + // Simple values. + { + "123", + &unmarshalIntTest, + }, + + // Floats from spec + { + "canonical: 6.8523e+5", + map[string]interface{}{"canonical": 6.8523e+5}, + }, { + "expo: 685.230_15e+03", + map[string]interface{}{"expo": 685.23015e+03}, + }, { + "fixed: 685_230.15", + map[string]interface{}{"fixed": 685230.15}, + }, { + "neginf: -.inf", + map[string]interface{}{"neginf": math.Inf(-1)}, + }, { + "fixed: 685_230.15", + map[string]float64{"fixed": 685230.15}, + }, + //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported + //{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails. + + // Bools from spec + { + "canonical: y", + map[string]interface{}{"canonical": true}, + }, { + "answer: NO", + map[string]interface{}{"answer": false}, + }, { + "logical: True", + map[string]interface{}{"logical": true}, + }, { + "option: on", + map[string]interface{}{"option": true}, + }, { + "option: on", + map[string]bool{"option": true}, + }, + // Ints from spec + { + "canonical: 685230", + map[string]interface{}{"canonical": 685230}, + }, { + "decimal: +685_230", + map[string]interface{}{"decimal": 685230}, + }, { + "octal: 02472256", + map[string]interface{}{"octal": 685230}, + }, { + "hexa: 0x_0A_74_AE", + map[string]interface{}{"hexa": 685230}, + }, { + "bin: 0b1010_0111_0100_1010_1110", + map[string]interface{}{"bin": 685230}, + }, { + "bin: -0b101010", + map[string]interface{}{"bin": -42}, + }, { + "decimal: +685_230", + map[string]int{"decimal": 685230}, + }, + + //{"sexa: 190:20:30", map[string]interface{}{"sexa": 0}}, // Unsupported + + // Nulls from spec + { + "empty:", + map[string]interface{}{"empty": nil}, + }, { + "canonical: ~", + map[string]interface{}{"canonical": nil}, + }, { + "english: null", + map[string]interface{}{"english": nil}, + }, { + "~: null key", + map[interface{}]string{nil: "null key"}, + }, { + "empty:", + map[string]*bool{"empty": nil}, + }, + + // Flow sequence + { + "seq: [A,B]", + map[string]interface{}{"seq": []interface{}{"A", "B"}}, + }, { + "seq: [A,B,C,]", + map[string][]string{"seq": []string{"A", "B", "C"}}, + }, { + "seq: [A,1,C]", + map[string][]string{"seq": []string{"A", "1", "C"}}, + }, { + "seq: [A,1,C]", + map[string][]int{"seq": []int{1}}, + }, { + "seq: [A,1,C]", + map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, + }, + // Block sequence + { + "seq:\n - A\n - B", + map[string]interface{}{"seq": []interface{}{"A", "B"}}, + }, { + "seq:\n - A\n - B\n - C", + map[string][]string{"seq": []string{"A", "B", "C"}}, + }, { + "seq:\n - A\n - 1\n - C", + map[string][]string{"seq": []string{"A", "1", "C"}}, + }, { + "seq:\n - A\n - 1\n - C", + map[string][]int{"seq": []int{1}}, + }, { + "seq:\n - A\n - 1\n - C", + map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, + }, + + // Literal block scalar + { + "scalar: | # Comment\n\n literal\n\n \ttext\n\n", + map[string]string{"scalar": "\nliteral\n\n\ttext\n"}, + }, + + // Folded block scalar + { + "scalar: > # Comment\n\n folded\n line\n \n next\n line\n * one\n * two\n\n last\n line\n\n", + map[string]string{"scalar": "\nfolded line\nnext line\n * one\n * two\n\nlast line\n"}, + }, + + // Map inside interface with no type hints. + { + "a: {b: c}", + map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, + }, + + // Structs and type conversions. + { + "hello: world", + &struct{ Hello string }{"world"}, + }, { + "a: {b: c}", + &struct{ A struct{ B string } }{struct{ B string }{"c"}}, + }, { + "a: {b: c}", + &struct{ A *struct{ B string } }{&struct{ B string }{"c"}}, + }, { + "a: {b: c}", + &struct{ A map[string]string }{map[string]string{"b": "c"}}, + }, { + "a: {b: c}", + &struct{ A *map[string]string }{&map[string]string{"b": "c"}}, + }, { + "a:", + &struct{ A map[string]string }{}, + }, { + "a: 1", + &struct{ A int }{1}, + }, { + "a: 1", + &struct{ A float64 }{1}, + }, { + "a: 1.0", + &struct{ A int }{1}, + }, { + "a: 1.0", + &struct{ A uint }{1}, + }, { + "a: [1, 2]", + &struct{ A []int }{[]int{1, 2}}, + }, { + "a: 1", + &struct{ B int }{0}, + }, { + "a: 1", + &struct { + B int "a" + }{1}, + }, { + "a: y", + &struct{ A bool }{true}, + }, + + // Some cross type conversions + { + "v: 42", + map[string]uint{"v": 42}, + }, { + "v: -42", + map[string]uint{}, + }, { + "v: 4294967296", + map[string]uint64{"v": 4294967296}, + }, { + "v: -4294967296", + map[string]uint64{}, + }, + + // int + { + "int_max: 2147483647", + map[string]int{"int_max": math.MaxInt32}, + }, + { + "int_min: -2147483648", + map[string]int{"int_min": math.MinInt32}, + }, + { + "int_overflow: 9223372036854775808", // math.MaxInt64 + 1 + map[string]int{}, + }, + + // int64 + { + "int64_max: 9223372036854775807", + map[string]int64{"int64_max": math.MaxInt64}, + }, + { + "int64_max_base2: 0b111111111111111111111111111111111111111111111111111111111111111", + map[string]int64{"int64_max_base2": math.MaxInt64}, + }, + { + "int64_min: -9223372036854775808", + map[string]int64{"int64_min": math.MinInt64}, + }, + { + "int64_neg_base2: -0b111111111111111111111111111111111111111111111111111111111111111", + map[string]int64{"int64_neg_base2": -math.MaxInt64}, + }, + { + "int64_overflow: 9223372036854775808", // math.MaxInt64 + 1 + map[string]int64{}, + }, + + // uint + { + "uint_min: 0", + map[string]uint{"uint_min": 0}, + }, + { + "uint_max: 4294967295", + map[string]uint{"uint_max": math.MaxUint32}, + }, + { + "uint_underflow: -1", + map[string]uint{}, + }, + + // uint64 + { + "uint64_min: 0", + map[string]uint{"uint64_min": 0}, + }, + { + "uint64_max: 18446744073709551615", + map[string]uint64{"uint64_max": math.MaxUint64}, + }, + { + "uint64_max_base2: 0b1111111111111111111111111111111111111111111111111111111111111111", + map[string]uint64{"uint64_max_base2": math.MaxUint64}, + }, + { + "uint64_maxint64: 9223372036854775807", + map[string]uint64{"uint64_maxint64": math.MaxInt64}, + }, + { + "uint64_underflow: -1", + map[string]uint64{}, + }, + + // float32 + { + "float32_max: 3.40282346638528859811704183484516925440e+38", + map[string]float32{"float32_max": math.MaxFloat32}, + }, + { + "float32_nonzero: 1.401298464324817070923729583289916131280e-45", + map[string]float32{"float32_nonzero": math.SmallestNonzeroFloat32}, + }, + { + "float32_maxuint64: 18446744073709551615", + map[string]float32{"float32_maxuint64": float32(math.MaxUint64)}, + }, + { + "float32_maxuint64+1: 18446744073709551616", + map[string]float32{"float32_maxuint64+1": float32(math.MaxUint64 + 1)}, + }, + + // float64 + { + "float64_max: 1.797693134862315708145274237317043567981e+308", + map[string]float64{"float64_max": math.MaxFloat64}, + }, + { + "float64_nonzero: 4.940656458412465441765687928682213723651e-324", + map[string]float64{"float64_nonzero": math.SmallestNonzeroFloat64}, + }, + { + "float64_maxuint64: 18446744073709551615", + map[string]float64{"float64_maxuint64": float64(math.MaxUint64)}, + }, + { + "float64_maxuint64+1: 18446744073709551616", + map[string]float64{"float64_maxuint64+1": float64(math.MaxUint64 + 1)}, + }, + + // Overflow cases. + { + "v: 4294967297", + map[string]int32{}, + }, { + "v: 128", + map[string]int8{}, + }, + + // Quoted values. + { + "'1': '\"2\"'", + map[interface{}]interface{}{"1": "\"2\""}, + }, { + "v:\n- A\n- 'B\n\n C'\n", + map[string][]string{"v": []string{"A", "B\nC"}}, + }, + + // Explicit tags. + { + "v: !!float '1.1'", + map[string]interface{}{"v": 1.1}, + }, { + "v: !!null ''", + map[string]interface{}{"v": nil}, + }, { + "%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'", + map[string]interface{}{"v": 1}, + }, + + // Non-specific tag (Issue #75) + { + "v: ! test", + map[string]interface{}{"v": "test"}, + }, + + // Anchors and aliases. + { + "a: &x 1\nb: &y 2\nc: *x\nd: *y\n", + &struct{ A, B, C, D int }{1, 2, 1, 2}, + }, { + "a: &a {c: 1}\nb: *a", + &struct { + A, B struct { + C int + } + }{struct{ C int }{1}, struct{ C int }{1}}, + }, { + "a: &a [1, 2]\nb: *a", + &struct{ B []int }{[]int{1, 2}}, + }, { + "b: *a\na: &a {c: 1}", + &struct { + A, B struct { + C int + } + }{struct{ C int }{1}, struct{ C int }{1}}, + }, + + // Bug #1133337 + { + "foo: ''", + map[string]*string{"foo": new(string)}, + }, { + "foo: null", + map[string]string{"foo": ""}, + }, { + "foo: null", + map[string]interface{}{"foo": nil}, + }, + + // Ignored field + { + "a: 1\nb: 2\n", + &struct { + A int + B int "-" + }{1, 0}, + }, + + // Bug #1191981 + { + "" + + "%YAML 1.1\n" + + "--- !!str\n" + + `"Generic line break (no glyph)\n\` + "\n" + + ` Generic line break (glyphed)\n\` + "\n" + + ` Line separator\u2028\` + "\n" + + ` Paragraph separator\u2029"` + "\n", + "" + + "Generic line break (no glyph)\n" + + "Generic line break (glyphed)\n" + + "Line separator\u2028Paragraph separator\u2029", + }, + + // Struct inlining + { + "a: 1\nb: 2\nc: 3\n", + &struct { + A int + C inlineB `yaml:",inline"` + }{1, inlineB{2, inlineC{3}}}, + }, + + // Map inlining + { + "a: 1\nb: 2\nc: 3\n", + &struct { + A int + C map[string]int `yaml:",inline"` + }{1, map[string]int{"b": 2, "c": 3}}, + }, + + // bug 1243827 + { + "a: -b_c", + map[string]interface{}{"a": "-b_c"}, + }, + { + "a: +b_c", + map[string]interface{}{"a": "+b_c"}, + }, + { + "a: 50cent_of_dollar", + map[string]interface{}{"a": "50cent_of_dollar"}, + }, + + // Duration + { + "a: 3s", + map[string]time.Duration{"a": 3 * time.Second}, + }, + + // Issue #24. + { + "a: ", + map[string]string{"a": ""}, + }, + + // Base 60 floats are obsolete and unsupported. + { + "a: 1:1\n", + map[string]string{"a": "1:1"}, + }, + + // Binary data. + { + "a: !!binary gIGC\n", + map[string]string{"a": "\x80\x81\x82"}, + }, { + "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", + map[string]string{"a": strings.Repeat("\x90", 54)}, + }, { + "a: !!binary |\n " + strings.Repeat("A", 70) + "\n ==\n", + map[string]string{"a": strings.Repeat("\x00", 52)}, + }, + + // Ordered maps. + { + "{b: 2, a: 1, d: 4, c: 3, sub: {e: 5}}", + &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, + }, + + // Issue #39. + { + "a:\n b:\n c: d\n", + map[string]struct{ B interface{} }{"a": {map[interface{}]interface{}{"c": "d"}}}, + }, + + // Custom map type. + { + "a: {b: c}", + M{"a": M{"b": "c"}}, + }, + + // Support encoding.TextUnmarshaler. + { + "a: 1.2.3.4\n", + map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, + }, + { + "a: 2015-02-24T18:19:39Z\n", + map[string]time.Time{"a": time.Unix(1424801979, 0).In(time.UTC)}, + }, + + // Encode empty lists as zero-length slices. + { + "a: []", + &struct{ A []int }{[]int{}}, + }, + + // UTF-16-LE + { + "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n\x00", + M{"ñoño": "very yes"}, + }, + // UTF-16-LE with surrogate. + { + "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \x00=\xd8\xd4\xdf\n\x00", + M{"ñoño": "very yes 🟔"}, + }, + + // UTF-16-BE + { + "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n", + M{"ñoño": "very yes"}, + }, + // UTF-16-BE with surrogate. + { + "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \xd8=\xdf\xd4\x00\n", + M{"ñoño": "very yes 🟔"}, + }, + + // YAML Float regex shouldn't match this + { + "a: 123456e1\n", + M{"a": "123456e1"}, + }, { + "a: 123456E1\n", + M{"a": "123456E1"}, + }, +} + +type M map[interface{}]interface{} + +type inlineB struct { + B int + inlineC `yaml:",inline"` +} + +type inlineC struct { + C int +} + +func (s *S) TestUnmarshal(c *C) { + for i, item := range unmarshalTests { + c.Logf("test %d: %q", i, item.data) + t := reflect.ValueOf(item.value).Type() + var value interface{} + switch t.Kind() { + case reflect.Map: + value = reflect.MakeMap(t).Interface() + case reflect.String: + value = reflect.New(t).Interface() + case reflect.Ptr: + value = reflect.New(t.Elem()).Interface() + default: + c.Fatalf("missing case for %s", t) + } + err := yaml.Unmarshal([]byte(item.data), value) + if _, ok := err.(*yaml.TypeError); !ok { + c.Assert(err, IsNil) + } + if t.Kind() == reflect.String { + c.Assert(*value.(*string), Equals, item.value) + } else { + c.Assert(value, DeepEquals, item.value) + } + } +} + +func (s *S) TestUnmarshalNaN(c *C) { + value := map[string]interface{}{} + err := yaml.Unmarshal([]byte("notanum: .NaN"), &value) + c.Assert(err, IsNil) + c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true) +} + +var unmarshalErrorTests = []struct { + data, error string +}{ + {"v: !!float 'error'", "yaml: cannot decode !!str `error` as a !!float"}, + {"v: [A,", "yaml: line 1: did not find expected node content"}, + {"v:\n- [A,", "yaml: line 2: did not find expected node content"}, + {"a: *b\n", "yaml: unknown anchor 'b' referenced"}, + {"a: &a\n b: *a\n", "yaml: anchor 'a' value contains itself"}, + {"value: -", "yaml: block sequence entries are not allowed in this context"}, + {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"}, + {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`}, + {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`}, + {"%TAG !%79! tag:yaml.org,2002:\n---\nv: !%79!int '1'", "yaml: did not find expected whitespace"}, +} + +func (s *S) TestUnmarshalErrors(c *C) { + for _, item := range unmarshalErrorTests { + var value interface{} + err := yaml.Unmarshal([]byte(item.data), &value) + c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value)) + } +} + +var unmarshalerTests = []struct { + data, tag string + value interface{} +}{ + {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}}, + {"_: [1,A]", "!!seq", []interface{}{1, "A"}}, + {"_: 10", "!!int", 10}, + {"_: null", "!!null", nil}, + {`_: BAR!`, "!!str", "BAR!"}, + {`_: "BAR!"`, "!!str", "BAR!"}, + {"_: !!foo 'BAR!'", "!!foo", "BAR!"}, + {`_: ""`, "!!str", ""}, +} + +var unmarshalerResult = map[int]error{} + +type unmarshalerType struct { + value interface{} +} + +func (o *unmarshalerType) UnmarshalYAML(unmarshal func(v interface{}) error) error { + if err := unmarshal(&o.value); err != nil { + return err + } + if i, ok := o.value.(int); ok { + if result, ok := unmarshalerResult[i]; ok { + return result + } + } + return nil +} + +type unmarshalerPointer struct { + Field *unmarshalerType "_" +} + +type unmarshalerValue struct { + Field unmarshalerType "_" +} + +func (s *S) TestUnmarshalerPointerField(c *C) { + for _, item := range unmarshalerTests { + obj := &unmarshalerPointer{} + err := yaml.Unmarshal([]byte(item.data), obj) + c.Assert(err, IsNil) + if item.value == nil { + c.Assert(obj.Field, IsNil) + } else { + c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) + c.Assert(obj.Field.value, DeepEquals, item.value) + } + } +} + +func (s *S) TestUnmarshalerValueField(c *C) { + for _, item := range unmarshalerTests { + obj := &unmarshalerValue{} + err := yaml.Unmarshal([]byte(item.data), obj) + c.Assert(err, IsNil) + c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) + c.Assert(obj.Field.value, DeepEquals, item.value) + } +} + +func (s *S) TestUnmarshalerWholeDocument(c *C) { + obj := &unmarshalerType{} + err := yaml.Unmarshal([]byte(unmarshalerTests[0].data), obj) + c.Assert(err, IsNil) + value, ok := obj.value.(map[interface{}]interface{}) + c.Assert(ok, Equals, true, Commentf("value: %#v", obj.value)) + c.Assert(value["_"], DeepEquals, unmarshalerTests[0].value) +} + +func (s *S) TestUnmarshalerTypeError(c *C) { + unmarshalerResult[2] = &yaml.TypeError{[]string{"foo"}} + unmarshalerResult[4] = &yaml.TypeError{[]string{"bar"}} + defer func() { + delete(unmarshalerResult, 2) + delete(unmarshalerResult, 4) + }() + + type T struct { + Before int + After int + M map[string]*unmarshalerType + } + var v T + data := `{before: A, m: {abc: 1, def: 2, ghi: 3, jkl: 4}, after: B}` + err := yaml.Unmarshal([]byte(data), &v) + c.Assert(err, ErrorMatches, ""+ + "yaml: unmarshal errors:\n"+ + " line 1: cannot unmarshal !!str `A` into int\n"+ + " foo\n"+ + " bar\n"+ + " line 1: cannot unmarshal !!str `B` into int") + c.Assert(v.M["abc"], NotNil) + c.Assert(v.M["def"], IsNil) + c.Assert(v.M["ghi"], NotNil) + c.Assert(v.M["jkl"], IsNil) + + c.Assert(v.M["abc"].value, Equals, 1) + c.Assert(v.M["ghi"].value, Equals, 3) +} + +type proxyTypeError struct{} + +func (v *proxyTypeError) UnmarshalYAML(unmarshal func(interface{}) error) error { + var s string + var a int32 + var b int64 + if err := unmarshal(&s); err != nil { + panic(err) + } + if s == "a" { + if err := unmarshal(&b); err == nil { + panic("should have failed") + } + return unmarshal(&a) + } + if err := unmarshal(&a); err == nil { + panic("should have failed") + } + return unmarshal(&b) +} + +func (s *S) TestUnmarshalerTypeErrorProxying(c *C) { + type T struct { + Before int + After int + M map[string]*proxyTypeError + } + var v T + data := `{before: A, m: {abc: a, def: b}, after: B}` + err := yaml.Unmarshal([]byte(data), &v) + c.Assert(err, ErrorMatches, ""+ + "yaml: unmarshal errors:\n"+ + " line 1: cannot unmarshal !!str `A` into int\n"+ + " line 1: cannot unmarshal !!str `a` into int32\n"+ + " line 1: cannot unmarshal !!str `b` into int64\n"+ + " line 1: cannot unmarshal !!str `B` into int") +} + +type failingUnmarshaler struct{} + +var failingErr = errors.New("failingErr") + +func (ft *failingUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { + return failingErr +} + +func (s *S) TestUnmarshalerError(c *C) { + err := yaml.Unmarshal([]byte("a: b"), &failingUnmarshaler{}) + c.Assert(err, Equals, failingErr) +} + +type sliceUnmarshaler []int + +func (su *sliceUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { + var slice []int + err := unmarshal(&slice) + if err == nil { + *su = slice + return nil + } + + var intVal int + err = unmarshal(&intVal) + if err == nil { + *su = []int{intVal} + return nil + } + + return err +} + +func (s *S) TestUnmarshalerRetry(c *C) { + var su sliceUnmarshaler + err := yaml.Unmarshal([]byte("[1, 2, 3]"), &su) + c.Assert(err, IsNil) + c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1, 2, 3})) + + err = yaml.Unmarshal([]byte("1"), &su) + c.Assert(err, IsNil) + c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1})) +} + +// From http://yaml.org/type/merge.html +var mergeTests = ` +anchors: + list: + - &CENTER { "x": 1, "y": 2 } + - &LEFT { "x": 0, "y": 2 } + - &BIG { "r": 10 } + - &SMALL { "r": 1 } + +# All the following maps are equal: + +plain: + # Explicit keys + "x": 1 + "y": 2 + "r": 10 + label: center/big + +mergeOne: + # Merge one map + << : *CENTER + "r": 10 + label: center/big + +mergeMultiple: + # Merge multiple maps + << : [ *CENTER, *BIG ] + label: center/big + +override: + # Override + << : [ *BIG, *LEFT, *SMALL ] + "x": 1 + label: center/big + +shortTag: + # Explicit short merge tag + !!merge "<<" : [ *CENTER, *BIG ] + label: center/big + +longTag: + # Explicit merge long tag + ! "<<" : [ *CENTER, *BIG ] + label: center/big + +inlineMap: + # Inlined map + << : {"x": 1, "y": 2, "r": 10} + label: center/big + +inlineSequenceMap: + # Inlined map in sequence + << : [ *CENTER, {"r": 10} ] + label: center/big +` + +func (s *S) TestMerge(c *C) { + var want = map[interface{}]interface{}{ + "x": 1, + "y": 2, + "r": 10, + "label": "center/big", + } + + var m map[interface{}]interface{} + err := yaml.Unmarshal([]byte(mergeTests), &m) + c.Assert(err, IsNil) + for name, test := range m { + if name == "anchors" { + continue + } + c.Assert(test, DeepEquals, want, Commentf("test %q failed", name)) + } +} + +func (s *S) TestMergeStruct(c *C) { + type Data struct { + X, Y, R int + Label string + } + want := Data{1, 2, 10, "center/big"} + + var m map[string]Data + err := yaml.Unmarshal([]byte(mergeTests), &m) + c.Assert(err, IsNil) + for name, test := range m { + if name == "anchors" { + continue + } + c.Assert(test, Equals, want, Commentf("test %q failed", name)) + } +} + +var unmarshalNullTests = []func() interface{}{ + func() interface{} { var v interface{}; v = "v"; return &v }, + func() interface{} { var s = "s"; return &s }, + func() interface{} { var s = "s"; sptr := &s; return &sptr }, + func() interface{} { var i = 1; return &i }, + func() interface{} { var i = 1; iptr := &i; return &iptr }, + func() interface{} { m := map[string]int{"s": 1}; return &m }, + func() interface{} { m := map[string]int{"s": 1}; return m }, +} + +func (s *S) TestUnmarshalNull(c *C) { + for _, test := range unmarshalNullTests { + item := test() + zero := reflect.Zero(reflect.TypeOf(item).Elem()).Interface() + err := yaml.Unmarshal([]byte("null"), item) + c.Assert(err, IsNil) + if reflect.TypeOf(item).Kind() == reflect.Map { + c.Assert(reflect.ValueOf(item).Interface(), DeepEquals, reflect.MakeMap(reflect.TypeOf(item)).Interface()) + } else { + c.Assert(reflect.ValueOf(item).Elem().Interface(), DeepEquals, zero) + } + } +} + +func (s *S) TestUnmarshalSliceOnPreset(c *C) { + // Issue #48. + v := struct{ A []int }{[]int{1}} + yaml.Unmarshal([]byte("a: [2]"), &v) + c.Assert(v.A, DeepEquals, []int{2}) +} + +func (s *S) TestUnmarshalStrict(c *C) { + v := struct{ A, B int }{} + + err := yaml.UnmarshalStrict([]byte("a: 1\nb: 2"), &v) + c.Check(err, IsNil) + err = yaml.Unmarshal([]byte("a: 1\nb: 2\nc: 3"), &v) + c.Check(err, IsNil) + err = yaml.UnmarshalStrict([]byte("a: 1\nb: 2\nc: 3"), &v) + c.Check(err, ErrorMatches, "yaml: unmarshal errors:\n line 1: field c not found in struct struct { A int; B int }") +} + +//var data []byte +//func init() { +// var err error +// data, err = ioutil.ReadFile("/tmp/file.yaml") +// if err != nil { +// panic(err) +// } +//} +// +//func (s *S) BenchmarkUnmarshal(c *C) { +// var err error +// for i := 0; i < c.N; i++ { +// var v map[string]interface{} +// err = yaml.Unmarshal(data, &v) +// } +// if err != nil { +// panic(err) +// } +//} +// +//func (s *S) BenchmarkMarshal(c *C) { +// var v map[string]interface{} +// yaml.Unmarshal(data, &v) +// c.ResetTimer() +// for i := 0; i < c.N; i++ { +// yaml.Marshal(&v) +// } +//} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/emitterc.go b/docs/generator/vendor/gopkg.in/yaml.v2/emitterc.go new file mode 100644 index 0000000..41de8b8 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/emitterc.go @@ -0,0 +1,1684 @@ +package yaml + +import ( + "bytes" +) + +// Flush the buffer if needed. +func flush(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) { + return yaml_emitter_flush(emitter) + } + return true +} + +// Put a character to the output buffer. +func put(emitter *yaml_emitter_t, value byte) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + emitter.buffer[emitter.buffer_pos] = value + emitter.buffer_pos++ + emitter.column++ + return true +} + +// Put a line break to the output buffer. +func put_break(emitter *yaml_emitter_t) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + switch emitter.line_break { + case yaml_CR_BREAK: + emitter.buffer[emitter.buffer_pos] = '\r' + emitter.buffer_pos += 1 + case yaml_LN_BREAK: + emitter.buffer[emitter.buffer_pos] = '\n' + emitter.buffer_pos += 1 + case yaml_CRLN_BREAK: + emitter.buffer[emitter.buffer_pos+0] = '\r' + emitter.buffer[emitter.buffer_pos+1] = '\n' + emitter.buffer_pos += 2 + default: + panic("unknown line break setting") + } + emitter.column = 0 + emitter.line++ + return true +} + +// Copy a character from a string into buffer. +func write(emitter *yaml_emitter_t, s []byte, i *int) bool { + if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { + return false + } + p := emitter.buffer_pos + w := width(s[*i]) + switch w { + case 4: + emitter.buffer[p+3] = s[*i+3] + fallthrough + case 3: + emitter.buffer[p+2] = s[*i+2] + fallthrough + case 2: + emitter.buffer[p+1] = s[*i+1] + fallthrough + case 1: + emitter.buffer[p+0] = s[*i+0] + default: + panic("unknown character width") + } + emitter.column++ + emitter.buffer_pos += w + *i += w + return true +} + +// Write a whole string into buffer. +func write_all(emitter *yaml_emitter_t, s []byte) bool { + for i := 0; i < len(s); { + if !write(emitter, s, &i) { + return false + } + } + return true +} + +// Copy a line break character from a string into buffer. +func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { + if s[*i] == '\n' { + if !put_break(emitter) { + return false + } + *i++ + } else { + if !write(emitter, s, i) { + return false + } + emitter.column = 0 + emitter.line++ + } + return true +} + +// Set an emitter error and return false. +func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_EMITTER_ERROR + emitter.problem = problem + return false +} + +// Emit an event. +func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.events = append(emitter.events, *event) + for !yaml_emitter_need_more_events(emitter) { + event := &emitter.events[emitter.events_head] + if !yaml_emitter_analyze_event(emitter, event) { + return false + } + if !yaml_emitter_state_machine(emitter, event) { + return false + } + yaml_event_delete(event) + emitter.events_head++ + } + return true +} + +// Check if we need to accumulate more events before emitting. +// +// We accumulate extra +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START +// +func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { + if emitter.events_head == len(emitter.events) { + return true + } + var accumulate int + switch emitter.events[emitter.events_head].typ { + case yaml_DOCUMENT_START_EVENT: + accumulate = 1 + break + case yaml_SEQUENCE_START_EVENT: + accumulate = 2 + break + case yaml_MAPPING_START_EVENT: + accumulate = 3 + break + default: + return false + } + if len(emitter.events)-emitter.events_head > accumulate { + return false + } + var level int + for i := emitter.events_head; i < len(emitter.events); i++ { + switch emitter.events[i].typ { + case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: + level++ + case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: + level-- + } + if level == 0 { + return false + } + } + return true +} + +// Append a directive to the directives stack. +func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { + for i := 0; i < len(emitter.tag_directives); i++ { + if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") + } + } + + // [Go] Do we actually need to copy this given garbage collection + // and the lack of deallocating destructors? + tag_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(tag_copy.handle, value.handle) + copy(tag_copy.prefix, value.prefix) + emitter.tag_directives = append(emitter.tag_directives, tag_copy) + return true +} + +// Increase the indentation level. +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + emitter.indents = append(emitter.indents, emitter.indent) + if emitter.indent < 0 { + if flow { + emitter.indent = emitter.best_indent + } else { + emitter.indent = 0 + } + } else if !indentless { + emitter.indent += emitter.best_indent + } + return true +} + +// State dispatcher. +func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { + switch emitter.state { + default: + case yaml_EMIT_STREAM_START_STATE: + return yaml_emitter_emit_stream_start(emitter, event) + + case yaml_EMIT_FIRST_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, true) + + case yaml_EMIT_DOCUMENT_START_STATE: + return yaml_emitter_emit_document_start(emitter, event, false) + + case yaml_EMIT_DOCUMENT_CONTENT_STATE: + return yaml_emitter_emit_document_content(emitter, event) + + case yaml_EMIT_DOCUMENT_END_STATE: + return yaml_emitter_emit_document_end(emitter, event) + + case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, true) + + case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_flow_sequence_item(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_KEY_STATE: + return yaml_emitter_emit_flow_mapping_key(emitter, event, false) + + case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, true) + + case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: + return yaml_emitter_emit_flow_mapping_value(emitter, event, false) + + case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, true) + + case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: + return yaml_emitter_emit_block_sequence_item(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: + return yaml_emitter_emit_block_mapping_key(emitter, event, false) + + case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, true) + + case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: + return yaml_emitter_emit_block_mapping_value(emitter, event, false) + + case yaml_EMIT_END_STATE: + return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") + } + panic("invalid emitter state") +} + +// Expect STREAM-START. +func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_STREAM_START_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") + } + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = event.encoding + if emitter.encoding == yaml_ANY_ENCODING { + emitter.encoding = yaml_UTF8_ENCODING + } + } + if emitter.best_indent < 2 || emitter.best_indent > 9 { + emitter.best_indent = 2 + } + if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { + emitter.best_width = 80 + } + if emitter.best_width < 0 { + emitter.best_width = 1<<31 - 1 + } + if emitter.line_break == yaml_ANY_BREAK { + emitter.line_break = yaml_LN_BREAK + } + + emitter.indent = -1 + emitter.line = 0 + emitter.column = 0 + emitter.whitespace = true + emitter.indention = true + + if emitter.encoding != yaml_UTF8_ENCODING { + if !yaml_emitter_write_bom(emitter) { + return false + } + } + emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE + return true +} + +// Expect DOCUMENT-START or STREAM-END. +func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + + if event.typ == yaml_DOCUMENT_START_EVENT { + + if event.version_directive != nil { + if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { + return false + } + } + + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { + return false + } + if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { + return false + } + } + + for i := 0; i < len(default_tag_directives); i++ { + tag_directive := &default_tag_directives[i] + if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { + return false + } + } + + implicit := event.implicit + if !first || emitter.canonical { + implicit = false + } + + if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if event.version_directive != nil { + implicit = false + if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if len(event.tag_directives) > 0 { + implicit = false + for i := 0; i < len(event.tag_directives); i++ { + tag_directive := &event.tag_directives[i] + if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { + return false + } + if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + if yaml_emitter_check_empty_document(emitter) { + implicit = false + } + if !implicit { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { + return false + } + if emitter.canonical { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + } + + emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE + return true + } + + if event.typ == yaml_STREAM_END_EVENT { + if emitter.open_ended { + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_END_STATE + return true + } + + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") +} + +// Expect the root node. +func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { + emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) + return yaml_emitter_emit_node(emitter, event, true, false, false, false) +} + +// Expect DOCUMENT-END. +func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if event.typ != yaml_DOCUMENT_END_EVENT { + return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !event.implicit { + // [Go] Allocate the slice elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_flush(emitter) { + return false + } + emitter.state = yaml_EMIT_DOCUMENT_START_STATE + emitter.tag_directives = emitter.tag_directives[:0] + return true +} + +// Expect a flow item node. +func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a flow key node. +func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + emitter.flow_level++ + } + + if event.typ == yaml_MAPPING_END_EVENT { + emitter.flow_level-- + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + if emitter.canonical && !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + + if !first { + if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { + return false + } + } + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + + if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a flow value node. +func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if emitter.canonical || emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block item node. +func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { + return false + } + } + if event.typ == yaml_SEQUENCE_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) + return yaml_emitter_emit_node(emitter, event, false, true, false, false) +} + +// Expect a block key node. +func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { + if first { + if !yaml_emitter_increase_indent(emitter, false, false) { + return false + } + } + if event.typ == yaml_MAPPING_END_EVENT { + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true + } + if !yaml_emitter_write_indent(emitter) { + return false + } + if yaml_emitter_check_simple_key(emitter) { + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, true) + } + if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { + return false + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a block value node. +func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { + if simple { + if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { + return false + } + } else { + if !yaml_emitter_write_indent(emitter) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { + return false + } + } + emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) + return yaml_emitter_emit_node(emitter, event, false, false, true, false) +} + +// Expect a node. +func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, + root bool, sequence bool, mapping bool, simple_key bool) bool { + + emitter.root_context = root + emitter.sequence_context = sequence + emitter.mapping_context = mapping + emitter.simple_key_context = simple_key + + switch event.typ { + case yaml_ALIAS_EVENT: + return yaml_emitter_emit_alias(emitter, event) + case yaml_SCALAR_EVENT: + return yaml_emitter_emit_scalar(emitter, event) + case yaml_SEQUENCE_START_EVENT: + return yaml_emitter_emit_sequence_start(emitter, event) + case yaml_MAPPING_START_EVENT: + return yaml_emitter_emit_mapping_start(emitter, event) + default: + return yaml_emitter_set_emitter_error(emitter, + "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS") + } +} + +// Expect ALIAS. +func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SCALAR. +func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_select_scalar_style(emitter, event) { + return false + } + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if !yaml_emitter_increase_indent(emitter, true, false) { + return false + } + if !yaml_emitter_process_scalar(emitter) { + return false + } + emitter.indent = emitter.indents[len(emitter.indents)-1] + emitter.indents = emitter.indents[:len(emitter.indents)-1] + emitter.state = emitter.states[len(emitter.states)-1] + emitter.states = emitter.states[:len(emitter.states)-1] + return true +} + +// Expect SEQUENCE-START. +func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || + yaml_emitter_check_empty_sequence(emitter) { + emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE + } + return true +} + +// Expect MAPPING-START. +func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { + if !yaml_emitter_process_anchor(emitter) { + return false + } + if !yaml_emitter_process_tag(emitter) { + return false + } + if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || + yaml_emitter_check_empty_mapping(emitter) { + emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE + } else { + emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE + } + return true +} + +// Check if the document content is an empty scalar. +func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { + return false // [Go] Huh? +} + +// Check if the next events represent an empty sequence. +func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT +} + +// Check if the next events represent an empty mapping. +func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { + if len(emitter.events)-emitter.events_head < 2 { + return false + } + return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && + emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT +} + +// Check if the next node can be expressed as a simple key. +func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { + length := 0 + switch emitter.events[emitter.events_head].typ { + case yaml_ALIAS_EVENT: + length += len(emitter.anchor_data.anchor) + case yaml_SCALAR_EVENT: + if emitter.scalar_data.multiline { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + + len(emitter.scalar_data.value) + case yaml_SEQUENCE_START_EVENT: + if !yaml_emitter_check_empty_sequence(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + case yaml_MAPPING_START_EVENT: + if !yaml_emitter_check_empty_mapping(emitter) { + return false + } + length += len(emitter.anchor_data.anchor) + + len(emitter.tag_data.handle) + + len(emitter.tag_data.suffix) + default: + return false + } + return length <= 128 +} + +// Determine an acceptable scalar style. +func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 + if no_tag && !event.implicit && !event.quoted_implicit { + return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") + } + + style := event.scalar_style() + if style == yaml_ANY_SCALAR_STYLE { + style = yaml_PLAIN_SCALAR_STYLE + } + if emitter.canonical { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + if emitter.simple_key_context && emitter.scalar_data.multiline { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + + if style == yaml_PLAIN_SCALAR_STYLE { + if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || + emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + if no_tag && !event.implicit { + style = yaml_SINGLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { + if !emitter.scalar_data.single_quoted_allowed { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { + if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + } + + if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { + emitter.tag_data.handle = []byte{'!'} + } + emitter.scalar_data.style = style + return true +} + +// Write an achor. +func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { + if emitter.anchor_data.anchor == nil { + return true + } + c := []byte{'&'} + if emitter.anchor_data.alias { + c[0] = '*' + } + if !yaml_emitter_write_indicator(emitter, c, true, false, false) { + return false + } + return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) +} + +// Write a tag. +func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { + if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { + return true + } + if len(emitter.tag_data.handle) > 0 { + if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { + return false + } + if len(emitter.tag_data.suffix) > 0 { + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + } + } else { + // [Go] Allocate these slices elsewhere. + if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { + return false + } + if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { + return false + } + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { + return false + } + } + return true +} + +// Write a scalar. +func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { + switch emitter.scalar_data.style { + case yaml_PLAIN_SCALAR_STYLE: + return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_SINGLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_DOUBLE_QUOTED_SCALAR_STYLE: + return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) + + case yaml_LITERAL_SCALAR_STYLE: + return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) + + case yaml_FOLDED_SCALAR_STYLE: + return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) + } + panic("unknown scalar style") +} + +// Check if a %YAML directive is valid. +func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { + if version_directive.major != 1 || version_directive.minor != 1 { + return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") + } + return true +} + +// Check if a %TAG directive is valid. +func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { + handle := tag_directive.handle + prefix := tag_directive.prefix + if len(handle) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") + } + if handle[0] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") + } + if handle[len(handle)-1] != '!' { + return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") + } + for i := 1; i < len(handle)-1; i += width(handle[i]) { + if !is_alpha(handle, i) { + return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") + } + } + if len(prefix) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") + } + return true +} + +// Check if an anchor is valid. +func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { + if len(anchor) == 0 { + problem := "anchor value must not be empty" + if alias { + problem = "alias value must not be empty" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + for i := 0; i < len(anchor); i += width(anchor[i]) { + if !is_alpha(anchor, i) { + problem := "anchor value must contain alphanumerical characters only" + if alias { + problem = "alias value must contain alphanumerical characters only" + } + return yaml_emitter_set_emitter_error(emitter, problem) + } + } + emitter.anchor_data.anchor = anchor + emitter.anchor_data.alias = alias + return true +} + +// Check if a tag is valid. +func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { + if len(tag) == 0 { + return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") + } + for i := 0; i < len(emitter.tag_directives); i++ { + tag_directive := &emitter.tag_directives[i] + if bytes.HasPrefix(tag, tag_directive.prefix) { + emitter.tag_data.handle = tag_directive.handle + emitter.tag_data.suffix = tag[len(tag_directive.prefix):] + return true + } + } + emitter.tag_data.suffix = tag + return true +} + +// Check if a scalar is valid. +func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { + var ( + block_indicators = false + flow_indicators = false + line_breaks = false + special_characters = false + + leading_space = false + leading_break = false + trailing_space = false + trailing_break = false + break_space = false + space_break = false + + preceded_by_whitespace = false + followed_by_whitespace = false + previous_space = false + previous_break = false + ) + + emitter.scalar_data.value = value + + if len(value) == 0 { + emitter.scalar_data.multiline = false + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = false + return true + } + + if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { + block_indicators = true + flow_indicators = true + } + + preceded_by_whitespace = true + for i, w := 0, 0; i < len(value); i += w { + w = width(value[i]) + followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) + + if i == 0 { + switch value[i] { + case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': + flow_indicators = true + block_indicators = true + case '?', ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '-': + if followed_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } else { + switch value[i] { + case ',', '?', '[', ']', '{', '}': + flow_indicators = true + case ':': + flow_indicators = true + if followed_by_whitespace { + block_indicators = true + } + case '#': + if preceded_by_whitespace { + flow_indicators = true + block_indicators = true + } + } + } + + if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { + special_characters = true + } + if is_space(value, i) { + if i == 0 { + leading_space = true + } + if i+width(value[i]) == len(value) { + trailing_space = true + } + if previous_break { + break_space = true + } + previous_space = true + previous_break = false + } else if is_break(value, i) { + line_breaks = true + if i == 0 { + leading_break = true + } + if i+width(value[i]) == len(value) { + trailing_break = true + } + if previous_space { + space_break = true + } + previous_space = false + previous_break = true + } else { + previous_space = false + previous_break = false + } + + // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. + preceded_by_whitespace = is_blankz(value, i) + } + + emitter.scalar_data.multiline = line_breaks + emitter.scalar_data.flow_plain_allowed = true + emitter.scalar_data.block_plain_allowed = true + emitter.scalar_data.single_quoted_allowed = true + emitter.scalar_data.block_allowed = true + + if leading_space || leading_break || trailing_space || trailing_break { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if trailing_space { + emitter.scalar_data.block_allowed = false + } + if break_space { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + } + if space_break || special_characters { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + emitter.scalar_data.single_quoted_allowed = false + emitter.scalar_data.block_allowed = false + } + if line_breaks { + emitter.scalar_data.flow_plain_allowed = false + emitter.scalar_data.block_plain_allowed = false + } + if flow_indicators { + emitter.scalar_data.flow_plain_allowed = false + } + if block_indicators { + emitter.scalar_data.block_plain_allowed = false + } + return true +} + +// Check if the event data is valid. +func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + + emitter.anchor_data.anchor = nil + emitter.tag_data.handle = nil + emitter.tag_data.suffix = nil + emitter.scalar_data.value = nil + + switch event.typ { + case yaml_ALIAS_EVENT: + if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { + return false + } + + case yaml_SCALAR_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + if !yaml_emitter_analyze_scalar(emitter, event.value) { + return false + } + + case yaml_SEQUENCE_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + + case yaml_MAPPING_START_EVENT: + if len(event.anchor) > 0 { + if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { + return false + } + } + if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { + if !yaml_emitter_analyze_tag(emitter, event.tag) { + return false + } + } + } + return true +} + +// Write the BOM character. +func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { + if !flush(emitter) { + return false + } + pos := emitter.buffer_pos + emitter.buffer[pos+0] = '\xEF' + emitter.buffer[pos+1] = '\xBB' + emitter.buffer[pos+2] = '\xBF' + emitter.buffer_pos += 3 + return true +} + +func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { + indent := emitter.indent + if indent < 0 { + indent = 0 + } + if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { + if !put_break(emitter) { + return false + } + } + for emitter.column < indent { + if !put(emitter, ' ') { + return false + } + } + emitter.whitespace = true + emitter.indention = true + return true +} + +func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, indicator) { + return false + } + emitter.whitespace = is_whitespace + emitter.indention = (emitter.indention && is_indention) + emitter.open_ended = false + return true +} + +func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + if !write_all(emitter, value) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { + if need_whitespace && !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + for i := 0; i < len(value); { + var must_write bool + switch value[i] { + case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': + must_write = true + default: + must_write = is_alpha(value, i) + } + if must_write { + if !write(emitter, value, &i) { + return false + } + } else { + w := width(value[i]) + for k := 0; k < w; k++ { + octet := value[i] + i++ + if !put(emitter, '%') { + return false + } + + c := octet >> 4 + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + + c = octet & 0x0f + if c < 10 { + c += '0' + } else { + c += 'A' - 10 + } + if !put(emitter, c) { + return false + } + } + } + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + if !emitter.whitespace { + if !put(emitter, ' ') { + return false + } + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + + emitter.whitespace = false + emitter.indention = false + if emitter.root_context { + emitter.open_ended = true + } + + return true +} + +func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { + return false + } + + spaces := false + breaks := false + for i := 0; i < len(value); { + if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + spaces = true + } else if is_break(value, i) { + if !breaks && value[i] == '\n' { + if !put_break(emitter) { + return false + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if value[i] == '\'' { + if !put(emitter, '\'') { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + spaces = false + breaks = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { + spaces := false + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { + return false + } + + for i := 0; i < len(value); { + if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || + is_bom(value, i) || is_break(value, i) || + value[i] == '"' || value[i] == '\\' { + + octet := value[i] + + var w int + var v rune + switch { + case octet&0x80 == 0x00: + w, v = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, v = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, v = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, v = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = value[i+k] + v = (v << 6) + (rune(octet) & 0x3F) + } + i += w + + if !put(emitter, '\\') { + return false + } + + var ok bool + switch v { + case 0x00: + ok = put(emitter, '0') + case 0x07: + ok = put(emitter, 'a') + case 0x08: + ok = put(emitter, 'b') + case 0x09: + ok = put(emitter, 't') + case 0x0A: + ok = put(emitter, 'n') + case 0x0b: + ok = put(emitter, 'v') + case 0x0c: + ok = put(emitter, 'f') + case 0x0d: + ok = put(emitter, 'r') + case 0x1b: + ok = put(emitter, 'e') + case 0x22: + ok = put(emitter, '"') + case 0x5c: + ok = put(emitter, '\\') + case 0x85: + ok = put(emitter, 'N') + case 0xA0: + ok = put(emitter, '_') + case 0x2028: + ok = put(emitter, 'L') + case 0x2029: + ok = put(emitter, 'P') + default: + if v <= 0xFF { + ok = put(emitter, 'x') + w = 2 + } else if v <= 0xFFFF { + ok = put(emitter, 'u') + w = 4 + } else { + ok = put(emitter, 'U') + w = 8 + } + for k := (w - 1) * 4; ok && k >= 0; k -= 4 { + digit := byte((v >> uint(k)) & 0x0F) + if digit < 10 { + ok = put(emitter, digit+'0') + } else { + ok = put(emitter, digit+'A'-10) + } + } + } + if !ok { + return false + } + spaces = false + } else if is_space(value, i) { + if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { + if !yaml_emitter_write_indent(emitter) { + return false + } + if is_space(value, i+1) { + if !put(emitter, '\\') { + return false + } + } + i += width(value[i]) + } else if !write(emitter, value, &i) { + return false + } + spaces = true + } else { + if !write(emitter, value, &i) { + return false + } + spaces = false + } + } + if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { + return false + } + emitter.whitespace = false + emitter.indention = false + return true +} + +func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { + if is_space(value, 0) || is_break(value, 0) { + indent_hint := []byte{'0' + byte(emitter.best_indent)} + if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { + return false + } + } + + emitter.open_ended = false + + var chomp_hint [1]byte + if len(value) == 0 { + chomp_hint[0] = '-' + } else { + i := len(value) - 1 + for value[i]&0xC0 == 0x80 { + i-- + } + if !is_break(value, i) { + chomp_hint[0] = '-' + } else if i == 0 { + chomp_hint[0] = '+' + emitter.open_ended = true + } else { + i-- + for value[i]&0xC0 == 0x80 { + i-- + } + if is_break(value, i) { + chomp_hint[0] = '+' + emitter.open_ended = true + } + } + } + if chomp_hint[0] != 0 { + if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { + return false + } + } + return true +} + +func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + breaks := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + } + if !write(emitter, value, &i) { + return false + } + emitter.indention = false + breaks = false + } + } + + return true +} + +func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { + if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { + return false + } + if !yaml_emitter_write_block_scalar_hints(emitter, value) { + return false + } + + if !put_break(emitter) { + return false + } + emitter.indention = true + emitter.whitespace = true + + breaks := true + leading_spaces := true + for i := 0; i < len(value); { + if is_break(value, i) { + if !breaks && !leading_spaces && value[i] == '\n' { + k := 0 + for is_break(value, k) { + k += width(value[k]) + } + if !is_blankz(value, k) { + if !put_break(emitter) { + return false + } + } + } + if !write_break(emitter, value, &i) { + return false + } + emitter.indention = true + breaks = true + } else { + if breaks { + if !yaml_emitter_write_indent(emitter) { + return false + } + leading_spaces = is_blank(value, i) + } + if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { + if !yaml_emitter_write_indent(emitter) { + return false + } + i += width(value[i]) + } else { + if !write(emitter, value, &i) { + return false + } + } + emitter.indention = false + breaks = false + } + } + return true +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/encode.go b/docs/generator/vendor/gopkg.in/yaml.v2/encode.go new file mode 100644 index 0000000..84f8499 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/encode.go @@ -0,0 +1,306 @@ +package yaml + +import ( + "encoding" + "fmt" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" +) + +type encoder struct { + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool +} + +func newEncoder() (e *encoder) { + e = &encoder{} + e.must(yaml_emitter_initialize(&e.emitter)) + yaml_emitter_set_output_string(&e.emitter, &e.out) + yaml_emitter_set_unicode(&e.emitter, true) + e.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)) + e.emit() + e.must(yaml_document_start_event_initialize(&e.event, nil, nil, true)) + e.emit() + return e +} + +func (e *encoder) finish() { + e.must(yaml_document_end_event_initialize(&e.event, true)) + e.emit() + e.emitter.open_ended = false + e.must(yaml_stream_end_event_initialize(&e.event)) + e.emit() +} + +func (e *encoder) destroy() { + yaml_emitter_delete(&e.emitter) +} + +func (e *encoder) emit() { + // This will internally delete the e.event value. + if !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT { + e.must(false) + } +} + +func (e *encoder) must(ok bool) { + if !ok { + msg := e.emitter.problem + if msg == "" { + msg = "unknown problem generating YAML content" + } + failf("%s", msg) + } +} + +func (e *encoder) marshal(tag string, in reflect.Value) { + if !in.IsValid() { + e.nilv() + return + } + iface := in.Interface() + if m, ok := iface.(Marshaler); ok { + v, err := m.MarshalYAML() + if err != nil { + fail(err) + } + if v == nil { + e.nilv() + return + } + in = reflect.ValueOf(v) + } else if m, ok := iface.(encoding.TextMarshaler); ok { + text, err := m.MarshalText() + if err != nil { + fail(err) + } + in = reflect.ValueOf(string(text)) + } + switch in.Kind() { + case reflect.Interface: + if in.IsNil() { + e.nilv() + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Map: + e.mapv(tag, in) + case reflect.Ptr: + if in.IsNil() { + e.nilv() + } else { + e.marshal(tag, in.Elem()) + } + case reflect.Struct: + e.structv(tag, in) + case reflect.Slice: + if in.Type().Elem() == mapItemType { + e.itemsv(tag, in) + } else { + e.slicev(tag, in) + } + case reflect.String: + e.stringv(tag, in) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if in.Type() == durationType { + e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String())) + } else { + e.intv(tag, in) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + e.uintv(tag, in) + case reflect.Float32, reflect.Float64: + e.floatv(tag, in) + case reflect.Bool: + e.boolv(tag, in) + default: + panic("cannot marshal type: " + in.Type().String()) + } +} + +func (e *encoder) mapv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + keys := keyList(in.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + e.marshal("", k) + e.marshal("", in.MapIndex(k)) + } + }) +} + +func (e *encoder) itemsv(tag string, in reflect.Value) { + e.mappingv(tag, func() { + slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem) + for _, item := range slice { + e.marshal("", reflect.ValueOf(item.Key)) + e.marshal("", reflect.ValueOf(item.Value)) + } + }) +} + +func (e *encoder) structv(tag string, in reflect.Value) { + sinfo, err := getStructInfo(in.Type()) + if err != nil { + panic(err) + } + e.mappingv(tag, func() { + for _, info := range sinfo.FieldsList { + var value reflect.Value + if info.Inline == nil { + value = in.Field(info.Num) + } else { + value = in.FieldByIndex(info.Inline) + } + if info.OmitEmpty && isZero(value) { + continue + } + e.marshal("", reflect.ValueOf(info.Key)) + e.flow = info.Flow + e.marshal("", value) + } + if sinfo.InlineMap >= 0 { + m := in.Field(sinfo.InlineMap) + if m.Len() > 0 { + e.flow = false + keys := keyList(m.MapKeys()) + sort.Sort(keys) + for _, k := range keys { + if _, found := sinfo.FieldsMap[k.String()]; found { + panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String())) + } + e.marshal("", k) + e.flow = false + e.marshal("", m.MapIndex(k)) + } + } + } + }) +} + +func (e *encoder) mappingv(tag string, f func()) { + implicit := tag == "" + style := yaml_BLOCK_MAPPING_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_MAPPING_STYLE + } + e.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + f() + e.must(yaml_mapping_end_event_initialize(&e.event)) + e.emit() +} + +func (e *encoder) slicev(tag string, in reflect.Value) { + implicit := tag == "" + style := yaml_BLOCK_SEQUENCE_STYLE + if e.flow { + e.flow = false + style = yaml_FLOW_SEQUENCE_STYLE + } + e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) + e.emit() + n := in.Len() + for i := 0; i < n; i++ { + e.marshal("", in.Index(i)) + } + e.must(yaml_sequence_end_event_initialize(&e.event)) + e.emit() +} + +// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. +// +// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported +// in YAML 1.2 and by this package, but these should be marshalled quoted for +// the time being for compatibility with other parsers. +func isBase60Float(s string) (result bool) { + // Fast path. + if s == "" { + return false + } + c := s[0] + if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { + return false + } + // Do the full match. + return base60float.MatchString(s) +} + +// From http://yaml.org/type/float.html, except the regular expression there +// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. +var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) + +func (e *encoder) stringv(tag string, in reflect.Value) { + var style yaml_scalar_style_t + s := in.String() + rtag, rs := resolve("", s) + if rtag == yaml_BINARY_TAG { + if tag == "" || tag == yaml_STR_TAG { + tag = rtag + s = rs.(string) + } else if tag == yaml_BINARY_TAG { + failf("explicitly tagged !!binary data must be base64-encoded") + } else { + failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + } + } + if tag == "" && (rtag != yaml_STR_TAG || isBase60Float(s)) { + style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } else if strings.Contains(s, "\n") { + style = yaml_LITERAL_SCALAR_STYLE + } else { + style = yaml_PLAIN_SCALAR_STYLE + } + e.emitScalar(s, "", tag, style) +} + +func (e *encoder) boolv(tag string, in reflect.Value) { + var s string + if in.Bool() { + s = "true" + } else { + s = "false" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) intv(tag string, in reflect.Value) { + s := strconv.FormatInt(in.Int(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) uintv(tag string, in reflect.Value) { + s := strconv.FormatUint(in.Uint(), 10) + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) floatv(tag string, in reflect.Value) { + // FIXME: Handle 64 bits here. + s := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32) + switch s { + case "+Inf": + s = ".inf" + case "-Inf": + s = "-.inf" + case "NaN": + s = ".nan" + } + e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) nilv() { + e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE) +} + +func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) { + implicit := tag == "" + e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) + e.emit() +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/encode_test.go b/docs/generator/vendor/gopkg.in/yaml.v2/encode_test.go new file mode 100644 index 0000000..84099bd --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/encode_test.go @@ -0,0 +1,501 @@ +package yaml_test + +import ( + "fmt" + "math" + "strconv" + "strings" + "time" + + . "gopkg.in/check.v1" + "gopkg.in/yaml.v2" + "net" + "os" +) + +var marshalIntTest = 123 + +var marshalTests = []struct { + value interface{} + data string +}{ + { + nil, + "null\n", + }, { + &struct{}{}, + "{}\n", + }, { + map[string]string{"v": "hi"}, + "v: hi\n", + }, { + map[string]interface{}{"v": "hi"}, + "v: hi\n", + }, { + map[string]string{"v": "true"}, + "v: \"true\"\n", + }, { + map[string]string{"v": "false"}, + "v: \"false\"\n", + }, { + map[string]interface{}{"v": true}, + "v: true\n", + }, { + map[string]interface{}{"v": false}, + "v: false\n", + }, { + map[string]interface{}{"v": 10}, + "v: 10\n", + }, { + map[string]interface{}{"v": -10}, + "v: -10\n", + }, { + map[string]uint{"v": 42}, + "v: 42\n", + }, { + map[string]interface{}{"v": int64(4294967296)}, + "v: 4294967296\n", + }, { + map[string]int64{"v": int64(4294967296)}, + "v: 4294967296\n", + }, { + map[string]uint64{"v": 4294967296}, + "v: 4294967296\n", + }, { + map[string]interface{}{"v": "10"}, + "v: \"10\"\n", + }, { + map[string]interface{}{"v": 0.1}, + "v: 0.1\n", + }, { + map[string]interface{}{"v": float64(0.1)}, + "v: 0.1\n", + }, { + map[string]interface{}{"v": -0.1}, + "v: -0.1\n", + }, { + map[string]interface{}{"v": math.Inf(+1)}, + "v: .inf\n", + }, { + map[string]interface{}{"v": math.Inf(-1)}, + "v: -.inf\n", + }, { + map[string]interface{}{"v": math.NaN()}, + "v: .nan\n", + }, { + map[string]interface{}{"v": nil}, + "v: null\n", + }, { + map[string]interface{}{"v": ""}, + "v: \"\"\n", + }, { + map[string][]string{"v": []string{"A", "B"}}, + "v:\n- A\n- B\n", + }, { + map[string][]string{"v": []string{"A", "B\nC"}}, + "v:\n- A\n- |-\n B\n C\n", + }, { + map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}}, + "v:\n- A\n- 1\n- B:\n - 2\n - 3\n", + }, { + map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, + "a:\n b: c\n", + }, { + map[string]interface{}{"a": "-"}, + "a: '-'\n", + }, + + // Simple values. + { + &marshalIntTest, + "123\n", + }, + + // Structures + { + &struct{ Hello string }{"world"}, + "hello: world\n", + }, { + &struct { + A struct { + B string + } + }{struct{ B string }{"c"}}, + "a:\n b: c\n", + }, { + &struct { + A *struct { + B string + } + }{&struct{ B string }{"c"}}, + "a:\n b: c\n", + }, { + &struct { + A *struct { + B string + } + }{}, + "a: null\n", + }, { + &struct{ A int }{1}, + "a: 1\n", + }, { + &struct{ A []int }{[]int{1, 2}}, + "a:\n- 1\n- 2\n", + }, { + &struct { + B int "a" + }{1}, + "a: 1\n", + }, { + &struct{ A bool }{true}, + "a: true\n", + }, + + // Conditional flag + { + &struct { + A int "a,omitempty" + B int "b,omitempty" + }{1, 0}, + "a: 1\n", + }, { + &struct { + A int "a,omitempty" + B int "b,omitempty" + }{0, 0}, + "{}\n", + }, { + &struct { + A *struct{ X, y int } "a,omitempty,flow" + }{&struct{ X, y int }{1, 2}}, + "a: {x: 1}\n", + }, { + &struct { + A *struct{ X, y int } "a,omitempty,flow" + }{nil}, + "{}\n", + }, { + &struct { + A *struct{ X, y int } "a,omitempty,flow" + }{&struct{ X, y int }{}}, + "a: {x: 0}\n", + }, { + &struct { + A struct{ X, y int } "a,omitempty,flow" + }{struct{ X, y int }{1, 2}}, + "a: {x: 1}\n", + }, { + &struct { + A struct{ X, y int } "a,omitempty,flow" + }{struct{ X, y int }{0, 1}}, + "{}\n", + }, { + &struct { + A float64 "a,omitempty" + B float64 "b,omitempty" + }{1, 0}, + "a: 1\n", + }, + + // Flow flag + { + &struct { + A []int "a,flow" + }{[]int{1, 2}}, + "a: [1, 2]\n", + }, { + &struct { + A map[string]string "a,flow" + }{map[string]string{"b": "c", "d": "e"}}, + "a: {b: c, d: e}\n", + }, { + &struct { + A struct { + B, D string + } "a,flow" + }{struct{ B, D string }{"c", "e"}}, + "a: {b: c, d: e}\n", + }, + + // Unexported field + { + &struct { + u int + A int + }{0, 1}, + "a: 1\n", + }, + + // Ignored field + { + &struct { + A int + B int "-" + }{1, 2}, + "a: 1\n", + }, + + // Struct inlining + { + &struct { + A int + C inlineB `yaml:",inline"` + }{1, inlineB{2, inlineC{3}}}, + "a: 1\nb: 2\nc: 3\n", + }, + + // Map inlining + { + &struct { + A int + C map[string]int `yaml:",inline"` + }{1, map[string]int{"b": 2, "c": 3}}, + "a: 1\nb: 2\nc: 3\n", + }, + + // Duration + { + map[string]time.Duration{"a": 3 * time.Second}, + "a: 3s\n", + }, + + // Issue #24: bug in map merging logic. + { + map[string]string{"a": ""}, + "a: \n", + }, + + // Issue #34: marshal unsupported base 60 floats quoted for compatibility + // with old YAML 1.1 parsers. + { + map[string]string{"a": "1:1"}, + "a: \"1:1\"\n", + }, + + // Binary data. + { + map[string]string{"a": "\x00"}, + "a: \"\\0\"\n", + }, { + map[string]string{"a": "\x80\x81\x82"}, + "a: !!binary gIGC\n", + }, { + map[string]string{"a": strings.Repeat("\x90", 54)}, + "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", + }, + + // Ordered maps. + { + &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, + "b: 2\na: 1\nd: 4\nc: 3\nsub:\n e: 5\n", + }, + + // Encode unicode as utf-8 rather than in escaped form. + { + map[string]string{"a": "你好"}, + "a: 你好\n", + }, + + // Support encoding.TextMarshaler. + { + map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, + "a: 1.2.3.4\n", + }, + { + map[string]time.Time{"a": time.Unix(1424801979, 0)}, + "a: 2015-02-24T18:19:39Z\n", + }, + + // Ensure strings containing ": " are quoted (reported as PR #43, but not reproducible). + { + map[string]string{"a": "b: c"}, + "a: 'b: c'\n", + }, + + // Containing hash mark ('#') in string should be quoted + { + map[string]string{"a": "Hello #comment"}, + "a: 'Hello #comment'\n", + }, + { + map[string]string{"a": "你好 #comment"}, + "a: '你好 #comment'\n", + }, +} + +func (s *S) TestMarshal(c *C) { + defer os.Setenv("TZ", os.Getenv("TZ")) + os.Setenv("TZ", "UTC") + for _, item := range marshalTests { + data, err := yaml.Marshal(item.value) + c.Assert(err, IsNil) + c.Assert(string(data), Equals, item.data) + } +} + +var marshalErrorTests = []struct { + value interface{} + error string + panic string +}{{ + value: &struct { + B int + inlineB ",inline" + }{1, inlineB{2, inlineC{3}}}, + panic: `Duplicated key 'b' in struct struct \{ B int; .*`, +}, { + value: &struct { + A int + B map[string]int ",inline" + }{1, map[string]int{"a": 2}}, + panic: `Can't have key "a" in inlined map; conflicts with struct field`, +}} + +func (s *S) TestMarshalErrors(c *C) { + for _, item := range marshalErrorTests { + if item.panic != "" { + c.Assert(func() { yaml.Marshal(item.value) }, PanicMatches, item.panic) + } else { + _, err := yaml.Marshal(item.value) + c.Assert(err, ErrorMatches, item.error) + } + } +} + +func (s *S) TestMarshalTypeCache(c *C) { + var data []byte + var err error + func() { + type T struct{ A int } + data, err = yaml.Marshal(&T{}) + c.Assert(err, IsNil) + }() + func() { + type T struct{ B int } + data, err = yaml.Marshal(&T{}) + c.Assert(err, IsNil) + }() + c.Assert(string(data), Equals, "b: 0\n") +} + +var marshalerTests = []struct { + data string + value interface{} +}{ + {"_:\n hi: there\n", map[interface{}]interface{}{"hi": "there"}}, + {"_:\n- 1\n- A\n", []interface{}{1, "A"}}, + {"_: 10\n", 10}, + {"_: null\n", nil}, + {"_: BAR!\n", "BAR!"}, +} + +type marshalerType struct { + value interface{} +} + +func (o marshalerType) MarshalText() ([]byte, error) { + panic("MarshalText called on type with MarshalYAML") +} + +func (o marshalerType) MarshalYAML() (interface{}, error) { + return o.value, nil +} + +type marshalerValue struct { + Field marshalerType "_" +} + +func (s *S) TestMarshaler(c *C) { + for _, item := range marshalerTests { + obj := &marshalerValue{} + obj.Field.value = item.value + data, err := yaml.Marshal(obj) + c.Assert(err, IsNil) + c.Assert(string(data), Equals, string(item.data)) + } +} + +func (s *S) TestMarshalerWholeDocument(c *C) { + obj := &marshalerType{} + obj.value = map[string]string{"hello": "world!"} + data, err := yaml.Marshal(obj) + c.Assert(err, IsNil) + c.Assert(string(data), Equals, "hello: world!\n") +} + +type failingMarshaler struct{} + +func (ft *failingMarshaler) MarshalYAML() (interface{}, error) { + return nil, failingErr +} + +func (s *S) TestMarshalerError(c *C) { + _, err := yaml.Marshal(&failingMarshaler{}) + c.Assert(err, Equals, failingErr) +} + +func (s *S) TestSortedOutput(c *C) { + order := []interface{}{ + false, + true, + 1, + uint(1), + 1.0, + 1.1, + 1.2, + 2, + uint(2), + 2.0, + 2.1, + "", + ".1", + ".2", + ".a", + "1", + "2", + "a!10", + "a/2", + "a/10", + "a~10", + "ab/1", + "b/1", + "b/01", + "b/2", + "b/02", + "b/3", + "b/03", + "b1", + "b01", + "b3", + "c2.10", + "c10.2", + "d1", + "d12", + "d12a", + } + m := make(map[interface{}]int) + for _, k := range order { + m[k] = 1 + } + data, err := yaml.Marshal(m) + c.Assert(err, IsNil) + out := "\n" + string(data) + last := 0 + for i, k := range order { + repr := fmt.Sprint(k) + if s, ok := k.(string); ok { + if _, err = strconv.ParseFloat(repr, 32); s == "" || err == nil { + repr = `"` + repr + `"` + } + } + index := strings.Index(out, "\n"+repr+":") + if index == -1 { + c.Fatalf("%#v is not in the output: %#v", k, out) + } + if index < last { + c.Fatalf("%#v was generated before %#v: %q", k, order[i-1], out) + } + last = index + } +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/example_embedded_test.go b/docs/generator/vendor/gopkg.in/yaml.v2/example_embedded_test.go new file mode 100644 index 0000000..c8b241d --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/example_embedded_test.go @@ -0,0 +1,41 @@ +package yaml_test + +import ( + "fmt" + "log" + + "gopkg.in/yaml.v2" +) + +// An example showing how to unmarshal embedded +// structs from YAML. + +type StructA struct { + A string `yaml:"a"` +} + +type StructB struct { + // Embedded structs are not treated as embedded in YAML by default. To do that, + // add the ",inline" annotation below + StructA `yaml:",inline"` + B string `yaml:"b"` +} + +var data = ` +a: a string from struct A +b: a string from struct B +` + +func ExampleUnmarshal_embedded() { + var b StructB + + err := yaml.Unmarshal([]byte(data), &b) + if err != nil { + log.Fatal("cannot unmarshal data: %v", err) + } + fmt.Println(b.A) + fmt.Println(b.B) + // Output: + // a string from struct A + // a string from struct B +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/parserc.go b/docs/generator/vendor/gopkg.in/yaml.v2/parserc.go new file mode 100644 index 0000000..81d05df --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/parserc.go @@ -0,0 +1,1095 @@ +package yaml + +import ( + "bytes" +) + +// The parser implements the following grammar: +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// implicit_document ::= block_node DOCUMENT-END* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// block_node_or_indentless_sequence ::= +// ALIAS +// | properties (block_content | indentless_block_sequence)? +// | block_content +// | indentless_block_sequence +// block_node ::= ALIAS +// | properties block_content? +// | block_content +// flow_node ::= ALIAS +// | properties flow_content? +// | flow_content +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// block_content ::= block_collection | flow_collection | SCALAR +// flow_content ::= flow_collection | SCALAR +// block_collection ::= block_sequence | block_mapping +// flow_collection ::= flow_sequence | flow_mapping +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// block_mapping ::= BLOCK-MAPPING_START +// ((KEY block_node_or_indentless_sequence?)? +// (VALUE block_node_or_indentless_sequence?)?)* +// BLOCK-END +// flow_sequence ::= FLOW-SEQUENCE-START +// (flow_sequence_entry FLOW-ENTRY)* +// flow_sequence_entry? +// FLOW-SEQUENCE-END +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// flow_mapping ::= FLOW-MAPPING-START +// (flow_mapping_entry FLOW-ENTRY)* +// flow_mapping_entry? +// FLOW-MAPPING-END +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? + +// Peek the next token in the token queue. +func peek_token(parser *yaml_parser_t) *yaml_token_t { + if parser.token_available || yaml_parser_fetch_more_tokens(parser) { + return &parser.tokens[parser.tokens_head] + } + return nil +} + +// Remove the next token from the queue (must be called after peek_token). +func skip_token(parser *yaml_parser_t) { + parser.token_available = false + parser.tokens_parsed++ + parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN + parser.tokens_head++ +} + +// Get the next event. +func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { + // Erase the event object. + *event = yaml_event_t{} + + // No events after the end of the stream or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { + return true + } + + // Generate the next event. + return yaml_parser_state_machine(parser, event) +} + +// Set parser error. +func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { + parser.error = yaml_PARSER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = problem_mark + return false +} + +// State dispatcher. +func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { + //trace("yaml_parser_state_machine", "state:", parser.state.String()) + + switch parser.state { + case yaml_PARSE_STREAM_START_STATE: + return yaml_parser_parse_stream_start(parser, event) + + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, true) + + case yaml_PARSE_DOCUMENT_START_STATE: + return yaml_parser_parse_document_start(parser, event, false) + + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return yaml_parser_parse_document_content(parser, event) + + case yaml_PARSE_DOCUMENT_END_STATE: + return yaml_parser_parse_document_end(parser, event) + + case yaml_PARSE_BLOCK_NODE_STATE: + return yaml_parser_parse_node(parser, event, true, false) + + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return yaml_parser_parse_node(parser, event, true, true) + + case yaml_PARSE_FLOW_NODE_STATE: + return yaml_parser_parse_node(parser, event, false, false) + + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, true) + + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_block_sequence_entry(parser, event, false) + + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_indentless_sequence_entry(parser, event) + + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, true) + + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return yaml_parser_parse_block_mapping_key(parser, event, false) + + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return yaml_parser_parse_block_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, true) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return yaml_parser_parse_flow_sequence_entry(parser, event, false) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) + + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) + + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, true) + + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return yaml_parser_parse_flow_mapping_key(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, false) + + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return yaml_parser_parse_flow_mapping_value(parser, event, true) + + default: + panic("invalid parser state") + } +} + +// Parse the production: +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// ************ +func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_STREAM_START_TOKEN { + return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) + } + parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + encoding: token.encoding, + } + skip_token(parser) + return true +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// * +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// ************************* +func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { + + token := peek_token(parser) + if token == nil { + return false + } + + // Parse extra document end indicators. + if !implicit { + for token.typ == yaml_DOCUMENT_END_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && + token.typ != yaml_TAG_DIRECTIVE_TOKEN && + token.typ != yaml_DOCUMENT_START_TOKEN && + token.typ != yaml_STREAM_END_TOKEN { + // Parse an implicit document. + if !yaml_parser_process_directives(parser, nil, nil) { + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_BLOCK_NODE_STATE + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + } else if token.typ != yaml_STREAM_END_TOKEN { + // Parse an explicit document. + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + start_mark := token.start_mark + if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { + return false + } + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_DOCUMENT_START_TOKEN { + yaml_parser_set_parser_error(parser, + "did not find expected ", token.start_mark) + return false + } + parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) + parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE + end_mark := token.end_mark + + *event = yaml_event_t{ + typ: yaml_DOCUMENT_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + version_directive: version_directive, + tag_directives: tag_directives, + implicit: false, + } + skip_token(parser) + + } else { + // Parse the stream end. + parser.state = yaml_PARSE_END_STATE + *event = yaml_event_t{ + typ: yaml_STREAM_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + } + + return true +} + +// Parse the productions: +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// *********** +// +func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || + token.typ == yaml_TAG_DIRECTIVE_TOKEN || + token.typ == yaml_DOCUMENT_START_TOKEN || + token.typ == yaml_DOCUMENT_END_TOKEN || + token.typ == yaml_STREAM_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + return yaml_parser_process_empty_scalar(parser, event, + token.start_mark) + } + return yaml_parser_parse_node(parser, event, true, false) +} + +// Parse the productions: +// implicit_document ::= block_node DOCUMENT-END* +// ************* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// +func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + start_mark := token.start_mark + end_mark := token.start_mark + + implicit := true + if token.typ == yaml_DOCUMENT_END_TOKEN { + end_mark = token.end_mark + skip_token(parser) + implicit = false + } + + parser.tag_directives = parser.tag_directives[:0] + + parser.state = yaml_PARSE_DOCUMENT_START_STATE + *event = yaml_event_t{ + typ: yaml_DOCUMENT_END_EVENT, + start_mark: start_mark, + end_mark: end_mark, + implicit: implicit, + } + return true +} + +// Parse the productions: +// block_node_or_indentless_sequence ::= +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// block_node ::= ALIAS +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// flow_node ::= ALIAS +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// ************************* +// block_content ::= block_collection | flow_collection | SCALAR +// ****** +// flow_content ::= flow_collection | SCALAR +// ****** +func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { + //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_ALIAS_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + *event = yaml_event_t{ + typ: yaml_ALIAS_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + anchor: token.value, + } + skip_token(parser) + return true + } + + start_mark := token.start_mark + end_mark := token.start_mark + + var tag_token bool + var tag_handle, tag_suffix, anchor []byte + var tag_mark yaml_mark_t + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + start_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } else if token.typ == yaml_TAG_TOKEN { + tag_token = true + tag_handle = token.value + tag_suffix = token.suffix + start_mark = token.start_mark + tag_mark = token.start_mark + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_ANCHOR_TOKEN { + anchor = token.value + end_mark = token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + } + + var tag []byte + if tag_token { + if len(tag_handle) == 0 { + tag = tag_suffix + tag_suffix = nil + } else { + for i := range parser.tag_directives { + if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { + tag = append([]byte(nil), parser.tag_directives[i].prefix...) + tag = append(tag, tag_suffix...) + break + } + } + if len(tag) == 0 { + yaml_parser_set_parser_error_context(parser, + "while parsing a node", start_mark, + "found undefined tag handle", tag_mark) + return false + } + } + } + + implicit := len(tag) == 0 + if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_SCALAR_TOKEN { + var plain_implicit, quoted_implicit bool + end_mark = token.end_mark + if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { + plain_implicit = true + } else if len(tag) == 0 { + quoted_implicit = true + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + value: token.value, + implicit: plain_implicit, + quoted_implicit: quoted_implicit, + style: yaml_style_t(token.style), + } + skip_token(parser) + return true + } + if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { + // [Go] Some of the events below can be merged as they differ only on style. + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), + } + return true + } + if token.typ == yaml_FLOW_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_SEQUENCE_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), + } + return true + } + if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { + end_mark = token.end_mark + parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), + } + return true + } + if len(anchor) > 0 || len(tag) > 0 { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: start_mark, + end_mark: end_mark, + anchor: anchor, + tag: tag, + implicit: implicit, + quoted_implicit: false, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true + } + + context := "while parsing a flow node" + if block { + context = "while parsing a block node" + } + yaml_parser_set_parser_error_context(parser, context, start_mark, + "did not find expected node content", token.start_mark) + return false +} + +// Parse the productions: +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// ******************** *********** * ********* +// +func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } else { + parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } + if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block collection", context_mark, + "did not find expected '-' indicator", token.start_mark) +} + +// Parse the productions: +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// *********** * +func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_BLOCK_ENTRY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_BLOCK_ENTRY_TOKEN && + token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, true, false) + } + parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? + } + return true +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* +// +// BLOCK-END +// ********* +// +func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ == yaml_KEY_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } else { + parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + } else if token.typ == yaml_BLOCK_END_TOKEN { + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true + } + + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a block mapping", context_mark, + "did not find expected key", token.start_mark) +} + +// Parse the productions: +// block_mapping ::= BLOCK-MAPPING_START +// +// ((KEY block_node_or_indentless_sequence?)? +// +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END +// +// +func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + mark := token.end_mark + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_KEY_TOKEN && + token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_BLOCK_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, true, true) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) + } + parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence ::= FLOW-SEQUENCE-START +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow sequence", context_mark, + "did not find expected ',' or ']'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_START_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + implicit: true, + style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), + } + skip_token(parser) + return true + } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + + *event = yaml_event_t{ + typ: yaml_SEQUENCE_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + + skip_token(parser) + return true +} + +// +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// *** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + mark := token.end_mark + skip_token(parser) + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// ***** * +// +func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token := peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Parse the productions: +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * +// +func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { + token := peek_token(parser) + if token == nil { + return false + } + parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? + } + return true +} + +// Parse the productions: +// flow_mapping ::= FLOW-MAPPING-START +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * *** * +// +func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { + if first { + token := peek_token(parser) + parser.marks = append(parser.marks, token.start_mark) + skip_token(parser) + } + + token := peek_token(parser) + if token == nil { + return false + } + + if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + if !first { + if token.typ == yaml_FLOW_ENTRY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } else { + context_mark := parser.marks[len(parser.marks)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + return yaml_parser_set_parser_error_context(parser, + "while parsing a flow mapping", context_mark, + "did not find expected ',' or '}'", token.start_mark) + } + } + + if token.typ == yaml_KEY_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_VALUE_TOKEN && + token.typ != yaml_FLOW_ENTRY_TOKEN && + token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } else { + parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + + parser.state = parser.states[len(parser.states)-1] + parser.states = parser.states[:len(parser.states)-1] + parser.marks = parser.marks[:len(parser.marks)-1] + *event = yaml_event_t{ + typ: yaml_MAPPING_END_EVENT, + start_mark: token.start_mark, + end_mark: token.end_mark, + } + skip_token(parser) + return true +} + +// Parse the productions: +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * ***** * +// +func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { + token := peek_token(parser) + if token == nil { + return false + } + if empty { + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) + } + if token.typ == yaml_VALUE_TOKEN { + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { + parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) + return yaml_parser_parse_node(parser, event, false, false) + } + } + parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE + return yaml_parser_process_empty_scalar(parser, event, token.start_mark) +} + +// Generate an empty scalar event. +func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { + *event = yaml_event_t{ + typ: yaml_SCALAR_EVENT, + start_mark: mark, + end_mark: mark, + value: nil, // Empty + implicit: true, + style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), + } + return true +} + +var default_tag_directives = []yaml_tag_directive_t{ + {[]byte("!"), []byte("!")}, + {[]byte("!!"), []byte("tag:yaml.org,2002:")}, +} + +// Parse directives. +func yaml_parser_process_directives(parser *yaml_parser_t, + version_directive_ref **yaml_version_directive_t, + tag_directives_ref *[]yaml_tag_directive_t) bool { + + var version_directive *yaml_version_directive_t + var tag_directives []yaml_tag_directive_t + + token := peek_token(parser) + if token == nil { + return false + } + + for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { + if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { + if version_directive != nil { + yaml_parser_set_parser_error(parser, + "found duplicate %YAML directive", token.start_mark) + return false + } + if token.major != 1 || token.minor != 1 { + yaml_parser_set_parser_error(parser, + "found incompatible YAML document", token.start_mark) + return false + } + version_directive = &yaml_version_directive_t{ + major: token.major, + minor: token.minor, + } + } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { + value := yaml_tag_directive_t{ + handle: token.value, + prefix: token.prefix, + } + if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { + return false + } + tag_directives = append(tag_directives, value) + } + + skip_token(parser) + token = peek_token(parser) + if token == nil { + return false + } + } + + for i := range default_tag_directives { + if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { + return false + } + } + + if version_directive_ref != nil { + *version_directive_ref = version_directive + } + if tag_directives_ref != nil { + *tag_directives_ref = tag_directives + } + return true +} + +// Append a tag directive to the directives stack. +func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { + for i := range parser.tag_directives { + if bytes.Equal(value.handle, parser.tag_directives[i].handle) { + if allow_duplicates { + return true + } + return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) + } + } + + // [Go] I suspect the copy is unnecessary. This was likely done + // because there was no way to track ownership of the data. + value_copy := yaml_tag_directive_t{ + handle: make([]byte, len(value.handle)), + prefix: make([]byte, len(value.prefix)), + } + copy(value_copy.handle, value.handle) + copy(value_copy.prefix, value.prefix) + parser.tag_directives = append(parser.tag_directives, value_copy) + return true +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/readerc.go b/docs/generator/vendor/gopkg.in/yaml.v2/readerc.go new file mode 100644 index 0000000..f450791 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/readerc.go @@ -0,0 +1,394 @@ +package yaml + +import ( + "io" +) + +// Set the reader error and return 0. +func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { + parser.error = yaml_READER_ERROR + parser.problem = problem + parser.problem_offset = offset + parser.problem_value = value + return false +} + +// Byte order marks. +const ( + bom_UTF8 = "\xef\xbb\xbf" + bom_UTF16LE = "\xff\xfe" + bom_UTF16BE = "\xfe\xff" +) + +// Determine the input stream encoding by checking the BOM symbol. If no BOM is +// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. +func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { + // Ensure that we had enough bytes in the raw buffer. + for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { + if !yaml_parser_update_raw_buffer(parser) { + return false + } + } + + // Determine the encoding. + buf := parser.raw_buffer + pos := parser.raw_buffer_pos + avail := len(buf) - pos + if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { + parser.encoding = yaml_UTF16LE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { + parser.encoding = yaml_UTF16BE_ENCODING + parser.raw_buffer_pos += 2 + parser.offset += 2 + } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { + parser.encoding = yaml_UTF8_ENCODING + parser.raw_buffer_pos += 3 + parser.offset += 3 + } else { + parser.encoding = yaml_UTF8_ENCODING + } + return true +} + +// Update the raw buffer. +func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { + size_read := 0 + + // Return if the raw buffer is full. + if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { + return true + } + + // Return on EOF. + if parser.eof { + return true + } + + // Move the remaining bytes in the raw buffer to the beginning. + if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { + copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) + } + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] + parser.raw_buffer_pos = 0 + + // Call the read handler to fill the buffer. + size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) + parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] + if err == io.EOF { + parser.eof = true + } else if err != nil { + return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) + } + return true +} + +// Ensure that the buffer contains at least `length` characters. +// Return true on success, false on failure. +// +// The length is supposed to be significantly less that the buffer size. +func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { + if parser.read_handler == nil { + panic("read handler must be set") + } + + // If the EOF flag is set and the raw buffer is empty, do nothing. + if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { + return true + } + + // Return if the buffer contains enough characters. + if parser.unread >= length { + return true + } + + // Determine the input encoding if it is not known yet. + if parser.encoding == yaml_ANY_ENCODING { + if !yaml_parser_determine_encoding(parser) { + return false + } + } + + // Move the unread characters to the beginning of the buffer. + buffer_len := len(parser.buffer) + if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { + copy(parser.buffer, parser.buffer[parser.buffer_pos:]) + buffer_len -= parser.buffer_pos + parser.buffer_pos = 0 + } else if parser.buffer_pos == buffer_len { + buffer_len = 0 + parser.buffer_pos = 0 + } + + // Open the whole buffer for writing, and cut it before returning. + parser.buffer = parser.buffer[:cap(parser.buffer)] + + // Fill the buffer until it has enough characters. + first := true + for parser.unread < length { + + // Fill the raw buffer if necessary. + if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { + if !yaml_parser_update_raw_buffer(parser) { + parser.buffer = parser.buffer[:buffer_len] + return false + } + } + first = false + + // Decode the raw buffer. + inner: + for parser.raw_buffer_pos != len(parser.raw_buffer) { + var value rune + var width int + + raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos + + // Decode the next character. + switch parser.encoding { + case yaml_UTF8_ENCODING: + // Decode a UTF-8 character. Check RFC 3629 + // (http://www.ietf.org/rfc/rfc3629.txt) for more details. + // + // The following table (taken from the RFC) is used for + // decoding. + // + // Char. number range | UTF-8 octet sequence + // (hexadecimal) | (binary) + // --------------------+------------------------------------ + // 0000 0000-0000 007F | 0xxxxxxx + // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + // + // Additionally, the characters in the range 0xD800-0xDFFF + // are prohibited as they are reserved for use with UTF-16 + // surrogate pairs. + + // Determine the length of the UTF-8 sequence. + octet := parser.raw_buffer[parser.raw_buffer_pos] + switch { + case octet&0x80 == 0x00: + width = 1 + case octet&0xE0 == 0xC0: + width = 2 + case octet&0xF0 == 0xE0: + width = 3 + case octet&0xF8 == 0xF0: + width = 4 + default: + // The leading octet is invalid. + return yaml_parser_set_reader_error(parser, + "invalid leading UTF-8 octet", + parser.offset, int(octet)) + } + + // Check if the raw buffer contains an incomplete character. + if width > raw_unread { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-8 octet sequence", + parser.offset, -1) + } + break inner + } + + // Decode the leading octet. + switch { + case octet&0x80 == 0x00: + value = rune(octet & 0x7F) + case octet&0xE0 == 0xC0: + value = rune(octet & 0x1F) + case octet&0xF0 == 0xE0: + value = rune(octet & 0x0F) + case octet&0xF8 == 0xF0: + value = rune(octet & 0x07) + default: + value = 0 + } + + // Check and decode the trailing octets. + for k := 1; k < width; k++ { + octet = parser.raw_buffer[parser.raw_buffer_pos+k] + + // Check if the octet is valid. + if (octet & 0xC0) != 0x80 { + return yaml_parser_set_reader_error(parser, + "invalid trailing UTF-8 octet", + parser.offset+k, int(octet)) + } + + // Decode the octet. + value = (value << 6) + rune(octet&0x3F) + } + + // Check the length of the sequence against the value. + switch { + case width == 1: + case width == 2 && value >= 0x80: + case width == 3 && value >= 0x800: + case width == 4 && value >= 0x10000: + default: + return yaml_parser_set_reader_error(parser, + "invalid length of a UTF-8 sequence", + parser.offset, -1) + } + + // Check the range of the value. + if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { + return yaml_parser_set_reader_error(parser, + "invalid Unicode character", + parser.offset, int(value)) + } + + case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: + var low, high int + if parser.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + low, high = 1, 0 + } + + // The UTF-16 encoding is not as simple as one might + // naively think. Check RFC 2781 + // (http://www.ietf.org/rfc/rfc2781.txt). + // + // Normally, two subsequent bytes describe a Unicode + // character. However a special technique (called a + // surrogate pair) is used for specifying character + // values larger than 0xFFFF. + // + // A surrogate pair consists of two pseudo-characters: + // high surrogate area (0xD800-0xDBFF) + // low surrogate area (0xDC00-0xDFFF) + // + // The following formulas are used for decoding + // and encoding characters using surrogate pairs: + // + // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) + // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) + // W1 = 110110yyyyyyyyyy + // W2 = 110111xxxxxxxxxx + // + // where U is the character value, W1 is the high surrogate + // area, W2 is the low surrogate area. + + // Check for incomplete UTF-16 character. + if raw_unread < 2 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 character", + parser.offset, -1) + } + break inner + } + + // Get the character. + value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) + + // Check for unexpected low surrogate area. + if value&0xFC00 == 0xDC00 { + return yaml_parser_set_reader_error(parser, + "unexpected low surrogate area", + parser.offset, int(value)) + } + + // Check for a high surrogate area. + if value&0xFC00 == 0xD800 { + width = 4 + + // Check for incomplete surrogate pair. + if raw_unread < 4 { + if parser.eof { + return yaml_parser_set_reader_error(parser, + "incomplete UTF-16 surrogate pair", + parser.offset, -1) + } + break inner + } + + // Get the next character. + value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + + (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) + + // Check for a low surrogate area. + if value2&0xFC00 != 0xDC00 { + return yaml_parser_set_reader_error(parser, + "expected low surrogate area", + parser.offset+2, int(value2)) + } + + // Generate the value of the surrogate pair. + value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) + } else { + width = 2 + } + + default: + panic("impossible") + } + + // Check if the character is in the allowed range: + // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) + // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) + // | [#x10000-#x10FFFF] (32 bit) + switch { + case value == 0x09: + case value == 0x0A: + case value == 0x0D: + case value >= 0x20 && value <= 0x7E: + case value == 0x85: + case value >= 0xA0 && value <= 0xD7FF: + case value >= 0xE000 && value <= 0xFFFD: + case value >= 0x10000 && value <= 0x10FFFF: + default: + return yaml_parser_set_reader_error(parser, + "control characters are not allowed", + parser.offset, int(value)) + } + + // Move the raw pointers. + parser.raw_buffer_pos += width + parser.offset += width + + // Finally put the character into the buffer. + if value <= 0x7F { + // 0000 0000-0000 007F . 0xxxxxxx + parser.buffer[buffer_len+0] = byte(value) + buffer_len += 1 + } else if value <= 0x7FF { + // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) + parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) + buffer_len += 2 + } else if value <= 0xFFFF { + // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) + buffer_len += 3 + } else { + // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) + parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) + parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) + parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) + buffer_len += 4 + } + + parser.unread++ + } + + // On EOF, put NUL into the buffer and return. + if parser.eof { + parser.buffer[buffer_len] = 0 + buffer_len++ + parser.unread++ + break + } + } + parser.buffer = parser.buffer[:buffer_len] + return true +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/resolve.go b/docs/generator/vendor/gopkg.in/yaml.v2/resolve.go new file mode 100644 index 0000000..232313c --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/resolve.go @@ -0,0 +1,208 @@ +package yaml + +import ( + "encoding/base64" + "math" + "regexp" + "strconv" + "strings" + "unicode/utf8" +) + +type resolveMapItem struct { + value interface{} + tag string +} + +var resolveTable = make([]byte, 256) +var resolveMap = make(map[string]resolveMapItem) + +func init() { + t := resolveTable + t[int('+')] = 'S' // Sign + t[int('-')] = 'S' + for _, c := range "0123456789" { + t[int(c)] = 'D' // Digit + } + for _, c := range "yYnNtTfFoO~" { + t[int(c)] = 'M' // In map + } + t[int('.')] = '.' // Float (potentially in map) + + var resolveMapList = []struct { + v interface{} + tag string + l []string + }{ + {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}}, + {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}}, + {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}}, + {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}}, + {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}}, + {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}}, + {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}}, + {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}}, + {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}}, + {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}}, + {"<<", yaml_MERGE_TAG, []string{"<<"}}, + } + + m := resolveMap + for _, item := range resolveMapList { + for _, s := range item.l { + m[s] = resolveMapItem{item.v, item.tag} + } + } +} + +const longTagPrefix = "tag:yaml.org,2002:" + +func shortTag(tag string) string { + // TODO This can easily be made faster and produce less garbage. + if strings.HasPrefix(tag, longTagPrefix) { + return "!!" + tag[len(longTagPrefix):] + } + return tag +} + +func longTag(tag string) string { + if strings.HasPrefix(tag, "!!") { + return longTagPrefix + tag[2:] + } + return tag +} + +func resolvableTag(tag string) bool { + switch tag { + case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG: + return true + } + return false +} + +var yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\.?[0-9]+([eE][-+][0-9]+)?$`) + +func resolve(tag string, in string) (rtag string, out interface{}) { + if !resolvableTag(tag) { + return tag, in + } + + defer func() { + switch tag { + case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG: + return + } + failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) + }() + + // Any data is accepted as a !!str or !!binary. + // Otherwise, the prefix is enough of a hint about what it might be. + hint := byte('N') + if in != "" { + hint = resolveTable[in[0]] + } + if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG { + // Handle things we can lookup in a map. + if item, ok := resolveMap[in]; ok { + return item.tag, item.value + } + + // Base 60 floats are a bad idea, were dropped in YAML 1.2, and + // are purposefully unsupported here. They're still quoted on + // the way out for compatibility with other parser, though. + + switch hint { + case 'M': + // We've already checked the map above. + + case '.': + // Not in the map, so maybe a normal float. + floatv, err := strconv.ParseFloat(in, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + + case 'D', 'S': + // Int, float, or timestamp. + plain := strings.Replace(in, "_", "", -1) + intv, err := strconv.ParseInt(plain, 0, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain, 0, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + if yamlStyleFloat.MatchString(plain) { + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } + } + if strings.HasPrefix(plain, "0b") { + intv, err := strconv.ParseInt(plain[2:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, int(intv) + } else { + return yaml_INT_TAG, intv + } + } + uintv, err := strconv.ParseUint(plain[2:], 2, 64) + if err == nil { + return yaml_INT_TAG, uintv + } + } else if strings.HasPrefix(plain, "-0b") { + intv, err := strconv.ParseInt(plain[3:], 2, 64) + if err == nil { + if intv == int64(int(intv)) { + return yaml_INT_TAG, -int(intv) + } else { + return yaml_INT_TAG, -intv + } + } + } + // XXX Handle timestamps here. + + default: + panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")") + } + } + if tag == yaml_BINARY_TAG { + return yaml_BINARY_TAG, in + } + if utf8.ValidString(in) { + return yaml_STR_TAG, in + } + return yaml_BINARY_TAG, encodeBase64(in) +} + +// encodeBase64 encodes s as base64 that is broken up into multiple lines +// as appropriate for the resulting length. +func encodeBase64(s string) string { + const lineLen = 70 + encLen := base64.StdEncoding.EncodedLen(len(s)) + lines := encLen/lineLen + 1 + buf := make([]byte, encLen*2+lines) + in := buf[0:encLen] + out := buf[encLen:] + base64.StdEncoding.Encode(in, []byte(s)) + k := 0 + for i := 0; i < len(in); i += lineLen { + j := i + lineLen + if j > len(in) { + j = len(in) + } + k += copy(out[k:], in[i:j]) + if lines > 1 { + out[k] = '\n' + k++ + } + } + return string(out[:k]) +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/scannerc.go b/docs/generator/vendor/gopkg.in/yaml.v2/scannerc.go new file mode 100644 index 0000000..0744844 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/scannerc.go @@ -0,0 +1,2711 @@ +package yaml + +import ( + "bytes" + "fmt" +) + +// Introduction +// ************ +// +// The following notes assume that you are familiar with the YAML specification +// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in +// some cases we are less restrictive that it requires. +// +// The process of transforming a YAML stream into a sequence of events is +// divided on two steps: Scanning and Parsing. +// +// The Scanner transforms the input stream into a sequence of tokens, while the +// parser transform the sequence of tokens produced by the Scanner into a +// sequence of parsing events. +// +// The Scanner is rather clever and complicated. The Parser, on the contrary, +// is a straightforward implementation of a recursive-descendant parser (or, +// LL(1) parser, as it is usually called). +// +// Actually there are two issues of Scanning that might be called "clever", the +// rest is quite straightforward. The issues are "block collection start" and +// "simple keys". Both issues are explained below in details. +// +// Here the Scanning step is explained and implemented. We start with the list +// of all the tokens produced by the Scanner together with short descriptions. +// +// Now, tokens: +// +// STREAM-START(encoding) # The stream start. +// STREAM-END # The stream end. +// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. +// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. +// DOCUMENT-START # '---' +// DOCUMENT-END # '...' +// BLOCK-SEQUENCE-START # Indentation increase denoting a block +// BLOCK-MAPPING-START # sequence or a block mapping. +// BLOCK-END # Indentation decrease. +// FLOW-SEQUENCE-START # '[' +// FLOW-SEQUENCE-END # ']' +// BLOCK-SEQUENCE-START # '{' +// BLOCK-SEQUENCE-END # '}' +// BLOCK-ENTRY # '-' +// FLOW-ENTRY # ',' +// KEY # '?' or nothing (simple keys). +// VALUE # ':' +// ALIAS(anchor) # '*anchor' +// ANCHOR(anchor) # '&anchor' +// TAG(handle,suffix) # '!handle!suffix' +// SCALAR(value,style) # A scalar. +// +// The following two tokens are "virtual" tokens denoting the beginning and the +// end of the stream: +// +// STREAM-START(encoding) +// STREAM-END +// +// We pass the information about the input stream encoding with the +// STREAM-START token. +// +// The next two tokens are responsible for tags: +// +// VERSION-DIRECTIVE(major,minor) +// TAG-DIRECTIVE(handle,prefix) +// +// Example: +// +// %YAML 1.1 +// %TAG ! !foo +// %TAG !yaml! tag:yaml.org,2002: +// --- +// +// The correspoding sequence of tokens: +// +// STREAM-START(utf-8) +// VERSION-DIRECTIVE(1,1) +// TAG-DIRECTIVE("!","!foo") +// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") +// DOCUMENT-START +// STREAM-END +// +// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole +// line. +// +// The document start and end indicators are represented by: +// +// DOCUMENT-START +// DOCUMENT-END +// +// Note that if a YAML stream contains an implicit document (without '---' +// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be +// produced. +// +// In the following examples, we present whole documents together with the +// produced tokens. +// +// 1. An implicit document: +// +// 'a scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// STREAM-END +// +// 2. An explicit document: +// +// --- +// 'a scalar' +// ... +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// SCALAR("a scalar",single-quoted) +// DOCUMENT-END +// STREAM-END +// +// 3. Several documents in a stream: +// +// 'a scalar' +// --- +// 'another scalar' +// --- +// 'yet another scalar' +// +// Tokens: +// +// STREAM-START(utf-8) +// SCALAR("a scalar",single-quoted) +// DOCUMENT-START +// SCALAR("another scalar",single-quoted) +// DOCUMENT-START +// SCALAR("yet another scalar",single-quoted) +// STREAM-END +// +// We have already introduced the SCALAR token above. The following tokens are +// used to describe aliases, anchors, tag, and scalars: +// +// ALIAS(anchor) +// ANCHOR(anchor) +// TAG(handle,suffix) +// SCALAR(value,style) +// +// The following series of examples illustrate the usage of these tokens: +// +// 1. A recursive sequence: +// +// &A [ *A ] +// +// Tokens: +// +// STREAM-START(utf-8) +// ANCHOR("A") +// FLOW-SEQUENCE-START +// ALIAS("A") +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A tagged scalar: +// +// !!float "3.14" # A good approximation. +// +// Tokens: +// +// STREAM-START(utf-8) +// TAG("!!","float") +// SCALAR("3.14",double-quoted) +// STREAM-END +// +// 3. Various scalar styles: +// +// --- # Implicit empty plain scalars do not produce tokens. +// --- a plain scalar +// --- 'a single-quoted scalar' +// --- "a double-quoted scalar" +// --- |- +// a literal scalar +// --- >- +// a folded +// scalar +// +// Tokens: +// +// STREAM-START(utf-8) +// DOCUMENT-START +// DOCUMENT-START +// SCALAR("a plain scalar",plain) +// DOCUMENT-START +// SCALAR("a single-quoted scalar",single-quoted) +// DOCUMENT-START +// SCALAR("a double-quoted scalar",double-quoted) +// DOCUMENT-START +// SCALAR("a literal scalar",literal) +// DOCUMENT-START +// SCALAR("a folded scalar",folded) +// STREAM-END +// +// Now it's time to review collection-related tokens. We will start with +// flow collections: +// +// FLOW-SEQUENCE-START +// FLOW-SEQUENCE-END +// FLOW-MAPPING-START +// FLOW-MAPPING-END +// FLOW-ENTRY +// KEY +// VALUE +// +// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and +// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' +// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the +// indicators '?' and ':', which are used for denoting mapping keys and values, +// are represented by the KEY and VALUE tokens. +// +// The following examples show flow collections: +// +// 1. A flow sequence: +// +// [item 1, item 2, item 3] +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-SEQUENCE-START +// SCALAR("item 1",plain) +// FLOW-ENTRY +// SCALAR("item 2",plain) +// FLOW-ENTRY +// SCALAR("item 3",plain) +// FLOW-SEQUENCE-END +// STREAM-END +// +// 2. A flow mapping: +// +// { +// a simple key: a value, # Note that the KEY token is produced. +// ? a complex key: another value, +// } +// +// Tokens: +// +// STREAM-START(utf-8) +// FLOW-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// FLOW-ENTRY +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// FLOW-ENTRY +// FLOW-MAPPING-END +// STREAM-END +// +// A simple key is a key which is not denoted by the '?' indicator. Note that +// the Scanner still produce the KEY token whenever it encounters a simple key. +// +// For scanning block collections, the following tokens are used (note that we +// repeat KEY and VALUE here): +// +// BLOCK-SEQUENCE-START +// BLOCK-MAPPING-START +// BLOCK-END +// BLOCK-ENTRY +// KEY +// VALUE +// +// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation +// increase that precedes a block collection (cf. the INDENT token in Python). +// The token BLOCK-END denote indentation decrease that ends a block collection +// (cf. the DEDENT token in Python). However YAML has some syntax pecularities +// that makes detections of these tokens more complex. +// +// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators +// '-', '?', and ':' correspondingly. +// +// The following examples show how the tokens BLOCK-SEQUENCE-START, +// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: +// +// 1. Block sequences: +// +// - item 1 +// - item 2 +// - +// - item 3.1 +// - item 3.2 +// - +// key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 3.1",plain) +// BLOCK-ENTRY +// SCALAR("item 3.2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Block mappings: +// +// a simple key: a value # The KEY token is produced here. +// ? a complex key +// : another value +// a mapping: +// key 1: value 1 +// key 2: value 2 +// a sequence: +// - item 1 +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a simple key",plain) +// VALUE +// SCALAR("a value",plain) +// KEY +// SCALAR("a complex key",plain) +// VALUE +// SCALAR("another value",plain) +// KEY +// SCALAR("a mapping",plain) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML does not always require to start a new block collection from a new +// line. If the current line contains only '-', '?', and ':' indicators, a new +// block collection may start at the current line. The following examples +// illustrate this case: +// +// 1. Collections in a sequence: +// +// - - item 1 +// - item 2 +// - key 1: value 1 +// key 2: value 2 +// - ? complex key +// : complex value +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-ENTRY +// BLOCK-MAPPING-START +// KEY +// SCALAR("complex key") +// VALUE +// SCALAR("complex value") +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// 2. Collections in a mapping: +// +// ? a sequence +// : - item 1 +// - item 2 +// ? a mapping +// : key 1: value 1 +// key 2: value 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("a sequence",plain) +// VALUE +// BLOCK-SEQUENCE-START +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// KEY +// SCALAR("a mapping",plain) +// VALUE +// BLOCK-MAPPING-START +// KEY +// SCALAR("key 1",plain) +// VALUE +// SCALAR("value 1",plain) +// KEY +// SCALAR("key 2",plain) +// VALUE +// SCALAR("value 2",plain) +// BLOCK-END +// BLOCK-END +// STREAM-END +// +// YAML also permits non-indented sequences if they are included into a block +// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: +// +// key: +// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. +// - item 2 +// +// Tokens: +// +// STREAM-START(utf-8) +// BLOCK-MAPPING-START +// KEY +// SCALAR("key",plain) +// VALUE +// BLOCK-ENTRY +// SCALAR("item 1",plain) +// BLOCK-ENTRY +// SCALAR("item 2",plain) +// BLOCK-END +// + +// Ensure that the buffer contains the required number of characters. +// Return true on success, false on failure (reader error or memory error). +func cache(parser *yaml_parser_t, length int) bool { + // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) + return parser.unread >= length || yaml_parser_update_buffer(parser, length) +} + +// Advance the buffer pointer. +func skip(parser *yaml_parser_t) { + parser.mark.index++ + parser.mark.column++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) +} + +func skip_line(parser *yaml_parser_t) { + if is_crlf(parser.buffer, parser.buffer_pos) { + parser.mark.index += 2 + parser.mark.column = 0 + parser.mark.line++ + parser.unread -= 2 + parser.buffer_pos += 2 + } else if is_break(parser.buffer, parser.buffer_pos) { + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) + } +} + +// Copy a character to a string buffer and advance pointers. +func read(parser *yaml_parser_t, s []byte) []byte { + w := width(parser.buffer[parser.buffer_pos]) + if w == 0 { + panic("invalid character sequence") + } + if len(s) == 0 { + s = make([]byte, 0, 32) + } + if w == 1 && len(s)+w <= cap(s) { + s = s[:len(s)+1] + s[len(s)-1] = parser.buffer[parser.buffer_pos] + parser.buffer_pos++ + } else { + s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) + parser.buffer_pos += w + } + parser.mark.index++ + parser.mark.column++ + parser.unread-- + return s +} + +// Copy a line break character to a string buffer and advance pointers. +func read_line(parser *yaml_parser_t, s []byte) []byte { + buf := parser.buffer + pos := parser.buffer_pos + switch { + case buf[pos] == '\r' && buf[pos+1] == '\n': + // CR LF . LF + s = append(s, '\n') + parser.buffer_pos += 2 + parser.mark.index++ + parser.unread-- + case buf[pos] == '\r' || buf[pos] == '\n': + // CR|LF . LF + s = append(s, '\n') + parser.buffer_pos += 1 + case buf[pos] == '\xC2' && buf[pos+1] == '\x85': + // NEL . LF + s = append(s, '\n') + parser.buffer_pos += 2 + case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): + // LS|PS . LS|PS + s = append(s, buf[parser.buffer_pos:pos+3]...) + parser.buffer_pos += 3 + default: + return s + } + parser.mark.index++ + parser.mark.column = 0 + parser.mark.line++ + parser.unread-- + return s +} + +// Get the next token. +func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { + // Erase the token object. + *token = yaml_token_t{} // [Go] Is this necessary? + + // No tokens after STREAM-END or error. + if parser.stream_end_produced || parser.error != yaml_NO_ERROR { + return true + } + + // Ensure that the tokens queue contains enough tokens. + if !parser.token_available { + if !yaml_parser_fetch_more_tokens(parser) { + return false + } + } + + // Fetch the next token from the queue. + *token = parser.tokens[parser.tokens_head] + parser.tokens_head++ + parser.tokens_parsed++ + parser.token_available = false + + if token.typ == yaml_STREAM_END_TOKEN { + parser.stream_end_produced = true + } + return true +} + +// Set the scanner error and return false. +func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { + parser.error = yaml_SCANNER_ERROR + parser.context = context + parser.context_mark = context_mark + parser.problem = problem + parser.problem_mark = parser.mark + return false +} + +func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { + context := "while parsing a tag" + if directive { + context = "while parsing a %TAG directive" + } + return yaml_parser_set_scanner_error(parser, context, context_mark, problem) +} + +func trace(args ...interface{}) func() { + pargs := append([]interface{}{"+++"}, args...) + fmt.Println(pargs...) + pargs = append([]interface{}{"---"}, args...) + return func() { fmt.Println(pargs...) } +} + +// Ensure that the tokens queue contains at least one token which can be +// returned to the Parser. +func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { + // While we need more tokens to fetch, do it. + for { + // Check if we really need to fetch more tokens. + need_more_tokens := false + + if parser.tokens_head == len(parser.tokens) { + // Queue is empty. + need_more_tokens = true + } else { + // Check if any potential simple key may occupy the head position. + if !yaml_parser_stale_simple_keys(parser) { + return false + } + + for i := range parser.simple_keys { + simple_key := &parser.simple_keys[i] + if simple_key.possible && simple_key.token_number == parser.tokens_parsed { + need_more_tokens = true + break + } + } + } + + // We are finished. + if !need_more_tokens { + break + } + // Fetch the next token. + if !yaml_parser_fetch_next_token(parser) { + return false + } + } + + parser.token_available = true + return true +} + +// The dispatcher for token fetchers. +func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { + // Ensure that the buffer is initialized. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check if we just started scanning. Fetch STREAM-START then. + if !parser.stream_start_produced { + return yaml_parser_fetch_stream_start(parser) + } + + // Eat whitespaces and comments until we reach the next token. + if !yaml_parser_scan_to_next_token(parser) { + return false + } + + // Remove obsolete potential simple keys. + if !yaml_parser_stale_simple_keys(parser) { + return false + } + + // Check the indentation level against the current column. + if !yaml_parser_unroll_indent(parser, parser.mark.column) { + return false + } + + // Ensure that the buffer contains at least 4 characters. 4 is the length + // of the longest indicators ('--- ' and '... '). + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + // Is it the end of the stream? + if is_z(parser.buffer, parser.buffer_pos) { + return yaml_parser_fetch_stream_end(parser) + } + + // Is it a directive? + if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { + return yaml_parser_fetch_directive(parser) + } + + buf := parser.buffer + pos := parser.buffer_pos + + // Is it the document start indicator? + if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) + } + + // Is it the document end indicator? + if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { + return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) + } + + // Is it the flow sequence start indicator? + if buf[pos] == '[' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) + } + + // Is it the flow mapping start indicator? + if parser.buffer[parser.buffer_pos] == '{' { + return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) + } + + // Is it the flow sequence end indicator? + if parser.buffer[parser.buffer_pos] == ']' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_SEQUENCE_END_TOKEN) + } + + // Is it the flow mapping end indicator? + if parser.buffer[parser.buffer_pos] == '}' { + return yaml_parser_fetch_flow_collection_end(parser, + yaml_FLOW_MAPPING_END_TOKEN) + } + + // Is it the flow entry indicator? + if parser.buffer[parser.buffer_pos] == ',' { + return yaml_parser_fetch_flow_entry(parser) + } + + // Is it the block entry indicator? + if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { + return yaml_parser_fetch_block_entry(parser) + } + + // Is it the key indicator? + if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_key(parser) + } + + // Is it the value indicator? + if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_value(parser) + } + + // Is it an alias? + if parser.buffer[parser.buffer_pos] == '*' { + return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) + } + + // Is it an anchor? + if parser.buffer[parser.buffer_pos] == '&' { + return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) + } + + // Is it a tag? + if parser.buffer[parser.buffer_pos] == '!' { + return yaml_parser_fetch_tag(parser) + } + + // Is it a literal scalar? + if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, true) + } + + // Is it a folded scalar? + if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { + return yaml_parser_fetch_block_scalar(parser, false) + } + + // Is it a single-quoted scalar? + if parser.buffer[parser.buffer_pos] == '\'' { + return yaml_parser_fetch_flow_scalar(parser, true) + } + + // Is it a double-quoted scalar? + if parser.buffer[parser.buffer_pos] == '"' { + return yaml_parser_fetch_flow_scalar(parser, false) + } + + // Is it a plain scalar? + // + // A plain scalar may start with any non-blank characters except + // + // '-', '?', ':', ',', '[', ']', '{', '}', + // '#', '&', '*', '!', '|', '>', '\'', '\"', + // '%', '@', '`'. + // + // In the block context (and, for the '-' indicator, in the flow context + // too), it may also start with the characters + // + // '-', '?', ':' + // + // if it is followed by a non-space character. + // + // The last rule is more restrictive than the specification requires. + // [Go] Make this logic more reasonable. + //switch parser.buffer[parser.buffer_pos] { + //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': + //} + if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || + parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || + parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || + (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level == 0 && + (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && + !is_blankz(parser.buffer, parser.buffer_pos+1)) { + return yaml_parser_fetch_plain_scalar(parser) + } + + // If we don't determine the token type so far, it is an error. + return yaml_parser_set_scanner_error(parser, + "while scanning for the next token", parser.mark, + "found character that cannot start any token") +} + +// Check the list of potential simple keys and remove the positions that +// cannot contain simple keys anymore. +func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool { + // Check for a potential simple key for each flow level. + for i := range parser.simple_keys { + simple_key := &parser.simple_keys[i] + + // The specification requires that a simple key + // + // - is limited to a single line, + // - is shorter than 1024 characters. + if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) { + + // Check if the potential simple key to be removed is required. + if simple_key.required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + } + } + return true +} + +// Check if a simple key may start at the current position and add it if +// needed. +func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { + // A simple key is required at the current position if the scanner is in + // the block context and the current column coincides with the indentation + // level. + + required := parser.flow_level == 0 && parser.indent == parser.mark.column + + // A simple key is required only when it is the first token in the current + // line. Therefore it is always allowed. But we add a check anyway. + if required && !parser.simple_key_allowed { + panic("should not happen") + } + + // + // If the current position may start a simple key, save it. + // + if parser.simple_key_allowed { + simple_key := yaml_simple_key_t{ + possible: true, + required: required, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + } + simple_key.mark = parser.mark + + if !yaml_parser_remove_simple_key(parser) { + return false + } + parser.simple_keys[len(parser.simple_keys)-1] = simple_key + } + return true +} + +// Remove a potential simple key at the current flow level. +func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { + i := len(parser.simple_keys) - 1 + if parser.simple_keys[i].possible { + // If the key is required, it is an error. + if parser.simple_keys[i].required { + return yaml_parser_set_scanner_error(parser, + "while scanning a simple key", parser.simple_keys[i].mark, + "could not find expected ':'") + } + } + // Remove the key from the stack. + parser.simple_keys[i].possible = false + return true +} + +// Increase the flow level and resize the simple key list if needed. +func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { + // Reset the simple key on the next level. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + // Increase the flow level. + parser.flow_level++ + return true +} + +// Decrease the flow level. +func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { + if parser.flow_level > 0 { + parser.flow_level-- + parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1] + } + return true +} + +// Push the current indentation level to the stack and set the new level +// the current column is greater than the indentation level. In this case, +// append or insert the specified token into the token queue. +func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + if parser.indent < column { + // Push the current indentation level to the stack and set the new + // indentation level. + parser.indents = append(parser.indents, parser.indent) + parser.indent = column + + // Create a token and insert it into the queue. + token := yaml_token_t{ + typ: typ, + start_mark: mark, + end_mark: mark, + } + if number > -1 { + number -= parser.tokens_parsed + } + yaml_insert_token(parser, number, &token) + } + return true +} + +// Pop indentation levels from the indents stack until the current level +// becomes less or equal to the column. For each indentation level, append +// the BLOCK-END token. +func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { + // In the flow context, do nothing. + if parser.flow_level > 0 { + return true + } + + // Loop through the indentation levels in the stack. + for parser.indent > column { + // Create a token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + + // Pop the indentation level. + parser.indent = parser.indents[len(parser.indents)-1] + parser.indents = parser.indents[:len(parser.indents)-1] + } + return true +} + +// Initialize the scanner and produce the STREAM-START token. +func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { + + // Set the initial indentation. + parser.indent = -1 + + // Initialize the simple key stack. + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + + // A simple key is allowed at the beginning of the stream. + parser.simple_key_allowed = true + + // We have started. + parser.stream_start_produced = true + + // Create the STREAM-START token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_START_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + encoding: parser.encoding, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the STREAM-END token and shut down the scanner. +func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { + + // Force new line. + if parser.mark.column != 0 { + parser.mark.column = 0 + parser.mark.line++ + } + + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the STREAM-END token and append it to the queue. + token := yaml_token_t{ + typ: yaml_STREAM_END_TOKEN, + start_mark: parser.mark, + end_mark: parser.mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. +func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. + token := yaml_token_t{} + if !yaml_parser_scan_directive(parser, &token) { + return false + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the DOCUMENT-START or DOCUMENT-END token. +func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset the indentation level. + if !yaml_parser_unroll_indent(parser, -1) { + return false + } + + // Reset simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + parser.simple_key_allowed = false + + // Consume the token. + start_mark := parser.mark + + skip(parser) + skip(parser) + skip(parser) + + end_mark := parser.mark + + // Create the DOCUMENT-START or DOCUMENT-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. +func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // The indicators '[' and '{' may start a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // Increase the flow level. + if !yaml_parser_increase_flow_level(parser) { + return false + } + + // A simple key may follow the indicators '[' and '{'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. +func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // Reset any potential simple key on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Decrease the flow level. + if !yaml_parser_decrease_flow_level(parser) { + return false + } + + // No simple keys after the indicators ']' and '}'. + parser.simple_key_allowed = false + + // Consume the token. + + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. + token := yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + } + // Append the token to the queue. + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the FLOW-ENTRY token. +func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after ','. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the FLOW-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_FLOW_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the BLOCK-ENTRY token. +func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { + // Check if the scanner is in the block context. + if parser.flow_level == 0 { + // Check if we are allowed to start a new entry. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "block sequence entries are not allowed in this context") + } + // Add the BLOCK-SEQUENCE-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { + return false + } + } else { + // It is an error for the '-' indicator to occur in the flow context, + // but we let the Parser detect and report about it because the Parser + // is able to point to the context. + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '-'. + parser.simple_key_allowed = true + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the BLOCK-ENTRY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_BLOCK_ENTRY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the KEY token. +func yaml_parser_fetch_key(parser *yaml_parser_t) bool { + + // In the block context, additional checks are required. + if parser.flow_level == 0 { + // Check if we are allowed to start a new key (not nessesary simple). + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping keys are not allowed in this context") + } + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Reset any potential simple keys on the current flow level. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // Simple keys are allowed after '?' in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the KEY token and append it to the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the VALUE token. +func yaml_parser_fetch_value(parser *yaml_parser_t) bool { + + simple_key := &parser.simple_keys[len(parser.simple_keys)-1] + + // Have we found a simple key? + if simple_key.possible { + // Create the KEY token and insert it into the queue. + token := yaml_token_t{ + typ: yaml_KEY_TOKEN, + start_mark: simple_key.mark, + end_mark: simple_key.mark, + } + yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) + + // In the block context, we may need to add the BLOCK-MAPPING-START token. + if !yaml_parser_roll_indent(parser, simple_key.mark.column, + simple_key.token_number, + yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { + return false + } + + // Remove the simple key. + simple_key.possible = false + + // A simple key cannot follow another simple key. + parser.simple_key_allowed = false + + } else { + // The ':' indicator follows a complex key. + + // In the block context, extra checks are required. + if parser.flow_level == 0 { + + // Check if we are allowed to start a complex value. + if !parser.simple_key_allowed { + return yaml_parser_set_scanner_error(parser, "", parser.mark, + "mapping values are not allowed in this context") + } + + // Add the BLOCK-MAPPING-START token if needed. + if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { + return false + } + } + + // Simple keys after ':' are allowed in the block context. + parser.simple_key_allowed = parser.flow_level == 0 + } + + // Consume the token. + start_mark := parser.mark + skip(parser) + end_mark := parser.mark + + // Create the VALUE token and append it to the queue. + token := yaml_token_t{ + typ: yaml_VALUE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the ALIAS or ANCHOR token. +func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { + // An anchor or an alias could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow an anchor or an alias. + parser.simple_key_allowed = false + + // Create the ALIAS or ANCHOR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_anchor(parser, &token, typ) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the TAG token. +func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { + // A tag could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a tag. + parser.simple_key_allowed = false + + // Create the TAG token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_tag(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. +func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { + // Remove any potential simple keys. + if !yaml_parser_remove_simple_key(parser) { + return false + } + + // A simple key may follow a block scalar. + parser.simple_key_allowed = true + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_block_scalar(parser, &token, literal) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. +func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_flow_scalar(parser, &token, single) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Produce the SCALAR(...,plain) token. +func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { + // A plain scalar could be a simple key. + if !yaml_parser_save_simple_key(parser) { + return false + } + + // A simple key cannot follow a flow scalar. + parser.simple_key_allowed = false + + // Create the SCALAR token and append it to the queue. + var token yaml_token_t + if !yaml_parser_scan_plain_scalar(parser, &token) { + return false + } + yaml_insert_token(parser, -1, &token) + return true +} + +// Eat whitespaces and comments until the next token is found. +func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { + + // Until the next token is not found. + for { + // Allow the BOM mark to start a line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { + skip(parser) + } + + // Eat whitespaces. + // Tabs are allowed: + // - in the flow context + // - in the block context, but not at the beginning of the line or + // after '-', '?', or ':' (complex value). + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Eat a comment until a line break. + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // If it is a line break, eat it. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + + // In the block context, a new line may start a simple key. + if parser.flow_level == 0 { + parser.simple_key_allowed = true + } + } else { + break // We have found a token. + } + } + + return true +} + +// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { + // Eat '%'. + start_mark := parser.mark + skip(parser) + + // Scan the directive name. + var name []byte + if !yaml_parser_scan_directive_name(parser, start_mark, &name) { + return false + } + + // Is it a YAML directive? + if bytes.Equal(name, []byte("YAML")) { + // Scan the VERSION directive value. + var major, minor int8 + if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { + return false + } + end_mark := parser.mark + + // Create a VERSION-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_VERSION_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + major: major, + minor: minor, + } + + // Is it a TAG directive? + } else if bytes.Equal(name, []byte("TAG")) { + // Scan the TAG directive value. + var handle, prefix []byte + if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { + return false + } + end_mark := parser.mark + + // Create a TAG-DIRECTIVE token. + *token = yaml_token_t{ + typ: yaml_TAG_DIRECTIVE_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + prefix: prefix, + } + + // Unknown directive. + } else { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unknown directive name") + return false + } + + // Eat the rest of the line including any comments. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + return true +} + +// Scan the directive name. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ +// +func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { + // Consume the directive name. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + var s []byte + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the name is empty. + if len(s) == 0 { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "could not find expected directive name") + return false + } + + // Check for an blank character after the name. + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a directive", + start_mark, "found unexpected non-alphabetical character") + return false + } + *name = s + return true +} + +// Scan the value of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^^^^^^ +func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the major version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { + return false + } + + // Eat '.'. + if parser.buffer[parser.buffer_pos] != '.' { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected digit or '.' character") + } + + skip(parser) + + // Consume the minor version number. + if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { + return false + } + return true +} + +const max_number_length = 2 + +// Scan the version number of VERSION-DIRECTIVE. +// +// Scope: +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ +func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { + + // Repeat while the next character is digit. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var value, length int8 + for is_digit(parser.buffer, parser.buffer_pos) { + // Check if the number is too long. + length++ + if length > max_number_length { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "found extremely long version number") + } + value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the number was present. + if length == 0 { + return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", + start_mark, "did not find expected version number") + } + *number = value + return true +} + +// Scan the value of a TAG-DIRECTIVE token. +// +// Scope: +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { + var handle_value, prefix_value []byte + + // Eat whitespaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a handle. + if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { + return false + } + + // Expect a whitespace. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blank(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace") + return false + } + + // Eat whitespaces. + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Scan a prefix. + if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { + return false + } + + // Expect a whitespace or line break. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", + start_mark, "did not find expected whitespace or line break") + return false + } + + *handle = handle_value + *prefix = prefix_value + return true +} + +func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { + var s []byte + + // Eat the indicator character. + start_mark := parser.mark + skip(parser) + + // Consume the value. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + end_mark := parser.mark + + /* + * Check if length of the anchor is greater than 0 and it is followed by + * a whitespace character or one of the indicators: + * + * '?', ':', ',', ']', '}', '%', '@', '`'. + */ + + if len(s) == 0 || + !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || + parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '`') { + context := "while scanning an alias" + if typ == yaml_ANCHOR_TOKEN { + context = "while scanning an anchor" + } + yaml_parser_set_scanner_error(parser, context, start_mark, + "did not find expected alphabetic or numeric character") + return false + } + + // Create a token. + *token = yaml_token_t{ + typ: typ, + start_mark: start_mark, + end_mark: end_mark, + value: s, + } + + return true +} + +/* + * Scan a TAG token. + */ + +func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { + var handle, suffix []byte + + start_mark := parser.mark + + // Check if the tag is in the canonical form. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + if parser.buffer[parser.buffer_pos+1] == '<' { + // Keep the handle as '' + + // Eat '!<' + skip(parser) + skip(parser) + + // Consume the tag value. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + + // Check for '>' and eat it. + if parser.buffer[parser.buffer_pos] != '>' { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find the expected '>'") + return false + } + + skip(parser) + } else { + // The tag has either the '!suffix' or the '!handle!suffix' form. + + // First, try to scan a handle. + if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { + return false + } + + // Check if it is, indeed, handle. + if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { + // Scan the suffix now. + if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { + return false + } + } else { + // It wasn't a handle after all. Scan the rest of the tag. + if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { + return false + } + + // Set the handle to '!'. + handle = []byte{'!'} + + // A special case: the '!' tag. Set the handle to '' and the + // suffix to '!'. + if len(suffix) == 0 { + handle, suffix = suffix, handle + } + } + } + + // Check the character which ends the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if !is_blankz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a tag", + start_mark, "did not find expected whitespace or line break") + return false + } + + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_TAG_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: handle, + suffix: suffix, + } + return true +} + +// Scan a tag handle. +func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { + // Check the initial '!' character. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] != '!' { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + + var s []byte + + // Copy the '!' character. + s = read(parser, s) + + // Copy all subsequent alphabetical and numerical characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_alpha(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check if the trailing character is '!' and copy it. + if parser.buffer[parser.buffer_pos] == '!' { + s = read(parser, s) + } else { + // It's either the '!' tag or not really a tag handle. If it's a %TAG + // directive, it's an error. If it's a tag token, it must be a part of URI. + if directive && string(s) != "!" { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected '!'") + return false + } + } + + *handle = s + return true +} + +// Scan a tag. +func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { + //size_t length = head ? strlen((char *)head) : 0 + var s []byte + hasTag := len(head) > 0 + + // Copy the head if needed. + // + // Note that we don't copy the leading '!' character. + if len(head) > 1 { + s = append(s, head[1:]...) + } + + // Scan the tag. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // The set of characters that may appear in URI is as follows: + // + // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', + // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', + // '%'. + // [Go] Convert this into more reasonable logic. + for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || + parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || + parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || + parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || + parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || + parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || + parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || + parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || + parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || + parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || + parser.buffer[parser.buffer_pos] == '%' { + // Check if it is a URI-escape sequence. + if parser.buffer[parser.buffer_pos] == '%' { + if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { + return false + } + } else { + s = read(parser, s) + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + hasTag = true + } + + if !hasTag { + yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find expected tag URI") + return false + } + *uri = s + return true +} + +// Decode an URI-escape sequence corresponding to a single UTF-8 character. +func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { + + // Decode the required number of characters. + w := 1024 + for w > 0 { + // Check for a URI-escaped octet. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + + if !(parser.buffer[parser.buffer_pos] == '%' && + is_hex(parser.buffer, parser.buffer_pos+1) && + is_hex(parser.buffer, parser.buffer_pos+2)) { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "did not find URI escaped octet") + } + + // Get the octet. + octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) + + // If it is the leading octet, determine the length of the UTF-8 sequence. + if w == 1024 { + w = width(octet) + if w == 0 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect leading UTF-8 octet") + } + } else { + // Check if the trailing octet is correct. + if octet&0xC0 != 0x80 { + return yaml_parser_set_scanner_tag_error(parser, directive, + start_mark, "found an incorrect trailing UTF-8 octet") + } + } + + // Copy the octet and move the pointers. + *s = append(*s, octet) + skip(parser) + skip(parser) + skip(parser) + w-- + } + return true +} + +// Scan a block scalar. +func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { + // Eat the indicator '|' or '>'. + start_mark := parser.mark + skip(parser) + + // Scan the additional block scalar indicators. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + // Check for a chomping indicator. + var chomping, increment int + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + // Set the chomping method and eat the indicator. + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + + // Check for an indentation indicator. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if is_digit(parser.buffer, parser.buffer_pos) { + // Check that the indentation is greater than 0. + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + + // Get the indentation level and eat the indicator. + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + } + + } else if is_digit(parser.buffer, parser.buffer_pos) { + // Do the same as above, but in the opposite order. + + if parser.buffer[parser.buffer_pos] == '0' { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found an indentation indicator equal to 0") + return false + } + increment = as_digit(parser.buffer, parser.buffer_pos) + skip(parser) + + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { + if parser.buffer[parser.buffer_pos] == '+' { + chomping = +1 + } else { + chomping = -1 + } + skip(parser) + } + } + + // Eat whitespaces and comments to the end of the line. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for is_blank(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.buffer[parser.buffer_pos] == '#' { + for !is_breakz(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + } + + // Check if we are at the end of the line. + if !is_breakz(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "did not find expected comment or line break") + return false + } + + // Eat a line break. + if is_break(parser.buffer, parser.buffer_pos) { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + skip_line(parser) + } + + end_mark := parser.mark + + // Set the indentation level if it was specified. + var indent int + if increment > 0 { + if parser.indent >= 0 { + indent = parser.indent + increment + } else { + indent = increment + } + } + + // Scan the leading line breaks and determine the indentation level if needed. + var s, leading_break, trailing_breaks []byte + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + + // Scan the block scalar content. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + var leading_blank, trailing_blank bool + for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { + // We are at the beginning of a non-empty line. + + // Is it a trailing whitespace? + trailing_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Check if we need to fold the leading line break. + if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { + // Do we need to join the lines by space? + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } + } else { + s = append(s, leading_break...) + } + leading_break = leading_break[:0] + + // Append the remaining line breaks. + s = append(s, trailing_breaks...) + trailing_breaks = trailing_breaks[:0] + + // Is it a leading whitespace? + leading_blank = is_blank(parser.buffer, parser.buffer_pos) + + // Consume the current line. + for !is_breakz(parser.buffer, parser.buffer_pos) { + s = read(parser, s) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + leading_break = read_line(parser, leading_break) + + // Eat the following indentation spaces and line breaks. + if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { + return false + } + } + + // Chomp the tail. + if chomping != -1 { + s = append(s, leading_break...) + } + if chomping == 1 { + s = append(s, trailing_breaks...) + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_LITERAL_SCALAR_STYLE, + } + if !literal { + token.style = yaml_FOLDED_SCALAR_STYLE + } + return true +} + +// Scan indentation spaces and line breaks for a block scalar. Determine the +// indentation level if needed. +func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { + *end_mark = parser.mark + + // Eat the indentation spaces and line breaks. + max_indent := 0 + for { + // Eat the indentation spaces. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { + skip(parser) + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + if parser.mark.column > max_indent { + max_indent = parser.mark.column + } + + // Check for a tab character messing the indentation. + if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { + return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", + start_mark, "found a tab character where an indentation space is expected") + } + + // Have we found a non-empty line? + if !is_break(parser.buffer, parser.buffer_pos) { + break + } + + // Consume the line break. + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + // [Go] Should really be returning breaks instead. + *breaks = read_line(parser, *breaks) + *end_mark = parser.mark + } + + // Determine the indentation level if needed. + if *indent == 0 { + *indent = max_indent + if *indent < parser.indent+1 { + *indent = parser.indent + 1 + } + if *indent < 1 { + *indent = 1 + } + } + return true +} + +// Scan a quoted scalar. +func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { + // Eat the left quote. + start_mark := parser.mark + skip(parser) + + // Consume the content of the quoted scalar. + var s, leading_break, trailing_breaks, whitespaces []byte + for { + // Check that there are no document indicators at the beginning of the line. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected document indicator") + return false + } + + // Check for EOF. + if is_z(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", + start_mark, "found unexpected end of stream") + return false + } + + // Consume non-blank characters. + leading_blanks := false + for !is_blankz(parser.buffer, parser.buffer_pos) { + if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { + // Is is an escaped single quote. + s = append(s, '\'') + skip(parser) + skip(parser) + + } else if single && parser.buffer[parser.buffer_pos] == '\'' { + // It is a right single quote. + break + } else if !single && parser.buffer[parser.buffer_pos] == '"' { + // It is a right double quote. + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { + // It is an escaped line break. + if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { + return false + } + skip(parser) + skip_line(parser) + leading_blanks = true + break + + } else if !single && parser.buffer[parser.buffer_pos] == '\\' { + // It is an escape sequence. + code_length := 0 + + // Check the escape character. + switch parser.buffer[parser.buffer_pos+1] { + case '0': + s = append(s, 0) + case 'a': + s = append(s, '\x07') + case 'b': + s = append(s, '\x08') + case 't', '\t': + s = append(s, '\x09') + case 'n': + s = append(s, '\x0A') + case 'v': + s = append(s, '\x0B') + case 'f': + s = append(s, '\x0C') + case 'r': + s = append(s, '\x0D') + case 'e': + s = append(s, '\x1B') + case ' ': + s = append(s, '\x20') + case '"': + s = append(s, '"') + case '\'': + s = append(s, '\'') + case '\\': + s = append(s, '\\') + case 'N': // NEL (#x85) + s = append(s, '\xC2') + s = append(s, '\x85') + case '_': // #xA0 + s = append(s, '\xC2') + s = append(s, '\xA0') + case 'L': // LS (#x2028) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA8') + case 'P': // PS (#x2029) + s = append(s, '\xE2') + s = append(s, '\x80') + s = append(s, '\xA9') + case 'x': + code_length = 2 + case 'u': + code_length = 4 + case 'U': + code_length = 8 + default: + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found unknown escape character") + return false + } + + skip(parser) + skip(parser) + + // Consume an arbitrary escape code. + if code_length > 0 { + var value int + + // Scan the character value. + if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { + return false + } + for k := 0; k < code_length; k++ { + if !is_hex(parser.buffer, parser.buffer_pos+k) { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "did not find expected hexdecimal number") + return false + } + value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) + } + + // Check the value and write the character. + if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { + yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", + start_mark, "found invalid Unicode character escape code") + return false + } + if value <= 0x7F { + s = append(s, byte(value)) + } else if value <= 0x7FF { + s = append(s, byte(0xC0+(value>>6))) + s = append(s, byte(0x80+(value&0x3F))) + } else if value <= 0xFFFF { + s = append(s, byte(0xE0+(value>>12))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } else { + s = append(s, byte(0xF0+(value>>18))) + s = append(s, byte(0x80+((value>>12)&0x3F))) + s = append(s, byte(0x80+((value>>6)&0x3F))) + s = append(s, byte(0x80+(value&0x3F))) + } + + // Advance the pointer. + for k := 0; k < code_length; k++ { + skip(parser) + } + } + } else { + // It is a non-escaped non-blank character. + s = read(parser, s) + } + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Check if we are at the end of the scalar. + if single { + if parser.buffer[parser.buffer_pos] == '\'' { + break + } + } else { + if parser.buffer[parser.buffer_pos] == '"' { + break + } + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Join the whitespaces or fold line breaks. + if leading_blanks { + // Do we need to fold line breaks? + if len(leading_break) > 0 && leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Eat the right quote. + skip(parser) + end_mark := parser.mark + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_SINGLE_QUOTED_SCALAR_STYLE, + } + if !single { + token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE + } + return true +} + +// Scan a plain scalar. +func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { + + var s, leading_break, trailing_breaks, whitespaces []byte + var leading_blanks bool + var indent = parser.indent + 1 + + start_mark := parser.mark + end_mark := parser.mark + + // Consume the content of the plain scalar. + for { + // Check for a document indicator. + if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { + return false + } + if parser.mark.column == 0 && + ((parser.buffer[parser.buffer_pos+0] == '-' && + parser.buffer[parser.buffer_pos+1] == '-' && + parser.buffer[parser.buffer_pos+2] == '-') || + (parser.buffer[parser.buffer_pos+0] == '.' && + parser.buffer[parser.buffer_pos+1] == '.' && + parser.buffer[parser.buffer_pos+2] == '.')) && + is_blankz(parser.buffer, parser.buffer_pos+3) { + break + } + + // Check for a comment. + if parser.buffer[parser.buffer_pos] == '#' { + break + } + + // Consume non-blank characters. + for !is_blankz(parser.buffer, parser.buffer_pos) { + + // Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13". + if parser.flow_level > 0 && + parser.buffer[parser.buffer_pos] == ':' && + !is_blankz(parser.buffer, parser.buffer_pos+1) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found unexpected ':'") + return false + } + + // Check for indicators that may end a plain scalar. + if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || + (parser.flow_level > 0 && + (parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' || + parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || + parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || + parser.buffer[parser.buffer_pos] == '}')) { + break + } + + // Check if we need to join whitespaces and breaks. + if leading_blanks || len(whitespaces) > 0 { + if leading_blanks { + // Do we need to fold line breaks? + if leading_break[0] == '\n' { + if len(trailing_breaks) == 0 { + s = append(s, ' ') + } else { + s = append(s, trailing_breaks...) + } + } else { + s = append(s, leading_break...) + s = append(s, trailing_breaks...) + } + trailing_breaks = trailing_breaks[:0] + leading_break = leading_break[:0] + leading_blanks = false + } else { + s = append(s, whitespaces...) + whitespaces = whitespaces[:0] + } + } + + // Copy the character. + s = read(parser, s) + + end_mark = parser.mark + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + } + + // Is it the end? + if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { + break + } + + // Consume blank characters. + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + + for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { + if is_blank(parser.buffer, parser.buffer_pos) { + + // Check for tab character that abuse indentation. + if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { + yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", + start_mark, "found a tab character that violate indentation") + return false + } + + // Consume a space or a tab character. + if !leading_blanks { + whitespaces = read(parser, whitespaces) + } else { + skip(parser) + } + } else { + if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { + return false + } + + // Check if it is a first line break. + if !leading_blanks { + whitespaces = whitespaces[:0] + leading_break = read_line(parser, leading_break) + leading_blanks = true + } else { + trailing_breaks = read_line(parser, trailing_breaks) + } + } + if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { + return false + } + } + + // Check indentation level. + if parser.flow_level == 0 && parser.mark.column < indent { + break + } + } + + // Create a token. + *token = yaml_token_t{ + typ: yaml_SCALAR_TOKEN, + start_mark: start_mark, + end_mark: end_mark, + value: s, + style: yaml_PLAIN_SCALAR_STYLE, + } + + // Note that we change the 'simple_key_allowed' flag. + if leading_blanks { + parser.simple_key_allowed = true + } + return true +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/sorter.go b/docs/generator/vendor/gopkg.in/yaml.v2/sorter.go new file mode 100644 index 0000000..5958822 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/sorter.go @@ -0,0 +1,104 @@ +package yaml + +import ( + "reflect" + "unicode" +) + +type keyList []reflect.Value + +func (l keyList) Len() int { return len(l) } +func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l keyList) Less(i, j int) bool { + a := l[i] + b := l[j] + ak := a.Kind() + bk := b.Kind() + for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { + a = a.Elem() + ak = a.Kind() + } + for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { + b = b.Elem() + bk = b.Kind() + } + af, aok := keyFloat(a) + bf, bok := keyFloat(b) + if aok && bok { + if af != bf { + return af < bf + } + if ak != bk { + return ak < bk + } + return numLess(a, b) + } + if ak != reflect.String || bk != reflect.String { + return ak < bk + } + ar, br := []rune(a.String()), []rune(b.String()) + for i := 0; i < len(ar) && i < len(br); i++ { + if ar[i] == br[i] { + continue + } + al := unicode.IsLetter(ar[i]) + bl := unicode.IsLetter(br[i]) + if al && bl { + return ar[i] < br[i] + } + if al || bl { + return bl + } + var ai, bi int + var an, bn int64 + for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { + an = an*10 + int64(ar[ai]-'0') + } + for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { + bn = bn*10 + int64(br[bi]-'0') + } + if an != bn { + return an < bn + } + if ai != bi { + return ai < bi + } + return ar[i] < br[i] + } + return len(ar) < len(br) +} + +// keyFloat returns a float value for v if it is a number/bool +// and whether it is a number/bool or not. +func keyFloat(v reflect.Value) (f float64, ok bool) { + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return float64(v.Int()), true + case reflect.Float32, reflect.Float64: + return v.Float(), true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return float64(v.Uint()), true + case reflect.Bool: + if v.Bool() { + return 1, true + } + return 0, true + } + return 0, false +} + +// numLess returns whether a < b. +// a and b must necessarily have the same kind. +func numLess(a, b reflect.Value) bool { + switch a.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return a.Int() < b.Int() + case reflect.Float32, reflect.Float64: + return a.Float() < b.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return a.Uint() < b.Uint() + case reflect.Bool: + return !a.Bool() && b.Bool() + } + panic("not a number") +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/suite_test.go b/docs/generator/vendor/gopkg.in/yaml.v2/suite_test.go new file mode 100644 index 0000000..c5cf1ed --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/suite_test.go @@ -0,0 +1,12 @@ +package yaml_test + +import ( + . "gopkg.in/check.v1" + "testing" +) + +func Test(t *testing.T) { TestingT(t) } + +type S struct{} + +var _ = Suite(&S{}) diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/writerc.go b/docs/generator/vendor/gopkg.in/yaml.v2/writerc.go new file mode 100644 index 0000000..190362f --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/writerc.go @@ -0,0 +1,89 @@ +package yaml + +// Set the writer error and return false. +func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { + emitter.error = yaml_WRITER_ERROR + emitter.problem = problem + return false +} + +// Flush the output buffer. +func yaml_emitter_flush(emitter *yaml_emitter_t) bool { + if emitter.write_handler == nil { + panic("write handler not set") + } + + // Check if the buffer is empty. + if emitter.buffer_pos == 0 { + return true + } + + // If the output encoding is UTF-8, we don't need to recode the buffer. + if emitter.encoding == yaml_UTF8_ENCODING { + if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + return true + } + + // Recode the buffer into the raw buffer. + var low, high int + if emitter.encoding == yaml_UTF16LE_ENCODING { + low, high = 0, 1 + } else { + high, low = 1, 0 + } + + pos := 0 + for pos < emitter.buffer_pos { + // See the "reader.c" code for more details on UTF-8 encoding. Note + // that we assume that the buffer contains a valid UTF-8 sequence. + + // Read the next UTF-8 character. + octet := emitter.buffer[pos] + + var w int + var value rune + switch { + case octet&0x80 == 0x00: + w, value = 1, rune(octet&0x7F) + case octet&0xE0 == 0xC0: + w, value = 2, rune(octet&0x1F) + case octet&0xF0 == 0xE0: + w, value = 3, rune(octet&0x0F) + case octet&0xF8 == 0xF0: + w, value = 4, rune(octet&0x07) + } + for k := 1; k < w; k++ { + octet = emitter.buffer[pos+k] + value = (value << 6) + (rune(octet) & 0x3F) + } + pos += w + + // Write the character. + if value < 0x10000 { + var b [2]byte + b[high] = byte(value >> 8) + b[low] = byte(value & 0xFF) + emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1]) + } else { + // Write the character using a surrogate pair (check "reader.c"). + var b [4]byte + value -= 0x10000 + b[high] = byte(0xD8 + (value >> 18)) + b[low] = byte((value >> 10) & 0xFF) + b[high+2] = byte(0xDC + ((value >> 8) & 0xFF)) + b[low+2] = byte(value & 0xFF) + emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3]) + } + } + + // Write the raw buffer. + if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil { + return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) + } + emitter.buffer_pos = 0 + emitter.raw_buffer = emitter.raw_buffer[:0] + return true +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/yaml.go b/docs/generator/vendor/gopkg.in/yaml.v2/yaml.go new file mode 100644 index 0000000..bf18884 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/yaml.go @@ -0,0 +1,357 @@ +// Package yaml implements YAML support for the Go language. +// +// Source code and other details for the project are available at GitHub: +// +// https://github.com/go-yaml/yaml +// +package yaml + +import ( + "errors" + "fmt" + "reflect" + "strings" + "sync" +) + +// MapSlice encodes and decodes as a YAML map. +// The order of keys is preserved when encoding and decoding. +type MapSlice []MapItem + +// MapItem is an item in a MapSlice. +type MapItem struct { + Key, Value interface{} +} + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a YAML document. The UnmarshalYAML +// method receives a function that may be called to unmarshal the original +// YAML value into a field or variable. It is safe to call the unmarshal +// function parameter more than once if necessary. +type Unmarshaler interface { + UnmarshalYAML(unmarshal func(interface{}) error) error +} + +// The Marshaler interface may be implemented by types to customize their +// behavior when being marshaled into a YAML document. The returned value +// is marshaled in place of the original value implementing Marshaler. +// +// If an error is returned by MarshalYAML, the marshaling procedure stops +// and returns with the provided error. +type Marshaler interface { + MarshalYAML() (interface{}, error) +} + +// Unmarshal decodes the first document found within the in byte slice +// and assigns decoded values into the out value. +// +// Maps and pointers (to a struct, string, int, etc) are accepted as out +// values. If an internal pointer within a struct is not initialized, +// the yaml package will initialize it if necessary for unmarshalling +// the provided data. The out parameter must not be nil. +// +// The type of the decoded values should be compatible with the respective +// values in out. If one or more values cannot be decoded due to a type +// mismatches, decoding continues partially until the end of the YAML +// content, and a *yaml.TypeError is returned with details for all +// missed values. +// +// Struct fields are only unmarshalled if they are exported (have an +// upper case first letter), and are unmarshalled using the field name +// lowercased as the default key. Custom keys may be defined via the +// "yaml" name in the field tag: the content preceding the first comma +// is used as the key, and the following comma-separated options are +// used to tweak the marshalling process (see Marshal). +// Conflicting names result in a runtime error. +// +// For example: +// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// +// See the documentation of Marshal for the format of tags and a list of +// supported tag options. +// +func Unmarshal(in []byte, out interface{}) (err error) { + return unmarshal(in, out, false) +} + +// UnmarshalStrict is like Unmarshal except that any fields that are found +// in the data that do not have corresponding struct members will result in +// an error. +func UnmarshalStrict(in []byte, out interface{}) (err error) { + return unmarshal(in, out, true) +} + +func unmarshal(in []byte, out interface{}, strict bool) (err error) { + defer handleErr(&err) + d := newDecoder(strict) + p := newParser(in) + defer p.destroy() + node := p.parse() + if node != nil { + v := reflect.ValueOf(out) + if v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + d.unmarshal(node, v) + } + if len(d.terrors) > 0 { + return &TypeError{d.terrors} + } + return nil +} + +// Marshal serializes the value provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps and pointers (to struct, string, int, etc) are accepted as the in value. +// +// Struct fields are only unmarshalled if they are exported (have an upper case +// first letter), and are unmarshalled using the field name lowercased as the +// default key. Custom keys may be defined via the "yaml" name in the field +// tag: the content preceding the first comma is used as the key, and the +// following comma-separated options are used to tweak the marshalling process. +// Conflicting names result in a runtime error. +// +// The field tag format accepted is: +// +// `(...) yaml:"[][,[,]]" (...)` +// +// The following flags are currently supported: +// +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Does not apply to zero valued structs. +// +// flow Marshal using a flow style (useful for structs, +// sequences and maps). +// +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. +// +// In addition, if the key is "-", the field is ignored. +// +// For example: +// +// type T struct { +// F int "a,omitempty" +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +// +func Marshal(in interface{}) (out []byte, err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshal("", reflect.ValueOf(in)) + e.finish() + out = e.out + return +} + +func handleErr(err *error) { + if v := recover(); v != nil { + if e, ok := v.(yamlError); ok { + *err = e.err + } else { + panic(v) + } + } +} + +type yamlError struct { + err error +} + +func fail(err error) { + panic(yamlError{err}) +} + +func failf(format string, args ...interface{}) { + panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) +} + +// A TypeError is returned by Unmarshal when one or more fields in +// the YAML document cannot be properly decoded into the requested +// types. When this error is returned, the value is still +// unmarshaled partially. +type TypeError struct { + Errors []string +} + +func (e *TypeError) Error() string { + return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) +} + +// -------------------------------------------------------------------------- +// Maintain a mapping of keys to structure field indexes + +// The code in this section was copied from mgo/bson. + +// structInfo holds details for the serialization of fields of +// a given struct. +type structInfo struct { + FieldsMap map[string]fieldInfo + FieldsList []fieldInfo + + // InlineMap is the number of the field in the struct that + // contains an ,inline map, or -1 if there's none. + InlineMap int +} + +type fieldInfo struct { + Key string + Num int + OmitEmpty bool + Flow bool + + // Inline holds the field index if the field is part of an inlined struct. + Inline []int +} + +var structMap = make(map[reflect.Type]*structInfo) +var fieldMapMutex sync.RWMutex + +func getStructInfo(st reflect.Type) (*structInfo, error) { + fieldMapMutex.RLock() + sinfo, found := structMap[st] + fieldMapMutex.RUnlock() + if found { + return sinfo, nil + } + + n := st.NumField() + fieldsMap := make(map[string]fieldInfo) + fieldsList := make([]fieldInfo, 0, n) + inlineMap := -1 + for i := 0; i != n; i++ { + field := st.Field(i) + if field.PkgPath != "" && !field.Anonymous { + continue // Private field + } + + info := fieldInfo{Num: i} + + tag := field.Tag.Get("yaml") + if tag == "" && strings.Index(string(field.Tag), ":") < 0 { + tag = string(field.Tag) + } + if tag == "-" { + continue + } + + inline := false + fields := strings.Split(tag, ",") + if len(fields) > 1 { + for _, flag := range fields[1:] { + switch flag { + case "omitempty": + info.OmitEmpty = true + case "flow": + info.Flow = true + case "inline": + inline = true + default: + return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)) + } + } + tag = fields[0] + } + + if inline { + switch field.Type.Kind() { + case reflect.Map: + if inlineMap >= 0 { + return nil, errors.New("Multiple ,inline maps in struct " + st.String()) + } + if field.Type.Key() != reflect.TypeOf("") { + return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String()) + } + inlineMap = info.Num + case reflect.Struct: + sinfo, err := getStructInfo(field.Type) + if err != nil { + return nil, err + } + for _, finfo := range sinfo.FieldsList { + if _, found := fieldsMap[finfo.Key]; found { + msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + if finfo.Inline == nil { + finfo.Inline = []int{i, finfo.Num} + } else { + finfo.Inline = append([]int{i}, finfo.Inline...) + } + fieldsMap[finfo.Key] = finfo + fieldsList = append(fieldsList, finfo) + } + default: + //return nil, errors.New("Option ,inline needs a struct value or map field") + return nil, errors.New("Option ,inline needs a struct value field") + } + continue + } + + if tag != "" { + info.Key = tag + } else { + info.Key = strings.ToLower(field.Name) + } + + if _, found = fieldsMap[info.Key]; found { + msg := "Duplicated key '" + info.Key + "' in struct " + st.String() + return nil, errors.New(msg) + } + + fieldsList = append(fieldsList, info) + fieldsMap[info.Key] = info + } + + sinfo = &structInfo{fieldsMap, fieldsList, inlineMap} + + fieldMapMutex.Lock() + structMap[st] = sinfo + fieldMapMutex.Unlock() + return sinfo, nil +} + +func isZero(v reflect.Value) bool { + switch v.Kind() { + case reflect.String: + return len(v.String()) == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + case reflect.Slice: + return v.Len() == 0 + case reflect.Map: + return v.Len() == 0 + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Struct: + vt := v.Type() + for i := v.NumField() - 1; i >= 0; i-- { + if vt.Field(i).PkgPath != "" { + continue // Private field + } + if !isZero(v.Field(i)) { + return false + } + } + return true + } + return false +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/yamlh.go b/docs/generator/vendor/gopkg.in/yaml.v2/yamlh.go new file mode 100644 index 0000000..3caeca0 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/yamlh.go @@ -0,0 +1,716 @@ +package yaml + +import ( + "io" +) + +// The version directive data. +type yaml_version_directive_t struct { + major int8 // The major version number. + minor int8 // The minor version number. +} + +// The tag directive data. +type yaml_tag_directive_t struct { + handle []byte // The tag handle. + prefix []byte // The tag prefix. +} + +type yaml_encoding_t int + +// The stream encoding. +const ( + // Let the parser choose the encoding. + yaml_ANY_ENCODING yaml_encoding_t = iota + + yaml_UTF8_ENCODING // The default UTF-8 encoding. + yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. + yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. +) + +type yaml_break_t int + +// Line break types. +const ( + // Let the parser choose the break type. + yaml_ANY_BREAK yaml_break_t = iota + + yaml_CR_BREAK // Use CR for line breaks (Mac style). + yaml_LN_BREAK // Use LN for line breaks (Unix style). + yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). +) + +type yaml_error_type_t int + +// Many bad things could happen with the parser and emitter. +const ( + // No error is produced. + yaml_NO_ERROR yaml_error_type_t = iota + + yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. + yaml_READER_ERROR // Cannot read or decode the input stream. + yaml_SCANNER_ERROR // Cannot scan the input stream. + yaml_PARSER_ERROR // Cannot parse the input stream. + yaml_COMPOSER_ERROR // Cannot compose a YAML document. + yaml_WRITER_ERROR // Cannot write to the output stream. + yaml_EMITTER_ERROR // Cannot emit a YAML stream. +) + +// The pointer position. +type yaml_mark_t struct { + index int // The position index. + line int // The position line. + column int // The position column. +} + +// Node Styles + +type yaml_style_t int8 + +type yaml_scalar_style_t yaml_style_t + +// Scalar styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota + + yaml_PLAIN_SCALAR_STYLE // The plain scalar style. + yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. + yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. + yaml_LITERAL_SCALAR_STYLE // The literal scalar style. + yaml_FOLDED_SCALAR_STYLE // The folded scalar style. +) + +type yaml_sequence_style_t yaml_style_t + +// Sequence styles. +const ( + // Let the emitter choose the style. + yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota + + yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. + yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. +) + +type yaml_mapping_style_t yaml_style_t + +// Mapping styles. +const ( + // Let the emitter choose the style. + yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota + + yaml_BLOCK_MAPPING_STYLE // The block mapping style. + yaml_FLOW_MAPPING_STYLE // The flow mapping style. +) + +// Tokens + +type yaml_token_type_t int + +// Token types. +const ( + // An empty token. + yaml_NO_TOKEN yaml_token_type_t = iota + + yaml_STREAM_START_TOKEN // A STREAM-START token. + yaml_STREAM_END_TOKEN // A STREAM-END token. + + yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. + yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. + yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. + yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. + + yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. + yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. + yaml_BLOCK_END_TOKEN // A BLOCK-END token. + + yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. + yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. + yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. + yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. + + yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. + yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. + yaml_KEY_TOKEN // A KEY token. + yaml_VALUE_TOKEN // A VALUE token. + + yaml_ALIAS_TOKEN // An ALIAS token. + yaml_ANCHOR_TOKEN // An ANCHOR token. + yaml_TAG_TOKEN // A TAG token. + yaml_SCALAR_TOKEN // A SCALAR token. +) + +func (tt yaml_token_type_t) String() string { + switch tt { + case yaml_NO_TOKEN: + return "yaml_NO_TOKEN" + case yaml_STREAM_START_TOKEN: + return "yaml_STREAM_START_TOKEN" + case yaml_STREAM_END_TOKEN: + return "yaml_STREAM_END_TOKEN" + case yaml_VERSION_DIRECTIVE_TOKEN: + return "yaml_VERSION_DIRECTIVE_TOKEN" + case yaml_TAG_DIRECTIVE_TOKEN: + return "yaml_TAG_DIRECTIVE_TOKEN" + case yaml_DOCUMENT_START_TOKEN: + return "yaml_DOCUMENT_START_TOKEN" + case yaml_DOCUMENT_END_TOKEN: + return "yaml_DOCUMENT_END_TOKEN" + case yaml_BLOCK_SEQUENCE_START_TOKEN: + return "yaml_BLOCK_SEQUENCE_START_TOKEN" + case yaml_BLOCK_MAPPING_START_TOKEN: + return "yaml_BLOCK_MAPPING_START_TOKEN" + case yaml_BLOCK_END_TOKEN: + return "yaml_BLOCK_END_TOKEN" + case yaml_FLOW_SEQUENCE_START_TOKEN: + return "yaml_FLOW_SEQUENCE_START_TOKEN" + case yaml_FLOW_SEQUENCE_END_TOKEN: + return "yaml_FLOW_SEQUENCE_END_TOKEN" + case yaml_FLOW_MAPPING_START_TOKEN: + return "yaml_FLOW_MAPPING_START_TOKEN" + case yaml_FLOW_MAPPING_END_TOKEN: + return "yaml_FLOW_MAPPING_END_TOKEN" + case yaml_BLOCK_ENTRY_TOKEN: + return "yaml_BLOCK_ENTRY_TOKEN" + case yaml_FLOW_ENTRY_TOKEN: + return "yaml_FLOW_ENTRY_TOKEN" + case yaml_KEY_TOKEN: + return "yaml_KEY_TOKEN" + case yaml_VALUE_TOKEN: + return "yaml_VALUE_TOKEN" + case yaml_ALIAS_TOKEN: + return "yaml_ALIAS_TOKEN" + case yaml_ANCHOR_TOKEN: + return "yaml_ANCHOR_TOKEN" + case yaml_TAG_TOKEN: + return "yaml_TAG_TOKEN" + case yaml_SCALAR_TOKEN: + return "yaml_SCALAR_TOKEN" + } + return "" +} + +// The token structure. +type yaml_token_t struct { + // The token type. + typ yaml_token_type_t + + // The start/end of the token. + start_mark, end_mark yaml_mark_t + + // The stream encoding (for yaml_STREAM_START_TOKEN). + encoding yaml_encoding_t + + // The alias/anchor/scalar value or tag/tag directive handle + // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). + value []byte + + // The tag suffix (for yaml_TAG_TOKEN). + suffix []byte + + // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). + prefix []byte + + // The scalar style (for yaml_SCALAR_TOKEN). + style yaml_scalar_style_t + + // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). + major, minor int8 +} + +// Events + +type yaml_event_type_t int8 + +// Event types. +const ( + // An empty event. + yaml_NO_EVENT yaml_event_type_t = iota + + yaml_STREAM_START_EVENT // A STREAM-START event. + yaml_STREAM_END_EVENT // A STREAM-END event. + yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. + yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. + yaml_ALIAS_EVENT // An ALIAS event. + yaml_SCALAR_EVENT // A SCALAR event. + yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. + yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. + yaml_MAPPING_START_EVENT // A MAPPING-START event. + yaml_MAPPING_END_EVENT // A MAPPING-END event. +) + +// The event structure. +type yaml_event_t struct { + + // The event type. + typ yaml_event_type_t + + // The start and end of the event. + start_mark, end_mark yaml_mark_t + + // The document encoding (for yaml_STREAM_START_EVENT). + encoding yaml_encoding_t + + // The version directive (for yaml_DOCUMENT_START_EVENT). + version_directive *yaml_version_directive_t + + // The list of tag directives (for yaml_DOCUMENT_START_EVENT). + tag_directives []yaml_tag_directive_t + + // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). + anchor []byte + + // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + tag []byte + + // The scalar value (for yaml_SCALAR_EVENT). + value []byte + + // Is the document start/end indicator implicit, or the tag optional? + // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). + implicit bool + + // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). + quoted_implicit bool + + // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). + style yaml_style_t +} + +func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } +func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } +func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } + +// Nodes + +const ( + yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. + yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. + yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. + yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. + yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. + yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. + + yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. + yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. + + // Not in original libyaml. + yaml_BINARY_TAG = "tag:yaml.org,2002:binary" + yaml_MERGE_TAG = "tag:yaml.org,2002:merge" + + yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. + yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. + yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. +) + +type yaml_node_type_t int + +// Node types. +const ( + // An empty node. + yaml_NO_NODE yaml_node_type_t = iota + + yaml_SCALAR_NODE // A scalar node. + yaml_SEQUENCE_NODE // A sequence node. + yaml_MAPPING_NODE // A mapping node. +) + +// An element of a sequence node. +type yaml_node_item_t int + +// An element of a mapping node. +type yaml_node_pair_t struct { + key int // The key of the element. + value int // The value of the element. +} + +// The node structure. +type yaml_node_t struct { + typ yaml_node_type_t // The node type. + tag []byte // The node tag. + + // The node data. + + // The scalar parameters (for yaml_SCALAR_NODE). + scalar struct { + value []byte // The scalar value. + length int // The length of the scalar value. + style yaml_scalar_style_t // The scalar style. + } + + // The sequence parameters (for YAML_SEQUENCE_NODE). + sequence struct { + items_data []yaml_node_item_t // The stack of sequence items. + style yaml_sequence_style_t // The sequence style. + } + + // The mapping parameters (for yaml_MAPPING_NODE). + mapping struct { + pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). + pairs_start *yaml_node_pair_t // The beginning of the stack. + pairs_end *yaml_node_pair_t // The end of the stack. + pairs_top *yaml_node_pair_t // The top of the stack. + style yaml_mapping_style_t // The mapping style. + } + + start_mark yaml_mark_t // The beginning of the node. + end_mark yaml_mark_t // The end of the node. + +} + +// The document structure. +type yaml_document_t struct { + + // The document nodes. + nodes []yaml_node_t + + // The version directive. + version_directive *yaml_version_directive_t + + // The list of tag directives. + tag_directives_data []yaml_tag_directive_t + tag_directives_start int // The beginning of the tag directives list. + tag_directives_end int // The end of the tag directives list. + + start_implicit int // Is the document start indicator implicit? + end_implicit int // Is the document end indicator implicit? + + // The start/end of the document. + start_mark, end_mark yaml_mark_t +} + +// The prototype of a read handler. +// +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. +// +// [in,out] data A pointer to an application data specified by +// yaml_parser_set_input(). +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. +// +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. +type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) + +// This structure holds information about a potential simple key. +type yaml_simple_key_t struct { + possible bool // Is a simple key possible? + required bool // Is a simple key required? + token_number int // The number of the token. + mark yaml_mark_t // The position mark. +} + +// The states of the parser. +type yaml_parser_state_t int + +const ( + yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota + + yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. + yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. + yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. + yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. + yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. + yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. + yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. + yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. + yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. + yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. + yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. + yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. + yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. + yaml_PARSE_END_STATE // Expect nothing. +) + +func (ps yaml_parser_state_t) String() string { + switch ps { + case yaml_PARSE_STREAM_START_STATE: + return "yaml_PARSE_STREAM_START_STATE" + case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: + return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_START_STATE: + return "yaml_PARSE_DOCUMENT_START_STATE" + case yaml_PARSE_DOCUMENT_CONTENT_STATE: + return "yaml_PARSE_DOCUMENT_CONTENT_STATE" + case yaml_PARSE_DOCUMENT_END_STATE: + return "yaml_PARSE_DOCUMENT_END_STATE" + case yaml_PARSE_BLOCK_NODE_STATE: + return "yaml_PARSE_BLOCK_NODE_STATE" + case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: + return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" + case yaml_PARSE_FLOW_NODE_STATE: + return "yaml_PARSE_FLOW_NODE_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: + return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" + case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: + return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: + return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" + case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_KEY_STATE: + return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" + case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" + case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: + return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" + case yaml_PARSE_END_STATE: + return "yaml_PARSE_END_STATE" + } + return "" +} + +// This structure holds aliases data. +type yaml_alias_data_t struct { + anchor []byte // The anchor. + index int // The node id. + mark yaml_mark_t // The anchor mark. +} + +// The parser structure. +// +// All members are internal. Manage the structure using the +// yaml_parser_ family of functions. +type yaml_parser_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + + problem string // Error description. + + // The byte about which the problem occurred. + problem_offset int + problem_value int + problem_mark yaml_mark_t + + // The error context. + context string + context_mark yaml_mark_t + + // Reader stuff + + read_handler yaml_read_handler_t // Read handler. + + input_file io.Reader // File input data. + input []byte // String input data. + input_pos int + + eof bool // EOF flag + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + unread int // The number of unread characters in the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The input encoding. + + offset int // The offset of the current position (in bytes). + mark yaml_mark_t // The mark of the current position. + + // Scanner stuff + + stream_start_produced bool // Have we started to scan the input stream? + stream_end_produced bool // Have we reached the end of the input stream? + + flow_level int // The number of unclosed '[' and '{' indicators. + + tokens []yaml_token_t // The tokens queue. + tokens_head int // The head of the tokens queue. + tokens_parsed int // The number of tokens fetched from the queue. + token_available bool // Does the tokens queue contain a token ready for dequeueing. + + indent int // The current indentation level. + indents []int // The indentation levels stack. + + simple_key_allowed bool // May a simple key occur at the current position? + simple_keys []yaml_simple_key_t // The stack of simple keys. + + // Parser stuff + + state yaml_parser_state_t // The current parser state. + states []yaml_parser_state_t // The parser states stack. + marks []yaml_mark_t // The stack of marks. + tag_directives []yaml_tag_directive_t // The list of TAG directives. + + // Dumper stuff + + aliases []yaml_alias_data_t // The alias data. + + document *yaml_document_t // The currently parsed document. +} + +// Emitter Definitions + +// The prototype of a write handler. +// +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. +// +// @param[in,out] data A pointer to an application data specified by +// yaml_emitter_set_output(). +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. +// +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. +// +type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error + +type yaml_emitter_state_t int + +// The emitter states. +const ( + // Expect STREAM-START. + yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota + + yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. + yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. + yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. + yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. + yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. + yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. + yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. + yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. + yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. + yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. + yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. + yaml_EMIT_END_STATE // Expect nothing. +) + +// The emitter structure. +// +// All members are internal. Manage the structure using the @c yaml_emitter_ +// family of functions. +type yaml_emitter_t struct { + + // Error handling + + error yaml_error_type_t // Error type. + problem string // Error description. + + // Writer stuff + + write_handler yaml_write_handler_t // Write handler. + + output_buffer *[]byte // String output data. + output_file io.Writer // File output data. + + buffer []byte // The working buffer. + buffer_pos int // The current position of the buffer. + + raw_buffer []byte // The raw buffer. + raw_buffer_pos int // The current position of the buffer. + + encoding yaml_encoding_t // The stream encoding. + + // Emitter stuff + + canonical bool // If the output is in the canonical style? + best_indent int // The number of indentation spaces. + best_width int // The preferred width of the output lines. + unicode bool // Allow unescaped non-ASCII characters? + line_break yaml_break_t // The preferred line break. + + state yaml_emitter_state_t // The current emitter state. + states []yaml_emitter_state_t // The stack of states. + + events []yaml_event_t // The event queue. + events_head int // The head of the event queue. + + indents []int // The stack of indentation levels. + + tag_directives []yaml_tag_directive_t // The list of tag directives. + + indent int // The current indentation level. + + flow_level int // The current flow level. + + root_context bool // Is it the document root context? + sequence_context bool // Is it a sequence context? + mapping_context bool // Is it a mapping context? + simple_key_context bool // Is it a simple mapping key context? + + line int // The current line. + column int // The current column. + whitespace bool // If the last character was a whitespace? + indention bool // If the last character was an indentation character (' ', '-', '?', ':')? + open_ended bool // If an explicit document end is required? + + // Anchor analysis. + anchor_data struct { + anchor []byte // The anchor value. + alias bool // Is it an alias? + } + + // Tag analysis. + tag_data struct { + handle []byte // The tag handle. + suffix []byte // The tag suffix. + } + + // Scalar analysis. + scalar_data struct { + value []byte // The scalar value. + multiline bool // Does the scalar contain line breaks? + flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? + block_plain_allowed bool // Can the scalar be expressed in the block plain style? + single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? + block_allowed bool // Can the scalar be expressed in the literal or folded styles? + style yaml_scalar_style_t // The output style. + } + + // Dumper stuff + + opened bool // If the stream was already opened? + closed bool // If the stream was already closed? + + // The information associated with the document nodes. + anchors *struct { + references int // The number of references. + anchor int // The anchor id. + serialized bool // If the node has been emitted? + } + + last_anchor_id int // The last assigned anchor id. + + document *yaml_document_t // The currently emitted document. +} diff --git a/docs/generator/vendor/gopkg.in/yaml.v2/yamlprivateh.go b/docs/generator/vendor/gopkg.in/yaml.v2/yamlprivateh.go new file mode 100644 index 0000000..8110ce3 --- /dev/null +++ b/docs/generator/vendor/gopkg.in/yaml.v2/yamlprivateh.go @@ -0,0 +1,173 @@ +package yaml + +const ( + // The size of the input raw buffer. + input_raw_buffer_size = 512 + + // The size of the input buffer. + // It should be possible to decode the whole raw buffer. + input_buffer_size = input_raw_buffer_size * 3 + + // The size of the output buffer. + output_buffer_size = 128 + + // The size of the output raw buffer. + // It should be possible to encode the whole output buffer. + output_raw_buffer_size = (output_buffer_size*2 + 2) + + // The size of other stacks and queues. + initial_stack_size = 16 + initial_queue_size = 16 + initial_string_size = 16 +) + +// Check if the character at the specified position is an alphabetical +// character, a digit, '_', or '-'. +func is_alpha(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' +} + +// Check if the character at the specified position is a digit. +func is_digit(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' +} + +// Get the value of a digit. +func as_digit(b []byte, i int) int { + return int(b[i]) - '0' +} + +// Check if the character at the specified position is a hex-digit. +func is_hex(b []byte, i int) bool { + return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' +} + +// Get the value of a hex-digit. +func as_hex(b []byte, i int) int { + bi := b[i] + if bi >= 'A' && bi <= 'F' { + return int(bi) - 'A' + 10 + } + if bi >= 'a' && bi <= 'f' { + return int(bi) - 'a' + 10 + } + return int(bi) - '0' +} + +// Check if the character is ASCII. +func is_ascii(b []byte, i int) bool { + return b[i] <= 0x7F +} + +// Check if the character at the start of the buffer can be printed unescaped. +func is_printable(b []byte, i int) bool { + return ((b[i] == 0x0A) || // . == #x0A + (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E + (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF + (b[i] > 0xC2 && b[i] < 0xED) || + (b[i] == 0xED && b[i+1] < 0xA0) || + (b[i] == 0xEE) || + (b[i] == 0xEF && // #xE000 <= . <= #xFFFD + !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF + !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) +} + +// Check if the character at the specified position is NUL. +func is_z(b []byte, i int) bool { + return b[i] == 0x00 +} + +// Check if the beginning of the buffer is a BOM. +func is_bom(b []byte, i int) bool { + return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF +} + +// Check if the character at the specified position is space. +func is_space(b []byte, i int) bool { + return b[i] == ' ' +} + +// Check if the character at the specified position is tab. +func is_tab(b []byte, i int) bool { + return b[i] == '\t' +} + +// Check if the character at the specified position is blank (space or tab). +func is_blank(b []byte, i int) bool { + //return is_space(b, i) || is_tab(b, i) + return b[i] == ' ' || b[i] == '\t' +} + +// Check if the character at the specified position is a line break. +func is_break(b []byte, i int) bool { + return (b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) +} + +func is_crlf(b []byte, i int) bool { + return b[i] == '\r' && b[i+1] == '\n' +} + +// Check if the character is a line break or NUL. +func is_breakz(b []byte, i int) bool { + //return is_break(b, i) || is_z(b, i) + return ( // is_break: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + // is_z: + b[i] == 0) +} + +// Check if the character is a line break, space, or NUL. +func is_spacez(b []byte, i int) bool { + //return is_space(b, i) || is_breakz(b, i) + return ( // is_space: + b[i] == ' ' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Check if the character is a line break, space, tab, or NUL. +func is_blankz(b []byte, i int) bool { + //return is_blank(b, i) || is_breakz(b, i) + return ( // is_blank: + b[i] == ' ' || b[i] == '\t' || + // is_breakz: + b[i] == '\r' || // CR (#xD) + b[i] == '\n' || // LF (#xA) + b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) + b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) + b[i] == 0) +} + +// Determine the width of the character. +func width(b byte) int { + // Don't replace these by a switch without first + // confirming that it is being inlined. + if b&0x80 == 0x00 { + return 1 + } + if b&0xE0 == 0xC0 { + return 2 + } + if b&0xF0 == 0xE0 { + return 3 + } + if b&0xF8 == 0xF0 { + return 4 + } + return 0 + +} From 7f588fd923c169d52c2121ce70634cf0cfbb0ac1 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 17:40:39 -0400 Subject: [PATCH 04/13] add recursion --- docs/generator/generator.go | 123 +++++++++++++--------------- docs/generator/tmpl/80053.test.tmpl | 2 +- docs/generator/types.go | 2 +- 3 files changed, 59 insertions(+), 68 deletions(-) diff --git a/docs/generator/generator.go b/docs/generator/generator.go index df06f21..095f611 100644 --- a/docs/generator/generator.go +++ b/docs/generator/generator.go @@ -80,9 +80,63 @@ func parseStandard(standardFilePath string) (XMLStandard, error) { return standard, nil } +func iterateControls(family string, familyTitle string, controls []XMLControl, components []cmcommon.Component) ([]MarkdownTemplateControl, string) { + var markdownTemplateControls []MarkdownTemplateControl + var abbrev string + + for _, control := range controls { + if control.Family == family && len(control.Withdrawn.IncorporatedInto) <= 0 { + if abbrev == "" { + abbrev = strings.Split(control.Number, "-")[0] + } + + markdownTemplateControl := MarkdownTemplateControl{ + Family: familyTitle, + Number: control.Number, + Title: strings.Title(strings.ToLower(control.Title)), + Statements: control.Statements, + IsControlEnhancement: false, + } + + for _, component := range components { + satisfies := component.GetAllSatisfies() + for _, satisfy := range satisfies { + if satisfy.GetControlKey() == control.Number { + markdownTemplateControl.Components = append(markdownTemplateControl.Components, MarkdownTemplateComponent{ + Name: component.GetName(), + ImplementationStatuses: satisfy.GetImplementationStatuses(), + ControlOrigins: satisfy.GetControlOrigins()}, + ) + + break + } + } + } + + markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControl) + + xmlControlEnhancements := make([]XMLControl, len(control.ControlEnhancements)) + for i, enhancement := range control.ControlEnhancements { + xmlControlEnhancements[i] = XMLControl{ + Family: family, + Number: enhancement.Number, + Title: enhancement.Title, + BaselineImpact: enhancement.BaselineImpact, + Withdrawn: enhancement.Withdrawn, + Statements: enhancement.Statements, + } + } + markdownTemplateControlEnhancements, _ := iterateControls(family, familyTitle, xmlControlEnhancements, components) + markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControlEnhancements...) + } + } + + return markdownTemplateControls, abbrev +} + func generateMarkdownFiles(standard XMLStandard, components []cmcommon.Component) error { + // Get families var families []string - var currentFamily string for _, control := range standard.Controls { if currentFamily != control.Family { @@ -91,74 +145,11 @@ func generateMarkdownFiles(standard XMLStandard, components []cmcommon.Component } } + // Generate markdown for each family for _, family := range families { - var markdownTemplateControls []MarkdownTemplateControl - var abbrev string familyTitle := strings.Title(strings.ToLower(family)) - for _, control := range standard.Controls { - if control.Family == family && len(control.Withdrawn.IncorporatedInto) <= 0 { - if abbrev == "" { - abbrev = strings.Split(control.Number, "-")[0] - } - - markdownTemplateControl := MarkdownTemplateControl{ - Family: familyTitle, - Number: control.Number, - Title: strings.Title(strings.ToLower(control.Title)), - Statements: control.Statements, - IsControlEnhancement: false, - } - - for _, component := range components { - satisfies := component.GetAllSatisfies() - for _, satisfy := range satisfies { - if satisfy.GetControlKey() == control.Number { - markdownTemplateControl.Components = append(markdownTemplateControl.Components, MarkdownTemplateComponent{ - Name: component.GetName(), - ImplementationStatuses: satisfy.GetImplementationStatuses(), - ControlOrigins: satisfy.GetControlOrigins()}, - ) - - break - } - } - } - - markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControl) - - // Could clean this up with generic function so as not to duplicate - for _, enhancement := range control.ControlEnhancements { - if len(control.Withdrawn.IncorporatedInto) <= 0 { - markdownTemplateControlEnhancement := MarkdownTemplateControl{ - Family: familyTitle, - Number: enhancement.Number, - Title: strings.Title(strings.ToLower(enhancement.Title)), - Statements: enhancement.Statements, - IsControlEnhancement: false, - } - - for _, component := range components { - satisfies := component.GetAllSatisfies() - for _, satisfy := range satisfies { - if satisfy.GetControlKey() == enhancement.Number { - markdownTemplateControlEnhancement.Components = append(markdownTemplateControlEnhancement.Components, MarkdownTemplateComponent{ - Name: component.GetName(), - ImplementationStatuses: satisfy.GetImplementationStatuses(), - ControlOrigins: satisfy.GetControlOrigins()}, - ) - - break - } - } - } - - markdownTemplateControls = append(markdownTemplateControls, markdownTemplateControlEnhancement) - } - } - } - } - + markdownTemplateControls, abbrev := iterateControls(family, familyTitle, standard.Controls, components) markdownTemplateMap := map[string][]MarkdownTemplateControl{ familyTitle: markdownTemplateControls, } diff --git a/docs/generator/tmpl/80053.test.tmpl b/docs/generator/tmpl/80053.test.tmpl index f262744..fbf49d4 100644 --- a/docs/generator/tmpl/80053.test.tmpl +++ b/docs/generator/tmpl/80053.test.tmpl @@ -30,7 +30,7 @@ keywords: "standards, compliance, security, 800-53, {{ $family }}" {{if .Statements}}
      {{range .Statements -}} -
    1. {{ .Description }}
    2. +
    3. {{ .Description }}
    4. {{end -}}
    {{end -}} diff --git a/docs/generator/types.go b/docs/generator/types.go index 1ceefdb..5801e11 100644 --- a/docs/generator/types.go +++ b/docs/generator/types.go @@ -10,7 +10,7 @@ type XMLStandard struct { type XMLControl struct { Family string `xml:"family"` Number string `xml:"number"` - Title string `yaml:"name" xml:"title"` + Title string `xml:"title"` Priority string `xml:"priority"` BaselineImpact []string `xml:"baseline-impact"` Statements []XMLStatement `xml:"statement"` From eae325e6e7dd2c263c316efcf0e898a6a856b79e Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 17:40:54 -0400 Subject: [PATCH 05/13] update docs --- docs/compliance/reference/800-53/AC.md | 144 ----------------- docs/compliance/reference/800-53/AU.md | 60 -------- docs/compliance/reference/800-53/CA.md | 12 -- docs/compliance/reference/800-53/CM.md | 60 -------- docs/compliance/reference/800-53/CP.md | 60 -------- docs/compliance/reference/800-53/IA.md | 12 -- docs/compliance/reference/800-53/MA.md | 12 -- docs/compliance/reference/800-53/MP.md | 96 ------------ docs/compliance/reference/800-53/PE.md | 24 --- docs/compliance/reference/800-53/PL.md | 24 --- docs/compliance/reference/800-53/PS.md | 12 -- docs/compliance/reference/800-53/RA.md | 24 --- docs/compliance/reference/800-53/SA.md | 120 --------------- docs/compliance/reference/800-53/SC.md | 204 ------------------------- docs/compliance/reference/800-53/SI.md | 96 ------------ 15 files changed, 960 deletions(-) diff --git a/docs/compliance/reference/800-53/AC.md b/docs/compliance/reference/800-53/AC.md index 5cdc9e7..75af3b0 100644 --- a/docs/compliance/reference/800-53/AC.md +++ b/docs/compliance/reference/800-53/AC.md @@ -463,18 +463,6 @@ The information system enforces approved authorizations for logical access to in -## AC-3 (1) Restricted Access To Privileged Functions - -**Description:** - -[Withdrawn: Incorporated into AC-6]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## AC-3 (2) Dual Authorization **Description:** @@ -538,18 +526,6 @@ The information system prevents access to [Assignment: organization-defined secu **Control Information:** -**Responsible role(s)** - Organization -## AC-3 (6) Protection Of User And System Information - -**Description:** - -[Withdrawn: Incorporated into MP-4 and SC-28]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AC-3 (7) Role-Based Access Control @@ -838,18 +814,6 @@ The information system, when transferring information between different security **Control Information:** -**Responsible role(s)** - Organization -## AC-4 (16) Information Transfers On Interconnected Systems - -**Description:** - -[Withdrawn: Incorporated into AC-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AC-4 (17) Domain Authentication @@ -1179,18 +1143,6 @@ The information system: -## AC-7 (1) Automatic Account Lock - -**Description:** - -[Withdrawn: Incorporated into AC-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## AC-7 (2) Purge / Wipe Mobile Device **Description:** @@ -1433,18 +1385,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## AC-14 (1) Necessary Uses - -**Description:** - -[Withdrawn: Incorporated into AC-14]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AC-16 Security Attributes @@ -1709,18 +1649,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## AC-17 (5) Monitoring For Unauthorized Connections - -**Description:** - -[Withdrawn: Incorporated into SI-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AC-17 (6) Protection Of Information @@ -1733,30 +1661,6 @@ The organization ensures that users protect information about remote access mech **Control Information:** -**Responsible role(s)** - Organization -## AC-17 (7) Additional Protection For Security Function Access - -**Description:** - -[Withdrawn: Incorporated into AC-3 (10)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## AC-17 (8) Disable Nonsecure Network Protocols - -**Description:** - -[Withdrawn: Incorporated into CM-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AC-17 (9) Disconnect / Disable Access @@ -1818,18 +1722,6 @@ The information system protects wireless access to the system using authenticati **Control Information:** -**Responsible role(s)** - Organization -## AC-18 (2) Monitoring Unauthorized Connections - -**Description:** - -[Withdrawn: Incorporated into SI-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AC-18 (3) Disable Wireless Networking @@ -1880,42 +1772,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## AC-19 (1) Use Of Writable / Portable Storage Devices - -**Description:** - -[Withdrawn: Incorporated into MP-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## AC-19 (2) Use Of Personally Owned Portable Storage Devices - -**Description:** - -[Withdrawn: Incorporated into MP-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## AC-19 (3) Use Of Portable Storage Devices With No Identifiable Owner - -**Description:** - -[Withdrawn: Incorporated into MP-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AC-19 (4) Restrictions For Classified Information diff --git a/docs/compliance/reference/800-53/AU.md b/docs/compliance/reference/800-53/AU.md index df04b2c..a5c1fd7 100644 --- a/docs/compliance/reference/800-53/AU.md +++ b/docs/compliance/reference/800-53/AU.md @@ -67,30 +67,6 @@ The organization: -## AU-2 (1) Compilation Of Audit Records From Multiple Sources - -**Description:** - -[Withdrawn: Incorporated into AU-12]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## AU-2 (2) Selection Of Audit Events By Component - -**Description:** - -[Withdrawn: Incorporated into AU-12]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## AU-2 (3) Reviews And Updates **Description:** @@ -102,18 +78,6 @@ The organization reviews and updates the audited events [Assignment: organizatio **Control Information:** -**Responsible role(s)** - Organization -## AU-2 (4) Privileged Functions - -**Description:** - -[Withdrawn: Incorporated into AC-6 (9)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AU-3 Content Of Audit Records @@ -405,18 +369,6 @@ The organization employs automated mechanisms to integrate audit review, analysi **Control Information:** -**Responsible role(s)** - Organization -## AU-6 (2) Automated Security Alerts - -**Description:** - -[Withdrawn: Incorporated into SI-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AU-6 (3) Correlate Audit Repositories @@ -933,18 +885,6 @@ The information system: **Control Information:** -**Responsible role(s)** - Organization -## AU-10 (5) Digital Signatures - -**Description:** - -[Withdrawn: Incorporated into SI-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## AU-11 Audit Record Retention diff --git a/docs/compliance/reference/800-53/CA.md b/docs/compliance/reference/800-53/CA.md index fa11183..19d77df 100644 --- a/docs/compliance/reference/800-53/CA.md +++ b/docs/compliance/reference/800-53/CA.md @@ -245,18 +245,6 @@ The organization employs assessors or assessment teams with [Assignment: organiz **Control Information:** -**Responsible role(s)** - Organization -## CA-7 (2) Types Of Assessments - -**Description:** - -[Withdrawn: Incorporated into CA-2]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## CA-7 (3) Trend Analyses diff --git a/docs/compliance/reference/800-53/CM.md b/docs/compliance/reference/800-53/CM.md index 61ed27a..b3b621b 100644 --- a/docs/compliance/reference/800-53/CM.md +++ b/docs/compliance/reference/800-53/CM.md @@ -144,30 +144,6 @@ The organization retains [Assignment: organization-defined previous versions of -## CM-2 (4) Unauthorized Software - -**Description:** - -[Withdrawn: Incorporated into CM-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## CM-2 (5) Authorized Software - -**Description:** - -[Withdrawn: Incorporated into CM-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## CM-2 (6) Development And Test Environments **Description:** @@ -518,18 +494,6 @@ The organization limits privileges to change software resident within software l **Control Information:** -**Responsible role(s)** - Organization -## CM-5 (7) Automatic Implementation Of Security Safeguards - -**Description:** - -[Withdrawn: Incorporated into SI-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## CM-6 Configuration Settings @@ -593,30 +557,6 @@ The organization employs [Assignment: organization-defined security safeguards] **Control Information:** -**Responsible role(s)** - Organization -## CM-6 (3) Unauthorized Change Detection - -**Description:** - -[Withdrawn: Incorporated into SI-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## CM-6 (4) Conformance Demonstration - -**Description:** - -[Withdrawn: Incorporated into CM-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## CM-7 Least Functionality diff --git a/docs/compliance/reference/800-53/CP.md b/docs/compliance/reference/800-53/CP.md index 215c5d8..8bd5781 100644 --- a/docs/compliance/reference/800-53/CP.md +++ b/docs/compliance/reference/800-53/CP.md @@ -368,18 +368,6 @@ The organization prepares the alternate processing site so that the site is read **Control Information:** -**Responsible role(s)** - Organization -## CP-7 (5) Equivalent Information Security Safeguards - -**Description:** - -[Withdrawn: Incorporated into CP-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## CP-7 (6) Inability To Return To Primary Site @@ -521,18 +509,6 @@ The organization stores backup copies of [Assignment: organization-defined criti **Control Information:** -**Responsible role(s)** - Organization -## CP-9 (4) Protection From Unauthorized Modification - -**Description:** - -[Withdrawn: Incorporated into CP-9]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## CP-9 (5) Transfer To Alternate Storage Site @@ -581,18 +557,6 @@ The organization provides for the recovery and reconstitution of the information **Control Information:** -**Responsible role(s)** - Organization -## CP-10 (1) Contingency Plan Testing - -**Description:** - -[Withdrawn: Incorporated into CP-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## CP-10 (2) Transaction Recovery @@ -624,18 +588,6 @@ The information system implements transaction recovery for systems that are tran -## CP-10 (3) Compensating Security Controls - -**Description:** - -[Withdrawn: Addressed through tailoring procedures]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## CP-10 (4) Restore Within Time Period **Description:** @@ -647,18 +599,6 @@ The organization provides the capability to restore information system component **Control Information:** -**Responsible role(s)** - Organization -## CP-10 (5) Failover Capability - -**Description:** - -[Withdrawn: Incorporated into SI-13]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## CP-10 (6) Component Protection diff --git a/docs/compliance/reference/800-53/IA.md b/docs/compliance/reference/800-53/IA.md index 0d3e516..f42c61a 100644 --- a/docs/compliance/reference/800-53/IA.md +++ b/docs/compliance/reference/800-53/IA.md @@ -304,18 +304,6 @@ The information system authenticates [Assignment: organization-defined specific **Control Information:** -**Responsible role(s)** - Organization -## IA-3 (2) Cryptographic Bidirectional Network Authentication - -**Description:** - -[Withdrawn: Incorporated into IA-3 (1)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## IA-3 (3) Dynamic Address Allocation diff --git a/docs/compliance/reference/800-53/MA.md b/docs/compliance/reference/800-53/MA.md index 51a68b1..7263fc6 100644 --- a/docs/compliance/reference/800-53/MA.md +++ b/docs/compliance/reference/800-53/MA.md @@ -45,18 +45,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## MA-2 (1) Record Content - -**Description:** - -[Withdrawn: Incorporated into MA-2]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## MA-2 (2) Automated Maintenance Activities diff --git a/docs/compliance/reference/800-53/MP.md b/docs/compliance/reference/800-53/MP.md index 548a132..b95b7f9 100644 --- a/docs/compliance/reference/800-53/MP.md +++ b/docs/compliance/reference/800-53/MP.md @@ -39,30 +39,6 @@ The organization restricts access to [Assignment: organization-defined types of **Control Information:** -**Responsible role(s)** - Organization -## MP-2 (1) Automated Restricted Access - -**Description:** - -[Withdrawn: Incorporated into MP-4 (2)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## MP-2 (2) Cryptographic Protection - -**Description:** - -[Withdrawn: Incorporated into SC-28 (1)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## MP-3 Media Marking @@ -91,18 +67,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## MP-4 (1) Cryptographic Protection - -**Description:** - -[Withdrawn: Incorporated into SC-28 (1)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## MP-4 (2) Automated Restricted Access @@ -131,30 +95,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## MP-5 (1) Protection Outside Of Controlled Areas - -**Description:** - -[Withdrawn: Incorporated into MP-5]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## MP-5 (2) Documentation Of Activities - -**Description:** - -[Withdrawn: Incorporated into MP-5]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## MP-5 (3) Custodians @@ -229,42 +169,6 @@ The organization applies nondestructive sanitization techniques to portable stor **Control Information:** -**Responsible role(s)** - Organization -## MP-6 (4) Controlled Unclassified Information - -**Description:** - -[Withdrawn: Incorporated into MP-6]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## MP-6 (5) Classified Information - -**Description:** - -[Withdrawn: Incorporated into MP-6]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## MP-6 (6) Media Destruction - -**Description:** - -[Withdrawn: Incorporated into MP-6]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## MP-6 (7) Dual Authorization diff --git a/docs/compliance/reference/800-53/PE.md b/docs/compliance/reference/800-53/PE.md index f8f57ac..3b6bf58 100644 --- a/docs/compliance/reference/800-53/PE.md +++ b/docs/compliance/reference/800-53/PE.md @@ -328,18 +328,6 @@ The organization employs automated mechanisms to facilitate the maintenance and **Control Information:** -**Responsible role(s)** - Organization -## PE-8 (2) Physical Access Records - -**Description:** - -[Withdrawn: Incorporated into PE-2]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## PE-9 Power Equipment And Cabling @@ -391,18 +379,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## PE-10 (1) Accidental / Unauthorized Activation - -**Description:** - -[Withdrawn: Incorporated into PE-10]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## PE-11 Emergency Power diff --git a/docs/compliance/reference/800-53/PL.md b/docs/compliance/reference/800-53/PL.md index 81ebf2e..21fe124 100644 --- a/docs/compliance/reference/800-53/PL.md +++ b/docs/compliance/reference/800-53/PL.md @@ -56,30 +56,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## PL-2 (1) Concept Of Operations - -**Description:** - -[Withdrawn: Incorporated into PL-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## PL-2 (2) Functional Architecture - -**Description:** - -[Withdrawn: Incorporated into PL-8]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## PL-2 (3) Plan / Coordinate With Other Organizational Entities diff --git a/docs/compliance/reference/800-53/PS.md b/docs/compliance/reference/800-53/PS.md index c46af18..c282312 100644 --- a/docs/compliance/reference/800-53/PS.md +++ b/docs/compliance/reference/800-53/PS.md @@ -174,18 +174,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## PS-6 (1) Information Requiring Special Protection - -**Description:** - -[Withdrawn: Incorporated into PS-3]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## PS-6 (2) Classified Information Requiring Special Protection diff --git a/docs/compliance/reference/800-53/RA.md b/docs/compliance/reference/800-53/RA.md index d5bade9..233a713 100644 --- a/docs/compliance/reference/800-53/RA.md +++ b/docs/compliance/reference/800-53/RA.md @@ -230,18 +230,6 @@ The organization employs automated mechanisms to compare the results of vulnerab -## RA-5 (7) Automated Detection And Notification Of Unauthorized Components - -**Description:** - -[Withdrawn: Incorporated into CM-8]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## RA-5 (8) Review Historic Audit Logs **Description:** @@ -253,18 +241,6 @@ The organization reviews historic audit logs to determine if a vulnerability ide **Control Information:** -**Responsible role(s)** - Organization -## RA-5 (9) Penetration Testing And Analyses - -**Description:** - -[Withdrawn: Incorporated into CA-8]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## RA-5 (10) Correlate Scanning Information diff --git a/docs/compliance/reference/800-53/SA.md b/docs/compliance/reference/800-53/SA.md index 955f1e4..a02dee5 100644 --- a/docs/compliance/reference/800-53/SA.md +++ b/docs/compliance/reference/800-53/SA.md @@ -113,18 +113,6 @@ The organization requires the developer of the information system, system compon **Control Information:** -**Responsible role(s)** - Organization -## SA-4 (4) Assignment Of Components To Systems - -**Description:** - -[Withdrawn: Incorporated into CM-8 (9)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SA-4 (5) System / Component / Service Configurations @@ -232,66 +220,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## SA-5 (1) Functional Properties Of Security Controls - -**Description:** - -[Withdrawn: Incorporated into SA-4 (1)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SA-5 (2) Security-Relevant External System Interfaces - -**Description:** - -[Withdrawn: Incorporated into SA-4 (2)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SA-5 (3) High-Level Design - -**Description:** - -[Withdrawn: Incorporated into SA-4 (2)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SA-5 (4) Low-Level Design - -**Description:** - -[Withdrawn: Incorporated into SA-4 (2)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SA-5 (5) Source Code - -**Description:** - -[Withdrawn: Incorporated into SA-4 (2)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SA-8 Security Engineering Principles @@ -644,30 +572,6 @@ The organization conducts a supplier review prior to entering into a contractual **Control Information:** -**Responsible role(s)** - Organization -## SA-12 (3) Trusted Shipping And Warehousing - -**Description:** - -[Withdrawn: Incorporated into SA-12 (1)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SA-12 (4) Diversity Of Suppliers - -**Description:** - -[Withdrawn: Incorporated into SA-12 (13)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SA-12 (5) Limitation Of Harm @@ -680,18 +584,6 @@ The organization employs [Assignment: organization-defined security safeguards] **Control Information:** -**Responsible role(s)** - Organization -## SA-12 (6) Minimizing Procurement Time - -**Description:** - -[Withdrawn: Incorporated into SA-12 (1)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SA-12 (7) Assessments Prior To Selection / Acceptance / Update @@ -826,18 +718,6 @@ The organization identifies critical information system components and functions **Control Information:** -**Responsible role(s)** - Organization -## SA-14 (1) Critical Components With No Viable Alternative Sourcing - -**Description:** - -[Withdrawn: Incorporated into SA-20]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SA-15 Development Process, Standards, And Tools diff --git a/docs/compliance/reference/800-53/SC.md b/docs/compliance/reference/800-53/SC.md index 2d4fc2b..20d0a6f 100644 --- a/docs/compliance/reference/800-53/SC.md +++ b/docs/compliance/reference/800-53/SC.md @@ -153,18 +153,6 @@ The information system prevents unauthorized and unintended information transfer **Control Information:** -**Responsible role(s)** - Organization -## SC-4 (1) Security Levels - -**Description:** - -[Withdrawn: Incorporated into SC-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-4 (2) Periods Processing @@ -254,30 +242,6 @@ The information system: **Control Information:** -**Responsible role(s)** - Organization -## SC-7 (1) Physically Separated Subnetworks - -**Description:** - -[Withdrawn: Incorporated into SC-7]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SC-7 (2) Public Access - -**Description:** - -[Withdrawn: Incorporated into SC-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-7 (3) Access Points @@ -319,18 +283,6 @@ The information system at managed interfaces denies network communications traff **Control Information:** -**Responsible role(s)** - Organization -## SC-7 (6) Response To Recognized Failures - -**Description:** - -[Withdrawn: Incorporated into SC-7 (18)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-7 (7) Prevent Split Tunneling For Remote Devices @@ -707,30 +659,6 @@ The organization produces, controls, and distributes asymmetric cryptographic ke **Control Information:** -**Responsible role(s)** - Organization -## SC-12 (4) Pki Certificates - -**Description:** - -[Withdrawn: Incorporated into SC-12]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SC-12 (5) Pki Certificates / Hardware Tokens - -**Description:** - -[Withdrawn: Incorporated into SC-12]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-13 Cryptographic Protection @@ -757,54 +685,6 @@ The information system implements [Assignment: organization-defined cryptographi -## SC-13 (1) Fips-Validated Cryptography - -**Description:** - -[Withdrawn: Incorporated into SC-13]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SC-13 (2) Nsa-Approved Cryptography - -**Description:** - -[Withdrawn: Incorporated into SC-13]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SC-13 (3) Individuals Without Formal Access Approvals - -**Description:** - -[Withdrawn: Incorporated into SC-13]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization -## SC-13 (4) Digital Signatures - -**Description:** - -[Withdrawn: Incorporated into SC-13]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## SC-15 Collaborative Computing Devices **Description:** @@ -830,18 +710,6 @@ The information system provides physical disconnect of collaborative computing d **Control Information:** -**Responsible role(s)** - Organization -## SC-15 (2) Blocking Inbound / Outbound Communications Traffic - -**Description:** - -[Withdrawn: Incorporated into SC-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-15 (3) Disabling / Removal In Secure Work Areas @@ -1005,18 +873,6 @@ The information system: **Control Information:** -**Responsible role(s)** - Organization -## SC-20 (1) Child Subspaces - -**Description:** - -[Withdrawn: Incorporated into SC-20]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-20 (2) Data Origin / Integrity @@ -1041,18 +897,6 @@ The information system requests and performs data origin authentication and data **Control Information:** -**Responsible role(s)** - Organization -## SC-21 (1) Data Origin / Integrity - -**Description:** - -[Withdrawn: Incorporated into SC-21]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-22 Architecture And Provisioning For Name / Address Resolution Service @@ -1126,18 +970,6 @@ The information system invalidates session identifiers upon user logout or other -## SC-23 (2) User-Initiated Logouts / Message Displays - -**Description:** - -[Withdrawn: Incorporated into AC-12 (1)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## SC-23 (3) Unique Session Identifiers With Randomization **Description:** @@ -1149,18 +981,6 @@ The information system generates a unique session identifier for each session wi **Control Information:** -**Responsible role(s)** - Organization -## SC-23 (4) Unique Session Identifiers With Randomization - -**Description:** - -[Withdrawn: Incorporated into SC-23 (3)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-23 (5) Allowed Certificate Authorities @@ -1209,18 +1029,6 @@ The information system includes components specifically designed to be the targe **Control Information:** -**Responsible role(s)** - Organization -## SC-26 (1) Detection Of Malicious Code - -**Description:** - -[Withdrawn: Incorporated into SC-35]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-27 Platform-Independent Applications @@ -1341,18 +1149,6 @@ The organization employs [Assignment: organization-defined concealment and misdi **Control Information:** -**Responsible role(s)** - Organization -## SC-30 (1) Virtualization Techniques - -**Description:** - -[Withdrawn: Incorporated into SC-29 (1)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SC-30 (2) Randomness diff --git a/docs/compliance/reference/800-53/SI.md b/docs/compliance/reference/800-53/SI.md index 1ec7f3a..1e125c5 100644 --- a/docs/compliance/reference/800-53/SI.md +++ b/docs/compliance/reference/800-53/SI.md @@ -81,18 +81,6 @@ The organization: **Control Information:** -**Responsible role(s)** - Organization -## SI-2 (4) Automated Patch Management Tools - -**Description:** - -[Withdrawn: Incorporated into SI-2]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SI-2 (5) Automatic Software / Firmware Updates @@ -176,18 +164,6 @@ The information system automatically updates malicious code protection mechanism -## SI-3 (3) Non-Privileged Users - -**Description:** - -[Withdrawn: Incorporated into AC-6 (10)]. -
      -
    - -**Control Information:** - - -**Responsible role(s)** - Organization ## SI-3 (4) Updates Only By Privileged Users **Description:** @@ -199,18 +175,6 @@ The information system updates malicious code protection mechanisms only when di **Control Information:** -**Responsible role(s)** - Organization -## SI-3 (5) Portable Storage Devices - -**Description:** - -[Withdrawn: Incorporated into MP-7]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SI-3 (6) Testing / Verification @@ -364,18 +328,6 @@ The information system alerts [Assignment: organization-defined personnel or rol **Control Information:** -**Responsible role(s)** - Organization -## SI-4 (6) Restrict Non-Privileged Users - -**Description:** - -[Withdrawn: Incorporated into AC-6 (10)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SI-4 (7) Automated Response To Suspicious Events @@ -388,18 +340,6 @@ The information system notifies [Assignment: organization-defined incident respo **Control Information:** -**Responsible role(s)** - Organization -## SI-4 (8) Protection Of Monitoring Information - -**Description:** - -[Withdrawn: Incorporated into SI-4]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SI-4 (9) Testing Of Monitoring Tools @@ -639,18 +579,6 @@ The information system: **Control Information:** -**Responsible role(s)** - Organization -## SI-6 (1) Notification Of Failed Security Tests - -**Description:** - -[Withdrawn: Incorporated into SI-6]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SI-6 (2) Automation Support For Distributed Testing @@ -723,18 +651,6 @@ The organization employs centrally managed integrity verification tools. **Control Information:** -**Responsible role(s)** - Organization -## SI-7 (4) Tamper-Evident Packaging - -**Description:** - -[Withdrawn: Incorporated into SA-12]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SI-7 (5) Automated Response To Integrity Violations @@ -1081,18 +997,6 @@ The organization takes information system components out of service by transferr **Control Information:** -**Responsible role(s)** - Organization -## SI-13 (2) Time Limit On Process Execution Without Supervision - -**Description:** - -[Withdrawn: Incorporated into SI-7 (16)]. -
      -
    - -**Control Information:** - - **Responsible role(s)** - Organization ## SI-13 (3) Manual Transfer Between Components From c5bf97108c33ff860a72df443f1535267e84b954 Mon Sep 17 00:00:00 2001 From: Andrew Weiss Date: Sun, 30 Jul 2017 17:57:15 -0400 Subject: [PATCH 06/13] update src and docs --- docs/compliance/reference/800-53/AC.md | 52 +++++++++++++------------- docs/compliance/reference/800-53/AT.md | 8 ++-- docs/compliance/reference/800-53/AU.md | 8 ++-- docs/compliance/reference/800-53/CA.md | 14 +++---- docs/compliance/reference/800-53/CM.md | 16 ++++---- docs/compliance/reference/800-53/CP.md | 20 +++++----- docs/compliance/reference/800-53/IA.md | 8 ++-- docs/compliance/reference/800-53/IR.md | 24 ++++++------ docs/compliance/reference/800-53/MA.md | 16 ++++---- docs/compliance/reference/800-53/MP.md | 8 ++-- docs/compliance/reference/800-53/PE.md | 12 +++--- docs/compliance/reference/800-53/PL.md | 32 ++++++++-------- docs/compliance/reference/800-53/PM.md | 18 ++++----- docs/compliance/reference/800-53/PS.md | 12 +++--- docs/compliance/reference/800-53/RA.md | 14 +++---- docs/compliance/reference/800-53/SA.md | 28 +++++++------- docs/compliance/reference/800-53/SC.md | 8 ++-- docs/compliance/reference/800-53/SI.md | 20 +++++----- docs/generator/generator.go | 2 + docs/generator/tmpl/80053.test.tmpl | 15 ++++---- 20 files changed, 169 insertions(+), 166 deletions(-) diff --git a/docs/compliance/reference/800-53/AC.md b/docs/compliance/reference/800-53/AC.md index 75af3b0..bdce548 100644 --- a/docs/compliance/reference/800-53/AC.md +++ b/docs/compliance/reference/800-53/AC.md @@ -13,14 +13,14 @@ The organization: