Skip to content

Commit 17aacaf

Browse files
committed
Add threat models to docs
1 parent 0bcacff commit 17aacaf

8 files changed

Lines changed: 1051 additions & 163 deletions

File tree

doc/conf.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,14 @@
117117
# -- Options for autosectionlabel extension -------------------------------
118118
autosectionlabel_maxdepth = 3
119119

120-
# Suppress warnings about duplicate labels from argparse directive
120+
# Suppress warnings about duplicate labels from argparse directive and
121+
# from the generated threat-model pages (which share section names).
121122
suppress_warnings = [
122123
"autosectionlabel.reference/commands",
123124
"autosectionlabel.reference/manifest",
124125
"autosectionlabel.howto/updating-projects",
126+
"autosectionlabel.explanation/threat_model_supply_chain",
127+
"autosectionlabel.explanation/threat_model_usage",
125128
]
126129

127130
# Options for sphinx-autoissues

doc/explanation/security.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,16 @@ to reproduce a deterministic dependency state.
9595
- Execution in CI environments with insufficient network or secret isolation may
9696
allow exfiltration risks if upstream sources are compromised or intentionally
9797
malicious.
98+
99+
Threat Models
100+
-------------
101+
102+
The following pages document the two threat models in detail. Each page is
103+
generated from the corresponding Python module in ``security/`` — see
104+
``security/README.md`` for instructions on regenerating them.
105+
106+
.. toctree::
107+
:maxdepth: 1
108+
109+
threat_model_supply_chain
110+
threat_model_usage

doc/explanation/threat_model_supply_chain.rst

Lines changed: 372 additions & 0 deletions
Large diffs are not rendered by default.

doc/explanation/threat_model_usage.rst

Lines changed: 477 additions & 0 deletions
Large diffs are not rendered by default.

security/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ the SHA above.
1313
After this you can generate various reports using:
1414

1515
```bash
16-
python -m security.tm_supply_chain --report security/report_template.md > report.md
16+
python -m security.tm_supply_chain --report security/report_template.rst > doc/explanation/threat_model_supply_chain.rst
1717
python -m security.tm_supply_chain --dfd
1818
python -m security.tm_supply_chain --seq
1919

20-
python -m security.tm_usage --report security/report_template.md > report_usage.md
20+
python -m security.tm_usage --report security/report_template.rst > doc/explanation/threat_model_usage.rst
2121
python -m security.tm_usage --dfd
2222
python -m security.tm_usage --seq
2323
```

security/report_template.md

Lines changed: 0 additions & 114 deletions
This file was deleted.

security/report_template.rst

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
.. ============================================================
2+
.. Auto-generated file — do not edit manually.
3+
.. Regenerate with (see security/README.md for exact commands):
4+
..
5+
.. python -m security.tm_<supply_chain|usage> \
6+
.. --report security/report_template.rst \
7+
.. > doc/explanation/threat_model_<name>.rst
8+
.. ============================================================
9+
10+
System Description
11+
------------------
12+
13+
{tm.description}
14+
15+
Assumptions
16+
-----------
17+
18+
.. list-table::
19+
:header-rows: 1
20+
:widths: 30 70
21+
22+
* - Name
23+
- Description
24+
{tm.assumptions:repeat:
25+
* - {{item.name}}
26+
- {{item.description}}
27+
}
28+
29+
Dataflows
30+
---------
31+
32+
.. list-table::
33+
:header-rows: 1
34+
:widths: 35 20 20 25
35+
36+
* - Name
37+
- From
38+
- To
39+
- Protocol
40+
{dataflows:repeat:
41+
* - {{item.display_name:call:}}
42+
- {{item.source.name}}
43+
- {{item.sink.name}}
44+
- {{item.protocol}}
45+
}
46+
47+
Data Dictionary
48+
---------------
49+
50+
.. list-table::
51+
:header-rows: 1
52+
:widths: 25 55 20
53+
54+
* - Name
55+
- Description
56+
- Classification
57+
{data:repeat:
58+
* - {{item.name}}
59+
- {{item.description}}
60+
- {{item.classification.name}}
61+
}
62+
63+
Actors
64+
------
65+
66+
.. list-table::
67+
:header-rows: 1
68+
:widths: 25 75
69+
70+
* - Name
71+
- Description
72+
{actors:repeat:
73+
* - {{item.name}}
74+
- {{item.description}}
75+
}
76+
77+
Boundaries
78+
----------
79+
80+
.. list-table::
81+
:header-rows: 1
82+
:widths: 25 75
83+
84+
* - Name
85+
- Description
86+
{boundaries:repeat:
87+
* - {{item.name}}
88+
- {{item.description}}
89+
}
90+
91+
Assets
92+
------
93+
94+
.. list-table::
95+
:header-rows: 1
96+
:widths: 25 55 20
97+
98+
* - Name
99+
- Description
100+
- Type
101+
{assets:repeat:
102+
* - {{item.name}}
103+
- {{item.description}}
104+
- {{item:call:getElementType}}
105+
}
106+
107+
{tm.excluded_findings:if:
108+
Excluded Threats
109+
----------------
110+
111+
.. list-table::
112+
:header-rows: 1
113+
:widths: 12 28 20 20 8 12
114+
115+
* - ID
116+
- Description
117+
- Target
118+
- Assumption
119+
- Severity
120+
- References
121+
}
122+
{tm.excluded_findings:repeat:
123+
* - {{item:call:getThreatId}}
124+
- {{item:call:getFindingDescription}}
125+
- {{item:call:getFindingTarget}}
126+
- {{item.assumption.name}}
127+
- {{item:call:getFindingSeverity}}
128+
- {{item:call:getFindingReferences}}
129+
}

0 commit comments

Comments
 (0)