AWS pwn
Zusammenfassung
Dies ist eine Sammlung von schrecklich geschriebenen Skripten zur Durchführung verschiedener Aufgaben im Zusammenhang mit Penetrationstests von AWS. Seien Sie nicht traurig, wenn es bei Ihnen nicht funktioniert. Möglicherweise hat sich AWS geändert, seit ein bestimmtes Tool geschrieben wurde, oder der Code ist schlecht. Wie auch immer, zögern Sie nicht, einen Beitrag zu leisten.
Der Großteil dieses Schrotts wurde von Daniel Grzelak geschrieben, aber es gab viele Beiträge, insbesondere von Mike Fuller.
Voraussetzungen
pip install -r requirements.txt
Stellen Sie sicher, dass Sie auch Ihre AWS-Anmeldedaten in ~/.aws/credentials eingerichtet haben.
Aufklärung
Maßnahmen zur Informationssammlung vor der Kompromittierung.
- validate_iam_access_keys.py - Überprüft anhand einer TSV-Datei mit Access-Key + Secret [+ Session]-Kombinationen die Zugriffsgültigkeit und gibt Identitätsinformationen des Principals zurück.
./validate_iam_access_keys.py -i /tmp/keys.txt -o /tmp/out.json
- validate_s3_buckets.py - Überprüft anhand einer Textdatei mit einem Wort pro Zeile, ob die Buckets existieren, und gibt grundlegende Identifikationsinformationen zurück.
./validate_s3_buckets.py -i /tmp/words.txt -o /tmp/out.json
- validate_iam_principals.py - Überprüft anhand einer Textdatei mit Principals (z.B. user/admin, role/deploy), ob die Principals in einem bestimmten Konto existieren.
./validate_iam_principals.py -a 123456789012 -i /tmp/words.txt -o /tmp/out.json
- validate_accounts.py - Überprüft anhand einer Textdatei mit Kontonummern und Konto-Aliasen, ob die Konten existieren.
./validate_accounts.py -i /tmp/accounts.txt -o /tmp/out.json
Ausnutzung
Dinge, die Ihnen helfen, in einem Konto Fuß zu fassen.
Heimlichkeit
Dinge, die Ihnen helfen könnten, nach der Kompromittierung eines Kontos verborgen zu bleiben.
- disrupt_cloudtrail.py - Versucht, das CloudTrail-Logging auf die angegebene Weise zu stören/zu beeinträchtigen.
./disrupt_cloudtrail.py -s
Erkundung
Dinge, die Ihnen helfen zu verstehen, was Sie geknackt haben.
- dump_account_data.sh - Ruft eine Reihe generischer kontoübergreifender read/list/get/describe-Funktionen auf und speichert die Daten an einem angegebenen Ort. Sehr laut, aber großartig für eine Momentaufnahme.
./dump_account_data.sh /tmp/
Privilegienerweiterung
Dinge, die Ihnen helfen, sich innerhalb eines Kontos zu bewegen und verschiedene Zugriffsstufen zu erlangen.
- dump_instance_attributes.py - Geht jede EC2-Instanz im Konto durch und ruft die angegebenen Instanzattribute ab. Wird am häufigsten zum Abrufen von userData verwendet, das häufig Geheimnisse enthält.
./dump_instance_attributes.py -u -o /tmp/
- dump_cloudformation_stack_descriptions.py - Ruft die Stack-Beschreibungen für jeden vorhandenen Stack und jeden in den letzten 90 Tagen gelöschten Stack ab. Parameter in Stack-Beschreibungen enthalten oft Passwörter und andere Geheimnisse.
./dump_cloudformation_stack_descriptions.py -o /tmp/data
- assume_roles.py - Versucht, alle Rollen (ARNs) in einer Datei oder von der list-roles-API bereitgestellten Rollen zu übernehmen.
./assume_roles.py -o /tmp/out.json
- add_iam_policy - Fügt einem bestimmten Benutzer, einer Rolle oder einer Gruppe die Administrator- und Alle-Aktionen-Richtlinie hinzu. Erfordert IAM-putPolicy- oder attachPolicy-Berechtigungen.
./add_iam_policy.py -u myuser -r myrole -g mygroup
- bouncy_bouncy_cloudy_cloud - Startet eine bestimmte EC2-Instanz neu und überschreibt deren userData, sodass Sie beliebigen Code ausführen oder temporäre Instanzprofil-Anmeldedaten stehlen können.
./bouncy_bouncy_cloudy_cloud.py -i instance-id -e exfiltration-endpoint
Persistenz
Dinge, die Ihnen helfen, Ihren Zugang zu einem Konto aufrechtzuerhalten.
- rabbit_lambda - Eine Beispiel-Lambda-Funktion, die auf Benutzerlöschungsereignisse reagiert, indem sie weitere Kopien des gelöschten Benutzers erstellt.
- cli_lambda - Eine Lambda-Funktion, die als AWS-CLI-Proxy fungiert und keine Anmeldedaten erfordert.
- backdoor_created_users_lambda - Eine Lambda-Funktion, die jedem neu erstellten Benutzer einen Zugriffsschlüssel hinzufügt.
- backdoor_created_roles_lambda - Eine Lambda-Funktion, die jeder neu erstellten Rolle eine Vertrauensbeziehung hinzufügt.
- backdoor_created_security_groups_lambda - Eine Lambda-Funktion, die jeder neu erstellten Sicherheitsgruppe eine bestimmte eingehende Zugriffsregel hinzufügt.
- backdoor_all_users.py - Fügt jedem Benutzer im Konto einen Zugriffsschlüssel hinzu.
- backdoor_all_roles.py - Fügt jeder Rolle im Konto eine Vertrauensbeziehung hinzu. Erfordert Bearbeiten der Datei, um die Rollen-ARN festzulegen.
- backdoor_all_security_groups.py - Fügt jeder Sicherheitsgruppe im Konto eine bestimmte eingehende Zugriffsregel hinzu. Erfordert Bearbeiten der Datei, um die Regel festzulegen.
Exfiltration
Dinge, die Ihnen helfen, Daten auf AWS-typische Weise zu extrahieren und zu verschieben.
Sonstiges
Andere Dinge, die ich entweder zu dumm oder zu faul war, zu klassifizieren.
- reserved_words.txt - Eine Liste von Wörtern/Tokens, die in AWS eine besondere Bedeutung haben oder wahrscheinlich bald eine besondere Bedeutung haben werden.
- endpoints.txt - Eine halbwegs aktuelle Liste der von AWS bereitgestellten API-Endpunkte.
- integrations.txt - Eine TSV-Datei mit Diensten, die über Rollen oder Zugriffsschlüssel mit AWS integrieren, sowie deren Kontonummern, Standardbenutzernamen usw.
- download_docs.sh - Der Befehlszeilenaufruf, um alle AWS-Dokumentationen mit wget herunterzuladen, weil ich dumm bin und jedes Mal Zeit damit verschwende, es neu zu machen.
Noch zu erledigen
- Passwörter zu Benutzern hinzufügen für Persistenz
- Stack-Ressourcen ausgeben
- MFA validieren
- Weitere Aufrufe zu dump_account_data hinzufügen
- Weitere Methoden zur Log-Störung hinzufügen
- Ein Skript zum Parsen von CloudTrail erstellen, um nützliche Informationen aus CloudTrail zu extrahieren
- Einen Enumerator für S3-Bucket-Berechtigungen erstellen
- Ein Tool erstellen, um AWS-Anmeldedaten von üblichen Orten auf der Festplatte zu sammeln
- Ein Klon-Tool erstellen
- Ein albernes Tool zur Privilegieneskalation erstellen, das passrole verwendet
- Warteschlangen validieren
- Benachrichtigungsthemen validieren
- Persistenzskripte so überarbeiten, dass sie Argumente anstelle von Konstanten innerhalb der Skripte verwenden