Aikido

Detección de secretos: Una guía práctica para encontrar y prevenir credenciales filtradas

Ruben CamerlynckRuben Camerlynck
|
#

Los secretosclaves API, contraseñas, certificados — son el equivalente digital de los susurros en el patio de recreo: están destinados a un destinatario de confianza, no al público. En el software moderno, los secretos se utilizan programáticamente, lo que los hace ubicuos y frágiles. Si no se controlan, son frecuentemente el punto de partida de grandes brechas de seguridad. Esta guía explica dónde se filtran los secretos, por qué detectarlos es más difícil de lo que parece, qué hace realmente una buena detección y cómo implementarla para detener las filtraciones accidentales antes de que se conviertan en incidentes.

¿Qué se considera un "secreto" en el software?

Un secreto es cualquier credencial que otorga acceso a sistemas o servicios: claves API, contraseñas de bases de datos, tokens OAuth, claves SSH, certificados TLS y similares. Dado que los secretos se consumen programáticamente, viajan a través del código fuente, los pipelines de CI, las máquinas de los desarrolladores y las copias de seguridad, creando una gran superficie de ataque.

Cómo se filtran los secretos habitualmente

Uno de los vectores de filtración más comunes es el historial de control de código fuente. El escenario típico:

  1. Un desarrollador crea una rama de características y hardcodea una credencial para probar algo rápidamente.
  2. Una vez verificado, reemplazan la credencial con una variable de entorno o una llamada a un vault y envían los cambios para revisión.
  3. La revisión de código solo se fija en el diff actual; el secreto temporal permanece oculto en la rama o en el historial de commits.
Diagrama del historial de Git con el Commit C en la rama dev etiquetado como 'Clave API codificada (el secreto)'.
El Commit C en la rama dev muestra una clave API codificada — un secreto que permanece en el historial.

A menos que reescribas el historial de Git (lo cual es disruptivo y arriesgado), ese secreto perdura. Si un atacante obtiene acceso a tu repositorio — incluso uno privado — puede escanear el historial y recolectar credenciales para pivotar hacia objetivos de mayor valor.

¿Cuán extendido está el problema?

Investigaciones públicas demuestran que esto está lejos de ser raro. Escaneos a gran escala de GitHub revelan millones de secretos expuestos y una prevalencia sorprendentemente alta incluso en repositorios privados. Las brechas reales demuestran el riesgo: los volcados de código fuente filtrados han revelado miles de credenciales, incluyendo tokens de la nube y claves de pago.

Diapositiva que dice '23.770.171 nuevos secretos detectados en commits públicos de GitHub en 2024' con estadísticas de apoyo
GitGuardian: 23.770.171 nuevos secretos detectados en commits públicos de GitHub en 2024 — una clara medida de la escala.

Por qué SAST por sí solo no es suficiente

Las Pruebas de seguridad de aplicaciones estáticas (SAST) son excelentes para encontrar elementos como la inyección SQL o la transversalidad de rutas en la base de código actual, pero generalmente escanean la última instantánea, no el historial de commits completo. Los secretos son diferentes: un secreto en cualquier commit, rama o etiqueta es un riesgo de compromiso. Esto significa que la detección debe considerar el historial completo y múltiples repositorios donde reside ese historial.

Salida de la terminal 'Resumen de escaneo' mostrando los hallazgos del escaneo y el mensaje de que el escaneo se limitó a los archivos rastreados por Git, con presentador incrustado
Resumen del escaneo mostrando los resultados y una nota de que el escaneo se limitó a los archivos rastreados por Git.

Por qué la detección de secretos es más difícil que "solo regex"

A primera vista podrías pensar: escribe una regex para "API_KEY=" y listo. En realidad, la detección de secretos debe equilibrar la precisión y la exhaustividad para no abrumar a los desarrolladores con ruido:

  • Cadenas de alta entropía (valores de apariencia aleatoria) suelen ser secretos — pero no siempre. Muchos artefactos no secretos también tienen alta entropía.
  • Los marcadores de posición y los ejemplos salpican las bases de código. Etiquetar de forma ingenua cada clave que lo parezca desencadena falsos positivos que interrumpen los flujos de trabajo.
  • Los patrones de proveedores varían. Algunos servicios (Stripe, AWS, Twilio) utilizan prefijos o formatos identificables; otros no.
Diapositiva titulada 'Cadena de alta entropía en bruto' que muestra un token largo similar a hexadecimal y un indicador rojo de 'Secreto'
Ejemplo de cadena de alta entropía utilizado para ilustrar lo que parece un secreto.

Así es una buena detección de secretos

Una solución eficaz de detección de secretos utiliza múltiples señales para reducir los falsos positivos y detectar fugas reales:

  • Coincidencia de patrones para proveedores conocidos. Identifica claves que siguen formatos específicos de proveedor (por ejemplo, prefijos de Stripe, formas de tokens de AWS).
  • Validación cuando sea posible. Intenta una validación no destructiva (¿existe esta clave de AWS? ¿está activa?) para confirmar si un hallazgo es real.
  • Entropía + contexto. Utiliza medidas de entropía para encontrar cadenas de alta aleatoriedad, luego inspecciona el código circundante (ruta de archivo, nombres de variables, comentarios) para decidir si es un secreto.
  • Comprobaciones anti-diccionario. Filtra las cadenas que contienen palabras en inglés o marcadores de posición obvios para reducir el ruido.
  • Escaneo consciente del historial. Escanea todo el historial de Git a través de ramas, etiquetas y mirrors, no solo la punta de main.
  • Despliegue centrado en el desarrollador. Ejecuta la detección tanto de forma remota (repositorios centrales) como local (hooks de pre-commit, plugins de IDE) para detener las fugas antes en el flujo de trabajo.
Presentador en un micrófono con una diapositiva que dice 'Identificar todos los secretos por categorías'
Identificar secretos por categoría — un objetivo de detección práctico.

Probando una herramienta de detección de secretos (y la trampa común)

Al evaluar herramientas, los equipos suelen realizar una prueba sencilla: codifican cadenas que parecen secretos obvios y esperan que el escáner las detecte. Irónicamente, una herramienta que marca cada secreto falso obvio puede ser de baja calidad — son las herramientas ruidosas las que parecen mejores en pruebas ingenuas.

Las buenas herramientas ignoran intencionadamente patrones triviales, no reales y valores de marcador de posición. Priorizan la validación de hallazgos sospechosos en lugar de alertar por cada cadena aleatoria.

Panel web de Canarytokens mostrando tipos de tokens (Web bug, DNS, infraestructura AWS, Tarjeta de crédito, código QR, MySQL, claves AWS, Aplicación falsa, Log4shell, Redirección rápida)
Panel de Canarytokens — crea honeytokens para probar de forma segura la detección y las alertas.

Cómo probar correctamente:

  1. Utiliza honeytokens / canary tokens — claves API reales y de bajo riesgo que controlas — que puedes publicar de forma segura para probar la detección y las alertas.
  2. Ejecuta la herramienta contra ramas históricas y commits olvidados, no solo claves falsas nuevas en archivos actuales.
  3. Mide la tasa de falsos positivos y el éxito de la validación: ¿puede la herramienta reducir el ruido mientras sigue revelando secretos reales y accionables?

Dónde desplegar la detección de secretos

La detección debe realizarse en múltiples capas:

  • Repositorios Git remotos (obligatorio). Tu alojamiento Git central es la fuente canónica de la verdad: escanea todos los repositorios y el historial completo. Cualquier secreto presente aquí debe considerarse comprometido.
Diagrama estilizado de repositorio local (IDE y commits locales) enviando a un repositorio remoto que muestra una nueva Pull Request y etapas de CI/CD
Diagrama que muestra repositorios locales y remotos y cómo los pushes crean pull requests — donde la detección remota debe realizarse.
  • Entorno local del desarrollador (muy recomendado). Utiliza hooks de pre-commit y extensiones de IDE o editor para detectar secretos antes de que lleguen a un push. La retroalimentación local evita el retrabajo y da control a los desarrolladores.
  • Pipelines de CI/CD. Añade comprobaciones para bloquear fusiones o despliegues cuando se encuentre un secreto validado, asegurando que las reglas minimicen los falsos positivos que bloquean el desarrollo.
“Si un secreto llega a [tu repositorio remoto], debes considerarlo comprometido.”

Lista de verificación de remediación rápida cuando encuentres un secreto filtrado

  1. Rota el secreto inmediatamente (rota las credenciales, revoca los tokens).
  2. Evaluar el alcance: ¿qué sistemas eran accesibles con la clave?
  3. Eliminar el secreto de todos los commits y ramas; considerar reescribir el historial solo cuando sea necesario y aceptable para tu flujo de trabajo.
  4. Auditar en busca de fugas similares en otros repositorios o copias de seguridad.
  5. Mejorar los flujos de trabajo y las herramientas de los desarrolladores para evitar la recurrencia (plugins de IDE, hooks de pre-commit, adopción de vaults).

Resumen: lo esencial

  • Los secretos están en todas partes en el desarrollo moderno y a menudo residen en el historial de Git.
  • Las herramientas SAST que escanean solo la punta del árbol no son suficientes para la detección de secretos.
  • Una buena detección combina patrones de proveedor, validación, análisis de entropía/contexto y filtros anti-diccionario para reducir el ruido.
  • Implementar la detección tanto de forma centralizada (repositorios remotos) como local (IDE/hooks) para detectar fugas a tiempo y evitar un juego del gato y el ratón.
  • Probar los escáneres de forma responsable utilizando honeytokens y escaneos históricos en lugar de claves falsas triviales.

La detección de secretos es un problema continuo y centrado en el desarrollador. Con la combinación adecuada de señales y ubicación, puedes reducir drásticamente el riesgo sin abrumar a los desarrolladores con falsas alarmas. Empieza escaneando tu historial de Git, añade protecciones locales y haz de la validación una característica central de cualquier solución de detección de secretos que elijas. ¡Prueba Aikido Security hoy!

4.7/5

Protege tu software ahora.

Empieza gratis
Sin tarjeta
Solicitar una demo
Sus datos no se compartirán · Acceso de solo lectura · No se requiere tarjeta de crédito

Asegúrate ahora.

Proteja su código, la nube y el entorno de ejecución en un único sistema central.
Encuentre y corrija vulnerabilidades de forma rápida y automática.

No se requiere tarjeta de crédito | Resultados del escaneo en 32 segundos.