Skip to content

Commit

Permalink
add recoverability
Browse files Browse the repository at this point in the history
add recoverability decision point
  • Loading branch information
ahouseholder committed Feb 20, 2025
1 parent 0fe62b8 commit 0aa9f93
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/reference/decision_points/nciss/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ included a few examples here.

- [Incident Severity](incident_severity.md)
- [Observed Location of Activity](observed_activity_location.md)
- [Recoverability](recoverability.md)

</div>

Check failure on line 18 in docs/reference/decision_points/nciss/index.md

View workflow job for this annotation

GitHub Actions / lint

Files should end with a single newline character

docs/reference/decision_points/nciss/index.md:18:6 MD047/single-trailing-newline Files should end with a single newline character https://github.com/DavidAnson/markdownlint/blob/v0.34.0/doc/md047.md
8 changes: 8 additions & 0 deletions docs/reference/decision_points/nciss/recoverability.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Recoverability

```python exec="true" idprefix=""
from ssvc.decision_points.nciss.recoverability import LATEST
from ssvc.doc_helpers import example_block

print(example_block(LATEST))
```
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ nav:
- 'reference/decision_points/nciss/index.md'
- Incident Severity: 'reference/decision_points/nciss/incident_severity.md'
- Observed Activity Location: 'reference/decision_points/nciss/observed_activity_location.md'
- Recoverability: 'reference/decision_points/nciss/recoverability.md'
- Code:
- Intro: 'reference/code/index.md'
- CSV Analyzer: 'reference/code/analyze_csv.md'
Expand Down
98 changes: 98 additions & 0 deletions src/ssvc/decision_points/nciss/recoverability.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#!/usr/bin/env python
"""
Provides a decision point to represent the recoverability of a system.
Based on the [National Cybersecurity Incident Scoring System (NCISS)](https://www.cisa.gov/sites/default/files/2023-01/cisa_national_cyber_incident_scoring_system_s508c.pdf)
"""
# Copyright (c) 2025 Carnegie Mellon University and Contributors.
# - see Contributors.md for a full list of Contributors
# - see ContributionInstructions.md for information on how you can Contribute to this project
# Stakeholder Specific Vulnerability Categorization (SSVC) is
# licensed under a MIT (SEI)-style license, please see LICENSE.md distributed
# with this Software or contact permission@sei.cmu.edu for full terms.
# Created, in part, with funding and support from the United States Government
# (see Acknowledgments file). This program may include and/or can make use of
# certain third party source code, object code, documentation and other files
# (“Third Party Software”). See LICENSE.md for more details.
# Carnegie Mellon®, CERT® and CERT Coordination Center® are registered in the
# U.S. Patent and Trademark Office by Carnegie Mellon University

from ssvc.decision_points import SsvcDecisionPointValue
from ssvc.decision_points.helpers import print_versions_and_diffs
from ssvc.decision_points.nciss.base import NcissDecisionPoint

# Copyright (c) 2025 Carnegie Mellon University and Contributors.
# - see Contributors.md for a full list of Contributors
# - see ContributionInstructions.md for information on how you can Contribute to this project
# Stakeholder Specific Vulnerability Categorization (SSVC) is
# licensed under a MIT (SEI)-style license, please see LICENSE.md distributed
# with this Software or contact permission@sei.cmu.edu for full terms.
# Created, in part, with funding and support from the United States Government
# (see Acknowledgments file). This program may include and/or can make use of
# certain third party source code, object code, documentation and other files
# (“Third Party Software”). See LICENSE.md for more details.
# Carnegie Mellon®, CERT® and CERT Coordination Center® are registered in the
# U.S. Patent and Trademark Office by Carnegie Mellon University

# RECOVERABILITY
# Recoverability represents the scope of resources needed to recover from the incident. In many cases, an
# entity’s internal computer network defense staff will be able to handle an incident without external support,
# resulting in a recoverability classification of Regular. An example of a Regular recovery would be a phishing
# email that was automatically blocked by a mail server. In Extended recoverability cases, significant efforts
# such as a multi-agency, multi-organizational response task force may be needed for recovery. For example, if
# an entity requests support from CISA, the incident is by its nature an Extended recovery. Lastly, it may not be
# feasible to recover from some types of incidents, such as significant confidentiality or privacy compromises.
# REGULAR
# Time to recovery is predictable with existing resources.

REGULAR = SsvcDecisionPointValue(
name="Regular",
key="R",
description="Time to recovery is predictable with existing resources.",
)

# SUPPLEMENTED
# Time to recover is predictable with additional resources.

SUPPLEMENTED = SsvcDecisionPointValue(
name="Supplemented",
key="S",
description="Time to recover is predictable with additional resources.",
)

# EXTENDED
# Time to recovery is unpredictable; additional resources and outside assistance may be required.

EXTENDED = SsvcDecisionPointValue(
name="Extended",
key="E",
description="Time to recovery is unpredictable; additional resources and outside assistance may be required.",
)

# NOT RECOVERABLE
# Recovery from the incident is not possible (e.g., sensitive data was exfiltrated and posted publicly,
# investigation launched).

NOT_RECOVERABLE = SsvcDecisionPointValue(
name="Not Recoverable",
key="N",
description="Recovery from the incident is not possible (e.g., sensitive data was exfiltrated and posted publicly, investigation launched).",
)

RECOVERABILITY = NcissDecisionPoint(
name="Recoverability",
description="Represents the scope of resources needed to recover from the incident.",
key="RECOVERABILITY",
version="1.0.0",
values=(REGULAR, SUPPLEMENTED, EXTENDED, NOT_RECOVERABLE),
)

VERSIONS = (RECOVERABILITY,)
LATEST = VERSIONS[-1]


def main():
print_versions_and_diffs(VERSIONS)


if __name__ == "__main__":
main()

0 comments on commit 0aa9f93

Please sign in to comment.