
Escáner de secretos sin conexión que combina reglas regex, análisis semántico basado en lexer y coincidencia de valores con hash para detectar credenciales expuestas en el código con salida SARIF.
¡Absolutamente no!
En nuestra era del hype de los LLM, DeepSecrets sigue ejecutándose completamente en tu máquina — brindándote excelentes resultados sin conexión, de forma segura y gratuita.
La mayoría de los escáneres existentes en realidad no "entienden" el código. En cambio, solo analizan textos y tienen una cobertura deficiente.
DeepSecrets cierra la brecha entre los escáneres clásicos basados en regex y las herramientas SAST comerciales de gran escala. Extiende la estrategia clásica de escaneo basada en regex apoyándose en gran medida en el análisis semántico del código, la detección de variables peligrosas y el análisis de entropía consciente del contexto. Esto significa que los candidatos a secretos siempre son semánticamente correctos. Logramos una verdadera comprensión del código en más de 500 lenguajes y formatos mediante técnicas de lexing y parsing.
DeepSecrets también introduce una nueva forma de encontrar credenciales con conocimiento cero: el HashedSecret Engine. Solo proporciona los valores hash de tus secretos de producción conocidos, y la herramienta los encontrará expuestos en texto plano dentro de tu código.
DeepSecrets v2.0 fue evaluado (junio de 2026) contra el benchmark SecretBench, superando a los escáneres tradicionales de texto plano:
(Puedes leer la historia completa entre bastidores y el desglose del benchmark en mi artículo de HackerNoon aquí)
Desde Github vía pip
$ pip install git+https://github.com/ntoskernel/deepsecrets.git
Desde PyPi
$ pip install deepsecrets
DeepSecrets requiere Python 3.11 o superior.
La forma más sencilla de ejecutar un escaneo:
$ deepsecrets --target-dir /path/to/your/code --outformat dojo-sarif --outfile report.json
Esto ejecutará un escaneo contra /path/to/your/code usando la configuración predeterminada:
Un informe en formato SARIF (compatible con DefectDojo y GitHub Security) se guardará en report.json.
El comando --help siempre está listo para guiarte, pero aquí están los flags clave que puedes usar para adaptar el escaneo a tu entorno:
--regex-rules /path/to/rules.json: Proporciona tu propio conjunto de reglas regex personalizado.--hashed-values /path/to/hashes.json: Proporciona una lista de secretos de producción conocidos previamente hasheados para buscarlos de forma segura.--excluded-paths /path/to/exclusions.json: Sobrescribe o amplía las rutas predeterminadas ignoradas durante el escaneo.--deep-max-size BYTES: Los archivos más grandes que este tamaño (por defecto 250,000 bytes) reciben el análisis rápido: las reglas regex y la búsqueda de variables, sin el lexer del lenguaje. Los archivos grandes suelen ser generados o minificados, el lexer consume la mayor parte del tiempo de escaneo en ellos y rara vez encuentra más allí. 0 aplica el análisis completo a todos los archivos.--skip-bundles: Omite por completo el JavaScript minificado, los source maps y los bundles (*.min.js, *.map, *.bundle.js), además de las otras exclusiones de rutas.--confidence-level {all,low,medium,high,very-high}: El nivel de confianza más bajo a reportar (por defecto low, todos los hallazgos). medium, high y very-high conservan confianza 3, 6 y 9 o más; all también reporta las coincidencias regex que el escáner consideró que no eran secretos (marcadores de posición, ejemplos), con un id de regla -INFO.--report-diagnostics: Añade cada archivo encontrado bajo el objetivo al informe SARIF, con su estado, tiempo de escaneo, motivo de omisión y profundidad de análisis.--regex-candidate-scoring-rules /path/to/rules.json: Proporciona tus propias reglas para evaluar las coincidencias regex antes de que se reporten. No des ningún valor al flag para reportar las coincidencias regex sin evaluar.--multiprocessing-context {forkserver,spawn,fork}: Cómo se inician los procesos trabajadores. El valor predeterminado es forkserver donde la plataforma lo tiene (Linux, macOS): los trabajadores comparten el escáner ya cargado en un proceso servidor. Windows usa spawn. Los tres producen los mismos hallazgos.--disable-masking: Mantiene los posibles secretos sin enmascarar en el informe de salida (ver advertencia a continuación).--ci / --no-ci: Activa o desactiva el modo CI. El modo CI imprime una línea de progreso simple cada 30 segundos en lugar de la visualización de progreso en vivo. Se activa por sí solo dentro de servicios de CI (GitHub Actions, GitLab CI, Jenkins y otros) y siempre que la salida no sea un terminal.ej. .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 de la v1.3.0, los posibles secretos se enmascaran automáticamente dentro de los informes para proteger los artefactos de tu pipeline. Desactiva esta opción mediante el flag --disable-masking si es necesario.
El enmascaramiento no rompe la lógica de deduplicación de las plataformas posteriores (como Github), ya que la sección partialFingerprints del informe se rellena correctamente a partir de los datos sin procesar.
[!Caution]
Si integras DeepSecrets en tu pipeline de CI con el enmascaramiento desactivado, es probable que vuelvas a filtrar tus secretos dentro de los registros y artefactos de tu CI.
Cada hallazgo recibe una puntuación de confianza. Sin embargo, las distintas plataformas de seguridad analizan las métricas SARIF de forma diferente. Para garantizar la compatibilidad con los paneles de ASPM modernos, DeepSecrets hace lo siguiente:
Subreglas virtuales (rules[]): Genera dinámicamente reglas por nivel de confianza, desde S105-LOW pasando por -MEDIUM y -HIGH hasta S105-VERY-HIGH (y -INFO para las coincidencias rechazadas que se informan con --confidence-level all). Esto obliga a GitHub Security y DefectDojo a mapear correctamente la varianza de precisión semántica sin romper los analizadores nativos.
Nivel de resultado determinista: La herramienta siempre establece explícitamente level: error en el modelo results[]. Esto actúa como un mecanismo de reserva universal para los pipelines de CI/CD y los analizadores SAST más antiguos, garantizando que los secretos expuestos interrumpan de forma fiable las compilaciones o bloqueen las Pull Requests independientemente de las interpretaciones individuales de las reglas.