CamelLeaked é uma ferramenta de segurança defensiva projetada para detectar segredos hardcoded (chaves de API, senhas, tokens, etc.) em alterações de código. A ferramenta analisa diffs do Git usando padrões de expressões regulares e detecção de entropia para identificar potenciais vazamentos de credenciais antes que sejam commitados.
- Prevenção de vazamentos: Detecta credenciais antes que cheguem ao repositório
- Automação de segurança: Integra-se perfeitamente com GitHub Actions
- Notificações inteligentes: Envia alertas por e-mail para os autores dos commits
- Falsos positivos controláveis: Sistema de ignore para casos legítimos
- Detecção por Regex: 15+ regras pré-configuradas para AWS, GitHub, Google, Stripe, etc.
- Análise de Entropia: Detecta strings de alta entropia que podem ser chaves secretas
- Notificações Automáticas: Envia e-mails detalhados quando segredos são encontrados
- Configurável: Regras personalizáveis via arquivo JSON
- Sistema de Ignore: Comentários
# camel-leaked-ignore
para falsos positivos - CI/CD Ready: Workflow GitHub Actions pronto para uso
- Testado: Suite completa de testes unitários
- Perl 5.24 ou superior
- cpanminus (instalador de módulos CPAN)
# Instalar cpanminus se não tiver
curl -L https://cpanmin.us | perl - App::cpanminus
# Instalar dependências do projeto
cpanm --installdeps .
# Testar o script principal
perl bin/camel-leaked.pl --version
# Executar testes
prove -l t/
# Copiar arquivo de exemplo
cp config/rules.json.example config/rules.json
# Editar regras conforme necessário
vim config/rules.json
Para habilitar notificações por e-mail, configure os seguintes secrets no seu repositório GitHub:
Secret | Descrição | Exemplo |
---|---|---|
SMTP_HOST |
Servidor SMTP | smtp.gmail.com |
SMTP_PORT |
Porta SMTP | 587 |
SMTP_USER |
Usuário SMTP | [email protected] |
SMTP_PASS |
Senha SMTP | sua_senha_smtp |
FROM_EMAIL |
E-mail remetente | [email protected] |
- Vá para seu repositório no GitHub
- Settings → Secrets and variables → Actions
- Clique em New repository secret
- Adicione cada secret listado acima
Copie o arquivo .github/workflows/scan.yml
para o seu repositório:
mkdir -p .github/workflows
cp .github/workflows/scan.yml .github/workflows/camel-leaked.yml
git add .github/workflows/camel-leaked.yml
git commit -m \"Add CamelLeaked security scanning\"
O CamelLeaked funciona automaticamente quando:
- Pull Requests são criados ou atualizados
- Pushes são feitos para branches principais (
main
,master
,develop
)
# Escanear diff via STDIN
git diff | perl bin/camel-leaked.pl
# Escanear arquivo de diff específico
perl bin/camel-leaked.pl --diff-file changes.diff
# Usar configuração personalizada
perl bin/camel-leaked.pl --config custom-rules.json
# Desabilitar notificações por e-mail
git diff | perl bin/camel-leaked.pl --no-email
# Ver ajuda
perl bin/camel-leaked.pl --help
- name: Run security scan
run: |
git diff origin/main...HEAD | perl bin/camel-leaked.pl
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
│ GitHub PR │───▶│ CamelLeaked │───▶│ Email Alert │
│ │ │ Scanner │ │ │
└─────────────────┘ └──────────────┘ └─────────────────┘
│
▼
┌──────────────┐
│ Rules Engine │
│ (JSON Config)│
└──────────────┘
- Análise de Diff: Processa git diff linha por linha
- Aplicação de Regras: Testa cada linha contra padrões regex
- Detecção de Entropia: Identifica strings de alta entropia
- Filtros: Remove falsos positivos e linhas ignoradas
- Notificação: Envia alertas se segredos forem encontrados
- Exit Code: Retorna 1 se segredos encontrados, 0 caso contrário
Regras pré-configuradas para:
- AWS Access Keys (
AKIA[0-9A-Z]{16}
) - GitHub Tokens (
ghp_[A-Za-z0-9_]{36,255}
) - Google API Keys (
AIza[0-9A-Za-z\\-_]{35}
) - Slack Tokens (
xox[baprs]-[0-9a-zA-Z]{10,48}
) - E muitos mais...
- Calcula entropia Shannon de strings
- Detecta chaves aleatórias não cobertas por regex
- Configurável (entropia mínima, tamanho mínimo)
# Esta linha será ignorada
api_key = \"test_key_1234567890abcdef\" # camel-leaked-ignore
{
\"rules\": [
{
\"name\": \"AWS Access Key\",
\"pattern\": \"AKIA[0-9A-Z]{16}\",
\"description\": \"AWS Access Key ID\",
\"example\": \"AKIAIOSFODNN7EXAMPLE\",
\"enabled\": true
}
]
}
🚨 SECRET LEAK DETECTED! 🚨
The following potential secrets were found in the diff:
File: config/database.py
Line: 15
Rule: AWS Access Key
Content: AKIAIOSFODNN7EXAMPLE
Context: aws_access_key = \"AKIAIOSFODNN7EXAMPLE\"
---
📧 Notification email sent to commit author
- Edite
config/rules.json.example
- Adicione a nova regra seguindo o formato:
{
\"name\": \"Nome da Regra\",
\"pattern\": \"sua_regex_aqui\",
\"description\": \"Descrição do que detecta\",
\"example\": \"exemplo_do_que_seria_detectado\",
\"enabled\": true
}
- Teste a regra:
echo \"seu_teste_aqui\" | perl bin/camel-leaked.pl
- Fork o repositório
- Crie uma branch:
git checkout -b feature/nova-funcionalidade
- Faça suas alterações
- Adicione testes em
t/
- Execute a suite de testes:
prove -l t/
- Submeta um Pull Request
# Todos os testes
prove -l t/
# Testes específicos
perl t/01-scanner.t
perl t/02-rules.t
# Com coverage
cover -test
- Suporte a mais formatos de diff
- Interface web para visualização
- Integração com mais plataformas CI/CD
- Machine learning para detecção avançada
- Plugin para IDEs
- Relatórios em formato JSON/XML
A: Sim, especialmente com strings longas ou dados codificados. Use # camel-leaked-ignore
para suprimir.
A: Configure as variáveis SMTP apropriadas. Suporta Gmail, SendGrid, e qualquer servidor SMTP.
A: Sim! Funciona em qualquer repositório GitHub (público ou privado).
A: Sim! O script Perl pode ser executado em qualquer ambiente que suporte Perl.
Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para detalhes.
- Nunca commite credenciais reais no repositório
- Configure adequadamente os GitHub Secrets
- Revise regularmente as regras de detecção
- Reporte problemas de segurança via email privado
Security Engineering Team
- Desenvolvido com foco em segurança defensiva
- Mantido pela comunidade Perl
- Contribuições são bem-vindas!
🔒 Security is everyone's responsibility! 🔒