Entender a modelagem de ameaças
A modelagem de ameaças é um elemento central do Microsoft Security Development Lifecycle (SDL) e uma prática de segurança fundamental para a criação de aplicativos seguros. É uma técnica de engenharia que ajuda você a identificar sistematicamente ameaças, ataques, vulnerabilidades e contramedidas que podem afetar seu aplicativo.
O que é a modelagem de ameaças
Propósito: A modelagem de ameaças fornece uma abordagem estruturada para entender os riscos de segurança em seu aplicativo. Em vez de esperar que você tenha pensado em todos os possíveis problemas de segurança, a modelagem de ameaças orienta você através de um processo sistemático para identificar e lidar com ameaças.
Benefícios: Você pode usar a modelagem de ameaças para:
- Definir o design do aplicativo: influencie as decisões de arquitetura com base em considerações de segurança em vez de adicionar segurança como uma reflexão tardia.
- Cumprir metas de segurança: Verifique se seu aplicativo atende aos objetivos de segurança e aos requisitos de conformidade da sua organização.
- Reduzir o risco: Reduza sistematicamente os riscos de segurança identificando e abordando ameaças durante o design, em vez de descobri-las em produção.
- Priorizar o trabalho de segurança: Concentre os esforços de segurança nas ameaças mais significativas em vez de tentar resolver tudo de uma vez.
- Comunique preocupações de segurança: Forneça um idioma comum para desenvolvedores, equipes de segurança e stakeholders discutirem a segurança.
Acessibilidade: A abordagem foi projetada com especialistas em não segurança em mente. A modelagem de ameaças é acessível a todos os desenvolvedores, não apenas a especialistas em segurança, por meio de diretrizes claras sobre como criar e analisar modelos de ameaças.
O processo de modelagem de ameaças em cinco estágios
A modelagem de ameaças segue um processo sistemático de cinco estágios:
1. Definir requisitos de segurança
Estabelecer metas de segurança: Antes de analisar ameaças, esclareça o que a segurança significa para seu aplicativo:
Requisitos de confidencialidade:
- Quais dados devem permanecer confidenciais?
- Quem deve ter acesso a informações confidenciais?
- Por quanto tempo os dados devem permanecer confidenciais?
- Quais são as consequências das violações de confidencialidade?
Requisitos de integridade:
- Quais dados ou operações devem ser protegidos contra modificações não autorizadas?
- Como detectar se os dados foram adulterados?
- Quais são as consequências das violações de integridade?
Requisitos de disponibilidade:
- Quais garantias de tempo de atividade são necessárias?
- O que é um tempo de inatividade aceitável para diferentes componentes?
- Qual é o impacto nos negócios da indisponibilidade?
Requisitos de conformidade:
- Quais requisitos regulatórios se aplicam (GDPR, HIPAA, PCI DSS etc.)?
- Quais padrões do setor devem ser atendidos (ISO 27001, SOC 2 etc.)?
- Quais obrigações de segurança contratual existem com os clientes?
Requisitos de exemplo: "As informações de pagamento do cliente devem permanecer confidenciais. Somente sistemas de processamento de pagamento autorizados podem acessar esses dados. Todo o acesso deve ser registrado para fins de auditoria. Os dados devem ser criptografados em trânsito e em repouso."
2. Criar um diagrama de aplicativo
Visualize sua arquitetura: Crie um diagrama que represente a arquitetura do aplicativo, mostrando:
Componentes do sistema:
- Servidores Web, servidores de aplicativos, bancos de dados, microsserviços.
- Serviços externos e APIs dos quais seu aplicativo depende.
- Sistemas de autenticação e autorização.
- Balanceadores de carga, camadas de cache, filas de mensagens.
Fluxos de dados:
- Como os dados se movem entre componentes.
- Quais dados cada conexão transmite.
- Direção do fluxo de dados.
- Pontos de transformação de dados.
Limites de segurança:
- Limites de confiança em que os níveis de privilégio mudam.
- Limites de rede entre diferentes zonas de segurança.
- Limites de processo entre diferentes contextos de execução.
- Limites físicos entre diferentes locais ou nuvens.
Elementos de exemplo:
- Usuários se conectando pela Internet.
- Firewall do aplicativo Web na borda da rede.
- Servidores Web em uma DMZ.
- Servidores de aplicativos em uma rede protegida.
- Servidores de banco de dados em uma rede altamente restrita.
- Gateway de pagamento externo para processamento de transações.
3. Identificar ameaças
Identificação sistemática de ameaças: Use abordagens estruturadas para identificar possíveis ameaças:
Metodologia STRIDE: STRIDE é uma estrutura de categorização de ameaças:
- Spoofing: ameaças que envolvem usurpação de identidade.
- Tampering: ameaças que envolvem modificação não autorizada de dados.
- Repudiation: ameaças em que os usuários negam a execução de ações.
- Divulgação de Informações: ameaças que envolvem acesso não autorizado a informações.
- Negação de Serviço: ameaças que impedem que usuários legítimos acessem sistemas.
- Elevação de Privilégio: ameaças em que os usuários obtêm permissões não autorizadas.
Aplicar STRIDE a fluxos de dados: Examine cada fluxo de dados em seu diagrama e considere como cada categoria STRIDE pode se aplicar:
- Um invasor pode falsificar a fonte desses dados?
- Esses dados podem ser adulterados durante a transmissão ou o armazenamento?
- As ações legítimas nesse fluxo de dados podem ser repudiadas?
- Informações confidenciais podem ser divulgadas por meio desse fluxo?
- Esse fluxo pode ser usado para causar negação de serviço?
- Esse fluxo poderia ser explorado para obter privilégios elevados?
Exemplos comuns de ameaça:
- Injeção de SQL: O invasor manipula consultas de banco de dados por meio de entrada de usuário não autorizada (Adulteração, Divulgação de Informações, Elevação de Privilégio).
- Sequestro de sessão: O invasor rouba tokens de sessão para se passar por usuários (Falsificação, Elevação de Privilégio).
- Man-in-the-middle: o invasor intercepta comunicações entre componentes (Divulgação de Informações, Violação de Dados).
- Ataque de DDoS: O invasor sobrecarrega sistemas com tráfego (Negação de Serviço).
4. Atenuar ameaças
Desenvolver contramedidas: Para cada ameaça identificada, desenvolva mitigações apropriadas:
Estratégias de mitigação:
- Eliminar: Remova o componente ou recurso vulnerável inteiramente se ele não for essencial.
- Impedir: Implemente controles que impossibilitem a ameaça (por exemplo, a validação de entrada impede ataques de injeção).
- Detectar: Implemente o monitoramento e o alerta para detectar tentativas de exploração de ameaças.
- Responder: Desenvolva procedimentos de resposta a incidentes para quando as ameaças são exploradas.
Mitigações de exemplo:
- Ameaça de injeção de SQL: Use consultas parametrizadas e validação de entrada para evitar ataques de injeção.
- Ameaça de sequestro de sessão: Implemente o gerenciamento de sessão seguro com HTTPS, cookies seguros e tempos limite de sessão curtos.
- Ameaça Man-in-the-middle: imponha TLS para todas as comunicações e implemente anexação de certificado.
- Ameaça de DDoS: Use os serviços de proteção contra DDoS baseados em nuvem e implemente a limitação de taxa.
Decisões de documento: Registrar decisões de mitigação, incluindo:
- Quais ameaças são abordadas.
- Qual abordagem de mitigação foi escolhida.
- Por que essa abordagem é apropriada.
- Quem é responsável pela implementação.
- Todos os riscos residuais que permanecem.
5. Validar mitigações
Verificar a eficácia: Depois de implementar mitigações, valide se elas efetivamente lidam com ameaças identificadas:
Teste de segurança:
- Teste de penetração para verificar se as ameaças não podem ser exploradas.
- Revisões de código de segurança para confirmar se as mitigações são implementadas corretamente.
- Verificação de segurança automatizada para detectar vulnerabilidades perdidas.
- A equipe vermelha se exercita para testar defesas contra cenários de ataque realistas.
Validação contínua: Ameaças e mitigações evoluem:
- Novas ameaças surgem à medida que a tecnologia muda.
- As mitigações existentes podem se tornar ineficazes.
- As alterações de aplicativo podem introduzir novas vulnerabilidades.
Modelagem de ameaças no ciclo de vida de desenvolvimento
Processo em andamento: A modelagem de ameaças não deve ser uma atividade única. Ele deve fazer parte do seu ciclo de vida de desenvolvimento típico:
Design inicial: Realize uma modelagem abrangente de ameaças durante o design inicial do aplicativo para influenciar as decisões de arquitetura.
Desenvolvimento de recursos: Execute a modelagem de ameaças ao adicionar novos recursos significativos que alteram os limites de segurança ou introduzem novos fluxos de dados.
Atualizações regulares: Revise e atualize periodicamente os modelos de ameaças mesmo sem grandes alterações, à medida que o cenário de ameaças evolui.
Resposta a incidentes: Atualize os modelos de ameaça após incidentes de segurança para incorporar as lições aprendidas.
Redução progressiva de risco: Essa abordagem iterativa permite que você refinar seu modelo de ameaça e reduzir progressivamente o risco ao longo do tempo, em vez de tentar resolver todos os riscos ao mesmo tempo.
Microsoft Threat Modeling Tool
A Microsoft fornece uma ferramenta gratuita que torna a modelagem de ameaças mais acessível e estruturada:
Propósito: A Ferramenta de Modelagem de Ameaças da Microsoft facilita a modelagem de ameaças para todos os desenvolvedores por meio de uma notação padrão para visualizar componentes do sistema, fluxos de dados e limites de segurança.
Identificação automatizada de ameaças: A ferramenta ajuda os modeladores de ameaças a identificar classes de ameaças que devem ser consideradas com base na estrutura de seu design de software. À medida que você cria o diagrama do aplicativo, a ferramenta sugere automaticamente possíveis ameaças com base nos componentes e fluxos de dados que você definiu.
Principais recursos: A Ferramenta de Modelagem de Ameaças permite que qualquer desenvolvedor ou arquiteto de software:
Comunicar o design de segurança:
- Crie representações visuais da arquitetura do sistema.
- Use a notação consistente que as equipes de segurança e os desenvolvedores entendem.
- Documentar decisões de arquitetura relevantes para a segurança.
- Compartilhe modelos de ameaças com os stakeholders para análise e comentários.
Analisar projetos:
- Identificar possíveis problemas de segurança usando metodologias comprovadas (STRIDE).
- Gere automaticamente listas de ameaças com base na estrutura do aplicativo.
- Priorize as ameaças com base na gravidade e na probabilidade.
- Compare diferentes alternativas de design de uma perspectiva de segurança.
Gerenciar mitigações:
- Sugerir mitigações para ameaças identificadas.
- Acompanhe o status de implementação de mitigação.
- Documentar decisões de segurança e lógica.
- Gere relatórios para revisões de segurança e conformidade.
Introdução:
- A ferramenta é gratuita e está disponível para download da Microsoft.
- Ele inclui modelos para tipos de aplicativo comuns.
- As diretrizes internas ajudam os novos usuários a aprender conceitos de modelagem de ameaças.
- A integração com o Azure DevOps permite vincular ameaças a itens de trabalho.
Recursos adicionais
Para obter mais informações sobre modelagem de ameaças, consulte: