
Scanner de segredos offline que combina regras regex, análise semântica baseada em lexer e correspondência de valores com hash para detectar credenciais expostas em código com saída SARIF.
Absolutamente não!
Na nossa era de hype em torno de LLMs, o DeepSecrets ainda é executado inteiramente na sua máquina — oferecendo ótimos resultados offline, com segurança e gratuitamente.
A maioria dos scanners existentes não "entende" código de verdade. Em vez disso, eles apenas analisam textos e têm baixa cobertura.
O DeepSecrets preenche a lacuna entre os scanners clássicos baseados em regex e as ferramentas SAST comerciais de grande porte. Ele amplia a estratégia clássica de varredura baseada em regex ao depender fortemente de análise semântica de código, detecção de variáveis perigosas e análise de entropia sensível ao contexto. Isso significa que os candidatos a segredo são sempre semanticamente corretos. Alcançamos verdadeira compreensão de código em mais de 500 linguagens e formatos usando técnicas de lexing e parsing.
O DeepSecrets também introduz uma nova forma de encontrar credenciais com conhecimento zero: o HashedSecret Engine. Basta fornecer os valores de hash dos seus segredos de produção conhecidos, e a ferramenta os encontrará expostos em texto simples dentro do seu código.
O DeepSecrets v2.0 foi avaliado (junho de 2026) contra o benchmark SecretBench, superando os scanners tradicionais de texto plano:
(Você pode ler a história completa dos bastidores e o detalhamento dos benchmarks no meu artigo do HackerNoon aqui)
Do Github via pip
$ pip install git+https://github.com/ntoskernel/deepsecrets.git
Do PyPi
$ pip install deepsecrets
O DeepSecrets requer Python 3.11 ou superior.
A maneira mais fácil de executar um escaneamento:
$ deepsecrets --target-dir /path/to/your/code --outformat dojo-sarif --outfile report.json
Isso executará uma varredura em /path/to/your/code usando a configuração padrão:
Um relatório em formato SARIF (compatível com DefectDojo e GitHub Security) será salvo em report.json.
O comando --help está sempre pronto para orientá-lo, mas aqui estão os principais sinalizadores que você pode usar para adaptar a varredura ao seu ambiente:
--regex-rules /path/to/rules.json: Forneça seu próprio conjunto de regras regex personalizado.--hashed-values /path/to/hashes.json: Forneça uma lista de segredos de produção conhecidos pré-hasheados para procurá-los com segurança.--excluded-paths /path/to/exclusions.json: Substitua ou estenda os caminhos padrão ignorados durante a varredura.--deep-max-size BYTES: Arquivos maiores que isso (padrão 250.000 bytes) recebem a análise rápida: as regras regex e a busca de variáveis, sem o lexer de linguagem. Arquivos grandes são em sua maioria gerados ou minificados, o lexer consome a maior parte do tempo de varredura neles e raramente encontra mais ali. 0 dá a todos os arquivos a análise completa.--skip-bundles: Ignora completamente JavaScript minificado, source maps e bundles (*.min.js, *.map, *.bundle.js), além das outras exclusões de caminho.--confidence-level {all,low,medium,high,very-high}: O nível mínimo de confiança a ser relatado (padrão low, todas as descobertas). medium, high e very-high mantêm confiança 3, 6 e 9 ou mais; all também relata as correspondências regex que o scanner julgou não serem segredos (placeholders, exemplos), com um id de regra -INFO.--report-diagnostics: Adiciona todos os arquivos encontrados sob o alvo ao relatório SARIF, com seu status, tempo de varredura, motivo de exclusão e profundidade de análise.--regex-candidate-scoring-rules /path/to/rules.json: Forneça suas próprias regras para julgar correspondências regex antes de serem relatadas. Não forneça valor ao sinalizador para relatar correspondências regex sem julgamento.--multiprocessing-context {forkserver,spawn,fork}: Como os processos trabalhadores iniciam. O padrão é forkserver onde a plataforma o possui (Linux, macOS): os trabalhadores compartilham o scanner já carregado em um processo servidor. O Windows usa spawn. Todos os três produzem as mesmas descobertas.--disable-masking: Mantém possíveis segredos sem mascaramento no relatório de saída (veja o aviso abaixo).--ci / --no-ci: Ativa ou desativa o modo CI. O modo CI imprime uma linha de progresso simples a cada 30 segundos em vez da exibição de progresso ao vivo. Ele é ativado automaticamente dentro de serviços de CI (GitHub Actions, GitLab CI, Jenkins e outros) e sempre que a saída não for um terminal.ex. .github/workflows/deepsecrets.yml
name: DeepSecrets Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install DeepSecrets
run: pip install deepsecrets
- name: Run Scan
run: deepsecrets --target-dir . --outformat dojo-sarif --outfile report.sarif
continue-on-error: true
- name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: report.sarif
A partir da v1.3.0, possíveis segredos são automaticamente mascarados dentro dos relatórios para proteger os artefatos do seu pipeline. Desative isso por meio da flag --disable-masking se necessário.
O mascaramento não quebra a lógica de deduplicação de plataformas downstream (como o Github), pois a seção partialFingerprints no relatório é preenchida corretamente com base nos dados brutos.
[!Caution]
Se você integrar o DeepSecrets ao seu pipeline de CI com o mascaramento desativado, provavelmente vazará novamente seus segredos nos logs e artefatos do seu CI.
Cada descoberta recebe uma pontuação de confiança. No entanto, diferentes plataformas de segurança interpretam as métricas SARIF de maneiras distintas. Para garantir compatibilidade entre dashboards ASPM modernos, o DeepSecrets faz o seguinte:
Sub-regras Virtuais (rules[]): Gera dinamicamente regras por nível de confiança, de S105-LOW passando por -MEDIUM e -HIGH até S105-VERY-HIGH (e -INFO para as correspondências rejeitadas que o --confidence-level all reporta). Isso força o GitHub Security e o DefectDojo a mapear corretamente a variação de precisão semântica sem quebrar os parsers nativos.
Nível de Resultado Determinístico: A ferramenta sempre define explicitamente level: error no modelo results[]. Isso atua como um fallback universal para pipelines de CI/CD e parsers SAST mais antigos, garantindo que segredos expostos quebrem builds ou bloqueiem Pull Requests de forma confiável, independentemente das interpretações individuais das regras.
Mensagens Contextuais: Injeta a pontuação numérica bruta de confiança nativamente em result.message.text para que os analistas de segurança a vejam imediatamente em seus dashboards.
O ruleset integrado para verificações de regex está localizado em /deepsecrets/rules/regexes.json. Você é livre para seguir o formato e criar um ruleset personalizado.