Empurrado acidentalmente .env Segredos ou chaves AWS para um repositório público do GitHub: por que a exclusão do arquivo não o oculta¶
Os números de emergência variam de acordo com o país. Esta página usa 911, o número dos Estados Unidos e Canadá. Muitos outros países usam 112, 999 ou outro número. Encontre o número do seu país.
Percebendo dez segundos depois de correr git push origin main (ou lançando um repositório privado para Public) que seu commit incluiu um texto simples .env arquivo, um AWS AKIA... Chave de acesso e chave secreta, uma chave de API OpenAI/Anthropic, um Stripe sk_live_... token de produção, um URI de banco de dados PostgreSQL/MongoDB com senha ou um URI não criptografado $HOME/.ssh/id_ed25519 a chave privada é uma emergência de segurança cibernética de cinco alarmes. Botnets automatizados de coleta de credenciais pesquisam continuamente o público GitHub Events Firehose (api.github.com/events) e clonar commits recém-enviados dentro de 1,5 a 4 segundos do seu git push completando. Pior ainda, quase todos os desenvolvedores em pânico cometem exatamente o mesmo erro fatal: excluem o .env arquivo localmente, adicione .env para .gitignoree envie um segundo commit intitulado "remove .env" ou "oops". Enviando um segundo commit que exclui .env não esconde nada: o segredo do texto simples permanece 100% legível para sempre dentro do diff do commit anterior (git log -p), e mesmo se você forçar o push (git push --force) sobre a ramificação, o commit não referenciado (dangling blob) permanece acessível publicamente por meio de seu URL direto do GitHub e visualizações de solicitação pull em cache até que seja explicitamente eliminado. Se a credencial vazada já tiver sido usada por invasores para implantar ransomware, sequestrar seu domínio DNS ou bloquear seu locatário de nuvem, consulte nossos guias complementares em resposta a ransomware e malware, sequestro de nome de domínio, DNS expirado e controle de sitee Bloqueio de administrador de domínio personalizado do Google Workspace ou Microsoft 365. Se um vazamento de credencial afetar a segurança do paciente do hospital, os controles industriais físicos ou a infraestrutura de despacho de emergência, ligue para o número de emergência local (911 nos Estados Unidos e no Canadá, 112 em toda a União Europeia, 999 no Reino Unido) ou consulte nosso diretório internacional de números de emergência.
Faça isso agora¶
- REVOGAR, DESATIVAR E GIRAR todos os segredos expostos no console do provedor PRIMEIRO - nos primeiros 120 segundos - antes de perder um único segundo em execução
gitcomandos: quando um segredo atinge um repositório público GitHub, GitLab ou Bitbucket por até 3 segundos, trate essa chave como permanentemente queimada e já nas mãos de invasores automatizados. Nenhuma quantidade degit reset --hard,git push --force, ou excluir o repositório pode apagar uma chave do banco de dados de um scraper bot que já baixou seu commit no segundo nº 2. Faça login nas configurações AWS IAM, Stripe, OpenAI, consoles de banco de dados ou GitHub SSH agora mesmo e Desative/Exclua/Role a chave imediatamente. - **Audite seu Cloud Billing e registros de auditoria (
AWS CloudTrail,GCP Cloud Audit Logs,Stripe Logs) para a janela entre o seugit pushe sua revogação de chave **: uso de bots de criptografia automatizados vazadosAWS_ACCESS_KEY_ID(AKIA...) credenciais dentro de 30 a 90 segundos para ativar instâncias de GPU com cota máxima (p4d.24xlarge/g5.48xlarge) em todas as regiões ocultas da AWS (ap-east-1,me-south-1,af-south-1) e criar usuários IAM backdoor ouLambdaganchos de persistência para que permaneçam dentro de sua conta AWS mesmo depois de você excluir a chave vazada. - NUNCA pressione um segundo
"Delete .env"commit - na verdade, digitando"delete secret"ou"remove password"em uma mensagem de commit atrai bots scraper direcionados: Milhares de scripts de atores de ameaças consultam especificamente o GitHub Search por mensagens de commit contendo"remove .env","delete key","oops"e"remove credentials"e clique em um commit retroativo no histórico para roubar a chave. - Reescreva todo o histórico do repositório Git localmente usando
git filter-repo(ouBFG Repo-Cleaner) para extirpar o arquivo ou editar a string de senha de cada commit histórico, árvore e tag:git filter-branchestá oficialmente obsoleto pelo projeto Git; usargit filter-repo --invert-paths --path .env(para destruir um arquivo de todos os commits) ougit filter-repo --replace-text expressions.txt(para substituir sequências de senha específicas por***REMOVED***dentro de arquivos de código sem excluir os arquivos). - Forçar o push de todas as ramificações e tags (
git push origin --force --all), E limpe as visualizações de commit em cache do lado do servidor do GitHub (dangling commits): Aqui está o segredo que a maioria dos desenvolvedores não conhece: mesmo depois de executargit filter-repoegit push --force, Os servidores do GitHub mantêm o antigo commit SHA ativo em seu cache de objetos (git cat-file), o que significa que qualquer pessoa que gravou o commit SHA de 40 caracteres da API pública de eventos ainda pode visualizargithub.com/user/repo/commit/<OLD_SHA>. Explicamos abaixo como limpar imediatamente caches de commit pendentes por meio do suporte/API do GitHub ou excluindo e recriando o repositório. - **Instale um local
pre-commitscanner secreto (gitleaksoutrufflehog) dentro.git/hooks/pre-commitantes de escrever outra linha de código **: um período de 10 segundosgitleaks protect --stagedo gancho de pré-confirmação inspeciona cada linha preparada localmente em seu laptop e bloqueiagit commitantes que um segredo possa sair da sua máquina.
Danger
Se você vazou uma chave AWS (AKIA...), simplesmente excluir essa única chave de acesso do IAM NÃO é suficiente - você deve verificar se o invasor já criou um segundo usuário, função ou temporário do IAM STS Token de sessão durante os 60 segundos em que a chave esteve ativa:
Quando um bot automatizado detecta uma chave AWS com AdministratorAccess ou iam:* permissões no GitHub, sua primeira chamada de API automatizada (dentro de 2 segundos) é iam:CreateUser + iam:CreateAccessKey (ou sts:GetSessionToken válido por 36 horas). Se você excluir apenas a chave vazada de .env e voltar a dormir, a chave backdoor recém-criada do invasor continuará em execução $15,000/day Clusters de GPU EC2 durante todo o fim de semana. Siga imediatamente nossa Lista de verificação de contenção pós-vazamento da AWS de 6 pontos na Fase 2 abaixo.
Árvore de decisão: contenção imediata, rotação e eliminação do histórico do Git¶
Execute este fluxo de trabalho em ordem cronológica estrita (Revogar PRIMEIRO -> Persistência de auditoria SEGUNDO -> Limpar histórico do Git TERCEIRO):
flowchart TD
Start["Segredo enviado para repositório público (.env, chave AWS/GCP, senha do banco de dados, chave Stripe/OpenAI ou chave SSH privada)"] --> Step1["MINUTO 0 A 2 (PRIORIDADE #1): Revogar/Rolar todas as chaves expostas no console do provedor imediatamente"]
Step1 --> SecretType{"Que tipo de credencial estava dentro do commit?"}
SecretType -->|"Chave de infraestrutura em nuvem (AWS AKIA, conta de serviço GCP JSON, Azure SP)"| CloudAudit["MINUTO 2 A 10: Verifique CloudTrail/logs de atividades -> Encerrar instâncias de EC2/computação não autorizadas em todas as regiões -> Excluir usuários/funções/sessões STS não autorizados do IAM"]
SecretType -->|"URI/senha do banco de dados (Postgres, MySQL, MongoDB, Redis, Supabase)"| DBAudit["MINUTO 2 A 10: Alterar a senha do usuário do banco de dados + eliminar conexões ativas (pg_terminate_backend) + bloquear o grupo de segurança do firewall apenas para IPs na lista de permissões"]
SecretType -->|"Token de API ou chave SSH (Stripe, OpenAI, GitHub PAT, Slack, chave SSH privada)"| TokenAudit["MINUTO 2 A 10: Role a chave da API no painel / Remova a chave SSH pública de $HOME/.ssh/authorized_keys e configurações do GitHub -> Auditar registros recentes de uso da API"]
CloudAudit --> RepoVisibility{"MINUTO 10 A 20: Como você deseja limpar o repositório GitHub?"}
DBAudit --> RepoVisibility
TokenAudit --> RepoVisibility
RepoVisibility -->|"Limpeza de cache 100% mais rápida (sem problemas críticos/histórico de estrelas para manter)"| NukeRepo["1. Exclua todo o repositório nas configurações do GitHub. 2. Execute git filter-repo localmente para limpar o histórico. 3. Crie novo repositório e histórico de limpeza por push (destrói instantaneamente todos os SHAs de commit em cache)"]
RepoVisibility -->|"Deve preservar estrelas, problemas, relações públicas e garfos de repositório existentes"| RewriteRepo["1. Execute git filter-repo (--invert-paths ou --replace-text). 2. Execute git push --force --all & --tags. 3. Entre em contato com o suporte / portal de suporte do GitHub para limpar o cache SHA de commit pendente"]
Fase 1: Minuto 0 a 2 - Folha de dicas de revogação imediata pelo provedor¶
Não abra um terminal para brigar git rebase enquanto suas chaves de produção ainda estão ativas. Clique diretamente no provedor afetado abaixo e elimine a credencial primeiro:
| Tipo de credencial vazada | Prefixo/padrão em seu código | Ação exata de revogação e rotação de 30 segundos | O GitHub revoga automaticamente (Secret Scanning Partner Program)? |
|---|---|---|---|
| 1. Chave de acesso AWS IAM | AKIA... (chave IAM de longo prazo) ou ASIA... (Chave STS temporária) + Segredo de 40 caracteres |
Console AWS -> IAM -> Users -> [Username] -> Security credentials guia -> Access keys -> Clique Deactivate e então Delete. (Verifique também se a Política de Quarentena de Chaves Comprometidas da AWS AWSCompromisedKeyQuarantineV2 já foi anexado automaticamente pela AWS.) |
Alerta a AWS imediatamente (a AWS envia um e-mail automaticamente para você, abre um caso de suporte de alta prioridade e anexa AWSCompromisedKeyQuarantineV2 em minutos - bloqueando inicializações do EC2 - mas você ainda deve excluir manualmente a chave). |
2. Google Nuvem (GCP) JSON da conta de serviço ou chave de API |
private_key_id, BEGIN PRIVATE KEY dentro *-credentials.json, ou AIzaSy... |
**Console do Google Cloud -> IAM & Admin -> Service Accounts -> clique em Conta -> Keys aba -> Exclua o ID da chave vazado **. Para AIzaSy... Chaves de API: APIs & Services -> Credentials -> Regenerate Key e chave restrita por referenciador HTTP/IP. |
Sim/Alerta: o Google Cloud notifica automaticamente os proprietários do projeto e pode desativar chaves vazadas da conta de serviço do GCP detectadas no GitHub público. |
| 3. Chave secreta Stripe Live | sk_live_... ou rk_live_... (Chave restrita) |
** Painel de faixa (dashboard.stripe.com/apikeys) -> Clique ... ao lado da Chave Secreta -> Clique Roll key... -> Escolha Expire now (Immediately)**. |
SIM (revogado automaticamente): integração do Stripe com GitHub Secret Scanning **rola/invalida automaticamente sk_live_ chaves em segundos ** após um envio público e e-mails para você. |
| 4. Chaves de API OpenAI/Anthropic/HuggingFace | sk-proj-..., sk-ant-..., hf_... |
- OpenAI (platform.openai.com/api-keys): Clique no ícone Lixeira próximo à chave imediatamente (bots drenam $500 de créditos GPT-4 / Claude em menos de 4 minutos.).- Antrópico ( console.anthropic.com/settings/keys): Tecla Desativar/Excluir.- ** Abraçando o rosto **: Settings -> Access Tokens -> Invalidate. |
SIM: OpenAI, Anthropic e HuggingFace fazem parceria com GitHub Secret Scanning para revogar automaticamente chaves detectadas em repositórios públicos, embora a verificação manual seja obrigatória. |
5. Token de acesso pessoal do GitHub (PAT) ou OAuth/chave do aplicativo |
ghp_..., github_pat_..., gho_..., ghs_... |
** GitHub Settings -> Developer settings -> Personal access tokens -> Excluir token**. |
SIM (instantâneo): o GitHub revoga automaticamente qualquer ghp_ ou github_pat_ token na fração de segundo em que ele é enviado para qualquer repositório público do GitHub. |
6. Cadeias de conexão de banco de dados (PostgreSQL, MongoDB Atlas, Supabase, PlanetScale, Redis) |
postgresql://user:pass@host..., mongodb+srv://..., SUPABASE_SERVICE_ROLE_KEY |
1. Gire a senha do usuário do banco de dados no painel da nuvem (RDS, Atlas, Supabase, Neon).2. Encerrar conexões TCP abertas existentes ( SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();) porque alterar uma senha do Postgres/MySQL não desconecta um invasor que já está conectado a um soquete ativo. |
NÃO (URIs de banco de dados genéricos NÃO são revogados automaticamente): porque um postgresql:// ou mongodb+srv:// O URL aponta para um nome de host personalizado, o GitHub não pode revogar automaticamente a senha do seu banco de dados - você deve alterá-la manualmente agora. |
7. Chave SSH privada (id_rsa, id_ed25519, .pem Par de chaves EC2) |
-----BEGIN OPENSSH PRIVATE KEY----- ou -----BEGIN RSA PRIVATE KEY----- |
Uma chave SSH privada NUNCA pode ser "liberada". Abra imediatamente todos os servidores $HOME/.ssh/authorized_keys arquivo (e seu GitHub/GitLab Settings -> SSH and GPG keys página) e exclua a linha de chave pública correspondente. Para AWS EC2 .pem chaves, remova a chave pública de cada instância do EC2 $HOME/.ssh/authorized_keys. |
NÃO: o GitHub não pode fazer login nos servidores Linux para editar $HOME/.ssh/authorized_keys - você mesmo deve remover a chave pública de cada servidor de destino. |
Fase 2: Minuto 2 a 10 - Verificando se os invasores já criaram um backdoor (AWS/contenção de nuvem)¶
Se você vazou .env arquivo continha uma ** chave de acesso AWS (AKIA...)**, Google Cloud Service Account JSON ou Azure Service Principal, excluir a chave vazada é apenas metade da batalha. Você deve verificar se um bot automatizado não usou esses 90 segundos para estabelecer persistência dentro de sua conta na nuvem:
A auditoria forense pós-vazamento da AWS de 6 pontos¶
- Verificar
AWS CloudTrail -> Event historypara todas as chamadas de API feitas pelo vazamentoAccess Key ID: - Abra o Console do AWS CloudTrail -> Histórico de eventos.
- Altere o menu suspenso de pesquisa de Somente leitura para
Access key IDe cole o que vazouAKIA...corda. - Veja todos os eventos registrados desde o minuto em que você executou
git push. Procure especificamente:CreateUser,CreateAccessKey,AttachUserPolicy,CreateRole,AssumeRole,GetSessionToken,RunInstances(EC2),RequestSpotInstances,CreateFunction(Lambda), ouSendEmail(spam SES). - Revogar qualquer temporário ativo
STSsessões geradas por esse usuário: - Mesmo depois de excluir um
AKIA...chave de acesso, se o invasor ligousts:GetSessionTokenantes de você excluir a chave, seu temporárioASIA...o token de sessão permanece válido por até 36 horas. - Para matar todos os temporários ativos
STStokens para esse usuário IAM imediatamente, vá paraIAM -> Users -> [Leaked User] -> Permissions -> Add inline policye clique emRevoke sessions(que anexa um explícitoDeny *política para qualquer token emitido ondeaws:TokenIssueTimeé mais cedo do que agora.). - Verificar
IAM -> UserseIAM -> Rolespara contas backdoor recém-criadas: - Classifique todos os usuários do IAM por Hora de criação. Exclua qualquer usuário desconhecido (
admin-backup,sys-monitor,support-bot) e verifique oTrust relationshipsem suas funções do IAM para garantir que o invasor não adicionou seu próprio ID de conta externo da AWS ("Principal": {"AWS": "arn:aws:iam::999999999999:root"}) como um principal confiável. - Usar
AWS Resource ExplorerouEC2 Global Viewpara verificar TODAS as mais de 30 regiões da AWS em busca de criptomineradores ocultos: - Os invasores raramente lançam instâncias de criptomineração em
us-east-1onde você os verá em seu painel. Em vez disso, eles lançamp4d,g5, ouc6i.32xlargeinstâncias emap-southeast-3(Jacarta),me-central-1(Emirados Árabes Unidos),il-central-1(Tel Aviv), ousa-east-1(São Paulo). - Abrir
EC2 Console -> EC2 Global View(que verifica todas as regiões habilitadas em uma única tabela) e Encerrar quaisquer instâncias não autorizadas imediatamente. - Abra um caso de cobrança do AWS Support imediatamente se instâncias não autorizadas gerarem uma fatura:
- Se um bot girasse
$8,000das instâncias de GPU EC2 antes de encerrá-las, não entre em pânico: depois de proteger a conta, excluir a chave, ativar root/IAMMFAe removeu a chave do GitHub, abra um Caso de suporte de cobrança e conta da AWS explicando o push acidental do GitHub e suas etapas de correção. A AWS concede rotineiramente um crédito único de perdão de cobrança de boa vontade para vazamentos acidentais de chaves do GitHub, uma vez que sua equipe de segurança verifica se o repositório está limpo.
Fase 3: Por que a exclusão do arquivo em um novo commit falha - e como reescrever corretamente o histórico com git filter-repo¶
1. Por que git rm .env && git commit -m "delete .env" é completamente inútil¶
Git é um sistema de arquivos endereçável por conteúdo somente por acréscimo (Directed Acyclic Graph / DAG de commits, árvores e objetos blob):
- Suponha Comprometer A1B2C3 adicionado .env (Blob 998877).
- Suponha que 2 minutos depois você corra git rm .env, adicione .env para .gitignoree pressione Commit D4E5F6.
- Enquanto alguém navegando na lista de arquivos atual na sua página inicial do GitHub não verá .env, ** Confirmar A1B2C3 e Blob 998877 ainda fazem 100% parte do repositório.** Qualquer pessoa que execute git clone downloads Blob 998877, qualquer pessoa que clicar na guia "Commits" no GitHub pode clicar A1B2C3 para ler o seu .env arquivo em texto simples e ferramentas automatizadas (trufflehog git https://github.com/user/repo) verifica cada commit histórico em 2 segundos.
2. Passo a passo: Apagando um arquivo ou string secreta em TODO o histórico usando git filter-repo¶
O projeto Git e o GitHub recomendam oficialmente git-filter-repo (que substitui o lento e sujeito a erros git filter-branch e é ainda mais flexível do que BFG Repo-Cleaner).
- Instalar
git-filter-repo(Leva 5 segundos): - Faça uma cópia de segurança da pasta do seu repositório local antes de reescrever o histórico:
(Nota: Se você já moveu seu válido
.envarquivar, certifique-se de uma cópia limpa de.envé salvo em/tmp/.env.safefora do repo, porquegit filter-repovai limpar.envdo seu diretório de trabalho também.) - Escolha a opção A (apagar todo o caminho do arquivo, como
.envouid_rsa) OU Opção B (redigir sequências secretas específicas dentro de arquivos de código): - Opção A: remover completamente
.env(ouconfig/secrets.json) de cada commit no histórico: (Por que--invert-paths? Sem--invert-paths,git filter-repo --path .envmantém SOMENTE.enve exclui todo o resto. Combinando--invert-paths --path .envdiz ao Git para manter tudo, EXCETO.envem todos os commits, ramificações e tags.) - Opção B: Mantenha o arquivo de código (
app.py/config.js), mas limpe a string secreta codificada de cada versão histórica: Crie um arquivo de texto/tmp/secrets-to-scrub.txtcontendo uma string secreta (ou regex) por linha:Agora corraAKIAIOSFODNN7EXAMPLE==>REDACTED_AWS_KEY sk_live_51NzExampleSecretKey999==>REDACTED_STRIPE_KEY regex:postgres:\/\/non_at_chars@==>postgres://REDACTED_DB_CREDENTIALS@git filter-repo --replace-text: - Adicionar
.envpara.gitignoreentão você não confirma novamente daqui a 5 minutos: - ** Adicione novamente seu GitHub remoto (
git filter-reporemove intencionalmenteorigincomo uma verificação de segurança) e forçar o push de todas as ramificações e tags**:
Fase 4: A armadilha oculta do cache do GitHub (Dangling Commits) e como purgá-lo¶
Aqui está uma realidade forense crítica documentada em Documentos oficiais do GitHub (Removendo dados confidenciais de um repositório):
- Quando você corre git filter-repo e git push origin --force --all, cada commit em seu repositório recebe um hash SHA-1 totalmente novo de 40 caracteres, e seu main o ponteiro da ramificação move-se para o novo histórico limpo.
- NO ENTANTO, o servidor de armazenamento back-end Git do GitHub NÃO coleta lixo imediatamente (git gc --prune=now) o commit SHA antigo e não referenciado.
- Isso significa que se o bot do invasor gravou o hash de commit antigo (por exemplo, a1b2c3d4...) da API pública do GitHub Events quando você fez o push pela primeira vez, eles ainda poderão abrir https://github.com/YOUR_USERNAME/YOUR_REPO/commit/a1b2c3d4... em qualquer navegador da web e visualize seu .env arquivo mesmo DEPOIS de você forçar o histórico de limpeza. Pior ainda, se o segredo aparecesse dentro de uma Solicitação Pull, refs/pull/12/head mantém esse commit permanentemente acessível.
Como destruir commits em cache/pendentes nos servidores do GitHub agora mesmo:¶
- Método 1 (limpeza instantânea e 100% completa - melhor se o repositório não tiver problemas/PRs/estrelas críticos):
- Vá para o seu repositório no GitHub ->
Settings-> Role até o final (Danger Zone) -> CliqueDelete this repository. - Crie um repositório totalmente novo com exatamente o mesmo nome no GitHub e envie sua limpeza
git filter-reporepositório local para ele (git push -u origin main). - Excluir o repositório no GitHub interrompe imediatamente todas as visualizações públicas da web de SHAs de commit antigos em cache (
404 Not Found). - Método 2 (preservar estrelas, problemas e PRs - usando suporte do GitHub/limpeza de cache):
- Primeiro, pegue o hash SHA exato de 40 caracteres do commit antigo que continha o segredo (verifique
git reflogna sua pasta de backup ou nos e-mails de notificação do GitHub). - Abra ** Suporte do GitHub (
support.github.com)** e use o fluxo de trabalho automatizado Remover dados confidenciais/Purge cached commit views (referenciando o URL do repositório e o(s) SHA(s) de commit pendente exato(s). A ferramenta automatizada do suporte do GitHub executa um servidor imediatogit gclimpeza de cache que invalida as visualizações da web em cache e objetos não referenciados sem excluir seu repositório. - Notifique todos os colegas de equipe/colaboradores para
git clonefresco (NUNCAgit pull): - Diga a todos os desenvolvedores da sua equipe: "NÃO execute
git pulle push." Se um colega de trabalho que fez o commit incorreto anteriormente executargit pull(que mescla o antigo histórico sujo com o novo histórico reescrito) e empurra, **eles enviarão o excluído.envconfirme novamente no GitHub. ** Cada colaborador deve excluir sua pasta local e executar uma novagit cloneou corragit fetch origin && git reset --hard origin/main.
Fase 5: Prevenir para sempre vazamentos futuros (Gitleaks Gancho de pré-confirmação e proteção contra push do GitHub)¶
Reserve 60 segundos agora para tornar matematicamente impossível cometer acidentalmente um segredo novamente:
- ** Habilite o GitHub gratuitamente
"Push Protection for Yourself"em toda a sua conta GitHub**: - Vá para GitHub
Settings(suas configurações de perfil pessoal, canto superior direito) ->Code security and analysis(ouCode security). - Role até
Secret scanning-> HabilitarPush protection for yourself. - Com isso ativado, sempre que você executar
git pushde qualquer computador para qualquer repositório público ou privado, o servidor do GitHub inspeciona seu packfile recebido antes de aceitar o push: se detectar uma chave AWS, chave OpenAI, chave Stripe, chave SSH privada ou token Slack, GitHub rejeita ogit pushbem no seu terminal antes do commit entrar no ar. - Instalar
gitleakscomo localpre-commitconecte seu laptop:# Install gitleaks: brew install gitleaks # (or download binary on Linux/Windows) # Add a pre-commit hook inside your repository (.git/hooks/pre-commit): cat << 'EOF' > .git/hooks/pre-commit # /usr/bin/env bash gitleaks protect --verbose --redact --staged if test $? -ne 0; then echo "COMMIT BLOCKED BY GITLEAKS: High-entropy secret or API key detected in staged changes." exit 1 fi EOF chmod +x .git/hooks/pre-commit
Tip
Usar .env.example com strings de espaço reservado fictício e 1Password CLI / AWS Vault / doppler para segredos locais:
Nunca armazene chaves de produção reais em texto simples .env arquivo em um laptop de desenvolvedor, se você puder evitá-lo. Em vez disso, cometa um seguro .env.example (STRIPE_API_KEY=sk_test_placeholder_replace_me), adicione .env* para o seu mundo $HOME/.gitignore_global (git config --global core.excludesfile $HOME/.gitignore_global) ou injetar segredos diretamente na memória em tempo de execução usando op run --env-file=".env.tpl" -- npm start (1Password CLI) ou aws-vault exec.
Números de emergência regionais e protocolos de agências¶
Se um envio acidental de credenciais do GitHub levar a uma invasão não autorizada em dados pessoais regulamentados (PII / PHI), sistemas de saúde ou infraestrutura governamental seguem protocolos obrigatórios de notificação de violação:
- Estados Unidos e Canadá:
- Interrupção emergencial de segurança de vida/infraestrutura crítica: Disque
911se uma violação da infraestrutura afetar as operações hospitalares ou os controles de segurança física. - Agência de Segurança Cibernética e de Infraestrutura (
CISA) e FBI (IC3): Se os invasores usaram chaves de nuvem vazadas para exfiltrar dados ou implantar malware de extorsão, informe CISA (1-844-Say-CISA/cisa.gov/report) e o Centro de denúncias de crimes na Internet do FBI (ic3.gov). - Notificação de violação de dados da SEC, FTC e procurador-geral do estado: se os registros de acesso ao banco de dados/CloudTrail mostrarem que um endereço IP não autorizado acessou dados pessoais do cliente (
PII) ou registros de saúde (HIPAA ePHI) antes que a chave vazada seja revogada, consulte imediatamente um advogado sobre os cronogramas estaduais de notificação de violação de dados e relatórios federais HHS OCR/FTC Safeguards Rule. - Centro Canadense de Segurança Cibernética: Ligue
1-833-CYBER-88(1-833-292-3788) ou denunciar violações de privacidade emPIPEDAao Escritório do Comissário de Privacidade do Canadá (OPC). - Reino Unido:
- Serviços de Emergência: Disque
999(ou101/ Ação Fraude0300 123 2040e o Centro Nacional de Segurança Cibernética /NCSCemncsc.gov.uk). - Gabinete do Comissário de Informação (
ICO- Janela de 72 horas do GDPR do Reino Unido): Se uma credencial vazada permitiu acesso não autorizado a dados pessoais de residentes do Reino Unido, o Artigo 33 do GDPR do Reino Unido exige o relato de violações de dados pessoais notificáveis ao ICO (0303 123 1113) dentro de 72 horas após tomar conhecimento da violação. - União Europeia:
- Serviços de Emergência: Disque
112em todos os estados membros da UE. - Artigo 33 do GDPR e Relatório de Incidentes da Diretiva NIS2: As organizações sujeitas ao RGPD da UE devem avaliar se a exposição da credencial resultou em uma violação da confidencialidade dos dados pessoais (notificação de 72 horas à Autoridade Nacional de Proteção de Dados /
DPA), enquanto entidades essenciais/importantes no âmbito da UENIS2Diretiva enfrentam um prazo de notificação de alerta antecipado de 24 horas aos seus paísesCSIRT(BSIna Alemanha,ANSSIna França,ACNna Itália) para incidentes cibernéticos significativos. - Austrália e Nova Zelândia:
- Serviços de Emergência: Disque
000na Austrália ou111na Nova Zelândia. - Centro Australiano de Segurança Cibernética (
ACSC) e violações de dados notificáveis (OAIC): Ligue1300 CYBER1(1300 292 371) para resposta a incidentes e avaliar as obrigações de notificação no âmbito do Escritório do Comissário de Informação Australiano (OAIC) Violações de dados notificáveis (NDB) esquema ou Lei de Privacidade da Nova Zelândia de 2020 (Privacy Commissioner). - Índia e Ásia-Pacífico:
- Serviços de Emergência: Disque
112na Índia (ou1930para crimes cibernéticos). - Diretiva de relatórios obrigatórios de 6 horas CERT-In (Índia): Em Equipe indiana de resposta a emergências informáticas (
CERT-In) direções (No. 20(3)/2022-CERT-In), o acesso não autorizado a sistemas de nuvem/TI ou vazamentos de dados que afetem organizações na Índia devem ser relatados a **incident@cert-in.org.indentro de 6 horas ** após a detecção.
Perguntas frequentes¶
Eu apaguei o .env arquivo e enviei um novo commit 30 segundos após meu erro - ainda preciso girar minhas chaves de API e senhas de banco de dados?¶
Sim, 100 por cento - gire todas as teclas imediatamente, sem exceção. Estudos acadêmicos de segurança cibernética e telemetria do GitHub Secret Scanning confirmam que os bots automatizados de coleta de credenciais monitoram o fluxo público de eventos do GitHub (api.github.com/events) em tempo real e baixar commits recém-enviados dentro 1,5 a 5 segundos. Pior, enviar um segundo commit que exclui .env deixa todo o texto simples .env arquivo permanentemente dentro da diferença de histórico do primeiro commit - e muitos bots procuram especificamente por commits que excluem .env arquivos. Depois que um segredo é enviado para um repositório público por apenas 1 segundo, ele fica comprometido para sempre; revogar e alternar a credencial no painel do provedor é a única coisa que protege você.
E se o repositório fosse um repositório PRIVADO do GitHub quando eu confirmei o .env arquivo, e eu só quero limpá-lo antes de tornar o repositório público na próxima semana?¶
Se o repositório fosse 100 por cento privado o tempo todo (e nenhum aplicativo CI/CD de terceiros não confiável teve acesso), os scraper bots na API pública de eventos do GitHub têm não vi seu segredo ainda. No entanto, NÃO simplesmente exclua `.env` em um novo commit e depois mude o repositório de Privado para Público. No momento em que você transforma um repositório privado em Público, ele gráfico de commit histórico completo torna-se público - e os bots verificam imediatamente todos os commits antigos no repositório recém-público. Antes de tornar público um repositório privado: (1) Execute git filter-repo --invert-paths --path .env para retirar o arquivo de todos os commits históricos (e girar as chaves de qualquer maneira para melhores práticas), OU (2) Copie os arquivos atuais limpos para uma pasta totalmente nova, execute git iniciar para um histórico inicial limpo de 1 commit e publique esse novo repositório.
Por que a AWS anexou automaticamente uma política chamada AWSCompromisedKeyQuarantineV2 para meu usuário IAM e por que ainda estou sendo cobrado?¶
Como a AWS tem parceria direta com o GitHub Secret Scanning, sempre que um AKI... chave aparece em um commit público do GitHub, o sistema de segurança automatizado da AWS a detecta em minutos, abre um tíquete de suporte e anexa a política gerenciada AWSCompromisedKeyQuarantineV2 (ou V3) para esse usuário do IAM. Essa política de quarentena bloqueia ações obviamente perigosas, como o lançamento de novos ec2:RunInstances ou excluindo buckets S3 - mas NÃO encerra instâncias do EC2 que o invasor já lançou durante os primeiros 60 segundos antes da política ser anexada, nem exclui usuários backdoor IAM ou temporários STS sessões que o invasor já criou. Você ainda deve excluir manualmente a chave vazada, verifique Visão global do EC2 em todas as regiões para encerrar instâncias não autorizadas e verificar CloudTrail para alterações não autorizadas do IAM.
Qual é a diferença entre git filter-repo e BFG Repo-Cleaner, e por que não devo usar git filter-branch?¶
git filter-branch é um script de shell legado antigo incorporado nas versões anteriores do Git que é extremamente lento em repositórios grandes, fácil de configurar incorretamente (deixando referências de backup em referências/original/ que ainda contém seus segredos.) e agora imprime um aviso oficial de descontinuação do Git informando para você não usá-lo. Ambos repositório git-filter (escrito em Python e endossado oficialmente pelos principais mantenedores do Git e GitHub) e Limpador de repositório BFG (escrito em Java/Scala) executa 10x a 100x mais rápido e reescreve de forma limpa todos os commits, árvores e tags. repositório git-filter é geralmente preferido hoje porque modifica até mesmo o seu commit atual com check-out (`HEAD`) sem exigir primeiro um commit preliminar separado.
Como alguém ainda pode ver meu commit excluído no GitHub depois que eu executei? git filter-repo e git push --force?¶
No Git, `git push --force` apenas atualiza o ponteiro de referência de ramificação (`refs/heads/main`) para apontar para sua nova cadeia de commits reescrita; isso acontece não exclua imediatamente os objetos de commit antigos não referenciados ("pendentes") armazenados nos servidores back-end do GitHub. Se um bot gravou o hash SHA de 40 caracteres do seu commit original quando atingiu a API pública de eventos, navegando diretamente para https://github.com/owner/repo/commit/<40-char-SHA> ainda carregará esse commit órfão do cache de objetos do GitHub até que a coleta de lixo seja executada. Para destruir essa visualização em cache imediatamente, exclua o repositório no GitHub e recrie-o a partir do seu repositório local limpoou envie o SHA de commit pendente para Suporte GitHub (`support.github.com`) para uma limpeza imediata do cache do lado do servidor.
E se alguém já clicou em "Fork" no meu repositório público antes de eu executar git filter-repo?¶
É por isso A etapa 1 é sempre revogar e alternar as credenciais no painel do provedor: correndo repositório de filtro git e push forçado para seu próprio repositório NÃO reescreve commits dentro do Fork independente de outra pessoa do seu repositório (a menos que você exclua todo o seu repositório pai e entre em contato com o suporte do GitHub sobre dados confidenciais em forks). Depois de revogar as chaves AWS/API e alternar as senhas do banco de dados, qualquer cópia do antigo .env O arquivo localizado dentro de um fork ou banco de dados de bot de terceiros torna-se uma sequência de caracteres morta e inútil que não pode mais acessar sua infraestrutura.
Guias relacionados¶
- Ransomware e malware: contenção e recuperação imediatas
- Sequestro de nome de domínio, DNS expirado e controle de site
- Bloqueio de administrador de domínio personalizado do Google Workspace ou Microsoft 365 e resgate de DNS
- Phishing e contas comprometidas: bloqueio de emergência
- rm -rf ou Shift-Delete acidental no Linux, macOS ou Windows: remontagem imediata somente leitura
- Números de emergência por país
Fontes e orientações oficiais¶
- Documentação oficial de segurança do GitHub (
docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository): Remoção de dados confidenciais de um repositório (git filter-repo,BFG Repo-Cleaner, limpeza de cache de confirmação pendente e proteção contra push de verificação secreta). - Amazon Web Services (
AWS) Guia de resposta a incidentes de segurança (docs.aws.amazon.com/security/): Respondendo a chaves de acesso AWS IAM expostas (AWSCompromisedKeyQuarantineV2, Revogando TemporariamenteSTSSessões viaaws:TokenIssueTimeeCloudTrailAuditoria Forense). - Instituto Nacional de Padrões e Tecnologia (
NIST) (Estados Unidos): Publicação Especial800-61Rev. 2: Guia de Tratamento de Incidentes de Segurança Informática e SP800-57: Recomendação para gerenciamento de chaves (revogação de credenciais comprometidas e rotação criptográfica). - Abra o projeto de segurança de aplicativos da Web (
OWASP): Folha de dicas de gerenciamento de segredos (evitando credenciais codificadas, verificação de segredo pré-commit comGitleaks/TruffleHoge injeção secreta de tempo de execução efêmera). - Agência de Segurança Cibernética e de Infraestrutura (
CISA) (Estados Unidos): Arquitetura de referência técnica de segurança em nuvem e manual de correção de credenciais comprometidas.