
Exponierte Geheimnisse und personenbezogene Daten in GitLab finden
GitLab Watchman ist eine Anwendung, die die GitLab-API nutzt, um offengelegte Geheimnisse und personenbezogene Daten zu erkennen. Sie listet außerdem die GitLab-Instanz auf nützliche Informationen auf.
Es durchsucht GitLab nach intern geteilten Projekten und betrachtet:
Für die folgenden Daten:
Sie können GitLab Watchman ausführen, um Ergebnisse bis zu folgendem Zeitraum zurück zu durchsuchen:
Das bedeutet, dass Sie nach einem Tiefenscan GitLab Watchman regelmäßig planen können, um nur Ergebnisse aus Ihrem gewählten Zeitraum zurückzugeben.
GitLab Watchman kann potenziell nützliche Informationen aus einer GitLab-Instanz auflisten:
GitLab Watchman verwendet benutzerdefinierte YAML-Signaturen, um Übereinstimmungen in GitLab zu erkennen. Diese Signaturen werden aus dem zentralen Watchman Signatures Repository bezogen. Slack Watchman aktualisiert seine Signaturbasis automatisch zur Laufzeit, um sicherzustellen, dass die neuesten Signaturen zur Erkennung von Geheimnissen verwendet werden.
Sie können Signaturen definieren, die Sie beim Ausführen von GitLab Watchman deaktivieren möchten, indem Sie deren IDs im Abschnitt disabled_signatures der watchman.conf-Datei hinzufügen. Zum Beispiel:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Die ID einer Signatur finden Sie in den einzelnen YAML-Dateien im Watchman Signatures Repository.
GitLab Watchman bietet die folgenden Protokollierungsoptionen:
GitLab Watchman verwendet standardmäßig die terminalfreundliche Standardausgabe, wenn keine Option angegeben ist. Dies ist für Menschen leichter lesbar.
JSON-Protokollierung ist ebenfalls verfügbar, was ideal für die Aufnahme in ein SIEM oder andere Protokollanalyseplattformen ist.
Die JSON-formatierte Protokollierung kann wie folgt einfach in eine Datei umgeleitet werden:
gitlab-watchman --timeframe a --all --output json >> gitlab_watchman_log.json
GitLab Watchman verwendet die v4-API und funktioniert mit GitLab Enterprise Edition Versionen:
13.0 und höher - Ja
GitLab.com - Ja
12.0 - 12.10 - Vielleicht, ungetestet, aber bei Verwendung von v4 der API könnte es funktionieren
Um die folgenden Bereiche zu durchsuchen:
Die GitLab-Instanz muss Elasticsearch konfiguriert haben und die Enterprise Edition mit mindestens einer GitLab Starter- oder Bronze-Lizenz ausführen.
Um GitLab Watchman auszuführen, benötigen Sie ein persönliches Zugriffstoken von GitLab.
Sie können ein persönliches Zugriffstoken in der GitLab-GUI über Einstellungen -> Zugriffstokens -> Persönliches Zugriffstoken hinzufügen erstellen.
Das Token benötigt Berechtigungen für die folgenden Bereiche:
api
Hinweis: Persönliche Zugriffstokens handeln im Namen des Benutzers, der sie erstellt. Daher empfehle ich, ein Token mit einem Dienstkonto zu erstellen, da die App sonst Zugriff auf Ihre privaten Repositorys hat.
Sie müssen auch die URL Ihrer GitLab-Instanz angeben.
GitLab Watchman bezieht das GitLab-Token und die URL aus den Umgebungsvariablen GITLAB_WATCHMAN_TOKEN und GITLAB_WATCHMAN_URL.
Konfigurationsoptionen können in einer Datei namens watchman.conf übergeben werden, die in Ihrem Home-Verzeichnis gespeichert sein muss. Die Datei sollte dem YAML-Format folgen und wie folgt aussehen:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
GitLab Watchman sucht zur Laufzeit nach dieser Datei und verwendet die darin enthaltenen Konfigurationsoptionen.
Sie können die neueste stabile Version über pip installieren:
python3 -m pip install gitlab-watchman
Oder selbst aus dem Quellcode erstellen. Laden Sie die Quellcodedateien der Version herunter und führen Sie dann im Hauptverzeichnis des Repositorys Folgendes aus:
python3 -m build
python3 -m pip install --force-reinstall dist/*.whl
GitLab Watchman ist auch im Docker Hub als Docker-Image verfügbar:
docker pull papermountain/gitlab-watchman:latest
Sie können GitLab Watchman dann in einem Container ausführen, wobei Sie sicherstellen müssen, dass die erforderlichen Umgebungsvariablen übergeben werden:
// help
docker run --rm papermountain/gitlab-watchman -h
// scan all
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 wird als globaler Befehl installiert, verwenden Sie es wie folgt:
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
Möglicherweise interessieren Sie sich für die anderen Apps der Watchman-Familie:
Der Quellcode dieses Projekts wird unter der GNU General Public License veröffentlicht. Dieses Projekt ist nicht mit GitLab verbunden.