-
Notifications
You must be signed in to change notification settings - Fork 2
Creating Your First Threat Model
This guide walks you through creating your first threat model in TMI, from start to finish.
- You have Accessing-TMI and are signed in
- You are familiar with basic threat modeling concepts (see the Glossary for terminology)
- You have a system or application you want to analyze
-
Navigate to the Dashboard
- After signing in, you'll see your TMI dashboard
- Click the + (add) icon button in the toolbar to open the Create Threat Model dialog
- If you have no threat models yet, you can also click the "Create Your First Threat Model" button shown in the empty state
-
Fill in basic information
-
Name (required, max 256 characters): Give your threat model a descriptive name.
- Example: "Payment Processing System"
-
Description (optional, max 1024 characters): Provide a brief overview of what this threat model covers.
- Example: "Threat model for the e-commerce payment flow"
-
Framework (defaults to STRIDE): Choose a threat modeling framework.
- STRIDE -- recommended for applications
- CIA -- for infrastructure and data
- LINDDUN -- for privacy threat modeling
- DIE -- Distributed, Immutable, Ephemeral
- PLOT4ai -- for AI system threats
- Confidential (toggle, if enabled by your administrator): Confidential threat models are not automatically shared with the Security Reviewers group. This setting cannot be changed after creation.
-
Name (required, max 256 characters): Give your threat model a descriptive name.
-
Click "Create"
Note: You do not set permissions during creation. By default, you are the owner. You can add collaborators later from the threat model editing page (see Step 6: Collaborate and Share).
As your security review progresses, update the threat model status to reflect its current state. The following table describes each status value:
| Status | Description |
|---|---|
| Not Started | The security review has been initiated, but no assessment activities have begun. |
| In Progress | Active assessment is underway, including threat modeling, code review, or testing. |
| Pending Review | Assessment artifacts (such as reports and findings) await formal review by security leads or approvers. |
| Remediation Required | Vulnerabilities or issues have been identified, and the development team must address them. |
| Remediation In Progress | The development team is implementing fixes for identified issues. |
| Verification Pending | Remediation is complete, and the security team must verify its effectiveness. |
| Approved | All issues are resolved and verified. The application meets security criteria for release or deployment. |
| Rejected | The review failed critical criteria. Significant rework is required before re-submission. |
| Deferred | The review is paused (for example, due to resource constraints or application changes), and resumption is planned. |
| Closed | The review is fully completed and archived, with no further action needed. |
Data flow diagrams (DFDs) help you visualize your system's components and how they interact.
-
In your threat model, click the + (add) icon button in the Diagrams card header
-
In the Create New Diagram dialog:
- Diagram Type: Currently fixed to DFD-1.0.0 (Data Flow Diagram)
- Diagram Name: A default name is generated as "Threat Model Name -- Data Flow Diagram"; you can edit it (max 100 characters)
- Click "OK" to create the diagram
-
Add Components
TMI data flow diagrams support these component types:
-
Process -- a component that transforms data
- Example: "Payment Processor", "Authentication Service"
-
Data Store -- where data is persisted
- Example: "Customer Database", "Transaction Log"
-
Actor -- an external user or system that interacts with your system
- Example: "Customer", "Payment Gateway"
-
Security Boundary -- a boundary between trust zones
- Example: separating internet-facing components from internal systems
- Text -- a text annotation for documentation on the diagram
-
Process -- a component that transforms data
-
Add Data Flows
- Connect components with edges that show data movement
- Label each flow with a data description
- Example: "Credit Card Info", "User Credentials", "Order Data"
The following ASCII diagram illustrates a simple payment system:
[Customer (Actor)] --credit card--> [Web Server (Process)]
|
payment request
↓
[Payment Processor (Process)] --transaction--> [Payment Gateway (Actor)]
|
confirmation
↓
[Transaction DB (Data Store)]
- Start simple -- begin with high-level components
- Add detail gradually -- create separate diagrams for subsystems
- Show security boundaries -- identify where trust zones change
- Label everything -- clear labels make threat identification easier
- Use consistent naming -- keep component names clear and consistent
For more details, see Working-with-Data-Flow-Diagrams.
With your diagram in place, you can now identify potential threats.
If you chose STRIDE, consider each category:
| Category | Question to Ask |
|---|---|
| Spoofing | Can an attacker impersonate a user or component? |
| Tampering | Can an attacker modify data or code? |
| Repudiation | Can actions be denied after the fact? |
| Information Disclosure | Can sensitive data be exposed? |
| Denial of Service | Can the system be made unavailable? |
| Elevation of Privilege | Can an attacker gain unauthorized access? |
-
Click the + (add) icon button in the Threats card header on the threat model editing page
-
Fill in threat details:
-
Name (required, max 100 characters): A short, descriptive name.
- Example: "SQL Injection in Payment Query"
- Diagram (optional): Associate the threat with a specific diagram.
- Cell (optional): Associate with a specific diagram element, filtered by the selected diagram.
- Asset (optional): Associate with a data asset.
- Description (max 500 characters): A detailed description of the threat.
-
Threat Type (multi-select): Select one or more categories from your framework.
- Example: "Tampering" (in STRIDE)
- Severity: Critical, High, Medium, Low, Informational, or Unknown.
- Score: Numeric score from 0 to 10 (for example, a CVSS score).
- Priority: Immediate, High, Medium, Low, or Deferred.
- Status: Open, Confirmed, Mitigation Planned, Mitigation In Progress, Verification Pending, Resolved, Accepted, False Positive, Deferred, or Closed.
- Mitigated: Checkbox indicating whether the threat has been mitigated.
- Include in Report: Checkbox to include this threat in generated reports (default: on).
- Issue URI: URL linking to an issue in your issue tracker. You can type, paste, or drag and drop the URL.
- Mitigation (max 1024 characters): Description of mitigation strategies.
-
Name (required, max 100 characters): A short, descriptive name.
-
Click "Save" to create the threat
Name: "Customer Credit Card Data Interception"
Threat Type: Information Disclosure (STRIDE)
Description: An attacker could intercept credit card data transmitted between the customer browser and web server if TLS is not properly implemented.
Severity: High
Priority: Immediate
Status: Open
Mitigation:
- Implement TLS 1.3 for all connections
- Use HSTS headers
- Regular TLS configuration audits
Use notes to document your analysis, assumptions, and decisions.
-
Click the + (add) icon button in the Notes card header on the threat model editing page
-
Fill in note details:
-
Name (required, max 256 characters): Give the note a descriptive name.
- Example: "Security Assumptions", "Threat Modeling Decisions"
- Description (optional, max 2048 characters): A brief description of the note's purpose.
- Include in Report: Checkbox to include this note in generated reports (default: on).
-
Name (required, max 256 characters): Give the note a descriptive name.
-
Use Markdown in the Content field for formatting:
## Security Assumptions - Users authenticate via OAuth 2.0 - All data in transit uses TLS 1.3+ - Payment card data is not stored ## Trust Boundaries - Internet to DMZ - DMZ to internal network - Application tier to data tier
-
Include Mermaid diagrams in notes for visual documentation:
```mermaid flowchart LR A[Customer] --> B[Web App] B --> C[Payment Service] C --> D[Payment Gateway] ```
- Document assumptions -- what are you assuming about security?
- Record decisions -- why did you make certain choices?
- Note out-of-scope items -- what is not included and why?
- Link to external docs -- reference architecture documents and security policies
For more details, see Using-Notes-and-Documentation.
You can extend your threat model with custom key-value metadata.
-
Open the metadata dialog for a threat model, diagram, or other object. You can access this from the object's menu or details view.
-
Add key-value pairs:
compliance: PCI-DSSowner: security-teamenvironment: productionreview-date: 2025-06-01
- Categorization -- group related items
- Compliance tracking -- link to compliance requirements
- Workflow integration -- connect to external systems
- Custom reporting -- filter and report based on metadata
For more details, see Metadata-and-Extensions.
Once your threat model is ready for review, share it with your team.
-
Open the kebab menu (three-dot menu) on the threat model editing page and click "Permissions"
-
Add collaborators by clicking "Add Permission":
- Type: Select "User" or "Group"
- Provider: Select the identity provider (e.g., Google, Microsoft)
-
Subject: Enter the email address, user ID, or group name
- If you want to share the document with everyone on your TMI instance, set the type to "Group" and enter "everyone" as the subject.
- If you are authenticated with SAML or your OAuth provider includes groups claims, you can choose a group you belong to.
-
Role: Select the permission level:
- Reader: View only
- Writer: Reader, and additionally can edit
- Owner: Writer, and can change permissions or delete the threat model
-
Click "Save" to apply the permission changes
- Multiple users can edit simultaneously
- See collaborator cursors and changes in real-time
- WebSocket-based synchronization
- No need to refresh or save manually
- Set clear roles -- assign appropriate permission levels
- Communicate changes -- use notes to document major changes
- Review together -- use real-time editing for review sessions
- Track versions -- review change history
For more details, see Collaborative-Threat-Modeling.
You can link each threat to your issue tracking system using the Issue URI field.
-
Open a threat for editing by clicking on it in the Threats table.
-
In the Issue URI field, add the URL to your issue tracker:
- Type or paste the issue URL directly.
- Alternatively, drag and drop a URL from your browser onto the Issue URI field.
- Once saved, the URI appears as a clickable hyperlink.
-
Track implementation:
- Click the issue link to navigate directly to your issue tracker.
- Update the threat status as remediation progresses.
For more details, see Issue-Tracker-Integration.
- Create a high-level architecture diagram.
- Create detailed diagrams for each major component.
- Identify threats using STRIDE.
- Document security controls.
- Track remediation in your issue tracker.
- Create a network topology diagram.
- Show trust boundaries and security zones.
- Identify threats using the CIA framework.
- Document existing controls.
- Prioritize gaps.
- Create sequence diagrams showing API flows.
- Focus on authentication and authorization.
- Identify data validation threats.
- Document rate limiting and abuse prevention.
- Track API security requirements.
- Begin with a manageable scope.
- Expand as you become comfortable with the process.
- Do not try to model everything at once.
- Prioritize high-risk areas first.
- Avoid getting lost in low-risk details.
- Focus on actionable threats with clear mitigations.
- Threat modeling is not a one-time activity.
- Update your models as your system evolves.
- Regular reviews keep models relevant and accurate.
- Involve developers, architects, and security engineers.
- Different perspectives uncover different threats.
- Make threat modeling a team activity, not a solo exercise.
Now that you have created your first threat model, explore these topics to go deeper:
- Working-with-Data-Flow-Diagrams -- learn more about building effective diagrams
- Managing-Threats -- deep dive into threat identification and tracking
- Collaborative-Threat-Modeling -- work with your team in real time
- Security-Best-Practices -- review recommended security practices
- Common-Issues -- troubleshooting common problems
- FAQ -- answers to frequently asked questions
- Getting-Help -- how to get support
- Using TMI for Threat Modeling
- Accessing TMI
- Authentication
- Creating Your First Threat Model
- Understanding the User Interface
- Working with Data Flow Diagrams
- Managing Threats
- Collaborative Threat Modeling
- Using Notes and Documentation
- Timmy AI Assistant
- Metadata and Extensions
- Planning Your Deployment
- Terraform Deployment (AWS, OCI, GCP, Azure)
- Deploying TMI Server
- OCI Container Deployment
- Certificate Automation
- Deploying TMI Web Application
- Setting Up Authentication
- Database Setup
- Component Integration
- Post-Deployment
- Branding and Customization
- Monitoring and Health
- Cloud Logging
- Configuration Management
- Config Migration Guide
- Database Operations
- Database Security Strategies
- Security Operations
- Performance and Scaling
- Maintenance Tasks
- Getting Started with Development
- Architecture and Design
- API Integration
- Testing
- Contributing
- Extending TMI
- Dependency Upgrade Plans
- DFD Graphing Library Reference
- Migration Instructions