Segurança de Threat Modeling
LidoNesta aula, você aprenderá os fundamentos do threat modeling, uma prática essencial para identificar e mitigar riscos de segurança em sistemas. Exploraremos os conceitos de ativos, limites de confiança, árvores de ataque e mitigações, com exemplos práticos para aplicar no dia a dia.
O threat modeling (modelagem de ameaças) é uma abordagem estruturada para identificar, avaliar e mitigar ameaças à segurança de um sistema. Em vez de reagir a incidentes após ocorrerem, o threat modeling permite que você antecipe possíveis ataques e fortaleça o sistema desde o início. Esta prática é amplamente utilizada em ciclos de desenvolvimento seguro, como parte do SDL (Security Development Lifecycle) da Microsoft e de metodologias ágeis.
Nesta aula, vamos nos aprofundar em quatro pilares fundamentais do threat modeling: ativos, limites de confiança, árvores de ataque e mitigações. Você entenderá como cada um contribui para uma visão abrangente das vulnerabilidades e como aplicá-los em seus projetos, independentemente da tecnologia utilizada.
Assets
Os ativos são tudo aquilo que possui valor para a organização ou para os usuários do sistema. Eles podem ser dados, componentes de hardware, software, propriedade intelectual, reputação, ou até mesmo a confiança dos clientes. No contexto de threat modeling, identificar os ativos é o primeiro passo, pois define o que você está tentando proteger.
Para cada ativo, é importante classificar seu nível de confidencialidade, integridade e disponibilidade (a tríade CIA). Por exemplo, uma base de dados de clientes pode ter alta confidencialidade (dados pessoais), alta integridade (não pode ser alterada) e alta disponibilidade (deve estar sempre acessível). Outros ativos, como um arquivo de log, podem ter menor confidencialidade, mas alta integridade.
Exemplo de inventário de ativos:
- Dados de usuários (PII)
- Credenciais de acesso
- Chaves de API
- Código-fonte
- Infraestrutura (servidores, banco de dados)
- Documentação interna
- Reputação da marca
Trust boundaries
Limites de confiança (trust boundaries) são fronteiras lógicas ou físicas que separam áreas com diferentes níveis de confiança. Em um sistema, dados e processos que cruzam um limite de confiança estão sujeitos a riscos adicionais, pois podem ser manipulados por entidades não confiáveis. Identificar esses limites é crucial para entender onde as ameaças podem se materializar.
Por exemplo, em uma aplicação web, o navegador do usuário (não confiável) interage com o servidor (confiável) através da rede (meio não confiável). Cada ponto de entrada, como uma API ou um formulário de login, é um limite de confiança. Outros exemplos incluem a comunicação entre microserviços, a leitura de arquivos externos e a interação com bancos de dados.
Exemplo de limites de confiança em uma aplicação web:
- Cliente (navegador) <-> Servidor (via HTTP)
- Servidor <-> Banco de dados (via SQL)
- Servidor <-> Serviços externos (via APIs)
- Servidor <-> Sistema de arquivos (leitura/escrita)
Attack trees
Árvores de ataque (attack trees) são representações hierárquicas de possíveis caminhos que um atacante pode seguir para comprometer um sistema. A raiz da árvore é o objetivo final do atacante, e os nós filhos representam sub-objetivos ou etapas necessárias para alcançar o objetivo. Cada nó pode ter nós filhos (E) que devem ser todos realizados, ou nós alternativos (OU) que representam diferentes caminhos.
Construir uma árvore de ataque ajuda a visualizar as diferentes maneiras pelas quais um sistema pode ser atacado, permitindo priorizar as mitigações. Você pode atribuir probabilidades e custos a cada nó para avaliar o risco. Por exemplo, para "obter acesso não autorizado a dados", os caminhos podem incluir explorar uma vulnerabilidade SQL injection, adivinhar senhas ou interceptar tráfego.
Exemplo de árvore de ataque:
Objetivo: Obter dados confidenciais
├── OU: Explorar SQL injection
│ ├── E: Encontrar campo vulnerável
│ ├── E: Injetar payload malicioso
│ └── E: Extrair dados
├── OU: Adivinhar credenciais
│ ├── E: Obter lista de usuários
│ └── E: Força bruta de senhas
└── OU: Interceptar tráfego
├── E: Acessar rede interna
└── E: Usar ataque man-in-the-middle
Mitigations
Mitigações são as ações tomadas para reduzir a probabilidade ou o impacto de uma ameaça. Elas podem ser técnicas, como criptografia e firewalls, ou processuais, como políticas de segurança e treinamento. No threat modeling, as mitigações são selecionadas com base nas ameaças identificadas nas árvores de ataque e nos limites de confiança.
É importante priorizar as mitigações de acordo com o risco: alta probabilidade e alto impacto devem ser tratados primeiro. Algumas mitigações comuns incluem: validação de entrada (contra injection), autenticação multifator (contra acesso não autorizado), criptografia em trânsito e em repouso (contra interceptação e vazamento), e princípio do menor privilégio (contra escalonamento de privilégios).
Exemplo de mitigações para ameaças comuns:
- SQL injection: Prepared statements, validação de entrada
- Força bruta: Limitação de taxa, bloqueio de conta
- Interceptação: TLS/SSL, VPN
- Escalonamento de privilégios: Controle de acesso baseado em papéis (RBAC)
Boas práticas
Algumas boas práticas ao realizar threat modeling: envolva todas as partes interessadas (desenvolvedores, operações, segurança), mantenha o modelo atualizado conforme o sistema evolui, e integre o threat modeling ao ciclo de desenvolvimento (não o trate como uma atividade única). Use ferramentas como Microsoft Threat Modeling Tool, OWASP Threat Dragon ou até mesmo planilhas para documentar.
Exercícios
- Liste pelo menos 5 ativos de um sistema de e-commerce e classifique cada um quanto à confidencialidade (alta/média/baixa).
- Identifique 3 limites de confiança em um aplicativo de mensagens instantâneas.
- Crie uma árvore de ataque para o objetivo "Obter acesso administrativo a um sistema web".
Objetivo: Obter acesso administrativo
├── OU: Explorar vulnerabilidade no login
│ ├── E: Identificar campo de usuário
│ ├── E: Injetar SQL para bypass
├── OU: Roubar sessão de admin
│ ├── E: XSS no site
│ └── E: Interceptar cookie
├── OU: Escalonar privilégios
│ ├── E: Explorar bug de autorização
│ └── E: Abusar de permissões de arquivo
└── OU: Ataque de força bruta
├── E: Obter lista de admins
└── E: Tentar senhas comuns
- Proponha 3 mitigações para a ameaça de vazamento de dados por meio de uma API insegura.
- Explique como a identificação de limites de confiança pode ajudar a priorizar mitigações.