Week 17 · lesson
Control Coverage Has Gaps and Failure Modes
A control map should answer two questions:
- Which threat/failure path does this control affect?
- What happens when the control itself fails?
The second question is where architecture review becomes interesting.
Reuse the Week 10 threat paths
Example path:
excessive role
↓
privileged action
↓
data/configuration change
Mapped controls:
role approval preventive
service authorization preventive
role-change log detective
privilege alert detective
change history recovery/support
That looks strong until you inspect dependencies.
Shared control dependency
Suppose both the role-change log and privilege alert depend on the same collector.
If the collector is unavailable:
role-change event generated
↓
forwarder fails
↓
collector receives nothing
↓
alert never evaluates
Two detective controls disappear together.
This is a common dependency, not independent defense in depth.
Preventive controls can share assumptions too
Suppose:
- UI requires approval ID before privileged role change;
- API endpoint trusts the UI and does not enforce approval itself.
The architecture appears to have an approval control, but the true enforcement point is weaker than the diagram suggests.
The control map should distinguish:
policy/documented expectation
from:
technical enforcement point
Recovery controls need evidence too
A backup is not a recovery control until restore is tested against a required function.
A rollback file is not a recovery plan until:
- it is available;
- the operator knows when to use it;
- restore procedure is documented;
- the resulting system is retested.
Control coverage should include recovery verification.
Build a coverage matrix
Use columns:
| Threat/failure path | Prevent | Detect | Recover | Shared dependency | Verification evidence | Gap |
|---|
Populate at least five paths:
- excessive privilege;
- unintended service exposure;
- malformed data/input;
- logging pipeline failure;
- backup/restore failure.
Add one path of your own.
A gap is not always “no control”
Gaps include:
- control exists but is not verified;
- control depends on the same failing component as the asset;
- monitoring exists but nobody owns response;
- recovery exists but restore never tested;
- authorization exists but stale sessions preserve old privilege;
- baseline exists but change records do not update it.
Architecture review is about control quality, not control count.
Failure-mode exercise
Choose one control and ask:
If this control silently failed for one day, what evidence would tell us?
Examples:
Log forwarder
Heartbeat/queue health should reveal failure.
Role approval
Negative test should reject privileged change without approval.
Backup job
Job success + periodic restore test provides stronger evidence than job success alone.
Host firewall/policy
Defined negative and positive network-path tests should verify intended relationship after changes.
A control with no failure detector can become a source of false confidence.
Measure coverage without fake precision
Do not create a “93% secure” score.
Use categories with rationale:
- covered and verified;
- covered but not recently verified;
- partially covered;
- uncovered;
- unknown — evidence missing.
These categories are more honest than a made-up percentage.
Identify five review findings
Write findings in this format:
Condition: role-change alert and audit search both depend on the same log collector.
Risk: a collector outage can remove both detection and investigation evidence for privileged changes.
Evidence: Week 13 pipeline model + Week 14 rule dependency.
Current controls: forwarder heartbeat.
Gap: no independent alert that the collector itself stopped ingesting privileged events.
Recommended next step: add collector/source freshness check and verify it with a safe synthetic canary.
Now the finding is actionable.
Extend your Defensive Architecture Review
Add:
- six threat/failure paths;
- control coverage matrix;
- shared dependencies;
- control failure indicators;
- five evidence-backed gaps;
- current residual risk;
- verification status for each control.
Lesson 3 turns those gaps into a prioritized architecture decision package.