Ferramentas & Implementação

Threat Modeling com PyTM

Modelagem de ameaças automatizada usando Python - Arquitetura como Código

O que é Threat Modeling?

Threat Modeling é o processo de identificar, documentar e mitigar ameaças de segurança durante a fase de design do software. Para SaMD (Software as a Medical Device), é obrigatórioconforme IEC 62304 e análises de risco de segurança.

Quando?

Etapa 6.4 do PQ.044 - Durante especificação (SDS), ANTES de codificar

Quem?

Arquiteto + CISO (revisão) + QA Leader (valida mitigações)

Output?

DFD + Lista STRIDE + Mitigações → DefectDojo + Docnix

PyTM - Python Threat Modeling

Biblioteca que define arquitetura como código Python e gera STRIDE threats automaticamente

# Instalação
pip install pytm

# Exemplo: pytm/ncommand_lite_model.py
from pytm import TM, Server, Datastore, Dataflow, Boundary, Actor

# 1. Definir o modelo
tm = TM("nCommand Lite")
tm.description = "Healthcare SaMD Platform - Threat Model"

# 2. Definir componentes
internet = Boundary("Internet")
azure_cloud = Boundary("Azure Cloud")

user = Actor("Healthcare Professional")
web_app = Server("Next.js Web App")
api_server = Server("API Gateway")
database = Datastore("PostgreSQL Database")

# 3. Definir fluxos de dados
login_flow = Dataflow(user, web_app, "HTTPS Login")
login_flow.protocol = "HTTPS"
login_flow.isEncrypted = True

db_query = Dataflow(api_server, database, "SQL Query")
db_query.protocol = "PostgreSQL"
db_query.isEncrypted = True

# 4. Gerar outputs
tm.process()

💡 Benefício: Ao definir a arquitetura como código, o modelo vive no Git, tem versionamento, e é auditável. Mudanças na arquitetura = atualização do modelo = novas threats identificadas.

Outputs Gerados Automaticamente

1. DFD (Data Flow Diagram) - dfd.png

  • • Diagrama visual da arquitetura
  • • Mostra boundaries, atores, servidores, datastores
  • • Fluxos de dados com protocolo e criptografia

2. Threat Report - threats.md

## STRIDE Threats Identified

### T001 - Spoofing: User credentials could be intercepted
- **Component:** Login Flow
- **Category:** Spoofing
- **Severity:** High
- **Mitigation:** HTTPS + MFA implementation

3. JSON Export - threats.json

{ "threats": [ { "id": "T001", "category": "Spoofing", "component": "Login Flow", "severity": "High", "mitigation": "HTTPS + MFA" } ] }

Integração no Pipeline CI/CD

O threat modeling deve ser executado automaticamente no pipeline sempre que houver mudanças na arquitetura:

# Azure Pipeline - azure-pipelines.yml
- task: Bash@3
displayName: 'Run Threat Modeling'
inputs:
script: |
cd pytm
python ncommand_lite_model.py --report --dfd
# Gera: dfd.png, threats.md, threats.json

- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'pytm/output'
ArtifactName: 'ThreatModel'

- task: Bash@3
displayName: 'Upload to DefectDojo'
inputs:
script: |
# Push threats para DefectDojo como "Design Flaws"
curl -X POST https://defectdojo.ionic.health/api/v2/import-scan/ \
-H "Authorization: Token $DD_TOKEN" \
-F "file=@threats.json" \
-F "scan_type=Generic Findings" \
-F "product_name=nCommand Lite"

Entrega Final: O que você terá

Artefatos Gerados

  • Modelo da arquitetura versionado em Git
  • DFD visual (PNG/SVG) para documentação
  • Lista completa de ameaças STRIDE
  • Upload automático para Docnix/SharePoint

Integração com Ferramentas

  • DefectDojo rastreia cada ameaça como Finding
  • Azure DevOps cria Work Items para mitigações
  • Dashboard de ameaças em tempo real
  • Auditoria: prova de threat modeling realizado