
Détection des secrets exposés et des données personnelles dans GitLab
GitLab Watchman est une application qui utilise l'API GitLab pour détecter les secrets exposés et les données personnelles. Elle énumère également l'instance GitLab pour toute information utile.
Elle recherche dans GitLab les projets partagés en interne et examine :
Pour les données suivantes :
Vous pouvez exécuter GitLab Watchman pour rechercher des résultats remontant jusqu'à :
Cela signifie qu'après une analyse approfondie, vous pouvez planifier l'exécution régulière de GitLab Watchman et ne recevoir que les résultats de la période choisie.
GitLab Watchman peut énumérer des informations potentiellement utiles à partir d'une instance GitLab :
GitLab Watchman utilise des signatures YAML personnalisées pour détecter les correspondances dans GitLab. Ces signatures sont extraites du dépôt central Watchman Signatures. Slack Watchman met automatiquement à jour sa base de signatures à l'exécution pour garantir l'utilisation des signatures les plus récentes pour détecter les secrets.
Vous pouvez définir les signatures que vous souhaitez désactiver lors de l'exécution de GitLab Watchman en ajoutant leurs identifiants à la section disabled_signatures du fichier watchman.conf. Par exemple :
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Vous trouverez l'identifiant d'une signature dans les fichiers YAML individuels du dépôt Watchman Signatures.
GitLab Watchman offre les options de journalisation suivantes :
GitLab Watchman utilise par défaut la sortie Stdout adaptée au terminal si aucune option n'est fournie. Cela est conçu pour être plus lisible pour les humains.
La journalisation JSON est également disponible, parfaite pour l'ingestion dans un SIEM ou d'autres plateformes d'analyse de logs.
La journalisation au format JSON peut être facilement redirigée vers un fichier comme ci-dessous :
gitlab-watchman --timeframe a --all --output json >> gitlab_watchman_log.json
GitLab Watchman utilise l'API v4 et fonctionne avec les versions Enterprise Edition de GitLab :
13.0 et supérieur - Oui
GitLab.com - Oui
12.0 - 12.10 - Peut-être, non testé mais si l'API v4 est utilisée, cela pourrait fonctionner
Pour rechercher dans les scopes :
L'instance GitLab doit avoir Elasticsearch configuré et exécuter Enterprise Edition avec une licence GitLab Starter ou Bronze minimum.
Pour exécuter GitLab Watchman, vous aurez besoin d'un jeton d'accès personnel GitLab.
Vous pouvez créer un jeton d'accès personnel dans l'interface graphique GitLab via Paramètres -> Jetons d'accès -> Ajouter un jeton d'accès personnel
Le jeton doit avoir les permissions pour les scopes suivants :
api
Remarque : Les jetons d'accès personnels agissent au nom de l'utilisateur qui les crée, je suggère donc de créer un jeton en utilisant un compte de service, sinon l'application aura accès à vos dépôts privés.
Vous devez également fournir l'URL de votre instance GitLab.
GitLab Watchman récupère le jeton et l'URL GitLab à partir des variables d'environnement GITLAB_WATCHMAN_TOKEN et GITLAB_WATCHMAN_URL.
Les options de configuration peuvent être transmises dans un fichier nommé watchman.conf qui doit être stocké dans votre répertoire personnel. Le fichier doit suivre le format YAML et ressembler à ceci :
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
GitLab Watchman cherchera ce fichier à l'exécution et utilisera les options de configuration qui s'y trouvent.
Vous pouvez installer la dernière version stable via pip :
python3 -m pip install gitlab-watchman
Ou compiler à partir des sources vous-même. Téléchargez les fichiers source de la version, puis depuis le répertoire racine, exécutez :
python3 -m build
python3 -m pip install --force-reinstall dist/*.whl
GitLab Watchman est également disponible sur le Docker Hub en tant qu'image Docker :
docker pull papermountain/gitlab-watchman:latest
Vous pouvez ensuite exécuter GitLab Watchman dans un conteneur, en vous assurant de passer les variables d'environnement requises :
// aide
docker run --rm papermountain/gitlab-watchman -h
// tout analyser
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 sera installé en tant que commande globale, utilisez comme suit :
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]
Trouver les secrets exposés et les données personnelles dans GitLab
options:
-h, --help montre ce message d'aide et quitte
--output {json,stdout}, -o {json,stdout}
Où envoyer les résultats
--version, -v montre le numéro de version du programme et quitte
--all, -a Tout trouver
--blobs, -b Rechercher dans les blobs de code
--commits, -c Rechercher dans les commits
--wiki-blobs, -w Rechercher dans les blobs wiki
--issues, -i Rechercher dans les issues
--merge-requests, -mr
Rechercher dans les merge requests
--milestones, -m Rechercher dans les jalons
--notes, -n Rechercher dans les notes
--snippets, -s Rechercher dans les snippets
--enumerate, -e Énumérer cette instance GitLab pour les utilisateurs, groupes, projets. La sortie sera sauvegardée dans des fichiers CSV
--debug, -d Activer la journalisation de niveau débogage
--verbose, -V Activer une sortie plus détaillée pour la journalisation JSON. Cela inclut plus de champs, mais est plus volumineux
arguments requis :
--timeframe {d,w,m,a}
Jusqu'à quand rechercher : d = 24 heures, w = 7 jours, m = 30 jours, a = depuis toujours
Vous pourriez être intéressé par les autres applications de la famille Watchman :
Le code source de ce projet est publié sous la GNU General Public Licence. Ce projet n'est pas associé à GitLab.