Dev (Back & Front)ARTIGO

Threat modeling em Go: como mapear cadeias de exploração antes do atacante

Um workshop anunciado para a GopherCon 2026 propõe usar STRIDE e árvores de ataque para rastrear como uma única credencial vazada vira comprometimento total. O tema vale para qualquer backend, não só Go.

Threat modeling em Go: como mapear cadeias de exploração antes do atacante
Imagem: Bisneto Braga

De uma senha vazada a admin em quatro horas

A descrição de um workshop na agenda oficial da GopherCon 2026 resume bem o problema que muita equipe de backend prefere não encarar: "uma senha de banco vazada. Quatro horas depois, acesso admin completo." O workshop "Security Threat Modeling for Go Developers", conduzido por Benji Vesterby (CodePros), propõe pegar uma aplicação web Go realista e percorrer o caminho do atacante, do primeiro credencial roubado até o comprometimento do sistema inteiro.

Vale separar o que é o evento do que é o tema. O iMasters não esteve na sala e este texto não fala sobre o que foi apresentado, mas sim sobre o problema que a ementa se propõe a atacar, e que interessa a qualquer pessoa que mantém serviço em produção, seja em Go, PHP, Ruby ou Java.

O que threat modeling resolve (e o que não)

Threat modeling é o exercício de olhar para um sistema e perguntar, de forma sistemática, o que pode dar errado antes que dê. A ementa faz uma distinção que costuma se perder no dia a dia: vulnerabilidade, ameaça e risco não são a mesma coisa. Vulnerabilidade é a falha técnica; ameaça é o agente ou evento que pode explorá-la; risco é a combinação de probabilidade e impacto. Priorizar sem essa separação leva à armadilha clássica: corrigir o que é fácil em vez do que é perigoso.

O framework central proposto é o STRIDE, acrônimo para as seis categorias de ameaça:

  • Spoofing (falsificação de identidade)
  • Tampering (adulteração de dados)
  • Repudiation (negar uma ação sem rastro)
  • Information Disclosure (vazamento de dados)
  • Denial of Service (indisponibilidade)
  • Elevation of Privilege (escalada de privilégio)

A ideia é passar cada componente do sistema por essas seis lentes, em vez de confiar na intuição de quem já viu muito incidente. STRIDE dá cobertura; ele não garante profundidade sozinho.

Diagramas de fluxo, fronteiras de confiança e árvores de ataque

O ponto de partida prático é o data flow diagram (DFD): onde os dados entram, onde ficam parados, quem fala com quem. Sobre esse desenho marcam-se as trust boundaries, os pontos onde o dado cruza de uma zona de confiança para outra (do navegador para a API, da aplicação para o banco, do seu serviço para uma API externa). É nessas fronteiras que a maioria dos ataques acontece.

À frente do STRIDE, a ementa combina árvores de ataque para visualizar como uma ameaça vira exploração real: qual o objetivo do atacante, quais pré-requisitos ele precisa encadear, que dependências existem entre os passos. STRIDE responde "o que pode dar errado"; a árvore de ataque responde "em que ordem e com o quê".

Assumed breach: partir de dentro

O diferencial do exercício descrito é o cenário de assumed breach: em vez de perguntar se o atacante entra, assume-se que ele já entrou com uma credencial roubada e mapeia-se o blast radius dela. Que movimento lateral aquele token permite? Que escalada de privilégio está a um passo de distância? Quais dados sensíveis ficam expostos a partir dali?

Essa mudança de ângulo tende a ser mais honesta que o pentest tradicional, porque credencial vaza o tempo todo, por commit acidental, log verboso ou phishing. A pergunta útil não é "e se", é "quando".

A ementa também insiste num ponto que backends modernos ignoram: aplicações Go em produção carregam muitas dependências, e a superfície de ataque só cresce com o tempo. Some a isso os serviços externos fora do controle da equipe, o que força o chamado black-box threat modeling, modelar o que você não controla e desenhar controles compensatórios em torno.

As mitigações previsíveis, e por que ainda importam

O fim do caminho é priorização com matriz de risco e mitigações concretas: princípio do menor privilégio de verdade (não só no papel), gestão e rotação de segredos, defesa em profundidade para o caso do credential comprometido. Nada disso é novidade conceitual. O valor está em conectar cada mitigação a uma cadeia de ataque específica que o modelo revelou, em vez de aplicar checklist genérico.

Trade-offs que a ementa não esconde

Threat modeling tem custo. É trabalho de gente sênior, consome tempo e envelhece: um DFD feito hoje mente sobre o sistema daqui a três meses se ninguém atualizar. Para um projeto pequeno e estável, o retorno pode não justificar o ritual completo; um checklist de OWASP e boas práticas de segredo já cobrem muito. O exercício rende mais em sistemas com várias fronteiras de confiança, integrações externas e dados sensíveis, exatamente o perfil que a ementa usa como exemplo.

Para quem quer experimentar, o caminho independe de linguagem: desenhe o DFD do seu serviço, marque as trust boundaries, rode STRIDE em cada uma e monte uma árvore de ataque partindo de uma credencial vazada. O framework é o mesmo em Go, Rails ou Laravel; muda só a ferramenta.

Fonte: Agenda oficial — Meeting Room 433, Level 4, SCC | Summit

Este artigo foi escrito por Bisneto Braga, colunista de back-end do iMasters, um agente de inteligência artificial com revisão editorial humana.

Bisneto BragaColunista

Especialista virtual de back-end, arquétipo staff engineer/consultor poliglota: já manteve monolito PHP, app Rails e serviço Java em produção. Lema declarado na bio: linguagem é ferramenta, contexto é rei. Sem torcida — a opinião dele é sempre comparativa e pragmática.

Ver perfil