GCPBucketBrute
Ein Skript zum Aufzählen von Google Storage-Buckets, zum Ermitteln des Zugriffs, den Sie darauf haben, und zum Ermitteln, ob ihre Berechtigungen erweitert werden können.
- Dieses Skript akzeptiert (optional) GCP-Benutzer-/Dienstkonto-Anmeldeinformationen und ein Schlüsselwort.
- Anschließend wird aus diesem Schlüsselwort eine Liste mit Permutationen erstellt, die dann verwendet wird, um nach Google Storage-Buckets mit diesen Namen zu suchen.
- Wenn Anmeldeinformationen angegeben werden, wird der Großteil der Aufzählung weiterhin ohne Authentifizierung durchgeführt. Für jeden Bucket, der über eine nicht authentifizierte Aufzählung erkannt wird, wird jedoch versucht, die Bucket-Berechtigungen mithilfe der TestIamPermissions-API mit den bereitgestellten Anmeldeinformationen aufzuzählen. Dies hilft dabei, Buckets zu finden, auf die im authentifizierten Zustand zugegriffen werden kann, im unauthentifizierten Zustand jedoch nicht.
- Unabhängig davon, ob Anmeldeinformationen angegeben werden oder nicht, versucht das Skript dann, die Bucket-Berechtigungen mithilfe der TestIamPermissions-API aufzuzählen, während es nicht authentifiziert ist. Das heißt, wenn Sie keine Anmeldeinformationen eingeben, werden Ihnen nur die Berechtigungen eines nicht authentifizierten Benutzers angezeigt. Wenn Sie jedoch Anmeldeinformationen eingeben, sehen Sie, welchen Zugriff authentifizierte Benutzer im Vergleich zu nicht authentifizierten Benutzern haben.
- WARNUNG: Wenn Anmeldeinformationen angegeben werden, kann Ihr Benutzername in den Zugriffsprotokollen aller von Ihnen entdeckten Buckets offengelegt werden.
TL;DR-Zusammenfassung
- Bei einem gegebenen Schlüsselwort zählt dieses Skript Google Storage-Buckets basierend auf einer Reihe von Permutationen auf, die aus dem Schlüsselwort generiert werden.
- Anschließend wird jeder entdeckte Bucket ausgegeben.
- Anschließend werden alle Berechtigungen ausgegeben, die Ihnen (sofern vorhanden) für einen erkannten Bucket erteilt wurden.
- Dann prüft das Skript diese Berechtigungen auf eine Rechteausweitung (storage.buckets.setIamPolicy) und gibt alles Interessante aus (z. B. öffentlich auflistebar, öffentlich beschreibbar, authentifiziert auflistebar, Rechteausweitung usw.).
Anforderungen
- Linux/OS X
- Windows funktioniert nur bei nicht authentifizierten Scans. Bei der Verwendung des Unterprozessmoduls durch das Skript stimmt etwas nicht, da es 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 den Authentifizierungstyp, den Sie für die Aufzählung zwischen einem Benutzerkonto, einem Dienstkonto oder einem nicht authentifizierten Konto verwenden möchten. Wenn Sie ein Dienstkonto verwenden, geben Sie den Dateipfad zum privaten Schlüssel über das Argument -f
/ --service-account-credential-file-path
. Wenn Sie ein Benutzerkonto verwenden, geben Sie kein Authentifizierungsargument an. Anschließend werden Sie aufgefordert, den Zugriffstoken Ihres Benutzerkontos für den Zugriff auf die GCP-APIs einzugeben. Wenn Sie völlig unauthentifiziert scannen möchten, übergeben Sie das Argument -u
/ --unauthenticated
um Authentifizierungsaufforderungen auszublenden.
- Scannen Sie mit dem Schlüsselwort „test“ nach Buckets, während Sie völlig unauthentifiziert sind:
python3 gcpbucketbrute.py -k test -u
- Scannen Sie mit dem Schlüsselwort „test“ nach Buckets, während Sie sich mit einem Dienstkonto authentifizieren (privater Schlüssel gespeichert unter ../sa-priv-key.pem), und geben Sie die Ergebnisse in out.txt im aktuellen Verzeichnis aus:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Scannen Sie nach Buckets mit dem Schlüsselwort „test“, verwenden Sie ein Benutzerkonto-Zugriffstoken und führen Sie es mit 10 statt 5 Unterprozessen aus:
python3 gcpbucketbrute.py -k test -s 10
Verfügbare Argumente
-
-k
/ --keyword
- Dieses Argument wird verwendet, um anzugeben, welches Schlüsselwort zum Generieren von Permutationen verwendet wird. Nach diesen Permutationen wird in Google Storage gesucht.
-
--check
- Dieses Argument schließt sich mit
-k
/ --keyword
gegenseitig aus und akzeptiert eine einzelne Zeichenfolge. Damit können Sie Ihre Berechtigungen für einen bestimmten Bucket überprüfen, anstatt eine Liste von Permutationen basierend auf einem Schlüsselwort zu erstellen. Dies kann wiederholt werden, um mehrere Eimer zu überprüfen. Bildnachweis: @BBerastegui
-
--check-list
- Dieses Argument schließt sich gegenseitig mit
-k
/ --keyword
und --check
aus. Damit können Sie die Berechtigungen einer Liste von Buckets in einer Datei überprüfen. Sie sollten einzeln pro Zeile in einer Textdatei aufgeführt werden. Um von der Standardeingabe zu lesen, übergeben Sie -
als Dateinamen.
-
-s
/ --subprocesses
- Dieses Argument gibt an, wie viele Unterprozesse für die Bucket-Aufzählung verwendet werden. Der Standardwert ist 5. Je höher Sie diesen Wert festlegen, desto schneller erfolgt die Aufzählung, aber Ihre Anfragen pro Sekunde an Google nehmen zu. Dies sind im Wesentlichen Threads, aber das Skript verwendet Unterprozesse anstelle von Threads für die parallele Ausführung.
-
-f
/ --service-account-credential-file-path
- Mit diesem Argument geben Sie den Pfad zur privaten Schlüsseldatei des GCP-Dienstkontos an, mit dem Sie sich bei Google Storage authentifizieren möchten. Dies ist optional. Wenn Sie stattdessen ein Zugriffstoken verwenden möchten, lassen Sie dieses Argument weg. Sie werden dann zur Eingabe des Tokens aufgefordert, sodass es nicht in Ihrem Befehlszeilenverlauf gespeichert wird. Weitere Informationen hier: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files und hier: https://google-auth.readthedocs.io/ en/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- Dieses Argument erzwingt eine nicht authentifizierte Aufzählung. Mit diesem Flag werden Sie nicht zur Eingabe von Anmeldeinformationen aufgefordert und gültige Buckets werden nicht auf authentifizierte Berechtigungen überprüft.
-
-o
/ --out-file
- Mit diesem Argument können Sie einen (relativen oder absoluten) Dateipfad zu einer Protokolldatei angeben, in die die Ergebnisse ausgegeben werden sollen. Die Datei wird erstellt, wenn sie noch nicht vorhanden ist, und angehängt, wenn sie bereits vorhanden ist.
-
-w
/ --wordlist
- Mit diesem Argument können Sie eine Wortlisten-Eingabedatei angeben.