Discover tools, methodologies, and best practices for mitigating threats across your software with threat modeling.
Introduction to threat modeling
Threat modeling is a structured engineering process that identifies potential security risks and offers mitigation strategies for vulnerabilities that could impact an application’s overall security posture. Engineering teams build threat models by reviewing and validating the software architecture before the code is deployed.
Components of threat modeling
Threat modeling consists of at least three major tasks:
Modeling the system: identify the assets to analyze, such as the architectural system, security controls, or threat agents.Then, diagram the system using a component diagram that provides a high-level overview of the system architecture and its data flows.
Conducting a threat analysis: use a proven threat modeling methodology to analyze specific threat types, identify potential vulnerabilities, and quantify risk.
Prioritizing threats: threat modeling tools assist with prioritizing risks by creating threat scores. Once you identify the threats that matter most, you’ll want to come up with mitigation steps, such as changing the firewall or setting up multi-factor authentication.
Threat modeling frameworks and methodologies
Most proven methodologies for identifying threats fall into checklist-based approaches, which consider types of threats using a checklist or template. Some teams also apply more creative approaches.
Some of the most popular threat modeling frameworks and methodologies include:
STRIDE accounts for the different ways an attacker might try to compromise a system. It stands for spoofing, tampering, repudiation, information disclosure, denial of service, and elevation of privilege.
DREAD prioritizes threats by evaluating their potential impact. It stands for damage, reproducibility, exploitability, affected users, and discoverability.
OCTAVE focuses on identifying and assessing risks to an organization's most critical assets. It stands for operationally critical threat, asset, and vulnerability evaluation.
PASTA focuses on simulating attacks to identify threats and manage risks. It stands for process for attack simulation and threat analysis.
Threat modeling tools
Many engineering teams use a variety of tools to develop their threat modeling. For instance, the GitHub engineering team, relies on the Microsoft Threat Modeling Tool and OWASP’s Threat Dragon to map out APIs, dependencies, datastores, and authentication mechanisms across the entire application.
The Microsoft Threat Modeling Tool makes threat modeling easier for developers and non-developers alike by providing more ways to visualize threats across the software architecture. By focusing on design analysis, the tool allows anyone to lay out the security design of their systems, analyze those designs for potential security issues, and suggest mitigations.
Threat Dragon creates threat modeling diagrams, which provide a visual overview of the many components, threat surfaces, and flow of data across the software architecture. Threat Dragon can also be automated to auto-generate threats and mitigations.
Both tools help provide a visual overview of important components to consider, including APIs, dependencies, and databases. This can be useful when teams look to meet security compliance requirements during auditing.
Threat modeling in the software development lifecycle (SDLC)
Threat modeling can be incorporated throughout all the different stages of the SDLC, even when an app has already been deployed. Threat modeling is most beneficial early in the SDLC, during the design and planning phase of production. The earlier you identify potential vulnerabilities, the more cost efficient your assessment will be.
Best practices for effective threat modeling
When building or editing a threat model, you’ll want to consider the following best practices:
Define the scope and depth of analysis. Before you build your model, determine the scope of the project with stakeholders. You’ll also want to break down the depth of analysis among your development team. This is when you should set a cadence for performing your assessment, whether that’s every few months or once per year.
Collaborate and communicate. Threat modeling is a collaborative exercise between developers and security teams, which means both teams should have a say on the planning, design, and review of an effective threat model. Developers and security teams should communicate their goals and expectations from the start of the process.
Visualize your threat modeling. Once you’ve established your threat modeling strategy, you’ll want to create a diagram of the system, including all the major components such as application servers, databases, and data warehouses. Make sure to include the way data interacts and flows among these components.
Consider the entire system holistically. When building your diagram, it’s important to consider every aspect of the system. For instance, you’ll want to consider all the potential paths a threat agent could take that could lead to an attack. This can help you determine which security controls are missing, weak, and need to be fortified.
Integrate with existing processes. To help your team adapt to the addition of new security tools and processes, integrate threat modeling with your existing code security processes, as well as your existing application security (AppSec) processes.
Threat modeling in Agile and DevOps environments
Agile DevOps speeds up development by breaking the SDLC down, automating security testing tools, and streamlining CI/CD pipelines. As a result, developers deploy new code every few weeks, leaving little time for lengthy meetings between teams.
To ensure threat modeling fits with DevOps culture, it’s important to “shift left,” to consider and incorporate developer security from the start of the SDLC. Threat modeling and threat awareness should inform every step of development.
It might also be useful to incorporate automated processes such as software composition analysis (SCA), dynamic application security testing (DAST), and vulnerability scanning. These processes identify and mitigate security threats across the entire CI/CD pipeline.
Threat analysis approaches
Many development teams organize their threat modeling approaches using the following four-question framework:
What are we working on? Determine the scope and depth of your analysis, whether it’s a small sprint or an analysis of an entire system.
What can go wrong? Consider the ways you might get attacked by referencing diagrams such as kill chains and attack trees or by using a checklist-based methodology such as STRIDE.
What are we going to do about it? Identify avenues for remediation and risk management among each of your threats.
Did we do a good job? Keep track of the outcomes and assess what can be improved upon in the next iteration.
Benefits of threat modeling
Threat modeling is critical for securing systems, supporting engineering workflows, and fostering communication across teams. Instituting threat modeling during the design and planning phases of production can identify and remediate threats when they are relatively easy to resolve, lowering the overall development cost of production.
It's important to educate the entire team about threat modeling, including ways it can also be incorporated into the SDLC to allow for greater threat awareness through every step of DevSecOps.
Frequently asked questions
What is threat modeling?
Threat modeling is an approach to risk assessment that uses proven frameworks and methodologies to identify and mitigate potential security vulnerabilities in an application’s software architecture before the code is deployed. Threat modeling enhances an application’s overall security posture.
What is threat modeling used for?
Threat modeling is used to identify and prioritize security risks in your software architecture that could potentially pose a threat.
What is the threat modeling framework?
A threat modeling framework provides organizations with a structured approach to identifying security risks and vulnerabilities through the application of proven methodologies, checklists, or templates. Some frameworks are more creative, relying on non-checklist-based approaches for finding threats.
What are the four stages of threat modeling?
Engineering teams rely on the following four questions or stages of threat modeling to help guide them through the process:
What are we working on?
What can go wrong?
What are we going to do about it?
Did we do a good job?
What are some of the most common methodologies and frameworks?
The three main approaches to threat modeling include STRIDE, DREAD, and OCTAVE.
What is STRIDE in threat modeling?
STRIDE stands forspoofing, tampering, repudiation, information disclosure, and elevation of privilege. It helps identify threats by considering the different ways an attacker might try to compromise a system.
How do I threat model?
In order to threat model, you will need to do three things: model the system, which involves identifying assets and creating a diagram; conduct a threat analysis using a proven methodology; and prioritize threats based on threat scores for calculating risk.
What is the most popular threat modeling?
The Microsoft Threat Modeling Tool. It makes threat modeling easier for both developers and non-developers alike by providing tools for visualizing system components, data flows, and other security assets.
When should you use threat modeling in the software development lifecycle (SDLC)?
Threat modeling takes place throughout the SDLC but it is most beneficial during the design and planning phase of production. The earlier you're able to identify threats, the more cost-savings you’ll enjoy.