Threat modeling and penetration testing

A threat model tells you what to test. A penetration test without one is a tester working from first principles — finding what they find, in the order they happen to find it. That produces real findings. It may also spend time on lower-risk surfaces while higher-risk ones wait.

The difference is visible in scoping. A fintech company that models their cardholder data environment before a pentest will scope the test to include segmentation controls, payment API authorization, and the admin portal that can initiate refunds — because the threat model identified those as the paths most likely to produce the outcome an attacker wants. Without the threat model, scope often defaults to "the web application" without any systematic prioritization of which parts of the application carry the most risk.

Threat models also surface categories of risk that a pentest may not explore. Architectural flaws are one example: a design that requires granting database read access to a third-party analytics tool creates a trust boundary problem that a pentest might not exercise but a threat model flags immediately. If the analytics tool is compromised, what data is exposed? What can the attacker do with that access? A tester who scopes only to the application itself may never touch the analytics integration. The threat model would put it on the list.

The sequencing that produces the most value: threat model first, use it to scope the pentest, use pentest findings to validate and update the threat model. When the tester finds a vulnerability the threat model did not anticipate, that is a gap in the model. Add it, trace its implications, and update the control recommendations. The model should be a living document, not a one-time artifact.

In practice, many organizations run their first pentest before they have a threat model. The test reveals gaps they did not know to worry about, and the results become the starting point for modeling. This works, but the test is less targeted and may miss high-risk areas that neither the scope definition nor the tester's initial reconnaissance identified. If you are starting from scratch, the order matters: model first, test second, update the model with what the test found.

One practical note on cost: a well-scoped pentest is almost always faster than a vaguely scoped one. Testers who know exactly what to focus on spend their time on it. Testers who must reconstruct the architecture from scratch during discovery spend time on work the threat model would have done already. The threat model pays for itself in scoping efficiency before the test even starts.

STRIDE, PASTA, and other frameworks

Microsoft's STRIDE and OWASP's documentation cover the frameworks in detail — no need to restate them here. The short version: STRIDE (Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege) is a useful enumeration lens for walking through each component in your data flow diagram and asking what category of threat applies. PASTA (Process for Attack Simulation and Threat Analysis) maps threats to business impact, which is useful when the output needs to speak to risk appetite rather than just technical gaps.

The choice of framework matters less than doing it rigorously and updating it when the architecture changes. A STRIDE analysis done once and left to go stale is less useful than an informal threat review done consistently every time a significant architectural change ships. The output — attack surface inventory, threat list, gap analysis, countermeasures — is the point, not the framework that produced it.

For organizations that want threat modeling done regularly rather than as a pre-pentest event, the advisory retainer is the right structure. Architecture reviews and threat modeling sessions happen monthly as part of the retainer, which means the model stays current as the system evolves rather than being rebuilt from scratch before each engagement.