A first-time-user tutorial. We build a complete STRIDE-HC threat model from scratch using a hypothetical legacy infusion pump as the running example. By the end you’ll have a populated stride-hc-template.md file that you can compare against the worked example in examples/infusion-pump.md.
Estimated time: 30 minutes for a first attempt, 10–15 minutes once you’ve done one.
Audience: anyone who can read the paper. No prior threat-modelling experience required; this walkthrough explains what STRIDE-HC asks for and how to answer it for legacy clinical devices.
Have these facts about the device in front of you:
If you don’t know some of these, that’s fine — fill in “unknown” and treat closing the gap as a Phase 0 deliverable. A STRIDE-HC threat model with explicit “unknown” fields is more useful than one with assumptions baked in.
STRIDE-HC distinguishes two archetypes because the feasible compensating controls differ substantially.
| If the device runs… | Archetype | Typical examples |
|---|---|---|
| Windows / Linux / general-purpose Unix on standard PC-class hardware | Archetype 1 | PACS workstations, imaging modality consoles (CT, MRI), laboratory analysers, pharmacy automation, radiotherapy planning stations |
| Embedded RTOS (VxWorks, QNX, ThreadX, FreeRTOS, etc.) or proprietary firmware | Archetype 2 | Infusion pumps, ventilators, physiological monitors, anaesthesia machines, dialysis controllers |
How to decide if you’re not sure:
For our example pump: runs VxWorks 6.9, no user-visible OS, monolithic firmware image — Archetype 2.
The archetype determines which scenario library you draw from:
scenario-library/archetype-1-scenarios.mdscenario-library/archetype-2-scenarios.mdCopy stride-hc-template.md to a new file named for your device. Recommended naming: <class>-<model>-<inventory-tag>.md. For our pump: infusion-pump-empump-volumetric-v32.md.
Open the new file. Section 1 is the device profile table. Every field has italicized inline guidance that you replace with real values. For our pump:
| Field | Value |
|---|---|
| Device name and model | ExampleMed Volumetric Infusion Pump v3.2 |
| Manufacturer | ExampleMed Inc. |
| Device class (FDA) | Class II |
| UMDNS code | 16495 |
| GMDN code | 35143 |
| MDS² reference | ExampleMed-IP3.2-MDS2-2024 |
| Archetype | Archetype 2 (embedded RTOS legacy) |
| Operating system | VxWorks 6.9 (EOL — no further patches) |
| Networking | 100Mbit Ethernet, HL7 v2 over TCP/2575, no TLS |
| Authentication | Hardcoded service-mode credential; no per-user login |
| Patching | Manufacturer no longer issues patches; FDA clearance limits modification |
| Audit logging | None on device; only at upstream nursing station |
| Physical interfaces | RS-232 service port; USB-A (firmware update); Bluetooth (paired display) |
| Deployment | 240 units across ICU and oncology |
| Clinical use | Continuous medication infusion |
This becomes the shared context that every later section refers to. Get it right; everything else flows from it.
Tip: the MDS² disclosure form (if the vendor provides one) answers most of these fields directly. If the device pre-dates MDS² or the vendor didn’t issue one, contact vendor support for the equivalent answers — vendors are increasingly under FDA §524B pressure to provide them retroactively.
This is the substantive work. For each STRIDE letter, you answer two attacker questions and document two response questions.
### X — Category name (CAW = w)
**Network-attacker scenarios:**
- Scenario 1
- Scenario 2
- ...
**Physical / insider-attacker scenarios:** ← STRIDE-HC's key addition
- Scenario 1
- Scenario 2
- ...
**Detection methods (Framework V):**
- Method 1
- Method 2
- ...
**Compensating controls (Framework I):**
- Control 1
- Control 2
- ...
**CCD coverage assessment:** <how well do the controls cover the scenarios>
Open your archetype’s scenario library and copy the relevant scenarios into each category. The library lists common scenarios per category for legacy clinical devices. Your job is:
Ask: how could an attacker pretend to be someone or something legitimate?
Network-attacker scenarios:
Physical / insider-attacker scenarios:
Detection methods (Framework V):
Compensating controls (Framework I):
CCD coverage assessment: Partial — physical fingerprinting and badge correlation cover most scenarios; vendor impersonation requires improved staff training.
Ask: how could an attacker modify the device, its firmware, its configuration, or data in transit?
This is often the highest-stakes category for legacy medical devices because the consequence of successful tampering is direct patient harm (wrong dose, wrong therapy delivery, wrong sensor calibration).
Look especially at:
For our pump:
Network-attacker scenarios:
Physical / insider-attacker scenarios:
Detection methods (Framework V):
Compensating controls (Framework I):
../mfa-shim/CCD coverage assessment: Strong if MFA shim deployed; weak without it because the documented service-mode PIN is a low-bar attacker capability.
Ask: could an action on the device be later disowned by the actor who performed it?
For our pump: no per-user authentication means all configuration changes appear as “service-mode user”, impossible to attribute. This is a repudiation-by-default condition.
Network-attacker scenarios:
Physical / insider-attacker scenarios:
Detection methods:
Compensating controls:
CCD coverage assessment: Solved if MFA shim deployed; unsolvable without compensating control because the device cannot be modified to support per-user auth.
Ask: could data flowing through, stored on, or displayed by the device be observed by an unauthorized party?
For our pump:
Network-attacker scenarios:
Physical / insider-attacker scenarios:
Detection methods:
Compensating controls:
CAW is 1.5 because in clinical settings, DoS is not an inconvenience — it can be patient harm. A pump that stops infusing during chemotherapy is a harm event.
Network-attacker scenarios:
Physical / insider-attacker scenarios:
Detection methods:
Compensating controls:
Ask: could an attacker gain higher-privileged access than they started with?
Network-attacker scenarios:
Physical / insider-attacker scenarios:
Detection methods:
Compensating controls:
CAW values reflect the clinical consequence multiplier for each category. The defaults are:
| Category | CAW | Why |
|---|---|---|
| Denial of Service | 1.5 | DoS = potential patient harm in clinical settings |
| Spoofing | 1.2 | Wrong-attribution scenarios drive wrong-care decisions |
| Information disclosure | 1.2 | PHI exposure is a HIPAA reportable event |
| Tampering | 1.1 | High consequence but moderated by detection feasibility |
| Elevation of privilege | 1.1 | Sets up other categories rather than being the harm event itself |
| Repudiation | 0.9 | Lowest because it amplifies other harms rather than causing them |
Use the defaults unless you have a device-specific reason to adjust. Examples of valid adjustments:
Document the rationale next to the weight if you change a default.
Walk through this checklist before declaring the threat model complete:
../cjr-templates/Compare against the worked example: examples/infusion-pump.md for Archetype 2, or examples/pacs-workstation.md for Archetype 1. Your completed model should resemble these in structure and density. If your file is much shorter than the worked examples, you’ve probably under-specified scenarios.
A completed STRIDE-HC threat model is not the deliverable — it’s an input to four downstream artifacts:
| Downstream artifact | What the STRIDE-HC model provides | Where to send it |
|---|---|---|
| FDA §524B premarket submission (vendors) | The threat-model deliverable required by 2023 cybersecurity guidance | Attach as Appendix to your premarket submission |
| ISO 14971 risk management file (vendors + HDOs) | Hazard identification (cl.5) and risk estimation (cl.6) records | Attach as the security-hazard section of your risk management file |
| AAMI TIR57 security risk records | The security risk identification activities required by TIR57 | Reference by ID in your TIR57 records |
CJR documents (../cjr-templates/) |
The threat each compensating control is justified against | Each STRIDE-HC scenario you cannot fully mitigate produces a CJR; cross-reference the STRIDE-HC scenario ID inside the CJR |
MDRS calculator (../mdrs-calculator/) |
Empirical input to the CCD (Compensating-Control Deficit) score | When you re-run MDRS after deploying controls, your CCD score should improve to reflect the new coverage |
Review cadence for the threat model itself:
Sign-offs typically required:
| Pitfall | Why it happens | Fix |
|---|---|---|
| All scenarios are network-attacker | Authors come from IT security, not clinical engineering | Force yourself to list at least one physical scenario per category before moving on |
| Compensating controls are aspirational | “We could deploy 802.1X” without a plan | Each control gets a CJR; the CJR forces you to confirm feasibility, cost, and timeline |
| CCD coverage marked “Strong” everywhere | Wishful thinking | Run the test harness (../test-harness/) to get empirical CCD evidence |
| Same scenario copied under multiple categories | Confusion about which STRIDE letter applies | Pick the letter that captures the attacker’s primary intent; cross-reference if needed but don’t duplicate |
| CAW values changed without rationale | Following a non-clinical security template | Use defaults; deviations must have inline rationale |
../WALKTHROUGH.md.stride-hc-schema.yaml / stride-hc-schema.json and the “For tooling integration” section of README.md.