
Encontrando secretos expuestos y datos personales en GitLab
GitLab Watchman es una aplicación que utiliza la API de GitLab para detectar secretos expuestos y datos personales. También enumera la instancia de GitLab en busca de información útil.
Busca en GitLab proyectos compartidos internamente y examina:
Para los siguientes datos:
Puedes ejecutar GitLab Watchman para buscar resultados que se remonten hasta:
Esto significa que después de un escaneo profundo, puedes programar GitLab Watchman para que se ejecute regularmente y solo devuelva resultados de tu período de tiempo elegido.
GitLab Watchman puede enumerar información potencialmente útil de una instancia de GitLab:
GitLab Watchman utiliza firmas YAML personalizadas para detectar coincidencias en GitLab. Estas firmas se obtienen del repositorio central Watchman Signatures. Slack Watchman actualiza automáticamente su base de firmas en tiempo de ejecución para asegurarse de que utiliza las firmas más recientes para detectar secretos.
Puedes definir las firmas que deseas deshabilitar al ejecutar GitLab Watchman agregando sus IDs a la sección disabled_signatures del archivo watchman.conf. Por ejemplo:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Puedes encontrar el ID de una firma en los archivos YAML individuales del repositorio Watchman Signatures.
GitLab Watchman ofrece las siguientes opciones de registro:
GitLab Watchman utiliza por defecto el registro en salida estándar amigable para la terminal si no se proporciona ninguna opción. Está diseñado para ser más fácil de leer para los humanos.
El registro JSON también está disponible, perfecto para ingerir en un SIEM u otras plataformas de análisis de registros.
El registro con formato JSON se puede redirigir fácilmente a un archivo como se muestra a continuación:
gitlab-watchman --timeframe a --all --output json >> gitlab_watchman_log.json
GitLab Watchman utiliza la API v4 y funciona con GitLab Enterprise Edition en las versiones:
13.0 y superiores - Sí
GitLab.com - Sí
12.0 - 12.10 - Tal vez, no probado pero si se usa la v4 de la API podría funcionar
Para buscar en los ámbitos:
La instancia de GitLab debe tener configurado Elasticsearch y ejecutar Enterprise Edition con una licencia mínima de GitLab Starter o Bronze.
Para ejecutar GitLab Watchman, necesitarás un token de acceso personal de GitLab.
Puedes crear un token de acceso personal en la interfaz de GitLab a través de Configuración -> Tokens de acceso -> Añadir un token de acceso personal.
El token necesita permiso para los siguientes ámbitos:
api
Nota: Los tokens de acceso personal actúan en nombre del usuario que los crea, por lo que te sugiero que crees un token usando una cuenta de servicio; de lo contrario, la aplicación tendrá acceso a tus repositorios privados.
También debes proporcionar la URL de tu instancia de GitLab.
GitLab Watchman obtendrá el token y la URL de GitLab de las variables de entorno GITLAB_WATCHMAN_TOKEN y GITLAB_WATCHMAN_URL.
Las opciones de configuración se pueden pasar en un archivo llamado watchman.conf que debe almacenarse en tu directorio personal. El archivo debe seguir el formato YAML y verse como el siguiente:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
GitLab Watchman buscará este archivo en tiempo de ejecución y usará las opciones de configuración de allí.
Puedes instalar la última versión estable a través de pip:
python3 -m pip install gitlab-watchman
O compilar desde el código fuente. Descarga los archivos fuente de la versión, luego desde el directorio raíz del repositorio ejecuta:
python3 -m build
python3 -m pip install --force-reinstall dist/*.whl
GitLab Watchman también está disponible en Docker Hub como imagen Docker:
docker pull papermountain/gitlab-watchman:latest
Luego puedes ejecutar GitLab Watchman en un contenedor, asegurándote de pasar las variables de entorno requeridas:
// ayuda
docker run --rm papermountain/gitlab-watchman -h
// escanear todo
docker run --rm -e GITLAB_WATCHMAN_TOKEN=abc123 -e GITLAB_WATCHMAN_URL=https://example.gitlab.com papermountain/gitlab-watchman --timeframe a --all
docker run --rm --env-file .env papermountain/gitlab-watchman --timeframe a --all
GitLab Watchman se instalará como un comando global, úsalo de la siguiente manera:
usage: gitlab-watchman [-h] --timeframe {d,w,m,a} [--output {json,stdout}] [--version] [--all] [--blobs] [--commits] [--wiki-blobs] [--issues]
[--merge-requests] [--milestones] [--notes] [--snippets] [--enumerate] [--debug] [--verbose]
Finding exposed secrets and personal data in GitLab
options:
-h, --help show this help message and exit
--output {json,stdout}, -o {json,stdout}
Where to send results
--version, -v show program's version number and exit
--all, -a Find everything
--blobs, -b Search code blobs
--commits, -c Search commits
--wiki-blobs, -w Search wiki blobs
--issues, -i Search issues
--merge-requests, -mr
Search merge requests
--milestones, -m Search milestones
--notes, -n Search notes
--snippets, -s Search snippets
--enumerate, -e Enumerate this GitLab instance for users, groups, projects.Output will be saved to CSV files
--debug, -d Turn on debug level logging
--verbose, -V Turn on more verbose output for JSON logging. This includes more fields, but is larger
required arguments:
--timeframe {d,w,m,a}
How far back to search: d = 24 hours w = 7 days, m = 30 days, a = all time
Puede que te interesen las otras aplicaciones de la familia Watchman:
El código fuente de este proyecto se publica bajo la GNU General Public Licence. Este proyecto no está asociado con GitLab.