
Ermitteln Sie Berechtigungen aus Cloud-Anmeldedaten durch Brute-Force-Tests.
Ich habe Creds, was nun?
CloudPrivs ist ein Tool, das die vorhandene Leistungsfähigkeit von SDKs wie Boto3 nutzt, um Berechtigungen aller Cloud-Dienste durchzuprobieren und herauszufinden, welche Berechtigungen für einen bestimmten Satz von Anmeldeinformationen bestehen.
Dieses Tool ist nützlich für Pentester, Red Teamer und andere Sicherheitsexperten. Cloud-Dienste bieten normalerweise keine Möglichkeit, zu ermitteln, welche Berechtigungen ein gegebener Satz von Anmeldeinformationen hat, und die schiere Anzahl von Diensten und Operationen macht es zu einer entmutigenden Aufgabe, dies manuell zu überprüfen. Das bedeutet, dass eine Privilegienausweitung mit einem Satz von Anmeldeinformationen möglich sein könnte, aber man würde es nie erfahren, weil man einfach nicht weiß, dass die gefundenen AWS-Anmeldeinformationen Lambda ausführen können.
Derzeit nicht auf PyPi verfügbar, aber ich arbeite daran
git clone https://github.com/AbstractClass/CloudPrivs
cd CloudPrivs
python -m pip install -e .
Dies erfolgt ohne virtuelle Umgebung und wird nicht empfohlen, wenn Sie viele Python-Programme ausführen.
git clone https://github.com/AbstractClass/CloudPrivs
cd CloudPrivs
python -m venv venv/
./venv/bin/activate # activate.ps1 auf Windows
python -m pip install -e .
Sie können auch Pyenv+virtualenv verwenden, falls verfügbar:
git clone https://github.com/AbstractClass/CloudPrivs
cd CloudPrivs
pyenv virtualenv CloudPrivs
pyenv local CloudPrivs
python -m pip install -e .
cloudprivs [PROVIDER] [ARGS]
Derzeit ist nur AWS als Anbieter verfügbar, aber ich arbeite an GCP. Wenn Sie helfen möchten, siehe #Customizing.
Optionen:
-v, --verbose Fehlgeschlagene und fehlerhafte Tests in der
Ausgabe anzeigen
-s, --services TEXT Nur die angegebenen Dienste testen, anstatt aller
verfügbaren Dienste
-p, --profile TEXT Der Name des zu scannenden AWS-Profils; falls
nicht angegeben, werden Umgebungsvariablen verwendet
-t, --custom-tests FILENAME Pfad zur YAML-Datei mit benutzerdefinierten Tests.
Weitere Informationen in der Dokumentation
-r, --regions TEXT Eine Liste von Filtern, die auf Regionen angewendet
werden, z. B. "us", "eu-west", "ap-north-1"
--help Diese Nachricht anzeigen und beenden
Mehrere Argumente werden für --region und --service unterstützt, müssen jedoch jedes Mal mit dem Flag angegeben werden, d. h. cloudprivs aws -r us -r eu -s ec2 -s lambda. Mir gefällt das auch nicht, aber es ist eine Einschränkung in Click, für die ich noch keine Lösung gefunden habe.
Beachten Sie, dass das
region-Flag Teilübereinstimmungen unterstützt; die häufigsten Argumente sind-r us -r eu, um nur die gängigen Regionen abzudecken.
Die Ergebnisse werden nach Regionen gruppiert angezeigt, und jede Zeile enthält einen Testfall und das Ergebnis des Tests.
Wenn das Tool während des Testens auf unerwartete Fehler stößt, werden diese auf stderr ausgegeben, sobald sie auftreten. Das bedeutet, dass sie den Ausgabefluss unterbrechen können. Wenn Sie sie nicht sehen möchten, können Sie stderr umleiten.
Im Gegensatz zu anderen Tools wie WeirdAAL, die jeden Testfall manuell schreiben, fragt CloudPrivs direkt das Boto3-SDK ab, um dynamisch eine Liste aller verfügbaren Dienste und aller verfügbaren Regionen für jeden Dienst zu generieren.
Sobald eine vollständige Liste generiert ist, wird jede Funktion standardmäßig ohne Argumente aufgerufen. Es wird jedoch die Möglichkeit unterstützt, benutzerdefinierte Argumente pro Operation hinzuzufügen (weitere Informationen unter #Customizing).
Hinweis: Einige AWS-Funktionen können Kosten verursachen, wenn sie aufgerufen werden. Ich habe nur Operationen zugelassen, die mit
get_,list_unddescribe_beginnen, um versehentliche Kosten zu vermeiden. Das scheint in meinen eigenen Tests sicher zu sein, aber bitte verwenden Sie dies mit Vorsicht. Es scheint für andere Tools wie enumerate-iam sicher zu sein, aber ich garantiere nicht, dass Ihnen beim Aufrufen all dieser Funktionen (auch ohne Argumente) nicht versehentlich Kosten entstehen.
CloudPrivs unterstützt einfache Erweiterungen/Anpassungen in zwei Bereichen:
Einen neuen Anbieter (z. B. GCP) zu implementieren, ist einfach:
CloudPrivs/providers einen neuen Ordner für Ihren Anbieter (z. B. 'gcp').CloudPrivs/providers/__init__.py Ihren Anbieter zur Variable __all__ hinzu; sie muss mit dem Ordnernamen übereinstimmen.cli.py in Ihrem Anbieterordner.cli (siehe den AWS-Anbieter als Referenz).cloudprivs <anbieter> ausführen, sollte Ihre CLI angezeigt werden.Der AWS-Anbieter unterstützt die Injektion von Argumenten beim Aufrufen von AWS-Funktionen. Diese Funktion wird bereitgestellt, weil AWS-Funktionen oft Argumente erfordern, die in manchen Fällen feste Variablen sein können. Wenn wir also Dummy-Variablen bereitstellen können, können wir unsere Testabdeckung erhöhen. In anderen Fällen können wir Argumente wie dryrun=true injizieren, um Aufrufe schneller zu machen.
Benutzerdefinierte Tests werden in einer YAML-Datei unter cloudprivs/providers/aws/CustomTests.yaml gespeichert.
Die Struktur der YAML-Datei ist wie folgt:
---
<dienstname>:
- <funktionsname>:
args:
- <arg1>
- <arg2>
kwargs:
arg1: wert1
arg2: wert2
Hinweis: Der Funktionsname unterstützt Teilübereinstimmungen; das bedeutet, Sie können einen Funktionsnamen wie 'describe_' verwenden, und die angegebenen Argumente werden in alle Funktionen injiziert, die 'describe_' enthalten. Regeln werden nach dem Prinzip 'zuerst gefunden' abgeglichen. Wenn Sie also eine allgemeine Regel überschreiben möchten, platzieren Sie Ihre spezifischere Regel über der allgemeinen Regel. Beispiel:
ec2:
- describe_instances
args:
kwargs:
DryRun: True
NoPaginate: True
- describe_
args:
kwargs:
DryRun: True
Neue Regeln können entweder durch Ändern der vorhandenen CustomTests.yaml-Datei oder durch Erstellen einer neuen YAML-Datei und Angabe mit dem --custom-tests-Flag hinzugefügt werden. Die neue Datei wird mit der vorhandenen Tests-Datei zusammengeführt, und doppelte Werte werden überschrieben, wobei die angegebene Datei Priorität erhält.
Der AWS-Anbieter ist als Bibliothek für die Integration in andere Tools geschrieben. Sie können ihn wie folgt verwenden:
import boto3
from cloudprivs.providers.aws import service
from concurrent.futures import ThreadPoolExecutor
session = boto3.Session('default')
with ThreadPoolExecutor(15) as executor:
iam = service.Service('iam', session, executor=executor)
scan_results = iam.scan() # deckt alle im Executor aufgeführten Regionen ab (standardmäßig alle verfügbaren Regionen)
formatted_results = iam.pretty_print_scan(scan_results)
print(formatted_results)
Alles ist im Code vollständig dokumentiert; es sollte recht einfach zu verstehen sein.
Dieses Tool ist funktionsfähig, aber bei weitem nicht vollständig. Ich arbeite aktiv an neuen Funktionen und bin offen für Beiträge. Zögern Sie also nicht, Issues/Feature Requests zu eröffnen und Pull Requests zu senden.
Geplante Funktionen