Aikido

Detecção de Segredos: Um Guia Prático para Encontrar e Prevenir Credenciais Vazadas

Ruben CamerlynckRuben Camerlynck
|
#

Secretschaves de API, senhas, certificados — são o equivalente digital de segredos de parquinho: eles são destinados a um destinatário confiável, não ao público. No software moderno, os Secrets são usados programaticamente, o que os torna onipresentes e frágeis. Sem controle, eles são frequentemente o ponto de partida para grandes violações. Este guia explica onde os Secrets vazam, por que detectá-los é mais difícil do que parece, o que uma boa detecção realmente faz e como implantá-la para que você interrompa vazamentos acidentais antes que se tornem incidentes.

O que é considerado um "secret" em software?

Um secret é qualquer credencial que concede acesso a sistemas ou serviços: chaves de API, senhas de banco de dados, tokens OAuth, chaves SSH, certificados TLS e similares. Como os secrets são consumidos programaticamente, eles trafegam por código-fonte, pipelines de CI, máquinas de desenvolvedores e backups — criando uma grande superfície de ataque.

Como os secrets tipicamente vazam

Um dos vetores de vazamento mais comuns é o histórico de controle de versão. O cenário típico:

  1. Um desenvolvedor cria uma feature branch e codifica uma credencial para testar algo rapidamente.
  2. Uma vez verificado, eles substituem a credencial por uma variável de ambiente ou uma chamada de vault e enviam as alterações para revisão.
  3. A revisão de código olha apenas para o diff atual; o secret temporário permanece oculto no histórico da branch ou do commit.
Diagrama do histórico do git com o Commit C na branch dev rotulado como 'Chave de API hard coded (o secret)'.
O Commit C na branch dev mostra uma chave de API hard-coded — um secret que permanece no histórico.

A menos que você reescreva o histórico do git (o que é disruptivo e arriscado), esse secret permanece. Se um atacante obtiver acesso ao seu repositório — mesmo um privado —, ele poderá escanear o histórico e coletar credenciais para pivotar para alvos de maior valor.

Quão disseminado é o problema?

Pesquisas públicas mostram que isso está longe de ser raro. Scans em larga escala do GitHub revelam milhões de secrets expostos e uma prevalência surpreendentemente alta mesmo em repositórios privados. Violações reais comprovam o risco: dumps de código-fonte vazados renderam milhares de credenciais, incluindo tokens Cloud e chaves de pagamento.

Slide exibindo '23.770.171 novos secrets detectados em commits públicos do GitHub em 2024' com estatísticas de suporte
GitGuardian: 23.770.171 novos secrets detectados em commits públicos do GitHub em 2024 — uma clara medida de escala.

Por que o SAST sozinho não é suficiente

Testes de segurança de aplicações estáticas (SAST) é ótimo para encontrar coisas como SQL injection ou path traversal na base de código atual, mas geralmente escaneia o snapshot mais recente, não todo o histórico de commits. Secrets são diferentes: um secret em qualquer commit, branch ou tag é um risco de comprometimento. Isso significa que a detecção deve considerar o histórico completo e múltiplos repositórios onde esse histórico reside.

Saída do terminal 'Scan Summary' mostrando os resultados do scan e a mensagem de que o scan foi limitado aos arquivos rastreados pelo git, com o apresentador em destaque.
Resumo do scan mostrando os resultados e uma nota de que o scan foi limitado aos arquivos rastreados pelo git.

Por que a detecção de segredos é mais difícil do que "apenas regex"

À primeira vista, você pode pensar: escreva um regex para "API_KEY=" e pronto. Na realidade, a detecção de segredos deve equilibrar precisão e recall para que não sobrecarregue os desenvolvedores com ruído:

  • Strings de alta entropia (valores com aparência aleatória) são frequentemente Secrets — mas nem sempre. Muitos artefatos não-Secrets também são de alta entropia.
  • Placeholders e exemplos estão espalhados por bases de código. Marcar ingenuamente cada chave que parece um segredo gera falsos positivos que interrompem os fluxos de trabalho.
  • Padrões de provedores variam. Alguns serviços (Stripe, AWS, Twilio) usam prefixos ou formatos identificáveis; outros não.
Slide intitulado 'String de alta entropia bruta' mostrando um token longo tipo hexadecimal e um indicador vermelho de 'Secret'.
Exemplo de string de alta entropia usado para ilustrar o que parece um Secret.

Como é uma boa detecção de segredos

Uma solução eficaz de detecção de segredos usa múltiplos sinais para reduzir falsos positivos e capturar vazamentos reais:

  • Correspondência de padrões para provedores conhecidos. Identifique chaves que seguem formatos específicos do provedor (por exemplo, prefixos Stripe, formatos de token AWS).
  • Validação sempre que possível. Tente validação não-destrutiva (esta chave AWS existe? está ativa?) para confirmar se um achado é real.
  • Entropia + contexto. Use medidas de entropia para encontrar strings de alta aleatoriedade, então inspecione o código circundante (caminho do arquivo, nomes de variáveis, comentários) para decidir se é um Secret.
  • Verificações anti-dicionário. Filtre strings que contêm palavras em inglês ou placeholders óbvios para reduzir o ruído.
  • Escaneamento com consciência do histórico. Escaneie todo o histórico git através de branches, tags e mirrors — não apenas o topo da main.
  • Implantação centrada no desenvolvedor. Execute a detecção tanto remotamente (repositórios centrais) quanto localmente (hooks de pré-commit, plugins de IDE) para parar vazamentos mais cedo no fluxo de trabalho.
Apresentador em um microfone com um slide exibindo 'Identifique todos os Secrets por categorias'
Identificar Secrets por categoria — um objetivo prático de detecção.

Testando uma ferramenta de detecção de segredos (e a armadilha comum)

Ao avaliar ferramentas, as equipes frequentemente realizam um teste simples: elas codificam strings que parecem Secrets óbvios e esperam que o scanner as detecte. Ironicamente, uma ferramenta que sinaliza todo Secret falso óbvio pode ser de baixa qualidade — são as ferramentas barulhentas que parecem melhores em testes ingênuos.

Boas ferramentas ignoram intencionalmente padrões triviais, não reais e valores de placeholder. Elas priorizam a validação de descobertas suspeitas em vez de alertar sobre cada string aleatória.

Dashboard web de Canarytokens mostrando tipos de tokens (Web bug, DNS, AWS infra, Cartão de Crédito, código QR, MySQL, chaves AWS, Fake App, Log4shell, Fast redirect)
Dashboard de Canarytokens — crie honeytokens para testar com segurança a detecção e os alertas.

Como testar corretamente:

  1. Use honeytokens / canary tokens — chaves de API reais e de baixo risco que você controla — que você pode publicar com segurança para testar a detecção e os alertas.
  2. Execute a ferramenta contra branches históricos e commits esquecidos, não apenas chaves falsas novas em arquivos atuais.
  3. Meça a taxa de falsos positivos e o sucesso da validação: a ferramenta pode reduzir o ruído enquanto ainda revela Secrets reais e acionáveis?

Onde implantar a detecção de segredos

A detecção deve ocorrer em múltiplas camadas:

  • Repositórios Git remotos (obrigatório). Seu serviço de hospedagem Git central é a fonte canônica da verdade: escaneie todos os repositórios e o histórico completo. Qualquer secret presente aqui deve ser tratado como comprometido.
Diagrama estilizado de um repositório local (IDE e commits locais) fazendo push para um repositório remoto que mostra um Novo Pull Request e estágios de CI/CD
Diagrama mostrando repositórios locais e remotos e como os pushes criam pull requests — onde a varredura remota se encaixa.
  • Ambiente local do desenvolvedor (fortemente recomendado). Utilize hooks de pre-commit e extensões de IDE ou editor para detectar Secrets antes que cheguem a um push. O feedback local evita retrabalho e dá controle aos desenvolvedores.
  • Pipelines de CI/CD. Adicione verificações para bloquear merges ou deployments quando um Secrets validado for encontrado, garantindo que as regras minimizem falsos positivos que bloqueiam o desenvolvimento.
“Se um Secrets chegar ao [seu repositório remoto], você precisa considerá-lo comprometido.”

Checklist de remediação rápida ao encontrar um Secrets vazado

  1. Rotacione o Secrets imediatamente (rotacione credenciais, revogue tokens).
  2. Avalie o escopo: quais sistemas eram acessíveis com a chave?
  3. Remova o secret de todos os commits e branches — considere reescrever o histórico apenas quando necessário e aceitável para seu fluxo de trabalho.
  4. Audite por vazamentos semelhantes em outros repositórios ou backups.
  5. Melhore os fluxos de trabalho e ferramentas dos desenvolvedores para prevenir recorrências (plugins de IDE, hooks de pré-commit, adoção de vault).

Recapitulação: os essenciais

  • Secrets estão por toda parte no desenvolvimento moderno e frequentemente vivem no histórico do git.
  • Ferramentas SAST que escaneiam apenas a ponta da árvore não são suficientes para detecção de segredos.
  • Uma boa detecção combina padrões de provedor, validação, análise de entropia/contexto e filtros anti-dicionário para reduzir o ruído.
  • Implante a detecção tanto centralmente (repositórios remotos) quanto localmente (IDE/hooks) para detectar vazamentos precocemente e evitar um jogo de gato e rato.
  • Teste scanners de forma responsável usando honeytokens e varreduras históricas, em vez de chaves falsas triviais.

A detecção de segredos é um problema contínuo e focado no desenvolvedor. Com a combinação certa de sinais e posicionamento, você pode reduzir drasticamente o risco sem sobrecarregar os desenvolvedores com falsos positivos. Comece escaneando seu histórico Git, adicione proteções locais e torne a validação um recurso central de qualquer solução de detecção de segredos que você escolher. Experimente o Aikido Security hoje!

4.7/5

Proteja seu software agora

Comece Gratuitamente
Não é necessário cc
Agendar uma demonstração
Seus dados não serão compartilhados · Acesso somente leitura · Não é necessário cartão de crédito

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.