HEADER_lecciones_de_software

DevSecOps: escaneo de secretos en repositorios Git

por Santiago Arredondo, el 19 de octubre de 2020

DevSecOps: escaneo de secretos en repositorios Git

A medida que un proyecto se va desarrollando se puede incurrir en alguna malas prácticas de desarrollo. Por ejemplo, si tu proyecto posiblemente se comunica con servicios externos puedes utilizar un token o llave privada para su correspondiente autenticación y accidentalmente éstas credenciales se registraron en la herramienta predilecta de control de versiones como Git, GitLab, AWS CodeCommit, etc.  Cualquiera que tenga acceso al repositorio del proyecto podrá utilizarlo para acceder al servicio externo con sus privilegios.

Esto es solo un ejemplo de muchos posibles secretos que persisten en un proyecto que pueden estar expuestos desde el primer commit sin que nos demos cuenta. Con base en esto, si los secretos se ven expuestos nuestro proyecto tendrá una gran vacío de seguridad y estará predispuesto a ataque que puedan explotar agentes externos o filtración de información.

¿Qué es TruffleHog?

TruffleHog es una herramienta escrita en Python disponible que ayuda a los administradores y desarrolladores a buscar claves secretas filtradas accidentalmente a través de sus proyectos.

“TruffleHog pasará por el historial completo de confirmaciones de cada rama, verificará cada diferencia de cada confirmación y evaluará la entropía de Shannon tanto para el conjunto de caracteres en base64 como para el conjunto de caracteres hexadecimales para cada blob de texto con más de 20 caracteres compuestos por esos caracteres. establece en cada diferencia", dijo el desarrollador de la herramienta, Dylan Ayrey.

La entropía de Shannon, llamada así por el matemático Claude E. Shannon, determina la aleatoriedad, y la alta entropía sugeriría que es probable que la cadena se utilice para secretos criptográficos, como un token de acceso o una clave privada.

Implementación de TruffleHog en AWS

Ahora mostraremos una implementación sencilla de esta herramienta utilizando los servicios de AWS CodeBuild para llevar a cabo un escaneo de un repositorio en AWS CodeCommit.

Nota: reemplaza $REPO_URL por la URL del repositorio que quieres escanear o asignarle el valor a esta variable en tu entorno de trabajo.

La estructura utilizada en el buildspec.yml del proyecto de AWS CodeBuild es la siguiente:

version: 0.2
phases:
  pre_build:
    commands:
      - echo Setting CodeCommit Credentials
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - echo Installing truffleHog
      - which pip3 && pip3 --version
      - which python3 && python3 --version
      - pip3 install 'truffleHog'
  build:
    commands:
      - echo Build started on `date`
      - echo Scanning with truffleHog...
      - trufflehog --regex --entropy=False "$REPO_URL"

 

El buildspec.yml sigue una sintaxis específica definida por AWS. Para más información revisa el siguiente link: https://docs.aws.amazon.com/es_es/codebuild/latest/userguide/build-spec-ref.html

Tomamos como guía las etapas de canalización de DevOps en AWS vista en la siguiente imagen y haremos uso de las primeras tres etapas que son: Tener nuestro código fuente en AWS CodeCommit con el fichero buildspec.yml y utilizar este repositorio con AWS CodeBuild para hacer el escaneo de secretos con TruffleHog.

Implementación de TruffleHog en AWS

https://docs.aws.amazon.com/es_es/codepipeline/latest/userguide/concepts-devops-example.html

En la fase de pre_build se configuran las credenciales correspondientes al repositorio. En este caso, ya que CodeBuild y CodeCommit están dentro de la misma cuenta de AWS no se requiere mayor configuración, solo indicar que se utilizará el administrador de credenciales de CodeCommit. Si se utilizara otro proveedor de repositorio git se deben proveer las credenciales utilizando “git config”.

Luego de tener las credenciales correctas se procede a instalar TruffleHog (se requiere Python y pip).

En la fase de build llevamos a cabo el escaneo con el comando:

trufflehog --regex --entropy=False "$REPO_URL"

 

La opción “--regex” habilita el escaneo de expresiones regulares, las cuales toma de la siguiente ubicación:

https://github.com/dxa4481/truffleHogRegexes/blob/master/truffleHogRegexes/regexes.json

Si se quisiera utilizar un conjunto de expresiones regulares personalizadas, puede crearse un archivo json dentro del repositorio e indicarle su ruta al momento de ejecutar el escaneo:

trufflehog --regex --rules regex_config. json --entropy=False "$REPO_URL"

 

La opción “--entropy” habilita o deshabilita el chequeo mediante entropía. Este análisis consiste en encontrar cadenas de texto formadas aleatoriamente, ya que estas pueden significar un Id o password.

Por último, se especifica la URL del repositorio.

Para más opciones de escaneo con TruffleHog puede usar la documentación oficial: https://github.com/dxa4481/truffleHog

Resultados del escaneo

Luego de ejecutar CodeBuild y finalizar el escaneo, resultan los siguientes logs:

Primero los logs de instalación y configuración de credenciales donde podemos corroborar que todo haya quedado correctamente instalado.

Implementación de TruffleHog en AWS 2

Luego, los logs del escaneo donde se nos señala cada presunto secreto en nuestros archivos:

Implementación de TruffleHog en AWS 3

De esta manera el build fallará y CodeBuild o el pipeline abortará cualquier comando o tarea posterior.

Si se quisiera corregir el secret para que el escaneo no falle, no basta con editar el archivo o eliminarlo, puesto que en el historial de commits aún se podrá ver. Se debe eliminar el commit para asegurar que el secreto no se filtre.

Si en el caso contrario, donde el escaneo no encuentra nada inusual, TruffleHog no producirá logs y el proceso del build continuará.

Nuevo llamado a la acción

Temas:Desarrollo de Software

Lecciones Pragma

Lecciones en Academia Pragma

Aquí encontrarás tutoriales técnicos para que apliques en temas de desarrollo de software, cloud, calidad en software y aplicaciones móviles. 

También puedes visitar nuestro Blog con contenido actual sobre Transformación Digital, Marketing, Conocimiento de Usuario y más. 

Blog

Suscríbete a la academia

Descarga la Guía para trabajar con ambientes IBM Websphere Portal