GCPBucketBrute
Ein Skript zur Aufzählung von Google Storage Buckets, um festzustellen, welchen Zugriff Sie darauf haben und ob eine Privilegienausweitung möglich ist.
- Dieses Skript akzeptiert (optional) GCP-Benutzer-/Dienstkonto-Anmeldedaten und ein Schlüsselwort.
- Dann wird aus diesem Schlüsselwort eine Liste von Permutationen generiert, die dann verwendet wird, um nach Google Storage Buckets mit diesen Namen zu suchen.
- Falls Anmeldedaten bereitgestellt werden, wird der Großteil der Aufzählung weiterhin ohne Authentifizierung durchgeführt, aber für jeden Bucket, der durch unauthentifizierte Aufzählung entdeckt wird, wird versucht, die Bucket-Berechtigungen mithilfe der TestIamPermissions-API mit den bereitgestellten Anmeldedaten aufzulisten. Dies hilft, Buckets zu finden, die zwar authentifiziert, aber nicht unauthentifiziert zugänglich sind.
- Unabhängig davon, ob Anmeldedaten bereitgestellt werden oder nicht, versucht das Skript dann, die Bucket-Berechtigungen mithilfe der TestIamPermissions-API ohne Authentifizierung aufzulisten. Das bedeutet, dass Ihnen ohne Anmeldedaten nur die Berechtigungen angezeigt werden, die ein unauthentifizierter Benutzer hat, während Sie mit Anmeldedaten sehen, welchen Zugriff authentifizierte Benutzer im Vergleich zu unauthentifizierten Benutzern haben.
- WARNUNG: Wenn Anmeldedaten bereitgestellt werden, kann Ihr Benutzername in den Zugriffsprotokollen aller von Ihnen entdeckten Buckets offengelegt werden.
TL;DR Zusammenfassung
- Anhand eines Schlüsselworts zählt dieses Skript Google Storage Buckets auf, basierend auf einer Reihe von Permutationen, die aus dem Schlüsselwort generiert werden.
- Dann werden alle entdeckten Buckets ausgegeben.
- Dann werden alle Berechtigungen, die Ihnen für einen entdeckten Bucket gewährt werden (falls vorhanden), ausgegeben.
- Dann prüft das Skript diese Berechtigungen auf Privilegienausweitung (storage.buckets.setIamPolicy) und gibt alles Interessante aus (wie öffentlich auflistbar, öffentlich beschreibbar, authentifiziert auflistbar, Privilegienausweitung usw.).
Anforderungen
- Linux/OS X
- Windows funktioniert nur für unauthentifizierte Scans. Es gibt ein Problem mit der Verwendung des subprocess-Moduls im Skript, das bei Verwendung eines authentifizierten Google-Clients fehlschlägt.
- Python3
- Pip3
Installation
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
cd GCPBucketBrute/
pip3 install -r requirements.txt oder python3 -m pip install -r requirements.txt
Verwendung
Bestimmen Sie zunächst die Art der Authentifizierung, die Sie für die Aufzählung verwenden möchten: Benutzerkonto, Dienstkonto oder ohne Authentifizierung. Wenn Sie ein Dienstkonto verwenden, geben Sie den Dateipfad zum privaten Schlüssel über das Argument -f/--service-account-credential-file-path an. Wenn Sie ein Benutzerkonto verwenden, geben Sie kein Authentifizierungsargument an. Sie werden dann aufgefordert, das Zugriffstoken Ihres Benutzerkontos für den Zugriff auf die GCP-APIs einzugeben. Wenn Sie vollständig ohne Authentifizierung scannen möchten, übergeben Sie das Argument -u/--unauthenticated, um Authentifizierungsaufforderungen zu unterdrücken.
- Scannen nach Buckets mit dem Schlüsselwort "test" vollständig ohne Authentifizierung:
python3 gcpbucketbrute.py -k test -u
- Scannen nach Buckets mit dem Schlüsselwort "test" unter Authentifizierung mit einem Dienstkonto (privater Schlüssel gespeichert unter ../sa-priv-key.pem), Ausgabe der Ergebnisse in out.txt im aktuellen Verzeichnis:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Scannen nach Buckets mit dem Schlüsselwort "test" unter Verwendung eines Benutzerkonto-Zugriffstokens, Ausführung mit 10 Subprozessen statt 5:
python3 gcpbucketbrute.py -k test -s 10
Verfügbare Argumente
-k/--keyword
- Dieses Argument gibt das Schlüsselwort an, mit dem Permutationen generiert werden. Diese Permutationen werden dann in Google Storage gesucht.
--check
- Dieses Argument schließt sich gegenseitig mit
-k/--keyword aus und akzeptiert einen einzelnen String. Es ermöglicht Ihnen, Ihre Berechtigungen für einen bestimmten Bucket zu überprüfen, anstatt eine Liste von Permutationen basierend auf einem Schlüsselwort zu generieren. Dies kann wiederholt werden, um mehrere Buckets zu überprüfen. Quelle: @BBerastegui
--check-list
- Dieses Argument schließt sich gegenseitig mit
-k/--keyword und --check aus. Es ermöglicht Ihnen, die Berechtigungen einer Liste von Buckets in einer Datei zu überprüfen. Diese sollten zeilenweise in einer Textdatei aufgeführt sein. Um von der Standardeingabe zu lesen, übergeben Sie - als Dateinamen.
-s/