Fundamentos de segurança
A tríade CIA: confidencialidade, integridade e disponibilidade
A tríade CIA explicada: confidencialidade, integridade e disponibilidade, com exemplos, verificações de hash e assinatura e dez incidentes.
Aprenda diagramas de fluxo de dados, fronteiras de confiança e as seis categorias STRIDE, e modele um Juice Shop local no Threat Dragon.
STRIDE é uma lista de seis categorias de ameaça: falsificação de identidade (spoofing), adulteração (tampering), repúdio (repudiation), divulgação de informação (information disclosure), negação de serviço (denial of service) e elevação de privilégio (elevation of privilege). A Microsoft usa o modelo na orientação dela sobre modelagem de ameaças. O STRIDE não encontra ameaças por você. Ele dá seis perguntas para fazer sobre cada parte de um projeto, para que o resultado não dependa do que você lembrou numa tarde específica.
O método vem antes da maioria das ferramentas de segurança. Um scanner olha um sistema que já está rodando. A modelagem de ameaças olha o plano: quais componentes existem, que dados passam entre eles e onde o nível de confiança muda. Dá para começar com papel e caneta, antes de existir qualquer código.
Muitas falhas de segurança em aplicações web são falhas de projeto. O servidor confia no preço que o navegador enviou. Uma rota de administração verifica se o usuário está logado, mas nunca verifica se ele é administrador. Um arquivo de log guarda tokens de sessão. Cada um desses problemas pode ser corrigido no código, mas o código costuma seguir o projeto que recebeu. O problema começa no projeto.
A OWASP Threat Modeling Cheat Sheet diz a mesma coisa. Antes de saber quais ameaças se aplicam, você precisa entender os fluxos de dados, as fronteiras de confiança e as outras partes do sistema. A modelagem de ameaças registra esse entendimento de um jeito que outras pessoas conseguem revisar.
Um diagrama de fluxo de dados (DFD) tem quatro tipos de elemento:
Mantenha o diagrama em uma página. Se ele precisar de uma segunda, provavelmente você está desenhando dois sistemas.
Uma fronteira de confiança é a linha em que os dados passam de um lugar com um nível de confiança para outro. O seu servidor fica dentro da linha. O navegador fica fora, porque quem o usa pode alterar qualquer requisição antes de ela chegar a você. Todo fluxo que cruza uma fronteira precisa de validação, e a maior parte das ameaças interessantes está nesses cruzamentos. A cheat sheet da OWASP chama esses pontos de possíveis pontos de ataque.
Fronteiras não são só bordas de rede. Um processo que roda com outra conta do sistema operacional, um provedor de identidade de terceiros ou um banco de dados que aceita conexões de vários serviços podem, cada um, ser uma fronteira.
Cada categoria quebra uma propriedade de segurança.
| Categoria | Propriedade quebrada | Pergunta a fazer |
|---|---|---|
| Spoofing | Autenticação | Alguém consegue se passar por outro usuário, serviço ou componente? |
| Tampering | Integridade | Os dados podem mudar em trânsito ou em repouso sem que ninguém perceba? |
| Repudiation | Responsabilização | Alguém consegue negar uma ação, sem nenhum registro que prove o contrário? |
| Information disclosure | Confidencialidade | Alguém consegue ler dados que não deveria ver? |
| Denial of service | Disponibilidade | Alguém consegue deixar esse componente lento ou indisponível? |
| Elevation of privilege | Autorização | Alguém consegue fazer mais do que tem permissão para fazer? |
Essas descrições seguem a documentação de modelagem de ameaças da Microsoft. Spoofing, por exemplo, é usar a informação de autenticação de outro usuário.
Nem toda categoria se aplica a todo elemento. Um mapa inicial comum, usado em muitas ferramentas de modelagem, é este: entidades externas recebem spoofing e repudiation; processos recebem as seis; armazenamentos recebem tampering, repudiation, information disclosure e denial of service; fluxos recebem tampering, information disclosure e denial of service. Trate o mapa como um lembrete, não como regra. Se uma categoria parecer irrelevante para um elemento, anote o motivo, para que quem revisar possa contestar.
Para uma funcionalidade pequena, os passos de 1 a 5 levam cerca de uma hora. Na primeira vez, espere refazer o diagrama pelo menos uma vez. Isso é normal.
O OWASP Juice Shop é uma aplicação web intencionalmente insegura, feita para treino. Neste laboratório você não explora nada. Você desenha o projeto dela, lista ameaças e escreve mitigações. As ameaças saem da leitura do projeto, não de um ataque à aplicação.
Rode o laboratório só na sua máquina, com o acesso preso a 127.0.0.1. Se você ainda não preparou o contêiner, siga antes OWASP Juice Shop com Docker.
Você precisa de:
Na máquina de teste usada para este artigo, git --version mostrou:
git version 2.49.0.windows.1docker run --rm -d --name juice-shop-lab -p 127.0.0.1:3000:3000 bkimminich/juice-shopA parte -p 127.0.0.1:3000:3000 publica a porta só na interface de loopback. Outros computadores da sua rede não conseguem acessá-la.
Confirme que a aplicação web responde:
curl -sI http://127.0.0.1:3000/ | head -n 1Na máquina de teste, a primeira linha da saída foi:
HTTP/1.1 200 OKConfirme que a API responde. Este é um GET simples para uma lista de produtos:
curl -s -o /dev/null -w "products %{http_code} %{content_type}\n" http://127.0.0.1:3000/api/ProductsSaída:
products 200 application/json; charset=utf-8Verifique a versão que a aplicação informa:
curl -s http://127.0.0.1:3000/rest/admin/application-versionSaída:
{"version":"20.3.0"}Essa versão foi a informada pela imagem em 8 de novembro de 2026, na máquina de teste. A sua imagem pode informar outra. Anote a versão que você ver, porque o modelo de ameaças descreve uma release específica.
Baixe o build para desktop do seu sistema operacional na página de releases, instale e abra. Os nomes de menus nos passos abaixo não foram conferidos com um build do Threat Dragon para este artigo, e eles mudam entre versões. Use os nomes que aparecem no seu build.
Crie um novo modelo de ameaças e adicione estes elementos:
O modelo deve ficar assim:
Browser (ator externo)
| requisições e respostas HTTP
v
=================== fronteira de confiança ===================
Juice Shop web e API (processo, 127.0.0.1:3000)
| consultas SQL e linhas
v
Banco SQLite (armazenamento de dados)O esboço em texto serve só de guia. O arquivo real é o que o Threat Dragon salva.
O modelo usa SQLite como armazenamento. Confira a documentação do projeto para a versão que você roda, porque os detalhes de armazenamento podem mudar entre releases.
Aplique o mapa inicial visto antes. O navegador é uma entidade externa, então recebe spoofing e repudiation. Cada fluxo do navegador para a API recebe tampering, information disclosure e denial of service. O processo da API recebe as seis categorias. O armazenamento SQLite recebe tampering, repudiation, information disclosure e denial of service.
Veja um exemplo por categoria. Um modelo real terá mais linhas para cada elemento.
| Categoria | Elemento | Ameaça | Mitigação |
|---|---|---|---|
| Spoofing | Sessão do navegador e da API | Um token roubado permite agir como cliente | Vida curta para o token, verificação de assinatura em cada requisição, invalidar tokens no logout, limitar tentativas de login |
| Tampering | Fluxo do navegador para a API | Um cliente altera o preço ou a quantidade em um pedido | O servidor recalcula os preços a partir do banco e nunca confia nos totais enviados pelo cliente; validar o schema da requisição |
| Repudiation | Processo de pedidos | Um cliente diz que nunca fez o pedido, e nenhum registro mostra o contrário | Log de auditoria no servidor com ID do usuário, data e hora e ID da requisição; nenhum segredo no log |
| Information disclosure | Fluxo da API para o navegador | Uma resposta de erro revela stack traces ou campos internos | Devolver só campos de uma lista de permissão; mensagens de erro genéricas para o cliente; detalhes completos apenas nos logs do servidor |
| Denial of service | Endpoint de busca | Muitas buscas caras deixam o serviço lento para todos | Limite de requisições por cliente, tamanho máximo da busca e da página, timeouts nas consultas ao banco |
| Elevation of privilege | Funções de administração | Um usuário comum chama um endpoint de administrador depois de alterar um campo de papel | Verificação de autorização no servidor em cada requisição, negar por padrão, papel lido da sessão no servidor |
Use a documentação do projeto para ver quais fraquezas a sua versão inclui de propósito. Descreva cada ameaça em termos de projeto. Não escreva passos de exploração no modelo. Este laboratório não precisa de tráfego de ataque.
No Threat Dragon, adicione cada ameaça ao elemento a que ela pertence, com título, descrição e mitigação. Se o seu build tiver campo de status, marque como aberta as mitigações que você ainda não implementou.
Exporte o modelo como JSON pelo menu de arquivo e dê o nome juice-shop-threat-model.json. Depois, na pasta do laboratório:
git init
cp /caminho/para/juice-shop-threat-model.json .
git add juice-shop-threat-model.json && git commit -m "First STRIDE model"O Git mostra um resumo curto com o nome do branch e a mensagem do commit. O texto exato depende da sua versão do Git e das configurações. Se o Git pedir uma identidade, defina a sua com git config user.name e git config user.email, e faça o commit com o seu nome.
Antes de commitar, leia o arquivo. Ele não deve conter nomes de host reais, tokens nem dados de clientes. Este modelo usa apenas 127.0.0.1.
Pare o laboratório quando terminar:
docker stop juice-shop-lab
curl -s -o /dev/null -w "%{http_code}\n" --max-time 2 http://127.0.0.1:3000/Na máquina de teste, a saída foi:
juice-shop-lab
000A primeira linha vem do docker stop. O 000 significa que o curl não recebeu resposta da porta, ou seja, o laboratório está parado.
Um modelo de ameaças descreve um projeto no dia em que foi escrito. Quando o projeto muda, o modelo fica desatualizado. Gatilhos comuns:
O Threat Modeling Manifesto diz que a modelagem de ameaças deve acompanhar as mudanças de projeto, em iterações, cada uma limitada a uma parte gerenciável do sistema. Na prática, são três hábitos. Mantenha o arquivo JSON no repositório, ao lado do código. Adicione uma pergunta de revisão em pull requests que mexem em autenticação, fluxos de dados ou integrações externas: o modelo ainda corresponde ao sistema? Registre a data e a versão da aplicação que o modelo descreve. Ameaças marcadas como mitigadas continuam sendo histórico útil, então mantenha-as.
Fundamentos de segurança
A tríade CIA explicada: confidencialidade, integridade e disponibilidade, com exemplos, verificações de hash e assinatura e dez incidentes.
Fundamentos de segurança
Separe vulnerabilidade, ameaça, risco e exploit, veja como CWE e CVE nomeiam falhas e entenda por que falhas inalcançáveis ainda importam.
Fundamentos de segurança
O que a cibersegurança cobre, a tríade CIA, formas comuns de falha e um primeiro exercício seguro com hashes na sua própria máquina.